0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

操作BASEPRI特殊功能寄存器时无效解决方法(上)

麦辣鸡腿堡 来源:茶话MCU 作者:茶话MCU 2023-06-21 16:04 次阅读

STM32用户发现在操作BASEPRI特殊功能寄存器时,根本不起作用。比方,它目前配置了几个中断,优先级各不相同,按照STM32CubeMx里的配置分别为2、3、4不等,当他在BASEPRI寄存器里写这几个数字中的任意一个时,发现BASEPRI的数字始终是0,没有任何效果。

我们知道,通过配置BASEPRI寄存器非0值来给系统中的中断响应设置门槛,当中断优先级低于某个级别时将不会得到CPU的响应执行,也就是说只有中断优先级高于某个级别时才能得到响应。下面截图是来自ARM

CORTEX M4技术手册中有关BASEPRI寄存器的描述。

图片

从这里可以看到该寄存器的有效配置位有8位,对其写0无意义,或者说放弃设置中断响应门槛功能。在ARMCORTEX-M内核系统里,中断优先级的高低跟表示优先级的数字大小成相反关系,即数字越小的中断优先级配置值所对应的优先级反而越高。

根据BASEPRI寄存器的定义,假设给BASEPRI写数字5,那就意味着只有中断优先级高于5的中断,即中断优先级的数字小于5的中断可以得到响应,而其它低于优先级5的中断将会被屏蔽。【注:这里说的优先级比较最终都体现在抢占优先级上】

另外,在ARM内核里关于每个中断的优先级配置寄存器也是8位,并支持字节访问。

图片

内核里还有跟中断优先级有关的寄存器,它把中断优先级配置位分成2部分,用来分别设置每个中断的组优先级和子优先级,或称抢占优先级和响应优先级,也有称主优先级和子优先级的,意思都一样。个人喜欢中间的术语。

图片

以上图优先级分组值【PRIGROUP】等于3为例。中断优先级寄存器中的bit0bit3用作配置该中断的响应优先级,显然,它的值可以是0到15的任一值。bit4bit7用来配置该中断的强占优先级,同样它的值也可以是0到15的任一值。若以【PRIGROUP】等于7为例,则所有可配置优先级的中断只配置响应优先级,不区分强占优先级,或者说抢占优先级都一样,或者说彼此不发生中断抢占都一个意思。所谓中断抢占即指另一中断事件打断正在执行的中断服务程序而响应更高优先级的程序。

上面都基于ARM

Cortex-M内核的最初设计来说的,我们知道,STM32是基于ARM内核添加ST的外设而成,ST在设计芯片的中断优先级这个地方,在AMR核的设计基础上做了些针对性的调整,涉及中断优先级的寄存器的有效控制位由8位变成4位,且仅使用高4位,低4位变成保留位。【下图来自STM32

Cortex M4 编程手册。注意红色下划线特别说明。】

图片

不难理解,BASEPRI寄存器也会跟着做了调整,不然没法跟上面调整过的中断优先级寄存器匹配,它也只使用高4位,低4位变保留位。【下图来自STM32F4系列编程手册】

图片

当然,关于优先级分组的控制寄存器的内容也做了相应调整,即针对优先级寄存器的高4位来划分抢占优先级和响应优先级的配置。详见下图:

图片

把上图的各种优先级分组配置变得更直观点就是下图的样子。绿色用于配置抢占优先级,黄色用于配置响应优先级,灰色保留位,一共有5种可能的分组情形。

图片

聊到这里,我们得知每个可配置的STM32片内中断,都有一个8位优先级配置寄存器与之对应,且只用到高4位。我们接着看看开篇的问题。目前STM32的有关中断配置如下图所示【使用STM32CubeMx工具进行】:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5037

    浏览量

    117764
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348864
  • 控制
    +关注

    关注

    4

    文章

    997

    浏览量

    122152
