paradoxfx

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

0
阅读(3956)

 

准则3:使用PIEIER禁止中断

根据是否去掉中断的使能位,又分为两种处理方法:

方法1:使用PIEIER禁止中断,但是保留对应的中断标志位

       这种方法的特点是中断不会丢失,需要以下的步骤:

1.      禁止全局中断(INTM = 1).

2.      清除PIEIERx.y位以禁止特定的外设中断;可以同时对一个组内的多个中断进行操作,即对整个PIEIERx寄存器进行“或”操作的赋值。用或操作是为了不会误操作到与本次程序执行的目的无关的位。

3.      循环等待5个时钟周期以确保所有送入CPU的中断的标志位可以在CPU IFR中正确操作。

4.      清除前面组所对应的CPU的IFRx位。

5.      清除外设中断组的PIEACKx 应答位。Step e. Clear the PIEACKx bit for the peripheral group.

6.      使能全局中断(INTM = 0).

方法2:使用PIEIER禁止中断,并清除对应的中断标志位

       这种方法也叫对中断的“软”复位,其步骤是:

1.      禁止全局中断(INTM = 1).

2.      置位EALLOW位

3.      暂时修改PIE向量表指向一个空的中断服务子程序,这个程序只执行一个返回操作(这个方法上次提到了)。此方法的有点在于可以安全修改单独的PIEIFRx.y位,而不影响组内的其它中断。

4.      清除外设寄存器中的中断使能位。

5.      使能全局中断(INTM = 0)。

6.      等待所暂时设置的空ISR响应中断事件。

7.      禁止全局中断(INTM = 1).

8.      将PIE中断向量表恢复默认状态。

9.      清除EALLOW位。

10.    禁止外设中断对应的PIEIER位。

11.    清除外设中断对应的IFR位。

Ps:这里也可以看出,与外设有关的IER,IFR这些位前面都带有外设或者PIE这样的前缀,而与CPU直接相关的寄存器命名则直接、简单。

12.    清除PIE组的中断应答位PIEACK。

13.    使能全局中断。