STM32F4XX 中断和事件的区别

先引入一张图片,为EXTI block diagram

 

具体讨论参看:http://www.amobbs.com/forum.php?mod=viewthread&tid=1981139&highlight=stm32%2B%E5%A4%96%E9%83%A8%E4%B8%AD%E6%96%AD

  这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志23字样的注释,表示这样的线路共有23.

  两条线,分别标识外部中断信号和外部事件信号的路径。需要注意以下几点:

  1.对于边沿选择电路(Edge detect circuit)用户可以使用这两个寄存器控制需要哪一个边沿产生中断,因为选择上升沿或下降沿是分别受2个平行的寄存器控制,所以用户可以同时选择上升沿或下降沿,而如果只有一个寄存器控制,那么只能选择一个边沿了.

  2.图中着重蓝框的那个或门这个或门的两个输入分别为软件中断/事件寄存器和边沿检测电路。从这里可以看出,软件可以优先于外部信号请求一个中断或事件,即当软件中断/事件寄存器的对应位为"1",不管外部信号如何,图中的或门都会输出有效信号.

  3.一个中断或事件请求信号经过或门后,开始分道扬镳

  4.从蓝框标识的 或门出来的信号 分别 与 事件屏蔽寄存器 和 中断屏蔽寄存器 经过相应的与门。外部请求信号最后经过与门,相应中断没有屏蔽,没有挂起,(注意它们的先后顺序),则NVIC中断控制器发出一个中断请求;而顺利通过事件屏蔽寄存器检验的信号,没有挂起,直接导致脉冲发生器的一个跳变的信号转变为一个单脉冲,输出到芯片中的其它功能模块.

===============================================================================================

需要注意的就是两个寄存器:

EXTI_SWIER  

 

当该位为’0’时,写’1’将设置EXTI_PR中相应的挂起位。如果在EXTI_IMR和EXTI_EMR中允许
产生该中断,则此时将产生一个中断。
注:通过清除EXTI_PR的对应位(写入’1’),可以清除该位为’0’。

EXTI_PR

0:没有发生触发请求
1:发生了选择的触发请求
当在外部中断线上发生了选择的边沿事件,该位被置’1’。在该位中写入’1’可以清除它,也可以
通过改变边沿检测的极性清除。

 

======================================================================================================================  

  从这张图上我们也可以知道,从外部激励信号来看,中断和事件的产生源都可以是一样的.之所以分成2个部分,由于中断是需要CPU参与,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等;

  简单举例:外部I/O触发AD转换,来测量外部物品的重量;如果使用传统的中断通道,需要I/O触发产生外部中断,外部中断服务程序启动AD转换,AD转换完成中断服务程序提交最后结果;要是使用事件通道,I/O触发产生事件,然后联动触发AD转换,AD转换完成中断服务程序提交最后结果;相比之下,后者不要软件参与AD触发,并且响应速度也更块;要是使用事件触发DMA操作,就完全不用软件参与就可以完成某些联动任务了。

 

总结:

  可以这样简单的认为,事件机制提供了一个完全有硬件自动完成的触发到产生结果的通道,不要软件的参与,降低了CPU的负荷,节省了中断资源,提高了响应速度(硬件总快于软件),是利用硬件来提升CPU芯片处理事件能力的一个有效方法;

 

posted on 2013-09-24 14:44  イケメンおっさん_汪汪  阅读(1132)  评论(0编辑  收藏  举报

导航