【嵌入式操作系统-2】Cortex-M7处理器程序员模型

Cortex-M7内核外设

Cortex-M7处理器实现

  1. 中断向量控制器
    NVIC是一种嵌入式的中断控制器,它支持低延迟的中断处理。

  2. 系统控制模块
    系统控制模块(SCB)是访问处理器的接口,它提供了包含配置,控制,报告异常信息在内的系统实现和系统控制。

  3. 系统定时器
    一个24位的向下计数计数器,可以用作实时操作系统的节拍计时器或者普通计时器。

  4. 集成指令和数据缓存(可选)
    指令和数据缓存提供了对频繁访问的数据和指令的快速访问,提高了系统访问内存的平均性能。

  5. 内存保护单元(可选)
    内存保护单元通过为不同的内存区域定义访问属性提高了系统的可靠性,它提供了多达八个或者16个不同的区域,和一个可选择的预定义备份区。

  6. 浮点运算单元
    浮点运行单元支持32位的单精度浮点运算和64位的双精度浮点运算。

Cortex-M7处理器程序员模型

程序员模型是指从程序员的角度来看,处理器提供了哪些可用的特性给编程人员,这部分除了单独的核心寄存器描述外,还包含有关处理器模式的信息和软件执行和堆栈的特权级别。

软件运行时的处理器模式和特权级

两种处理器模式:

线程模式
  • 线程模式用于执行应用程序,当复位结束之后处理器就进入了线程模式。
Handler模式
  • 用于处理异常,当异常处理完成后将恢复为线程模式。

软件运行时的两种特权等级:

非特权级:
  • 对MRS和MSR指令(访问特殊功能寄存器)的访问受限,并且不能使用CPS指令(Change Processor State)。
  • 不能访问系统定时器,NVIC,和SCB。
  • 访问内存或者外设可能受到限制。
特权级:
  • 特权级下可以使用所有指令和访问所有的资源。

  • 在线程模式下,控制寄存器控制着软件处于特权级还是非特权级,而在Handler模式,软件始终处于特权级。

  • 只有在特权级运行的软件才能够操作控制寄存器改变在线程模式下的特权级别,非特权级的软件可以使用SVC指令触发一个系统调用来转移控制到特权级软件。

  • 处理器使用的是满递减式栈,这意味着栈顶指针保存着最后一个入栈的元素的地址,当一个新的元素入栈,栈指针将递减,然后将新的值写入栈中。
  • 处理器实现了两种栈,一种是主栈,另一个是进程栈,他们拥有独立的栈指针。
  • 在线程模式下,控制寄存器控制着处理器使用主栈还是进程栈,而在Handler模式,始终使用主栈。
处理器模式执行的程序软件运行时的特权级使用的栈
Thread应用程序特权级或者非特权级主栈或者进程栈
Handler异常处理特权级主栈

处理器寄存器

在这里插入图片描述

寄存器读写属性特权/非特权访问复位后的值描述
R0-R12RW均可以未知32位的通用寄存器
MSPRW均可以复位后从地址0x00000000加载MSP的初始值
(引导程序的中断向量表从0x00000000开始,前四个字节为sp初值)
主栈指针
PSPRW均可以0x00000000主栈指针
LRRW均可以0xFFFFFFFF链接寄存器
PCRW均可以复位后从地址0x00000004加载复位向量的值,该值的第0位会被加载到ESSR的T位,用于决定程序是否运行于Thumb状态程序计数器
PSRRW均可以0x01000000程序状态寄存器不是一个寄存器,它包含APSR,IPSR,EPSR
APSRRW均可以未知应用程序状态寄存器
IPSPRRO特权0x00000000中断程序状态寄存器
EPSRRO特权0x01000000运行程序状态寄存器
PRIMASKRW特权0x00000000优先级屏蔽寄存器
FAULTMASKRW特权0x00000000故障屏蔽寄存器
BASEPRIRW特权0x00000000基本优先级屏蔽寄存器
CONTROLRW特权0x00000000控制寄存器

栈指针

在线程模式下,控制寄存器的bit[1]指示当前使用的是哪一个栈指针

  • 0 主栈(MSP)
  • 1 线程栈(PSP)

链接寄存器

