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

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

3天内不再提示

Cortex-M0系统控制块(SCB)介绍

安芯教育科技 来源:灵动MM32MCU 2023-03-25 15:14 次阅读

Cortex-M0系统控制块(SCB)是内核外设的主要模块之一,提供系统控制以及系统执行信息,包括配置,控制,上报系统异常等。

eaf64be8-cada-11ed-bfe3-dac502259ad0.png

为了提高软件效率,CMSIS简化了SCB寄存器表示,在CMSIS中系统控制寄存器结构体:

typedefstruct
{__IMuint32_tCPUID;/*!< Offset: 0x000 (R/ )  CPUID Base Register */
    __IOM uint32_t ICSR;  /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */
    uint32_t RESERVED0;
    __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */
    __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W)  System Control Register */
    __IOM uint32_t CCR; /*!< Offset:0x014 (R/W) Configuration Control Register */
    uint32_t RESERVED1;
    __IOM uint32_t SHP[2U];/*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */
    __IOM uint32_t SHCSR;  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */
} SCB_Type;

一、CPUID

CPUID基地址寄存器包含处理器型号、版本等相关信息,是只读的,可以通过应用软件、调试器和烧录器等获取处理器的类型和版本信息。

Address: 0xE000ED00
Reset value: 0x410CC200

eb02a618-cada-11ed-bfe3-dac502259ad0.png

这个地方CPUID与我们经常提到的MCU的96位UID不同,CPUID是处理器的ID号,由Arm提供并实现,通过CPUID可以知道内核型号及版本等信息。

而96位UID是MCU产品ID,属于MM32,由上海灵动微电子股份有限公司提供并按照一定的规则实现,96位的产品唯一身份标识所提供的参考号码对任意一个系列微控制器,在任何情况下都是唯一的。

用户在何种情况下,都不能修改这个身份标识。

MCU还有一个DEV_ID编码,这个ID定义了MCU的器件号和硅片版本号,它是DBG_MCU的一个组成部分,并且映射到外部APB总线上。SW 调试口(2个引脚) 或通过用户代码都可以访问此编码。

DEV_ID地址:0x40013400 只支持32位访问,只读。

eb16265c-cada-11ed-bfe3-dac502259ad0.png

在CMSIS驱动库中,可以直接使用“ SCB->CPUID ” 获取处理器ID。读取MM32F0130的CPUID、UID和DEV_ID如下所示:

eb220292-cada-11ed-bfe3-dac502259ad0.png

CPUID (0x410CC200)解析处理器信息:

eb36add2-cada-11ed-bfe3-dac502259ad0.png

二、ICSR (Interrupt Control and State Register)

提供:

NMI异常的设置挂起位

为PendSV和SysTick异常设置挂起和清除挂起位

表示:

正在处理的异常的异常编号

是否有被抢占的活动异常

最高优先级未决异常的异常编号

是否有任何中断待处理

Address: 0xE000ED04
Reset value: 0x0000 0000

eb4518d6-cada-11ed-bfe3-dac502259ad0.png

ICSR中的某些控制位仅供调试使用,大多数情况下,应用程序只会用ICSR来控制或者检查系统异常挂起状态。

PendSV(可挂起的系统调用)异常对 OS 操作非常重要,其优先级可以通过编程设置。可以通过将中断控制和壮态寄存器 ICSR 的 bit28挂起位置1来触发PendSV中断。与SVC异常不同,它是不精确的,因此它的挂起状态可在更高优先级异常处理内设置,且会在高优先级处理完成后执行。

利用该特性,若将PendSV设置为最低的异常优先级,可以让PendSV异常处理在所有其他中断处理完成后执行,这对于上下文切换非常有用,也是各种OS设计中的关键。在具有嵌入式OS的典型系统中,处理时间被划分为了多个时间片。

通过向中断控制和状态寄存器 ICSR 的 bit28 写入1挂起PendSV来启动PendSV中断,如果中断启用且有编写 PendSV 异常服务函数的话,则内核会响应 PendSV 异常,去执行PendSV 异常服务函数,这样就可以在PendSV中断服务函数中进行任务切换了。

三、AIRCR (Application Interrupt and Reset Control Register)

AIRCR为数据访问和系统的复位控制提供字节序状态。

要写入该寄存器,您必须写入0x05FA VECTKEY 字段,否则处理器将忽略写入。

Address: 0xE000ED0C
Reset value: 0xFA05 0000

eb5b2586-cada-11ed-bfe3-dac502259ad0.png

任何对该寄存器的写操作,都必须将0x05FA写入到AIRCR[30:16],否则写操作将无效,若需要半字读取,需要写入0xFA05。

应用程序中系统执行软复位函数:

__STATIC_INLINEvoidNVIC_SystemReset(void)
{__DSB();//确保所有未完成的内存访问包括缓冲写入在重置之前完成
SCB->AIRCR=((0x5FAUL<< SCB_AIRCR_VECTKEY_Pos) |
                   SCB_AIRCR_SYSRESETREQ_Msk);
    __DSB();    //确保完成内存访问

    for(;;) /* wait until reset */
    {   
        __NOP();
    }
}

四、SCR (System Control Register)

SCR 控制进入和退出低功耗状态的特性。

