Cortex-M3内核知识总结

本文详细总结了Cortex-M3内核的知识,包括处理器模式与特权级、内核寄存器、PSP与MSP的使用、异常与中断处理机制。重点介绍了NVIC的相关寄存器,如中断使能、挂起、活跃标志和优先级配置。此外,还涵盖了内存访问顺序和SCB模块的重要寄存器,如中断控制与状态寄存器、向量表偏移寄存器以及应用中断和控制复位寄存器。
摘要由CSDN通过智能技术生成

常用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内核的,而中断是外部的。不知道怎么解释,但是仔细体会两者还是不同的

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

每个异常都有四种状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值