收藏 人收藏

    评论

    相关推荐

    在C语言环境下访问特殊功能寄存器sfr的经验

    单片机的特殊功能寄存器SFR,是SRAM地址已经确定的SRAM单元,在C语言环境下对其访问归纳起来有两种方法
    的头像 发表于 11-10 09:46 8627次阅读
    在C语言环境下访问<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>sfr的经验

    关于三星2410A处理特殊功能寄存器问题

    会有这些特殊功能寄存器的地址的实际地址。哪FLASH里面地址和芯片的特殊功能寄存器的实际地址是什么关系了?如何去实际操作这些
    发表于 10-02 21:56

    特殊功能寄存器

    MCS-51单片机的特殊功能寄存器总是不能灵活运用额。。比如TMOD、TCON、什么的,在做定时中断的时候老是不理解,各位帮指点指点呀!
    发表于 02-06 23:09

    特殊功能寄存器(SFR)完整表

    特殊功能寄存器(SFR)完整表
    发表于 08-01 12:32

    特殊功能寄存器为什么要设有地址呢

    51单片机内的特殊功能寄存器既然不是存储为什么还设有地址呢,设置的地址有什么用处呢
    发表于 10-19 19:34

    单片机的特殊功能寄存器SFR

    单片机的特殊功能寄存器SFR,是SRAM地址已经确定的SRAM单元,在C语言环境下对其访问归纳起来有两种方法。1、采用标准C的强制类型转换和指针来实现采用标准C的强制转换和指针的概念来实现访问MCU
    发表于 11-30 08:07

    特殊功能寄存器位置及功能是什么

    特殊功能寄存器(SFR)位置及功能
    发表于 01-05 07:07

    单片机的特殊功能寄存器有哪些?

    单片机的特殊功能寄存器有哪些?
    发表于 02-16 07:27

    【硬见小百科】单片机的特殊功能寄存器

    在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。 特殊功能寄存器地址映象表(一) 特殊功能
    的头像 发表于 01-16 13:45 4741次阅读

    7课:单片机的特殊功能寄存器 2020/11/15

    7课:单片机的特殊功能寄存器 2020/11/15
    发表于 11-20 12:51 7次下载
    7课:单片机的<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b> 2020/11/15

    51单片机的特殊功能寄存器到底在哪,为何51子系列没有高128B仍然有特殊功能寄存器

    简单来说,就是片内RAM和特殊功能寄存器在物理上是相互独立的。就像51子系列内部RAM没有高128B,但它任然有特殊功能寄存器,因为特殊功能
    发表于 11-23 16:51 22次下载
    51单片机的<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>到底在哪,为何51子系列没有高128B仍然有<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>

    【硬见小百科】单片机的特殊功能寄存器

    在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。<特殊功能寄存器地址映象表(一)><特殊功能
    发表于 12-20 19:15 14次下载
    【硬见小百科】单片机的<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>

    STC单片机常用特殊功能寄存器速查

    STC单片机常用特殊功能寄存器速查(STC-SFR2-b9正式版)
    发表于 09-30 17:20 0次下载

    为何修改BASEPRI寄存器无效

    有STM32用户发现在操作BASEPRI特殊功能寄存器时,根本不起作用。比方,它目前配置了几个中断,优先级各不相同,按照STM32CubeMx里的配置分别为2、3、4不等,当他在
    的头像 发表于 04-26 09:16 1416次阅读
    为何修改<b class='flag-5'>BASEPRI</b><b class='flag-5'>寄存器</b><b class='flag-5'>无效</b>?

    操作BASEPRI特殊功能寄存器无效解决方法(下)

    站在中断优先级寄存器的高4位而言的,那么放到整个8位优先级寄存器来看的话,他们的优先级应该是0x00,0x20,0x30,0x40【其实,低4位值是多少无关紧要,反正无效位】。 前面提过了,现在
    的头像 发表于 06-21 16:08 565次阅读
    <b class='flag-5'>操作</b><b class='flag-5'>BASEPRI</b><b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>时<b class='flag-5'>无效</b><b class='flag-5'>解决方法</b>(下)