Address: 0xE000ED10
Reset value: 0x0000 0000





审核编辑:刘清

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

    关注

    68

    文章

    19259

    浏览量

    229652
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120230
  • CMSIS
    +关注

    关注

    0

    文章

    40

    浏览量

    11892
  • Cortex-M0
    +关注

    关注

    4

    文章

    124

    浏览量

    38673
  • 中断控制
    +关注

    关注

    0

    文章

    26

    浏览量

    8863

原文标题:Cortex-M0中断控制和系统控制(四)

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    灵动微课堂 (第176讲) | Cortex-M0中断控制系统控制(二)

    开始时完成的。arm官方资料提示应该避免在中断使能之后改变中断优先级,因为这种情况的结果在ARMv6-M系统结构是不可预知的,并且不被Cortex-M0处理器支持。Cortex-M3/
    发表于 07-29 18:49

    灵动微课堂 (第178讲) | Cortex-M0中断控制系统控制(四)

    Cortex-M0系统控制(SCB)是内核外设的主要模块之一,提供系统控制以及系统执行信息,包
    发表于 08-06 14:49

    恩智浦推出基于Cortex-M0控制LPC1100微控制

    恩智浦推出基于Cortex-M0控制LPC1100微控制器系列 恩智浦半导体(NXP Semiconductors)今天宣布,旗下基于ARM Cortex-M0的LPC1100微
    发表于 11-18 09:04 1509次阅读

    新唐科技推出基于Cortex-M0内核的32位MCU

    新唐科技推出基于Cortex-M0内核的32位MCU 新唐科技宣布推出以 ARM® Cortex™-M0 为核心的 32 位微控制器 — NuMicro® 家族。 NuMicro®
    发表于 01-09 10:40 972次阅读

    Cortex-M0的指令集

    Cortex-M0的指令集,有需要的下来看看。
    发表于 01-13 17:17 29次下载

    TinyM0配套教程】LPC1100系列Cortex-M0最小系统设计

    TinyM0配套教程】LPC1100系列Cortex-M0最小系统设计
    发表于 09-29 19:18 16次下载
    TinyM<b class='flag-5'>0</b>配套教程】LPC1100系列<b class='flag-5'>Cortex-M0</b>最小<b class='flag-5'>系统</b>设计

    TinyM0配套教程LPC1100系列Cortex-M0最小系统设计

    TinyM0配套教程LPC1100系列Cortex-M0最小系统设计
    发表于 10-09 09:39 7次下载
    TinyM<b class='flag-5'>0</b>配套教程LPC1100系列<b class='flag-5'>Cortex-M0</b>最小<b class='flag-5'>系统</b>设计

    cortex-m0加密

    cortex-m0加密
    发表于 10-13 15:08 5次下载
    <b class='flag-5'>cortex-m0</b>加密

    新塘 Cortex-M0 最小系统

    新塘 Cortex-M0 最小系统
    发表于 10-16 15:52 23次下载
    新塘 <b class='flag-5'>Cortex-M0</b> 最小<b class='flag-5'>系统</b>

    基于ARM Cortex-M0核的MCU设计及应用

    知网链接:基于ARM Cortex-M0核的MCU设计及应用
    发表于 11-05 15:35 18次下载
    基于ARM <b class='flag-5'>Cortex-M0</b>核的MCU设计及应用

    Cortex-M0中断控制系统控制(二)

    每一个外部中断都有一个对应的优先级寄存器,Cortex-M0中NVIC-IPR共有8个寄存器,而每个寄存器管理4个IRQ中断,所以M0的IRQ中断源最多只支持32个,再加上16个内核中断,也就是说M0最多48个中断源。
    发表于 02-08 15:48 3次下载
    <b class='flag-5'>Cortex-M0</b>中断<b class='flag-5'>控制</b>和<b class='flag-5'>系统控制</b>(二)

    Cortex-M0中断控制系统控制

    Cortex-M0采用Armv6-M架构,优先级寄存器配置位有8位,但是有效位只有最高2位,这个地方很多人使用了Cortex-M3后一直也认为Cortex-M0也是最高3或4位有效位
    的头像 发表于 04-24 11:20 3072次阅读

    全球最强性能Cortex-M0 MCU诞生!

    Arm传统的、为MCU打造的Cortex-M系列CPU主要有:Cortex-M0, Cortex-M3, Cortex-M4。其中Cortex-M0
    的头像 发表于 12-20 11:15 1273次阅读

    Cortex-M0中断控制系统控制知识点

    每一个外部中断都有一个对应的优先级寄存器,Cortex-M0中NVIC-IPR共有8个寄存器,而每个寄存器管理4个IRQ中断,所以M0的IRQ中断源最多只支持32个,再加上16个内核中断,也就是说M0最多48个中断源。
    的头像 发表于 03-20 09:28 3168次阅读

    敏矽微电子Cortex-M0学习笔记02——Cortex-M0开发环境的建立及调试

    敏矽微电子Cortex-M0学习笔记02——Cortex-M0开发环境的建立及调试
    的头像 发表于 09-26 17:05 1579次阅读
    敏矽微电子<b class='flag-5'>Cortex-M0</b>学习笔记02——<b class='flag-5'>Cortex-M0</b>开发环境的建立及调试