发新帖我要提问
12
返回列表
打印
[其他ST产品]

【明解STM32】中断系统理论基础知识篇之中断寄存器功能原理

[复制链接]
楼主: 过期的塔头
手机看帖
扫描二维码
随时随地手机跟帖
21
过期的塔头|  楼主 | 2023-9-30 10:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
(3)、应用中断和复位控制寄存器AIRCR

        该寄存器用于:

        控制异常/中断优先级管理中的优先级分组

        提供系统的端信息(可以被软件或调试器使用)

        提供自复位特性



图9 应用中断和复位控制寄存器

使用特权

评论回复
22
过期的塔头|  楼主 | 2023-9-30 10:52 | 只看该作者
SCB->AIRCR的中断分组决定了如何去理解NVIC中断优先级控制寄存器IP的高4bit(4~7bit)。SCB->AIRCR的8~10位决定了分组的组别,可以分为0到4共5组,不同的组别决定了IP寄存器划分的抢占优先级和响应优先级各占几位。

   VECTRESET和VECTCLRACTIVE位域是为调试器设计的,尽管软件可以利用VECTRESET触发一次处理器复位,不过由于它不会复位外设等系统中的其他部分,因此多数应用程序是不大会用到它的。若想产生一次系统复位,多数情况下(取决于芯片设计和应用复位需求)应该使用SYSRESETREQ。有一点要注意,VECTRESET和VECTCLRACTIVE不应同时置位,非要这么做的话会导致Cortex-M3/M4设备的复位电路出错。

使用特权

评论回复
23
过期的塔头|  楼主 | 2023-9-30 10:52 | 只看该作者
在Cortex-M3中,有两种方法能够进行系统复位:

        第一种方法:置位 NVIC 中应用程序中断与复位控制寄存器(AIRCR)的 VECTRESET 位(位偏移:0)。这种复位的作用为复位Cortex-M3处理器内核,除了调试逻辑之外的所有角落,但是它不会影响到Cortex-M3处理器外部的任何电路,所以STM32上的各片上外设和其它电路都不受影响。

使用特权

评论回复
24
过期的塔头|  楼主 | 2023-9-30 10:52 | 只看该作者
  第二种方法:置位 NVIC 中应用程序中断与复位控制寄存器(AIRCR)的 SYSRESETREQ位(位偏移:2)。系统复位是置位同一个寄存器中的 SYSRESETREQ 位。这种复位则会波及整个芯片上的电路:它会使Cortex-M3/M4处理器把送往系统复位发生器的请求线置为有效。但是系统复位发生器不是Cortex-M3/M4的这一局部,而是由芯片厂商实现,因此不同的芯片对此复位的响应也不同。因此,读者须要仔细参阅芯片规格书,明白当发生片内复位时,各外设和功能模块都会回到什么样的初始状态,或者有哪些功能模块不受影响(假如,STM32系列的芯片有后备存储区,该区就被特殊对待)。大部分情况下,复位发生器在响应SYSRESETREQ 时,它也会同时把Cortex-M3/M4处理器的系统复位信号(SYSRESETn)置为有效。通常,SYSRESETREQ不应复位调试逻辑。这里有一个要注意的问题:从SYSRESETREQ被置为有效到复位发生器执行复位命令,往往会有一个延时。在此延时期间,处理器依然能够响应中断请求。但我们的本意往往是要让此次执行到此为止,不要再做任何其它事情了。所以,最好在发出复位请求前,先把FAULTMASK置位。

使用特权

评论回复
25
过期的塔头|  楼主 | 2023-9-30 10:53 | 只看该作者
      这里有一个要注意的问题:从SYSRESETREQ 被置为有效,到复位发生器执行复位命令,往往会有一个延时。在此延时期间,处理器仍然可以响应中断请求。但我们的本意往往是要让此次执行到此为止,不要再做任何其它事情了。所以,最好在发出复位请求前,先把FAULTMASK 置位,才万无一失。即:
