微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32之外部中断控制

STM32之外部中断控制

时间:11-20 来源:互联网 点击:

任何效果。

写零无效是个很关键的设计理念:通过这种方式,使能/除能中断时只需把“当事位”写成 1,其它的位可以全部为零。再也不用像以前那样,害怕有些位被写入0 而破坏其对应的中断设置(反正现在写 0 没有效果了),从而实现每个中断都可以自顾地设置,而互不侵犯——只需单一的写指令,不再需要读-改-写三步曲。(摘自《CM3权威指南》)

3、在清除中断标志位的时候,为什么只需要清除EXTI的中断标志位就行,而不需要清除NVIC的悬起寄存器SETPEND?

有些程序员在中断服务程序结束的位置清除中断源的时候,还调用了NVIC_ClearPendingIRQ()函数清除中断源的悬起标志位,其实是不需要的。  

如果中断发生时,正在处理同级或高优先级异常,或者被掩蔽,则中断不能立即得到响应。此时中断被悬起。中断的悬起状态可以通过“中断设置悬起寄存器(SETPEND) ”和“中断悬起清除寄存器(CLRPEND) ”来读取,还可以写它们来手工悬起中断。(这段文字摘自《CM3权威指南》)

由此我们可以得出结论:如果中断服务程序得到执行(中断得到响应),此时中断就不会被悬起。所以我们的中断服务程序不需要清除“悬起标志位”。

有人可能还会这么想:倘若一个中断服务程序因为处理器正在执行同级中断服务程序而不能被执行,中断被悬起,那么当轮到这个中断得到响应后,这个中断服务程序需要清楚“悬起标志位”吗?

我认为还是不需要,因为中断标志位的悬起和解悬,硬件都是可以自动控制的。也就是说,当悬起的中断被响应的时候,“悬起标志位”自动被硬件予以清除,不必手动清除。

参考资料:《STM32 库开发实战指南》

   《CM3权威指南》

   《STM32F10X芯片手册》

   《STM32F10xxx Cortex-M3 programming manual.pdf》

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top