这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于STM32的NVIC中中断嵌套的误解

共3条 1/1 1 跳转至

关于STM32的NVIC中中断嵌套的误解

高工
2013-09-07 00:19:33     打赏

     STM32以Cortex-M3处理器为核心,是一个标准化的微控制器结构,CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这60个可屏蔽中断,赋予每个中断源单独的优先级。

    之前没有仔细的研究手册,另外也只是写一些简单的驱动测试程序,没有真正用到中断嵌套相关的内容,今天在进行程序调试的时候才发现,高优先级的中断发生了,而低优先级的中断函数依旧在运行,换句话说也就是没有实现“嵌套抢占”,跟我预期的有出入啊,于是仔细研读手册中相关的章节,才恍然大悟:原来我误解了这句话高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。

    STM32的优先级分为两组,抢占式优先级和从优先级,只有抢占式优先级高的中断才可以实施“抢占”,也就是实现中断的嵌套,当两个中断的抢占式优先级相同时,如果从优先级低的先进入中断,此时发生从优先级高的中断,然而从优先级高的中断是不能够抢占目前正在运行的从优先级低的中断的,他只能等待当前的中断退出后才能够进入中断,也就是从优先级不具有“抢占”的功能。

    粗心大意害人不浅啊,受教育了。




关键词: STM32     NVIC    

高工
2013-09-07 00:22:14     打赏
2楼

    如果两个中断的响应优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。


高工
2013-09-07 00:25:42     打赏
3楼

记得之前在官方的Demo中是没有中断优先级分组函数的,查阅相关资料说默认的是第二种分组方法。

分组函数在每个系统里面只要设置一次就够了,设置多次,则是以最后的那一次为准。但是只要多次设置的组号都是一样,就没事。否则前面设置的中断会因为后面组的变化优先级会发生改变。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]