打印
[学习笔记]

NVIC中断优先级例程

[复制链接]
3360|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Sy1vester 于 2021-4-25 18:22 编辑

AC781x和AC7801x芯片有0-15级抢占优先级,没有响应优先级,这里通过设置各中断的抢占优先级的方式,来演示如何使用AC78xx系列芯片的中断优先级设置。
例程里面设置了三个外部中断:TIMER、RTC、GPIO,和一个内部NMI中断。
优先级为NMI>GPIO>RTC>TIMER。

NMI为内部中断,优先级仅次于RESET,不可以通过软件映射的方式设置优先级。

GPIO中断优先级设置为1

RTC中断优先级设置为2

TIMER中断优先级设置为3
所有外部中断在没有调用NVIC_SetPriority()函数的情况下,优先级默认为0

将PB2引脚设置为NMI中断引脚,并设置NMI唤醒功能(该函数使能NMI中断),然后通过SPM_EnableModuleSPMIRQ(SPM_MODULE_NMI, 0),设置NMI触发NMI中断而不是SPM中断,这个地方不理解的可参照AC781x参考手册的6.4章节的“外设触发 SPM 中断或 外设中断配置寄存器”为什么这样设置。
然后在对应的TIMER、RTC、GPIO及NMI中断设置需要的现象,用来表明MCU此时正在运行的函数。
例程功能是TIMER翻转LED2,RTC翻转LED2,GPIO关闭LED显示,NMI打开LED显示,并在对应的中断回调函数中通过串口打印正在执行的中断函数。在对应的高优先级中断函数执行完毕后,继续执行低优先级的函数,高优先级的中断可以打断低优先级的中断,低优先级的中断不可以打断高优先级的中断。具体现象可以仿真例程。

在较大的工程中使用多级中断的时候,记得将栈空间设置大一点,不然在栈空间不足的时候会触发hardfault中断。同时因为例程为了使中断被打断的现象明显,在各个中断函数中使用了mdelay函数,该函数使用了滴答定时器,滴答定时器在退出中断函数的时候会自行关闭,这就会导致程序可能会因为程序卡死在滴答定时器里面,具体原因可以参考CSDN的这个帖子https://blog.csdn.net/ima_xu/article/details/103595720,这里就不赘述了。处理办法如下图:

最后附上例程,互相学习

NVIC_Interrupt.rar

948.73 KB

使用特权

评论回复

相关帖子

沙发
XS128| | 2021-5-22 15:34 | 只看该作者
谢谢,分享

使用特权

评论回复
板凳
两只袜子| | 2021-6-9 10:41 | 只看该作者
相互学习,相互支持

使用特权

评论回复
地板
自己造声卡| | 2021-6-9 12:14 | 只看该作者
这个资料确实不错,很棒的,感谢楼主的分享。很棒的。

使用特权

评论回复
5
lidi911| | 2021-6-9 20:39 | 只看该作者
学习学习,谢谢讲解。

使用特权

评论回复
6
sparrow054| | 2021-6-11 12:41 | 只看该作者
中断是让初学者头疼的一个点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:合肥杰发科技有限公司
简介:四维图新全资子公司 全球多地布局;专注于汽车电子芯片及相关系统的研发与设计 车规级芯片覆盖整车;客户遍及海内外 全球超过8000万辆车搭载杰发科技芯片。

10

主题

111

帖子

1

粉丝