Cortex M3 NVIC与中断控制
Cortex M3 NVIC与中断控制
宗旨:技术的学习是有限的,分享的精神是无限的。
一、NVIC概览 ——嵌套中断向量表控制器
NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外, NVIC 还包含了 MPU、 SysTick 定时器以及调试控制相关的寄存器。
NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作 IRQs)。具体的数值由芯片厂商在设计芯片时决定。此外, NVIC 还支持一个“永垂不朽”的不可屏蔽中断( NMI)输入。
NVIC 的访问地址是 0xE000_E000。所有 NVIC 的中断控制/状态寄存器都只能在特权级下访问。不过有一个例外——软件触发中断寄存器可以在用户级下访问以产生软件中断。所有的中断控制/状态寄存器均可按字/半字/字节的方式访问。
二、中断配置
寄存器 |
名称 |
类型 |
地址 |
复位值 |
ICTR |
中断控制类型寄存器 |
只读 |
0xE000E004 |
由配置定义 |
STIR |
软件触发中断寄存器 |
只写 |
0xE000EF00 |
— |
NVIC_ISER0~NVIC_ISER15 |
中断置使能寄存器 |
可读可写 |
0xE000E100~0xE000E13C |
0x00000000 |
NVIC_ICER0~NVIC_ICER15 |
中断清使能寄存器 |
可读可写 |
0xE000E180~0xE000E1BC |
0x00000000 |
NVIC_ISPR0~NVIC_ISPR15 |
中断置请求寄存器 |
可读可写 |
0xE000E200~0xE000E23C |
0x00000000 |
NVIC_ICPR0~NVIC_ICPR15 |
中断清请求寄存器 |
可读可写 |
0xE000E300~0xE000E2BC |
0x00000000 |
NVIC_IABR0~NVIC_IABR15 |
中断活跃位寄存器 |
只读 |
0xE000E300~0xE000E33C |
0x00000000 |
NVIC_IPR0~NVIC_IPR15 |
中断优先级寄存器 |
可读可写 |
0xE000E400~0xE000E7EC |
0x00000000 |
1、中断的使能与除能(SETENA/CLRENA)
2、中断置请求与清请求(SETPEND/CLRPEND)
如果中断发生时,正在处理同级或高优先级异常,或者被掩蔽,则中断不能立即得到响应。此时中断被悬起。
3、中断活跃位寄存器
ACTIVE寄存器族 0xE000_E300_0xE000_E31C
三、软件中断
软件中断,包括手工产生的普通中断,能以多种方式产生。最简单的就是使用相应的SETPEND寄存器;而更专业更快捷的作法,则是通过使用软件触发中断寄存器STIR
软件触发中断寄存器STIR(地址:0xE000_EF00)
注意:系统异常( NMI,faults, PendSV等),不能用此法悬起。而且缺省时根本不允许用户程序改动NVIC寄存器的值。如果确实需要,必须先在NVIC的配置和控制寄存器(0xE000_ED14)中,把比特1(USERSETMPEND)置位,才能允许用户级下访问NVIC的STIR。
四、SysTick定时器
SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号: 15)。
Cortex-M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作就得以化简。该定时器的时钟源可以是内部时钟( FCLK, CM3上的自由运行时钟),或者是外部时钟(CM3处理器上的STCLK信号)。不过, STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同。因此,需要检视芯片的器件手册来决定选择什么作为时钟源。
SysTick定时器能产生中断, CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间,SysTick 的处理方式都是相同的。
SysTick控制及状态寄存器(地址:0xE000_E010)
SysTick重装载数值寄存器(地址:0xE000_E014)
SysTick当前数值寄存器(地址:0xE000_E018)
SysTick校准数值寄存器(地址:0xE000_E01C)
校准值寄存器提供了这样一个解决方案:它使系统即使在不同的CM3产品上运行,也能产生恒定的SysTick中断频率。最简单的作法就是:直接把TENMS的值写入重装载寄存器,这样一来,只要没突破系统的“弹性极限”,就能做到每10ms来一次 SysTick异常。如果需要其它的SysTick异常周期,则可以根据TENMS的值加以比例计算。只不过,在少数情况下, CM3芯片可能无法准确地提供TENMS的值(如, CM3的校准输入信号被拉低),所以为保险起见,最好在使用TENMS前检查器件的参考手册。
Cortex M3 NVIC与中断控制相关推荐
- Cortex-M3 NVIC与中断控制
一.NVIC概览 --嵌套中断向量表控制器 NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外, NVIC 还包含了 MPU. SysTick 定时器以及调试控制相 ...
- Cortex‐M3的Faults异常究竟是什么?
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 有许多朋友在学习,或者开发STM32时都遇到过HardFault_Handler的情 ...
- Cortex M3内核架构
CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...
- cortex m3的操作模式和状态
1.操作状态(operation state): debug state:处理器在调试器发起halt或匹配到断点时,会进入debug state并停止执行指令. thumb state:处理器正在运行 ...
- Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)
架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...
- Cortex-M0(5)---Cortex-M0【中断向量表】【中断控制和系统控制
Cortex-M0[中断向量表][中断控制和系统控制][硬件错误后仿真器的作用] Cortex-M0中断向量表: __Vectors DCD __initial_sp ...
- Cortex M3 Bit-banding简介
http://blog.csdn.net/shevsten/article/details/7676397 Cortex M3 Bit-banding简介 分类: ARM MCU2012-06-19 ...
- cortex m3 开源_开源增强现实耳机,Steam的125M有效帐户等
cortex m3 开源 您好,开放游戏迷! 在本周的版本中,我们将了解Steam的1.25亿活跃帐户和Game Developers Conference,这是一个开源增强现实头戴设备,Linux游 ...
- 软件和硬件都是对生活的高度抽象---论中断控制(ARM体系编程)
不同的芯片体系设计在集成电路系统设计阶段其实都遵循大体一致的设计思想,芯片设计发展那么多年,真正为人所熟知的就是X86架构和ARM架构,当然还有日渐没落的MIPS,其他都是一些简单的控制器芯片体系.而 ...
最新文章
- zend framework1.11使用原生代码获取结果
- Html中框架的使用
- docker 镜像加速
- linux7开启ntp服务,【NTP】CentOS7.2配置NTP服务
- 如何在六个月或更短的时间内成为DevOps工程师(一)
- 京东方期望为iPhone 15高端版供应高刷新率OLED面板
- MsSql.RestApi - 构建ASP.NET REST API的最简单方法
- SQL Server中查询存储的用例
- [haoi2011]向量
- STM32F407使用MFRC522射频卡调试及程序移植成功
- 多字符串查找算法:kmp与step
- 1040 Longest Symmetric String (25 分)
- VMware运维工程师常用工具介绍
- Java后端开发流程
- 基于Eclipse+Java+Swing+Mysql实现旅游管理信息系统
- 驰骋工作流签订中国航天,广东航宇卫星
- 还在为英语学习发愁吗?身为程序员的你可能需要这样一份“宝典”(上)
- v2021年烷基化工艺考试题及烷基化工艺考试试卷
- 微信公众号留言功能实现方法分享
- 数组和链表分别比较适合用于什么场景
热门文章
- unix高级环境编程-基础知识
- linux 系统监控脚本
- 什么材料反射热量好_封阳台用什么材料好,封阳台用什么玻璃好
- div table 超出了_div包裹的table,table的宽度超出了的宽度,出现的滚动条的在windows下无法拖动...
- 哈希表思路图解和代码实现
- tornado学习笔记day07-同步与异步
- CentOS下安装VirtualEnv的教程
- 关于无法加载已创建的布局文件的问题的解决方案以及已布局在对应的R文件中未生成相应ID的问题的解决
- QT调用dll且进入DLL src code调试
- 如何做相册_手机里的照片太多,不得已只能删除?那就试试制作电子相册吧