首页 理论教育 中断处理过程在3.7.3中的优化方法

中断处理过程在3.7.3中的优化方法

时间:2023-06-20 理论教育 版权反馈
【摘要】:当中断响应后,该标志位会被自动清除。表3-25以TMS320VC5402为例给出了操作数K与中断向量地址之间的对应关系。当响应RESET复位指令时,INTM位置1,关闭可屏蔽中断。3)取出位于中断向量地址处的指令。5)执行中断服务程序直到遇到中断服务程序中的返回指令。7)继续执行主程序被中断了的程序。图3-31 中断操作的流程图响应中断后,CPU做如下工作:1)将程序计数器PC的值存入数据存储器堆栈的栈顶。

中断处理过程在3.7.3中的优化方法

TMS320C54x处理中断分为3个阶段:

1.第一阶段——接受中断请求

一个中断请求由一个硬件设备或一条软件指令产生。当中断请求产生时,中断标志寄存器IFR中相应的中断标志位置1。不管这个标志以后是不是会被处理器响应,该标志位都为1。当中断响应后,该标志位会被自动清除。

(1)硬件中断请求

外部硬件中断由外部中断口的信号发出请求。内部硬件中断由片内外设的信号发出中断请求。以TMS320VC5402为例,来自外部的硬件中断有978-7-111-35536-6-Chapter03-140.jpg978-7-111-35536-6-Chapter03-141.jpg978-7-111-35536-6-Chapter03-142.jpg~978-7-111-35536-6-Chapter03-143.jpg;来自内部的硬件中断有BRINT0、BXINT0、BRINT1、BXINT1、TINT、HPINT、DMA通道中断。

(2)软件中断请求

软件中断都是由程序中的指令INTR、TRAP、RESET产生的。

软件指令INTR K可以用来执行任何一个中断服务程序。此指令中的操作数K表示CPU转移到的中断向量地址。表3-25以TMS320VC5402为例给出了操作数K与中断向量地址之间的对应关系。INTR软件中断是不可屏蔽中断,不受状态寄存器ST1的中断屏蔽位INTM的影响。当CPU响应INTR中断时,INTM位置1,关闭其他可屏蔽中断。

软件指令TRAP K,其功能和INTR指令相同,也是不可屏蔽的中断,两者的区别在于执行TRAP软件中断时,不影响INTM位。

软件复位指令RESET执行的是一种不可屏蔽的软件复位操作,它可以在任何时候将TMS320C54x转到一种已知的状态(复位状态)。这条复位指令影响状态寄存器ST0和ST1,但不影响处理器工作方式状态寄存器PMST。因此,RESET复位指令与硬件978-7-111-35536-6-Chapter03-144.jpg复位对PMST寄存器的IPTR位以及外围电路初始化的影响是有区别的。当响应RESET复位指令时,INTM位置1,关闭可屏蔽中断。

2.第二阶段——响应中断

硬件或软件中断发送了一个中断请求后,CPU必须要决定是否响应该中断。软件中断和不可屏蔽中断立即被响应,而可屏蔽的硬件中断只有在满足以下3种条件时才能被响应:

1)优先级最高。当同时有多个硬件请求中断时,TMS320C54x根据优先级对其进行响应。

2)状态寄存器ST1中的INTM位为0。表示允许可屏蔽中断,可以用“RSBXINTM”指令来对INTM复位。

3)中断屏蔽寄存器IMR中的相应位为1。CPU响应中断时,让PC转到适当的地址取出中断向量,并发出中断向量信号978-7-111-35536-6-Chapter03-145.jpg,清除响应的中断标志位。(www.xing528.com)

3.第三阶段——执行中断服务程序(ISR)

978-7-111-35536-6-Chapter03-146.jpg

图3-31 中断操作的流程图

响应中断后,CPU做如下工作:

1)将程序计数器PC的值(即返回地址)存入数据存储器堆栈的栈顶。

2)将中断向量的地址装入PC。

3)取出位于中断向量地址处的指令。如果是延迟分支转移指令,其后有一条双字指令或两条单字指令,那么CPU也取出这些指令字。

4)执行跳转指令,跳转到中断服务程序(ISR)的地址。如果跳转被延迟,则在跳转之前先执行附加的指令。

5)执行中断服务程序直到遇到中断服务程序中的返回指令。

6)从堆栈中弹出返回地址并装入PC。

7)继续执行主程序被中断了的程序。

整个中断操作的流程图如图3-31所示。

执行中断服务程序时,某些寄存器也要被压入堆栈(保护现场)。当中断服务程序执行完毕准备返回时,需要恢复这些寄存器的内容(恢复现场)。由于CPU寄存器和外设寄存器都是存储器映射寄存器,所以可用PSHM或POPM指令将这些寄存器压入或弹出堆栈,也可以用PSHD和POPD指令将数据存储器的值压入或弹出堆栈。在保护现场时应注意:第一,压入堆栈的顺序,恢复时的顺序与压入堆栈时的顺序正好相反;第二,BRC寄存器应该比STl中BRAF位先恢复,否则,如果在恢复BRC之前中断服务程序中的BRC=0,那么先恢复的BRAF位将被清0。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