本帖最后由 1418497227 于 2020-2-28 09:44 编辑
在基本了解28377的整体芯片硬件架构和系统控制功能后,在我们学习例程之前有必要先了解一下外设中断的一些基本知识(PS:虽然有基础,但再巩固一下也是没坏处的)。当然,外设中断的内容也包含于系统控制中。话不多说,正式学习!
DSP28377的系统控制二
中断是使CPU暂停其当前执行,并分支到称为中断服务程序(ISR)中去的信号。这是处理外围事件的有效机制,并且中断比寄存器轮询占用的CPU开销更少。但因为中断与程序流异步,所以必须注意避免在中断和主程序代码中访问资源上的冲突。
中断通过一系列标志和使能寄存器传递到CPU。标志寄存器存储中断,直到它被处理。使能寄存器阻止中断的传递。当中断信号到达CPU时,CPU从称为向量表的列表中提取正确的ISR地址。
C28x CPU有14个外设中断线。其中两个(INT13和INT14)分别直接连接到CPU定时器1和定时器2。其余12个通过增强型外设中断扩展模块(PIE)连接到外设中断信号。PIE将多达16个外设中断复用到每个CPU中断线中。它还扩展向量表,以允许每个中断具有自己的ISR。这允许CPU支持大量的外设。
中断路径分为三个阶段:外设,PIE,CPU。每级都有自己的使能和标志寄存器。该系统允许CPU处理一个中断,而其他中断处于待处理状态,在软件中实现和优化嵌套中断,并在某些关键任务期间禁用中断。其具体的中断架构间下图所示。
特别说明:28377芯片有两个CPU,每个CPU都有自己的PIE,两个PIE必须单独进行配置。某些中断来自于两个CPU共同拥有的外设,如ADC和SPI,所以当这些中断发送到两个PIE时,需要对相应的CPU的PIE进行中断响应配置,才不会出现冲突。
上图基本上将中断信号的传输路径讲述的很清楚。首先是外设产生中断信号,当配置了PIE的相应组的中断使能位后,信号继续传递;当对应组的PIEACK位清零时,中断信号锁存至对应组的IFR(中断标志位)中;当使能了对应组的IER位后,中断继续传播;当INTM清零后,CPU将接收中断。最后,要清除IFR.x和IER.x,并置位INTM位,EALLOW被清除。PIEIFRx.y被清除。
通过以上流程就可以明白如何配置和使用中断咯!
上电时,默认不会启用中断。初始上电时,PIEIER和IER寄存器被清零,INTM置1。应通过代码进行配置和使能相应外设中断。
图表1
(1)启用中断
a.全局禁止中断(DINT或SETC INTM);
b.通过设置PIECTRL寄存器的ENPIE位来使能PIE;
c.将每个中断的ISR向量写入PIE向量表中的相应位置,可在上图表中找到;
d.将相应的PIEIER.x组的中断使能置位;
e.将包含相应PIE组中断的CPU IER.x使能位置位;
f.在外设中使能中断;
g.全局使能中断(EINT或CLRC INTM)。
(2)处理中断
ISR与正常功能类似,但必须执行以下操作:
a.保存和恢复某些CPU寄存器(如果使用)的状态;
b.清除中断组的PIEACK位;
c.使用IRET指令返回; 如果函数使用“interrupt”关键字定义,则TMS320C28x C编译器会自动处理需求a和b。但通常在ISR结束时,用户必须手动清除中断组的PIEACK位。 (3)禁用中断 a.全局禁止中断(DINT或SETC INTM) b.清除中断的PIEIER位 c.等待5个周期,以确保任何传播中断已到达CPU IFR寄存器 d.清除中断PIE组的CPU IFR位 e.清除中断PIE组的PIEACK位 f.全局使能中断(EINT或CLRC INTM)
最后附CPU中断向量表:
总结: (1)认识了28377D的中断架构以及中断传输路径 (2)学会了如何配置和使用中断
|