Chinaunix首页 | 论坛 | 博客
  • 博客访问: 683115
  • 博文数量: 516
  • 博客积分: 4119
  • 博客等级: 上校
  • 技术积分: 4288
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-30 17:29
文章分类

全部博文(516)

文章存档

2014年(4)

2013年(160)

2012年(352)

分类:

2012-11-01 11:04:12

原文地址:S3C2440的中断体系结构 作者:graylocus

  CPU运行过程中,是如何知道外设发生了某些事件,如按键,触摸屏,与外设数据的交互。
有两种方法:
(1)查询方式:可以用程序不断的查询各个设备的状态,并响应相关状态,做出一定的处理。但是这种方法比较占用CPU资源,不适用于多任务的系统。
(2)中断方式:当某个事件发生时,硬件会设置某个寄存器,CPU在执行完一条指令后会通过硬件查看这个寄存器。如果相应的事件发生了,则中断当前程序流程,跳转到一个固定的地址处理该事件。处理完后返回被中断程序。

1.先看2440的中断处理框图
(1)Request sources(without sub-reg)中的中断源被触发后,会将SRCPND中的相应位置一。如果该中断没有被INTMSK屏蔽,则会进入中断优先级的处理。
(2)Request sources(with sub-reg)中的中断触发时,会将SUBSRCPND某一位置一。如果没被SUBMASK屏蔽,进入下一步的优先级的处理。
(3)如果被触发的中断是快中断(可以通过设置INTMOD的相应位为1,来使得该中断号对应的中断为快中断),则CPU进入快中断模式处理。可以说,快中断具有最高优先级。
   如果是一般中断,可能有几个同时发生,未被INTMSK屏蔽的中断,经过比较选出优先级最高的,然后此中断在INTPND中对应 的位被置一。CPU检查INTPND位,进入IRQ模式进行处理。
  中断源的确定:INTPND或是INTOFFSET.

2.中断优先级模块

(上图最后一个仲裁器是5,不是0)

可以通过设置PRIORITY寄存器,来设置相应普通中断的优先级。

优先级的判断:
通过7个仲裁器完成,6个一级仲裁 + 1个二级仲裁
每个仲裁器有6个输入引脚:REQ0-REQ5
对于每个仲裁器,PRIORITY寄存器通过3位来控制

3.中断处理流程

4.中断清除问题
  如果该类型中断不会在ISR执行过程中发生,可以在调用ISR后清除。如果在ISR执行过程中,这类中断有可能发生,且必须响应,则调用ISR前必须清除中断,不然就会有可能导致中断的丢弃。
 中断的清除:向SRCPND,INTPND相应位写1.。。

阅读(289) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~