引子
什么是中断
1. 我就是CPU 2. 编写文档,是主运行程序 3. 门铃响了,是中断信号 4. 查看到是快递,是查询中断号 5. 签收快递,是中断处理程序 6. 签收完快递后继续工作,是中断返回
即,中断就是由于某些事件打断CPU主运行程序运行,并处理该事件,处理完后继续运行主程序的过程。
为什么需要中断
什么是中断优先级
什么是中断嵌套
什么是入栈和出栈
Cortex-M3中断管理
向量中断支持
- M3把各种中断都映射不同的地址上,当中断发生时,M3会根据中断号从表中查找到中断入口函数的地址,然后跳转过去并执行。
- 映射在哪个地址上是可以配置的,因此我们在修改程序的起始地址时,必须把中断向量重新映射,例如boot+app开发时。
- 如下表,1-15号用于系统异常,16号以上用于外部中断。


可嵌套中断支持
1. 通过寄存器AIRCR为优先级分组,通过分组我们可以知道哪些bit代表抢占优先级,哪些bit代表亚优先级,如图中1->2->4。 2. 中断优先级寄存器阵列的每个寄存器都是8位的,映射到优先级分组后,如图中3->4,经过此映射,M3就知道每个中断的抢占优先级和亚优先级分别是多少了。 3. 当多个中断同时发生时,M3首先选择抢占优先级最高的中断执行,当抢占优先级相同的中断同时触发时,M3优先选亚优先级最高的执行。 4. 到此,我们也明白了为什么理论上优先级有256级,抢占优先级只有128个了。

动态优先级调整支持
中断可屏蔽

中断延迟大大缩短
1. 向量化的设计,省去软件判断中断来源。 2. M3自动压栈和出栈R0-R3,R12,LR,PSR,PC寄存器,注意R4-R11需要手工入栈。 3. 优先级的有效合理分配,可以使需要的中断立马及时响应。 4. 咬尾中断和晚到中断机制,保证高优先级中断的实时响应。 5. 永不屏蔽的NMI(不可屏蔽中断),可以使系统第一时间做出响应,除非CPU挂了。
中断
注释:
代码配置
static VOID UART1_NvicConfiguration(VOID) { NVIC_InitPara NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQ = USART1_IRQn; /* 要配置的中断号 */ NVIC_InitStructure.NVIC_IRQPreemptPriority = 0; /* 抢占优先级 */ NVIC_InitStructure.NVIC_IRQSubPriority = 0; /* 亚优先级 */ NVIC_InitStructure.NVIC_IRQEnable = ENABLE; /* 使能控制 */ NVIC_Init(&NVIC_InitStructure); }
代码路径
文章来源: https://blog.csdn.net/qq_17854661/article/details/91879037