Cortex-M3内核知识总结

常用Cortex-M3内核知识总结

文章按照大致按照内核手册的顺序编写,同时加入自己的理解总结,方便以后进行查阅。

处理器模式以及特权级

处理器模式分为线程模式与处理模式,复位后进入的线程模式特权,线程模式即在执行应用软件,而处理模式即执行中断或异常

他们与特权级有什么关系呢?

线程模式下可以为非特权级或者特权级,而处理模式一定为特权级。

特权级有什么作用呢?权限不同,有些指令只有在特权级下才能执行,有些寄存器只能在特权级下才能访问。

在裸机情况下,复位后为线程特权模式。在引入RTOS 后,执行用户代码就会被强制为线程非特权模式。

特权与非特权模式下还有一点非常重要,就是特权情况下,使用的是MSP,而非特权模式下使用的PSP。

与之相关的寄存器为CONTROL

image-20210802172831828

image-20210802172907392

异常的进入与退出机制后自动更新该寄存器。使用MSR指令从MSP切换至PSP,并紧跟ISB指令确保后面使用PSP堆栈指针。

内核常见的寄存器

R0至R12为通用的32位的寄存器。

R13为SP寄存器,在CORTEX-M3中为MSP或者PSP,两者只能为其一。复位后,其被加载的值为向量表的第一项。

R14为链接寄存器,在x86中就没有这种寄存器,用来存放返回地址,返回地址一般是使用堆栈存储,这里专门设计了一个寄存器,可能会加快执行速度。复位后该值为,其值为0xffffffff。

R15,PC寄存器。复位后其被加载的值为向量表的第二项。

PSR,程序状态寄存器,由三个32位的寄存器组成。分别为APSR、IPSR、EPSR。可以使用PSR整体访问,也可以使用单独的寄存器访问。

image-20210802175233604

APSR就是一些常见的标志,不解释。

IPSR的低9位代表的是当前中断(ISR)服务例程的异常类型号。(使用是是异常号)

在SCB_ICSR中有个VECTPEBDING(vectpending)位,指示的挂起的最高优先级的异常号。

这里有两概念,一个是Exception number(异常号),一个是 IRQ number,中断服务请求号。

异常号从1开始计数,1对应的复位。到外部中断的号码数为16。中断请求号从-14开始计数吗,-14对应的是NMI,到外部中断正好是从0开始

EPSR(执行程序状态寄存器):这个寄存器暂时不是特别理解,暂时没有碰到,暂时先不管。

接下来是几个比较重要的寄存器:

PRIMASK:优先级屏蔽寄存器,该寄存器只有一位,如果置位将屏蔽所有可编程优先级的异常。

FAULTMASK:更狠,也只有一位,屏蔽除NMI之外的所有异常。

BASEPRI:8位,设定处理器处理的最低优先级。

优先级数值越大,优先级越低,所以就是屏蔽优先级数值比BASEPRI大或等于的异常。

PSP与MSP的用法

比如在处理应用程序时,是线程PSP模式,这时来了一个中断,这时候压栈使用是PSP,到了异常后,使用的是MSP,异常结束时,

会根据LR中的内容,这时是从PSP中获取到返回状态。

这里按照正常的逻辑,既然是使用PSP,为什么不保存PSP进入栈中呢,这里根据内核的所述,PSP与MSP是属于叫做影子栈指针,他们两个是存在的,只不过SP寄存器(R13)决定的是当前在用谁,在任意时刻,只能是两者中的一个。

异常与中断

主要是说明异常模型

异常与中断不同,非常类似,但是异常更多是CORTEX内核的,而中断是外部的。不知道怎么解释,但是仔细体会两者还是不同的

对于可编程优先级而言,异常的优先级并不一定比中断高。

每个异常都有四种状态

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【目  录】: 第1篇系统篇 第1章嵌入式系统概述3 1.1嵌入式系统的定义和特点3 1.1.1嵌入式系统的定义3 1.1.2嵌入式系统和通用计算机比较4 1.1.3嵌入式系统的特点5 1.2嵌入式系统的硬件6 1.2.1嵌入式处理器7 1.2.2嵌入式存储器15 1.2.3嵌入式I/O设备18 1.2.4嵌入式I/O接口18 1.3嵌入式系统的软件21 1.3.1无操作系统的嵌入式软件22 1.3.2带操作系统的嵌入式软件24 1.4嵌入式系统的分类27 1.4.1按硬件(嵌入式处理器)划分27 1.4.2按软件复杂度划分27 1.4.3按实时性划分28 1.4.4按使用对象划分28 1.5嵌入式系统的应用28 1.5.1国防军事28 1.5.2工业控制29 1.5.3消费电子30 1.5.4办公自动化产品30 1.5.5网络和通信设备30 1.5.6汽车电子31◆嵌入式系统原理及应用目录1.5.7金融商业31 1.5.8生物医学32 1.5.9信息家电32 1.6本章小结34 习题134 第2章嵌入式系统开发35 2.1嵌入式系统的开发环境、开发工具和调试方式35 2.1.1嵌入式系统的开发环境35 2.1.2嵌入式系统的开发工具37 2.1.3嵌入式系统的调试方式43 2.2嵌入式系统的开发语言50 2.2.1嵌入式硬件开发语言50 2.2.2嵌入式软件开发语言51 2.3嵌入式系统的开发过程53 2.3.1需求分析54 2.3.2系统设计55 2.3.3系统实现61 2.3.4系统测试70 2.3.5系统发布73 2.4嵌入式开发工程师之路74 2.4.1嵌入式行业和人才的现状分析74 2.4.2嵌入式开发工程师的能力要求74 2.4.3嵌入式开发工程师的进阶之路75 2.5本章小结77 习题278 第2篇内核篇 第3章ARM CortexM3处理器81 3.1ARM CortexM3组成结构81 3.1.1CortexM3内核82 3.1.2调试系统84 3.2ARM CortexM3总线接口86 3.2.1CortexM3总线接口类型87 3.2.2CortexM3总线连接方案88 3.3ARM CortexM3编程模型89 3.3.1工作状态89 3.3.2数据类型89 3.3.3寄存器89 3.3.4指令系统93 3.3.5操作模式和特权分级96 3.3.6异常和中断98 3.3.7双堆栈机制105 3.4ARM CortexM3存储器系统107 3.4.1存储器映射107 3.4.2位带操作110 3.4.3存储格式112 3.5ARM CortexM3的低功耗模式113 3.6本章小结114 习题3115 第4章基于ARM CortexM3的STM32微控制器117 4.1从CortexM3到基于CortexM3的MCU117 4.2基于CortexM3的STM32系列微控制器概述118 4.2.1产品线118 4.2.2命名规则124 4.2.3生态系统125 4.2.4开发方法131 4.2.5学习之路134 4.3STM32F103微控制器基础136 4.3.1概述136 4.3.2主系统结构137 4.3.3功能模块139 4.3.4引脚定义140 4.3.5存储器组织141 4.4STM32F103微控制器的最小系统145 4.4.1电源电路145 4.4.2时钟电路148 4.4.3复位电路149 4.4.4调试和下载电路150 4.4.5其他151 4.5STM32F103微控制器的时钟系统153 4.5.1输入时钟153 4.5.2系统时钟155 4.5.3由系统时钟分频得到的其他时钟155 4.5.4STM32F10x时钟系统相关库函数157 4.6STM32F103微控制器的低功耗模式162

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值