存储了函数调用,异常处理的返回信息,复位后值为0xFFFFFFFF

程序计数器

包含当前指令的地址,复位后从0x00000004加载复位向量的值作为初值,该值的bit[0]会被加载到运行程序状态寄存器(EPSR)的T位,表明当前程序运行在Thumb状态还是其他状态。

程序状态寄存器

程序状态寄存器是APSR,EPSR,IPSR的组合,它们之间的位域相互独立,比特位的分布如下:
在这里插入图片描述
这些状态寄存器可以单独访问,也可以两个或者三个寄存器组合访问,访问他们使用MSR指令和MRS指令,下面是组合访问时的寄存器名称:
在这里插入图片描述

应用程序状态寄存器

应用程序状态寄存器中的标识位表示了运行指令后的当前状态。
在这里插入图片描述

中断程序状态寄存器

  • 中断程序状态寄存器中保存了当前中断服务程序的中断号,和中断向量表对应,在中断向量表0项存储的是MSP初值,第一项是复位向量,这两个都不是程序正常运行时的中断向量,下表中将0用于代表线程模式,1进行了保留,其他值和中断向量的位置一一对应。
    在这里插入图片描述

运行程序状态寄存器

ICI域:

  • 当中断发生时程序正在执行STM,LDM,PUSH,POP指令,或者FPU正在运行VSTM,VLDM,VPUSH,VPOP时会暂停该指令,然后把下一个操作数放到ICI域中,当中断执行完成之后,从ICI域中恢复操作数,继续执行该指令。

Thumb 状态:

  • Cortex-M7只能在Thumb状态下运行指令,下面几种情况会把该位清零
    • BLX, BX, POP{PC}
    • 异常返回时从栈中恢复状态寄存器的值。
    • 一个中断向量的Bit[0]或者复位。
  • 当T位为0时运行指令会发生故障或者锁住。
    在这里插入图片描述
    使用MRS指令读取该寄存器直接返回0,用MSR指令写该寄存器直接忽略。

异常屏蔽寄存器

异常屏蔽寄存器用于处理器屏蔽中断或者异常,但是它会影响任务的实时性,要想修改这些寄存器的值需要通过MSR或者MRS,CPS指令修改FAULTMASK或者PRIMASK。

优先级屏蔽寄存器

PRIMASK的Bit[0]用于屏蔽优先级可配置的异常,也就是除了NMI和HardFault都可以屏蔽。
在这里插入图片描述

故障屏蔽寄存器

它的第0位决定了是否屏蔽除了不可屏蔽中断(NMI)之外的其他中断,通过MSR指令在特权模式下可以访问。
在这里插入图片描述

基本优先级屏蔽寄存器

当BASEPRI的值不为0时,将会屏蔽小于等于该优先级的中断。
在这里插入图片描述

控制寄存器

