中断请求响应完成后,需要撤销中断请求,即清除中断请求标志。否则,一次中断请求将会引起CPU多次反复地响应该中断,导致系统进入死循环状态。
中断请求的撤销还应注意掌握时机,撤销过早,有可能中断尚未响应,造成中断请求信号丢失;撤销过晚,可能引起多次中断响应,出现死循环现象。因此,及时撤销中断请求是很重要,也是很必要的。针对不同中断源,清除撤销中断请求信号的方法有所不同。下面按中断类型分别说明中断请求的撤销方法。
1.外部中断请求的撤销
STC15W4K32S4单片机提供了5个外部中断源,其中外部中断INT0和INT1允许下降沿触发和上升/下降沿触发中断。对于跳变触发方式的外部中断,当中断响应后,由于跳变沿已经消失,所以中断请求标志(IE0或IE1)保持0不变,即触发方式下的外部中断请求是自动撤销的。因此,外部中断INT0和INT1的中断请求被响应后,硬件会自动把中断请求标志(IE0或IE1)清0。
外部中断INT2、INT3、INT4的中断请求标志被隐藏,对用户不可见。故CPU对外部中断INT2、INT3、INT4中断响应后,由硬件自动清除中断请求标志,不需要用户清除。
2.定时器/计数器溢出中断请求的撤销
STC15W4K32S4单片机提供了5个定时器/计数器,其中定时器/计数器T0、T1的中断请求被响应后,硬件会自动把中断请求标志位(TF0或TF1)清0,因此定时器/计数器T0、T1的中断请求是自动撤销的。
而定时器/计数器T2、T3、T4的中断请求标志被隐藏,对用户不可见。故CPU对定时器/计数器T2、T3、T4中断响应后,由硬件自动清除中断请求标志,不需要用户清除。
3.串行口中断请求的撤销
STC15W4K32S4单片机提供了4个异步串行通信口(UART),这4个串行口中断请求被响应后,硬件不会自动把中断请求标志位清0,只能由用户使用指令将标志位清0。
串行口1的中断请求标志位为TI和RI,串行口2为S2TI和S2RI,串行口3为S3TI和S3RI,串行口4为S4TI和S4RI。由于串行口通信时的发送中断和接收中断都使用相同的入口地址,所以,当CPU响应串行口中断时,先要检测判断这2个中断请求标志位,以便区分出当前的中断请求是发送还是接收。当串行口发送或接收中断完成后,应由用户使用指令清除中断标志位。因此,串行口中断请求的撤销需在中断服务程序中进行。
例如,使用串行口1中断时,用如下的指令清除标志位:
例如,使用串行口2中断时,应使用如下的指令清除标志位:
4.ADC中断请求的撤销(www.xing528.com)
A-D转换的中断请求标志位是ADC_FG(或用ADC_FLAG表示),中断响应后,不能自动清除,需要用户编程清除撤销中断,即在ADC中断服务程序中用软件指令将其清0。
5.SPI中断请求的撤销
SPI同步串行通信口的中断请求标志位是SPIF,中断响应后,不能自动清除,需要用户编程清除撤销中断,即在SPI中断服务程序中用软件指令将SPIF清0。
6.PCA中断请求的撤销
PCA计数器阵列的中断请求标志位是CF/CCF0/CCF1/CCF2,中断响应后,不能自动清除,需要用户编程清除撤销中断,即在PCA中断服务程序中用软件指令将其清0。
7.低压检测中断请求的撤销
LVD低压检测的中断请求标志位是LVDF,中断响应后,不能自动清除,需要用户编程清除撤销中断,即在低压检测中断服务程序中用软件指令将LVDF清0。
8.比较器中断请求的撤销
比较器的中断请求标志位是CMPIF,中断响应后,不能自动清除,需要用户编程清除撤销中断,即在比较器中断服务程序中用软件指令将CMPIF清0。
9.PWM中断请求的撤销
PWM的中断请求标志位是CBIF,中断响应后,不能自动清除,需要用户编程清除撤销中断,即在PWM中断服务程序中用软件指令将CBIF清0。
10.PWM异常检测中断请求的撤销
PWM异常检测的中断请求标志位是FDIF,中断响应后,不能自动清除,需要用户编程清除撤销中断,即在PWM异常检测中断服务程序中用软件指令将FDIF清0。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。