学习Cortex-M:三种关中断方式
2017-04-02 20:13
225 查看
1、关闭整个CPU的所有中断;2、关闭特定外设的所有中断;3、关闭特定外设的特定中断源。
http://blog.csdn.net/zoomdy/article/details/54954168
mingdu.zheng at gmail dot com
影响范围最广,影响CPU内的所有中断源。
疑问:线程模式下,当前优先级和中断优先级的抢占优先级相同,但中断的子优先级比当前子优先级高,会怎么样?当前优先级也分抢占优先级和子优先级吗?
写NVIC->ISER寄存器中外设对应位为1打开中断。
写NVIC->ICER寄存器中外设对应位为1关闭中断。
分开关只影响特定外设的中断。
源开关影响范围最窄,仅影响外设的某一种中断源。
http://blog.csdn.net/zoomdy/article/details/54954168
mingdu.zheng at gmail dot com
1、总开关
每个CPU有一个中断总开关。通过CPU中断控制寄存器实现。Cortex-M的中断控制寄存器包括:FAULTMASK、PRIMASK、BASEPRI、BASEPRI_MAX。总开关的本质是变更当前执行优先级,根据Cortex-M的架构设计,只有优先级高于当前执行优先级的中断或异常才能抢占CPU。FAULTMASK
设置为1后关闭所有中断和异常,包括HardFault异常,只有NMI和Reset可以得到响应。PRIMASK
设置为1后关闭所有中断和除了HardFault异常外的所有其他异常,只有NMI、Reset和HardFault可以得到响应。BASEPRI
设置为n后,屏蔽所有优先级数值大于等于n的中断和异常。Cortex-M的优先级数值越大其优先级越低。BASEPRI_MAX
和BASEPRI类似,但有个限制,即后写入的优先级数值要比当前的BASEPRI值小才会起作用,否则不起作用。影响范围最广,影响CPU内的所有中断源。
疑问:线程模式下,当前优先级和中断优先级的抢占优先级相同,但中断的子优先级比当前子优先级高,会怎么样?当前优先级也分抢占优先级和子优先级吗?
2、分开关
Cortex-M包括一个嵌套向量中断控制器NVIC,每个外设在NVIC中都有一个对应的位,用来控制该外设的中断。写NVIC->ISER寄存器中外设对应位为1打开中断。
写NVIC->ICER寄存器中外设对应位为1关闭中断。
分开关只影响特定外设的中断。
3、源开关
外设通常有多个中断源,如接收到数据、发送完成、接收超时等等。外设通常提供中断使能寄存器控制哪些中断源产生时要向上汇报(向分开关汇报)。源开关与特定的外设相关,不同的外设会有不同的中断,有不同的中断控制寄存器。有些外设本身有总开关,该总开关控制该外设的所有中断。源开关影响范围最窄,仅影响外设的某一种中断源。
号外
STM32 HAL库采用外设寄存器关中断的方式。这种方式不依赖于外设在NVIC中的中断编号,更具有可移植性。如果采用NVIC寄存器关中断,那么需要知道外设关联的中断号,外设中断号可随着MCU的不同而不同,或者MCU内有多个同样的外设,每个外设实例的中断号都不是不同的。相关文章推荐
- 深入学习一下JavaScript的三种编解码方式
- 学习笔记 --- 编码过程中常见的三种异步方式
- php学习笔记(三十五)smarty模板中使用变量的三种方式
- Java学习笔记——显示当前日期的三种方式
- struts2——学习笔记1——struts2封装表单数据方式(三种)
- ITCAST视频-Spring学习笔记(Spring的三种实例化Bean的方式)
- 【Android学习】http协议编程的三种方式
- Extjs学习 三种方式提交form表单
- 驱动和应用层的三种通信方式 (学习)
- 【Android学习】数据传递三种方式
- OpenGL学习笔记 (7) —— 三种不同的纹理滤波方式,光照和键盘控制
- 鲜为人知的C++中关键字new的三种使用方式 (整理在此 方便学习)
- 黑马学习-------------反射(获取类的三种方式)
- Android多媒体学习十二:Android中Video的三种播放方式的实现
- Java学习笔记之 Map取出元素的三种方式
- ASP.NET学习笔记七之CSS加载的三种方式
- Spring学习笔记(二)Spring的三种实例化Bean的方式
- windows phone 学习之三种共享数据的方式
- 串口通信的三种方式(查询、中断、DMA) 之dma
- 【Android学习】XML文本的三种解析方式(通过搭建本地的Web项目提供XML文件)