该寄存器控制着线程模式下程序运行时的特权等级和使用的栈,还可以指示当前是否处于FPU状态。
在这里插入图片描述

  • Handler模式下始终使用MSP,因此在Handler模式下处理器会忽略对SPSEL位的写入,异常的进入和返回机制会根据EXC_RETURN的值自动更新控制寄存器的值。
  • 在带操作系统的环境下,作者建议在线程模式下使用PSP,内核和异常处理使用MSP。
  • 默认情况下,线程模式下使用的是MSP,如果想切换成PSP:
    • 可以使用MSR指令修改SPSEL位为1
    • 执行一个异常处理然后使用一个适当的EXC_RETURN进行返回。
  • 当切换栈指针之后必须使用ISB指令刷新流水线,以保证在ISB之后执行的指令都使用新的栈。
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ARM Cortex-M3和Cortex-M4处理器权威指南是一本针对ARM架构的核心处理器的详细手册。该指南提供了有关这两款处理器的全面信息,使得读者能够充分了解它们的功能和特点。 首先,该指南介绍了Cortex-M3和Cortex-M4处理器的基本架构。它解释了处理器的不同功能模块,例如中央处理单元(CPU)、内存保护单元(MPU)和系统控制单元(SCU)。此外,该指南还描述了这些处理器所支持的指令集架构和编程模型。 其次,该指南深入探讨了Cortex-M3和Cortex-M4处理器的性能特点。它详细介绍了这两款处理器的时钟频率、Cache大小、浮点运算能力和并行处理能力等关键参数。此外,该指南还讨论了这些处理器在功耗管理、中断处理和异常处理等方面的出色表现。 此外,该指南还提供了丰富的编程指南和示例代码,帮助读者使用Cortex-M3和Cortex-M4处理器进行软件开发。它介绍了处理器开发工具链、调试和仿真工具,以及软件开发的最佳实践。此外,该指南还解释了处理器的专有指令和寄存器,以及如何充分利用这些功能。 最后,该指南还介绍了Cortex-M3和Cortex-M4处理器的实际应用案例。它列举了一些使用这些处理器开发的典型应用,例如物联网设备、嵌入式系统和工控系统等。此外,该指南还提供了设计和优化这些应用的一些建议和技巧,帮助读者充分利用这些处理器的潜力。 综上所述,ARM Cortex-M3和Cortex-M4处理器权威指南是一本全面的技术手册,为读者提供了关于这些处理器的详尽信息。它涵盖了处理器的架构、性能特点、编程指南和实际应用等方面,是开发人员和研究人员的重要参考资料。 ### 回答2: 《ARM Cortex-M3和Cortex-M4处理器权威指南》是一本深入介绍ARM Cortex-M3和Cortex-M4处理器的权威指南。这本书详细介绍了这两款处理器的架构、特性和应用,对于工程师、开发者和学习者来说,都是一本非常重要和实用的参考书。 首先,该书详细解释了ARM Cortex-M3和Cortex-M4处理器的架构设计和功能,包括处理器的可靠性、性能优化和功耗管理等方面。读者可以深入了解这两款处理器的内部结构和工作原理,有助于在实际应用中充分发挥其优势。 另外,该书还介绍了使用Cortex-M3和Cortex-M4处理器进行嵌入式系统设计的一些最佳实践和技巧。这包括了基本的编程模型、中断处理、低功耗设计和调试方法等方面。读者可以学习到如何有效地开发和优化嵌入式系统,提高系统性能和稳定性。 此外,该书还提供了丰富的实际应用案例和示例代码,以帮助读者更好地理解和掌握Cortex-M3和Cortex-M4处理器的使用。这些案例涵盖了多个应用领域,如物联网、工业控制、医疗设备等,读者可以从中学习到如何将这两款处理器应用到实际项目中。 总之,《ARM Cortex-M3和Cortex-M4处理器权威指南》是一本涵盖了ARM Cortex-M3和Cortex-M4处理器的全面指南。无论是初学者还是有经验的开发者,都可以从中获得宝贵的知识和经验,提高在嵌入式系统设计和开发领域的能力。 ### 回答3: 《ARM Cortex-M3和Cortex-M4处理器权威指南》是一本讲述ARM Cortex-M3和Cortex-M4处理器的权威性指南。ARM Cortex-M系列处理器是一种低功耗、高性能处理器架构,被广泛应用于嵌入式系统。 该指南首先介绍了ARM Cortex-M系列处理器的基本架构和特点。它详细解释了这两个处理器的指令集、寄存器和内存管理单元的功能。读者可以了解不同寄存器的作用和寄存器级别的操作。 在介绍基本架构之后,指南详细描述了Cortex-M3和Cortex-M4处理器的核心特性和性能差异。读者将了解到Cortex-M4相较于Cortex-M3的新增功能,比如浮点运算单元(FPU)和DSP指令集扩展。这些功能使Cortex-M4更适合用于数字信号处理(DSP)和浮点运算密集型应用。 此外,指南还讨论了Cortex-M3和Cortex-M4的系统设计和软件开发。读者将了解到处理器的时钟和功耗管理、中断控制器的配置、外设接口和调试技术等方面的知识。同时,本指南还提供了开发工具和软件编程模型的指导,帮助读者更好地利用Cortex-M系列处理器进行嵌入式开发。 总之,《ARM Cortex-M3和Cortex-M4处理器权威指南》是一本全面指导读者了解和使用ARM Cortex-M3和Cortex-M4处理器的权威性参考书。无论是硬件工程师还是嵌入式开发人员,都可以从中获得宝贵的知识和指导,提升他们在嵌入式系统开发领域的技术水平。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕咚.萌西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值