paradoxfx

【原创】TI C2833x介绍---复位与中断(11)

0
阅读(2555)

如何将多路复用的外设中断请求传送到CPU中?这个应该算是我们理解整个外部中断处理流程的最后一步了。整个流程相对来说还是有点小复杂并且需要小心谨慎、严格按照步骤来处理的,好在TI为我们提供了一个清晰的流程图。

总结整个处理步骤如下:

1. PIE组中的外设或者外部中断源产生的中断在被使能的情况下,它们发出的中断请求就将被送入PIE模块。

2. PIE模块识别中断组x中的第y个中断(标记为INTx.y),并锁存对应的PIE中断标志位,即PIEIFRx.y = 1.

3. 在将中断请求从PIE送入CPU之前,必须同时满足以下两个条件:

(1) 中断对应的使能位被正确置位,即PIEIERx.y = 1。

(2) 中断所在组的应答位必须已经被清除。(不清楚意味着无法应答新的中断)

4. 在满足第3步的所有条件之后,中断请求被送人CPU,此时中断组对应的应答位重新被置位,即PIEACKx = 1。PIEACKx位保持置位的状态,直到被我们手动清除。所以在一个中断服务子程序结束的时候,需要清除PIEACKx,否则新的中断请求将无法被响应。

5. CPU中的中断标志位被置位,即IFRx = 1。

6. 如果对应的CPU中断被使能,即CPU IER x = 1, 或者DBGIERx = 1,且全局中断屏蔽位被清零(INTM = 0),则CPU可以响应INTx。

7. CPU识别中断,并执行以下步骤:

(1) 自动上下文存储。

(2) 清除IER位。

(3) 清除EALLOW。

CPU从PIE中取中断向量。

8. 对于经过PIE复用的中断,PIE模块使用PIEIERx与PIEIFRx来译码中断向量的入口地址。此时又分为两种情况:

(1) 中断组中最高优先级的那个中断在PIEIERx 中被使能且在PIEIFRx 被正确标记,并做为中断分支处理,则它将被优先处理,及时在第7步之后有更高级别的中断标志位置位。

(2) 如果被使能的中断组中没有任何中断的标志位置位,则PIE将响应该组中优先级最高的中断,即INTx.1,此时即进入了28x的TRAP 中断。所以在莫名其妙进入TRAP中断时,首先应该检查所有的中断配置是否正确。

Baidu
map