前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NVIC寄存器组

NVIC寄存器组

作者头像
全栈程序员站长
发布2022-08-27 10:39:04
7260
发布2022-08-27 10:39:04
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

在STM32中用到了Cortex-M3定义的三组寄存器,有关这三组寄存器的说明不在STM32的技术手册中,需要参考ARM公司发布的Cortex-M3 Technical Reference Manual (r2p0)

在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下:

一、NVIC寄存器组

STM32的固件库中有如下定义:

typedef struct { vu32 ISER[2]; u32 RESERVED0[30]; vu32 ICER[2]; u32 RSERVED1[30]; vu32 ISPR[2]; u32 RESERVED2[30]; vu32 ICPR[2]; u32 RESERVED3[30]; vu32 IABR[2]; u32 RESERVED4[62]; vu32 IPR[11]; } NVIC_TypeDef;

它们对应ARM手册中的名称为 ISER = Interrupt Set-Enable Registers ICER = Interrupt Clear-Enable Registers ISPR = Interrupt Set-Pending Register ICPR = Interrupt Clear-Pending Register IABR = Active Bit Register IPR = Interrupt Priority Registers

每个寄存器有240位,以Interrupt Set-Enable Registers说明,ISER[0]对应中断源0~31,ISER[1]对应中断源32~63,STM32只有60个中断源,所以没有ISER[2:7]。

首先分析为什么定义。这是因为ISER的地址是从E000E100开始的,ICER是从E000E180开始的,依次类推;可见从0xE000E100到0xE000E180间隔128个8位,也就是32个32位的数据;这就是vu32 XXX[2]+u32 RESERVED0[30]总的位数。

1)

ISER包括ISER[0]和ISER[1],它们的每位值依次对应一个中断的开启和关闭。例如ISER[0]中的第0位对应

WWDG 窗口定时器中断;第25位对应TIM1_UP TIM1更新中断。—用来开中断

ICER写响应的位为1则对应的中断禁止,默认全0,读如果该位为1则相应的中断允许–用来关中断。

2)

ISPR中某位为1则挂起相应中断;

ICPR中某位为1则清除挂起的中断;

3)

IABR只读用来指示是否有中断发生或要处理;

4)

IPR用来设置优先级别

参考STM32技术参考手册中的中断向量表,中断源的位置为: 位置0 – WWDG = Window Watchdog interrupt 位置1 – PVD = PVD through EXTI Line detection interrupt 位置2 – TAMPER = Tamper interrupt …… 位置58 – DMA2_Channel3 = DMA2 Channel3 global interrupt 位置59 – DMA2_Channel4_5 = DMA2 Channel4 and DMA2 Channel5 global interrupts

二、系统控制寄存器组

STM32的固件库中有如下定义:

typedef struct { vuc32 CPUID; vu32 ICSR; vu32 VTOR; vu32 AIRCR; vu32 SCR; vu32 CCR; vu32 SHPR[3]; vu32 SHCSR; vu32 CFSR; vu32 HFSR; vu32 DFSR; vu32 MMFAR; vu32 BFAR; vu32 AFSR; } SCB_TypeDef; /* System Control Block Structure */

它们对应ARM手册中的名称为

CPUID = CPUID Base Register ICSR = Interrupt Control State Register VTOR = Vector Table Offset Register AIRCR = Application Interrupt/Reset Control Register SCR = System Control Register CCR = Configuration Control Register SHPR = System Handlers Priority Register SHCSR = System Handler Control and State Register CFSR = Configurable Fault Status Registers HFSR = Hard Fault Status Register DFSR = Debug Fault Status Register MMFAR = Mem Manage Address Register BFAR = Bus Fault Address Register AFSR = Auxiliary Fault Status Register

三、系统时钟寄存器组

STM32的固件库中有如下定义:

typedef struct { vu32 CTRL; vu32 LOAD; vu32 VAL; vuc32 CALIB; } SysTick_TypeDef;

它们对应ARM手册中的名称为

CTRL = SysTick Control and Status Register LOAD = SysTick Reload Value Register VAL = SysTick Current Value Register CALIB = SysTick Calibration Value Register

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145125.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档