NVIC寄存器组

NVIC寄存器组在STM32中用到了Cortex-M3定义的三组寄存器,有关这三组寄存器的说明不在STM32的技术手册中,需要参考ARM公司发布的Cortex-M3TechnicalReferenceManual(r2p0)。在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下: 一、NVIC寄存器组STM32的固件库

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

在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.net/145125.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月12日 下午10:40
下一篇 2022年5月12日 下午10:40


相关推荐

  • cad计算机快捷键命令大全,2016cad快捷键命令大全,AutoCAD快捷键命令大全

    cad计算机快捷键命令大全,2016cad快捷键命令大全,AutoCAD快捷键命令大全学习 cad 掌握 cad 快捷键命令是基础 下面为大家介绍 2016 新 cad 快捷键命令大全 AutoCAD 是目前应用广泛的 CAD 软件 具有完善的图形绘制功能 强大的图形编辑功能 可采用多种方式进行二次开发或用户定制 可进行多种图形格式的转换 具有较强的数据交换能力 同时支持多种硬件设备和操作平台 还可以通过多种应用软件适应于建筑 机械 测绘 电子 服装以及航空航天等行业的设计需求 这些整理出来比较全的 Au

    2026年3月18日
    2
  • eclipseUML工具

    eclipseUML工具
    EclipseUML2008-05-0522:05
    来源:lhttp://bach.yo2.cn/articles/category/artoftechnology/page/3
    对于UML工具,我用的并不是太深入,所以仅是对几款小型umltools,以及非专业umltools稍做评价,像RationalRose这种专业uml软件就不比较了。
     
    在选择方面个人比较偏向java,eclipse,逆向工程功能.
    1.MicrosoftVi

    2022年7月12日
    17
  • Java的常用输入输出语句

    Java的常用输入输出语句一、概述  输入输出可以说是计算机的基本功能。作为一种语言体系,java中主要按照流(stream)的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流(inputStream),由计算机发出的数据流叫做输出流(outputStream)。Java语言体系中,对数据流的主要操作都封装在java.io包中,通过java.io包中的类可以实现计算机对数据的输入、输出操作…

    2022年5月26日
    41
  • Kimi 版 OpenClaw 来了,5000+ Skills 随便用,确实给力!

    Kimi 版 OpenClaw 来了,5000+ Skills 随便用,确实给力!

    2026年3月13日
    2
  • Linux下C语言 system函数返回值「建议收藏」

    Linux下C语言 system函数返回值「建议收藏」例:status=system("./test.sh");1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。2、如何正确判断test.sh是否正确执行?仅判断status是否==…

    2025年12月15日
    5
  • jquery tmpl 详解「建议收藏」

    jquery tmpl 详解「建议收藏」转自:http://www.cnblogs.com/zhuzhiyuan/p/3510175.html动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等。 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在浏览器端拼数据就在服务器端拼数据。不过,从传输量方面来看,返回 HTML

    2022年6月29日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号