- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
stm32 NVIC中断管理实现(直接操作寄存器) cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断。stm32只有84个中断,包括16个内核中断和68个可屏蔽中断(stm32f103上只有60个可屏蔽中断,f107上才有68个中断)??中断是stm32很基础的一个功能,学会使用中断,才可以更好的使用其他的外设。理解stm32的中断,必须要先从stm32的中断优先级分组是怎么回事。要理解优先级分组,就要先理解什么是先占优先级和次占优先级。 ???先占优先级的概念等同于51单片机中的中断。假设有两中断先后触发,已经在执行的中断的先占优先级如果没有后触发的中断的先占优先级高,就会处理先占优先级高的中断。也就是说又有较高的先占优先级的中断可以打断先占优先级较低的中断。这是实现中断嵌套的基础。?次占优先级只在同一先占优先级的中断同时触发时起作用,先占优先级相同,则优先执行次占优先级较高的中断。次占优先级不会造成中断嵌套(但是可以在挂起等待时插队)。 如果中断的两个优先级都一致,则优先执行位于中断向量表中位置较高的中断。还需要注意的一点是:这里的中断优先级高是指谁更接近0级,0级优先级是最高的。?那么最低的优先级可以是多少?这就涉及了优先级分组的概念。 stm32 通过一个嵌套中断向量控制器(NVIC)来分配先占优先级和次占优先级的数量。cortex-m3 内核中拥有一个3位宽度的的PRIGROUP数据区,用来指示一个8位数据序列中的小数点的位置从而表示中断优先级的分组。? 举个例子可以更好的理解:如果PRIGROUP 数据位000(即为0组),说明8位数据序列中小数位置在第1位的左边为xxxxxxx.y 用于表示中断优先级的分组的含义就是用7位的数据宽度来表示先占优先级的数量即为128, 用1位的数据宽度来表示次占优先级数量即为2。(上述是指cortex-m3内核的情况,而实际的stm32则只用到8位中的高四位)? 所以cortex-m3中有2的三次方 即为8个优先级分组。但是stm32中只有5个优先级分组(0000~0100),表示方法略有不同。?一、NVIC寄存器组在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:??typedef?struct??{?vu32? ISER[2];//2个32位中断使能寄存器,分别对应到60个可屏蔽中断u32???RESERVED0[30];?(预留或者保留的意思)vu32? ICER[2];???//2个32位中断除能寄存器,分别对应到60个可屏蔽中断u32???RSERVED1[30];vu32??ISPR[2];? //2个32位中断挂起寄存器,分别对应到60个可屏蔽中断,可挂起正在执行的中断?u32???RESERVED2[30];??vu32? ICPR[2];//2个32位中断解挂寄存器分别对应到60个可屏蔽中断,可解除被挂起的中断u32???RESERVED3[30];vu32??IABR[2];//2个32位中断激活标志寄存器,可读取该寄存器判断当前执行的中断是u32?? RESERVED4[62];哪个,中断执行完硬件清零,只读??vu32???IPR[15];??//15个32位中断优先级分组寄存器,每个中断分配8个bit,对应到4*15=60个中断}?NVIC_TypeDef;? 它们对应ARM手册中的名称为: ISER = Interrupt Set-Enable RegistersICER = Interrupt Clear-Enable RegistersISPR = Interrupt Set-Pending RegisterICPR = Interrupt Clear-Pending RegisterIABR = Interrupt Active Bit RegisterIPR = Interrupt Priority Registers每个寄存器有32位,以Interrupt Set-Enable Registers说明,ISER[0]对应中断源0~31,ISER[1]对应中断源32~63,STM32只有60个中断源,所以没有ISER[2:7](因为cortex-m3支持256个中断,即需要256个使能位),转为RESERVED(保留)。首先分析为什么定义。这是因为ISER的地址是从E000E100开始的,ICER是从E000E180开始的,依次类推;可见从0xE000E100到0xE000E180间隔128个8位,也就是32个32位的数据;这就是vu32 XXX[2]+u32 RESERVED0[30]总的位数。?1)?ISER包括ISER[0]和ISER[1],它们的每个位的值依次对应一个中断的开启和关闭。例如
文档评论(0)