上次提到了在DSP的实时仿真运行模式和标准运行情况下,使能中断时用到的寄存器是有区别的,概括为:
中断处理过程
在何时使能中断
标准模式(正常运行的情况)
DSP运行在实时模式(仿真器)并暂停
INTM=0,且IER中的相应位置位
IER中的相应位置位,且DBGIER是1
CPU在收到相应的中断请求时,一个基本的流程是:
1. 清除相应的CPU IFR与IER的位
2. 重新清除EALLOW与LOOP指令
Ps:EALLOW:Emulation access enable bit,通常我们提到的EALLOW一个汇编指令,在C编程时一般用asm(‘EALLOW’)来调用;之所以我们在C程序里一般只看到EALLOW而没有asm那些东西,因为在头文件里面已经用define预定义过了。EALLOW用来读写与仿真有关及被EALLOW保护的需要防止误操作的那些寄存器。它一般与EDIS配对,EDIS自然就是用来取消这个读写权限的。但是在这里,EALLOW和LOOP是CPU寄存器的两个位,可以在ST1状态寄存器中看到它们的说明。
3. 复位INTM与DBGM
4. 保存流水线的输出与返回地址,由CPU自动保存上下文
5. 中断子程序ISR对应的中断向量从PIE模块中取出
6. 如果满足上次流程图讲到的各个条件,则PIE控制器将PIEIERx与PIEIFRx中对应的那个中断进行译码并进入中断。
CPU处理中断的内部流程在TI网站SPRU430.pdf,即《TMS320C28x CPU and Instruction Set Reference Guide》中有详细的介绍。我们关心的主要是如何控制各个寄存器使得我们设定的中断能够正常响应与控制,至于CPU内部如何操作其各个ALU及相关的ARx寄存器这些内容可以有时间慢慢读一读(主要是因为不是我们控制的东西)。