GD32实战7__中断

匿名 (未验证) 提交于 2019-12-02 23:42:01

引子

什么是中断

1. 我就是CPU 2. 编写文档,是主运行程序 3. 门铃响了,是中断信号 4. 查看到是快递,是查询中断号 5. 签收快递,是中断处理程序 6. 签收完快递后继续工作,是中断返回 

即,中断就是由于某些事件打断CPU主运行程序运行,并处理该事件,处理完后继续运行主程序的过程。

为什么需要中断

什么是中断优先级

什么是中断嵌套

什么是入栈和出栈

Cortex-M3中断管理

向量中断支持

  1. M3把各种中断都映射不同的地址上,当中断发生时,M3会根据中断号从表中查找到中断入口函数的地址,然后跳转过去并执行。
  2. 映射在哪个地址上是可以配置的,因此我们在修改程序的起始地址时,必须把中断向量重新映射,例如boot+app开发时。

  3. 如下表,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://github.com/YaFood/GD32F103/tree/master/TestUART

文章来源: https://blog.csdn.net/qq_17854661/article/details/91879037
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!