void mcuRestart(void)
{
  __set_FAULTMASK(1); //关闭所有中断
  NVIC_SystemReset(); //复位

使用特权

评论回复
26
过期的塔头|  楼主 | 2023-9-30 10:54 | 只看该作者
(4)系统处理优先级寄存器SHP

        SCB->SHP[0]到SCB->SHP[11]的位域定义和NVIC中断优先级寄存器IP的定义相同,不同之处是SHP是用于系统异常优先级的。这些寄存器并未全部实现,为了编程中断和异常的优先级,CMSIS提供了函数NVIC_SetPrioriity和NVIC_GetPriority。这两个函数位于core_cm3.h中。例如:

图10 系统处理优先级寄存器

使用特权

评论回复
27
过期的塔头|  楼主 | 2023-9-30 10:54 | 只看该作者
系统处理控制和状态寄存器SHCSR

        使用错误、存储器管理错误和总线错误异常的使能由该寄存器控制。错误的挂起状态和多数系统异常的活跃状态也可以从该寄存器中得到。

        多数情况下,该寄存器及用于应用代码使能可配置的错误处理(MEMFAULT、 BUSFAULT、USGFAULT)。

使用特权

评论回复
28
过期的塔头|  楼主 | 2023-9-30 10:55 | 只看该作者
   使能位ENA,设置1使能异常,设置0失能异常。

        待定位PENDED,如果异常待定读为1,否则读为0。我们可以写这些位改变异常的待定状态。

        活跃位ACT,如果异常活跃读为1,否则读为0。我们可以写这些位改变异常的活跃状态,但是看这部分的注意事项。

        尽管可以写SCB->SHCSR寄存器的所有位,但建议软件只写异常使能位。写这个寄存器需要小心,确保系统异常的活跃位状态不会被意外修改,使能异常时,应该使用一次读~修改~写顺序的操作。下面的例子用于使能所有非硬Fault(存储器管理Fault、总线Fault、用法Fault异常):   不然若一个已经被激活的系统异常的活跃状态被意外清除了,当系统异常处理产生异常退出时就会出现错误异常。

使用特权

评论回复
29
过期的塔头|  楼主 | 2023-9-30 10:55 | 只看该作者
中断屏蔽寄存器组
        中断屏蔽寄存器的目的是让实时性要求高的任务或者事件能够顺利执行,因此要在需要的时候暂时屏蔽中断。

图12 异常和中断编号表

        编号为 0~15 的称为内核异常,而 16 以上的则称为核外(外部)中断。

使用特权

评论回复
30
过期的塔头|  楼主 | 2023-9-30 10:56 | 只看该作者
PRIMASK

        PRIMASK虽然是32位的寄存器,但是只有最低位有效,这是一个只有1个bit有效的寄存器。当将寄存器的位置为1时,相当于将当前中断的优先级设为0,它只响应NMI(优先级为-2更高)和HardFault(优先级为-1更高)异常,关掉其它优先级小于0(即数值比0大)所有可屏蔽的异常或中断;寄存器的默认值是0,表示没有关异常或者中断。

        PRIMASK通常用于在处理有实时性要求(time critical)的程序时关闭所有中断, 实时程序处理完毕后清除PRIMASK,重新开启中断。

使用特权

评论回复
31
过期的塔头|  楼主 | 2023-9-30 10:56 | 只看该作者
FAULTMASK

        FAULTMASK虽然是32位的寄存器,但是只有最低位有效,这是一个只有1个bit有效的寄存器。当将寄存器的位置为1时,当于将当前中断的优先级设为-1,它只响应NMI(优先级为-2更高),关掉其它优先级小于-1(即数值比-1大)的可屏蔽的异常或中断,甚至是HardFault异常也关闭;寄存器的默认值是0,表示没有关异常或者中断。

使用特权

评论回复
32
过期的塔头|  楼主 | 2023-9-30 10:56 | 只看该作者
BASEPRI

        为了提供灵活的中断屏蔽机制,内核架构提供了BASEPRI寄存器,可以根据优先级屏蔽中断或者异常,屏蔽的是抢占优先级(主优先级),它可以由用户来定义需要屏蔽中断的优先级的阈值,当设置为具体的阈值时,所有大于该数字值的中断都被关闭(优先级数字越大,表示优先级越低);这里设置的优先级针对的是抢占优先级;寄存器的默认值是0,表示没有关异常或者中断。

使用特权

评论回复
33
过期的塔头|  楼主 | 2023-9-30 10:56 | 只看该作者
   比如我们配置寄存器BASEPRI的数值为3,所有优先级数值大于等于3的中断都会被关闭,优先级数值小于3的中断不会被关闭。但0比较特殊,对寄存器basepri寄存器赋值0,那么被关闭的中断会被打开。

        寄存器BASEPRI的有效位数受系统中表达优先级的位数影响,如果系统中只使用3个位(5~7bit)来表达优先级,则BASEPRI有意义的值仅为0x00、0x20、0x40、0x60、0x80、0xA0、0xC0和0xE0。

使用特权

评论回复
34
过期的塔头|  楼主 | 2023-9-30 10:56 | 只看该作者

使用特权

评论回复
35
过期的塔头|  楼主 | 2023-9-30 10:56 | 只看该作者
总结
        本篇对STM32的中断系统涉及到的的寄存器分别进行了介绍,了解了各个寄存器的功能和对应寄存器位的定义可以更方便的去理解在实际使用中断配置时的配置功能,下一篇将对中断配置流程在实际开发中的设计及应用进行详细的分析。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则