INTERRUPT CONTROLLER

    1,中断的基本概念

     CPU与外设之间传输数据的控制方式通常有3种:查询方式中断方式DMA方式。查询方式的优点是硬件开销小不需要额外的硬件支持只是通过软件不断的轮询,使用起来也就比较简单,但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环的等待,不能执行其他程序,这样就浪费了CPU的大量时间,降低了CPU的利用率,为了解决这个矛盾,通常采用中断传送方式,即当CPU进行主程序的操作时,外设的数据已经存入输入端口的数据寄存器或者输出端口的数据输出寄存器已为空,则由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定条件下,会暂停执行当前正在执行的主程序,然后转入执行相应能够进行输入/输出操作的中断子程序,待输入/输出操作执行完毕之后,CPU再返回并继续执行原来被中断的主程序。这样CPU就避免了把大量时间耗费在等待查询状态信号的操作上,使其工作效率得以大大提高。能够向CPU发出中断请求的设备或事件称为中断源,系统引入中断机制后,CPU与外设(甚至多个外设)处于“并行”工作状态,便于实现信息的实时处理和系统的故障处理。

     (1)中断响应

      中断源向CPU发出中断请求,若优先级别是最高的,则CPU在满足一定的条件时,可中断当前程序的运行,保护好被中断的主程序的断点及现场信息,然后根据中断源提供的信息,找到特定中断服务子程序的入口地址,转去执行新的程序段。

      CPU响应中断是有条件的,如内部要允许中断,中断未被屏蔽,关键一点CPU当前指令要执行完才回去响应中断(只有在CPU执行完一条指令后才会停下当前的程序去响应中断)等

      (2)中断服务子程序

      CPU响应中断以后,就会中止当前的程序,转去执行一个中断服务子程序,以完成为相应的设备服务,中断服务子程序的一般结构为:

      保护现场:由一系列压栈指令完成,目的是为了保护那些与主程序中有冲突的寄存器也就是在中断子程序中也需要用到的寄存器(如r0,r1,r2等),若中断服务子程序中所使用的寄存器与主程序中所使用的寄存器没有冲突,则这一步可省略。

      中断处理:中断处理程序在检查到相应的中断源后,调用对应的中断处理程序来执行。

      恢复现场并返回:由一系列的出栈指令完成,与现场保护对应的,但要注意数据恢复的次序。

      由于中断服务子程序需要打断主程序的执行,所以其处理应该及时完成,较长时间的延时会导致系统性能下降。

 

 

      在进入正题之前,我想先把ARM920T的异常向量表(Exception Vectors)做一个简短的介绍。ARM920T的异常向量表有两种存放方式,一种是低端存放(从0x00000000处开始存放),另一种是高端存放(从0xfff000000处开始存放)。关于为什么要分两种方式进行存放这点我将在介绍MMU的文章中进行说明,本文采用低端模式。ARM920T能处理有8个异常,他们分别是:
ResetUndefined instructionSoftware InterruptAbort (prefetch),Abort (data),ReservedIRQFIQ
下面是某个采用低端模式的系统源码片段:

_start:
b Handle_Reset
b HandleUndef
b HandleSWI
b HandlePrefetchAbort
b HandleDataAbort
b HandleNotUsed
b HandleIRQ
b HandleFIQ
..

..
other codes

 

    上面这部分片段一般出现在一个名叫“head.s”的汇编文件里,“b Handle_Reset”这条语句就是系统上电之后运行的第一条语句。也就是说这部分代码的二进制码必须位于内存的最开始部分(这正是低端存放模式),因为上电后CPU会从SDRAM的0x00000000处取第一条指令并执行

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值