CM3 NVIC与中断控制
来源:互联网 发布:linux中压缩命令 编辑:程序博客网 时间:2024/06/05 07:21
向量中断控制器,简称NVIC。NVIC的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外,NVIC还包含了MPU、SysTick定时器以及调试控制相关的寄存器。NVIC共支持1至240个外部中断输入(通常外部中断写作IRQs)。此外,NVIC还支持一个“永垂不朽”的不可屏蔽中断(NMI)输入。NVIC的访问地址0xE000_E000。所有NVIC的中断控制/状态寄存器都只能在特权级下访问。不过有一个例外——软件触发中断寄存器可以在用户级下访问以产生软件中断。所有的中断控制/状态寄存器均可按字/半字/字节的方式访问。此外,还有几个中断掩蔽寄存器也与中断控制密切相关,即“特殊功能寄存器”,只能通过MRS/MSR及CPS来访问。
1、中断的使能和除能:使用各自的寄存器来控制,使能,SETENA的位置“1”;除能,CLRENA位置“1”。
2、中断的悬起与解悬:SETPEND和CLRPEND
3、优先级(PRI):每个外部中断都有一个对应的优先级寄存器,每个寄存器占用8位,但是CM3允许在最“粗线条”的情况下,只使用最高3位。可以按字节访问,当然也可以按半字/字来访问。
4、活动状态(ACTIVE):每个外部中断都有一个活动状态位。在处理器执行了其ISR的第一条指令后,它的活动位就被置1,并且直到ISR返回时才硬件清零。由于支持嵌套,允许高优先级异常抢占某个ISR。然而,哪怕中断被抢占,其活动状态也依然为1(请仔细琢磨前文讲到的“直到ISR返回时才清零)。只读
5、特殊功能寄存器PRIMASK与FAULTMASK
PRIMASK用于除能在NMI和硬fault之外的所有异常,它有效地把当前优先级改为0(可编程优先级中的最高优先级)。该寄存器可以通过MRS和MSR以下例方式访问:
6、其它异常的配置寄存器
用法fault,总线fault以及存储器管理fault都是特殊的异常,因此给它们开了小灶。其中,它们的使能控制是通过“系统Handler控制及状态寄存器(SHCSR)”(地址:0xE000_ED24)来实现的。各种faults的悬起状态和大多数系统异常的活动状态也都在该寄存器中。
7、中断系统设置全过程的演示
1. 当系统启动后,先设置优先级组寄存器。缺省情况下使用组0(7位抢占优先级,1位亚优先级)。
2. 如果需要重定位向量表,先把硬fault和NMI服务例程的入口地址写到新表项所在的地址中。
3. 配置向量表偏移量寄存器,使之指向新的向量表(如果有重定位的话)
4. 为该中断建立中断向量。因为向量表可能已经重定位了,保险起见需要先读取向量表偏移量寄存器的值,再根据该中断在表中的位置,计算出对应的表项,再把服务例程的入口地址填写进去。如果一直使用ROM中的向量表,则无需此步骤。
5. 为该中断设置优先级。
6. 使能该中断
- CM3 NVIC与中断控制
- Cortex M3 NVIC与中断控制
- Cortex M3 NVIC与中断控制
- Cortex-M3 NVIC与中断控制
- 实例理解stm32的中断控制NVIC
- Cotex-M3权威指南学习笔记--NVIC与中断控制一
- NVIC中断
- 中断管理控制器NVIC与stm32中断使用
- STM32中NVIC(嵌套向量中断控制)的理解
- stm32库函数学习篇---NVIC与外部中断
- stm32库函数学习篇---NVIC与外部中断
- stm32库函数学习篇---NVIC与外部中断
- NVIC中断使能
- NVIC中断优先级管理
- NVIC中断优先级管理
- NVIC中断优先级管理
- CM3/STM32的中断优先级设定
- STM32 (Cortex-M3) 中NVIC(嵌套向量中断控制)的理解
- linux内核编译__devinit错误解决办法
- Android常用工具类
- POJ 2886 Who Gets the Most Candies?(单点更新 + 约瑟夫环)
- update_option方法介绍
- 如何系统地学习数据挖掘?
- CM3 NVIC与中断控制
- PHP Document 代码注释规范
- mysql data文件夹下的ibdata1 文件作用
- e5-7uva136 丑数
- iOS 加载图片时的内存警告
- android application
- 梯度下降
- sgu217:Two Cylinders(simpson积分)
- 托管DLL和非托管DLL的区别