ADuC70xx系列模拟微控制器中断机制介绍
0赞中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断使得CPU可以在事件发生时才予以处理,而不必让微处理器连续不断地查询是否有事件发生。中断一旦被识别,CPU保存部分(或全部)现场(Context)即部分或全部寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。uC/OS中,中断服务子程序做事件处理,处理完成后,程序让进入就绪态的优先级最高的任务开始运行。
通过两条特殊指令:关中断(Disable Interrupt)和开中断(Enable Interrupt)可以让微处理器不响应或响应中断。在实时环境中,关中断的时间应尽量的短。关中断影响中断延迟时间。关中断时间太长可能会引起中断丢失。微处理器一般允许中断嵌套,也就是说在中断服务期间,微处理器可以识别另一个更重要的中断,并服务于那个更重要的中断。
与中断有关的系统调用包括进入中断函数OSIntEnter(),退出中断函数OSIntExit()以及中断切换函数OSIntCtxSw()等。进入中断函数OSIntEnter()告知内核用户在做中断服务,然后才能开始服务于申请中断的设备。而退出中断函数OSIntExit()则标志着中断服务子程序的结束,OSIntExit()是通过调用OSIntCtxSw()实现在中断返回时的任务切换的。
uC/OS中断过程的示意图如下图所示:

uC/OS中断过程
当中断发生时,需要进行相应的处理才能进入中断服务子程序,这段延迟时间即为中断响应时间。如图9-5所示,uC/OS内核中,由中断函数决定返回到被中断的任务还是运行因中断服务子程序而进入就绪态的优先级最高的任务。这就是uC/OS中断服务的整个过程。
在ADuC7026中,共有23个被中断控制器控制的中断源。大多数的中断信号产生于片上外围设备,比如ADC模数转换器和UART通用异步收发器。此外,还有产生于外部中断请求引脚IRQ0,IRQ1,IRQ2和IRQ3的四个附加外部中断源。
中断系统的操纵和配置通过9个与中断相关的寄存器控制着,四个常规中断请求IRQ专用,四个快速中断请求FIQ专用,另外一个寄存器用来选择程序中断源。常规中断请求IRQ,快速中断请求FIQ寄存器中的位(除23位以外)代表了相同的中断源,ADuC7026IRQ/ FIQ寄存器位描述如下表所示。
|
位 |
描述 |
位 |
描述 |
|
0 1 2 3 4 5 6 7 8 9 10 11 |
所有中断进行逻辑或运算 软中断 计时器0 计时器1 闹钟-定时器2 看门狗定时器-定时器3 烧写控制 模数转换通道 锁相环锁 I2C0从属 I2C0主机 I2C1主机 |
12 13 14 15 16 17 18 19 20 21 22 23 |
从属串行外围接口 主要串行外围接口 通用异步收发器 外部中断请求IRQ0 比较器 脉冲斜度调制 外部中断请求IRQ1 可编程逻辑阵列IRQ0 可编程逻辑阵列IRQ1 外部中断请求IRQ2 外部中断请求IRQ3 脉宽调制装置(仅IRQ)/ 同步脉宽调制(仅F RQ) |
