Cortex-M移植

常用寄存器

PRIMASK寄存器
PRIMASK寄存器为1位宽的中断屏蔽寄存器。在置位时,它会阻止不可屏蔽中断(NMI)和HardFault异常之外的所有异常(包括中断)。实际上,它是将当前异常优先级提升为0,这就是可编程异常/中断的最高优先级。

FAULTMASK寄存器
FAULTMASK与PRIMASK相类似,但同时它能屏蔽HardFault异常,它实际上是将异常优先级提升到了-1。

程序状态寄存器(xPSR)
xPSR包含:

  • 应用PSR(APSR)
  • 执行PSR(EPSR)
  • 中断PSR(IPSR)

Cortex-M移植_第1张图片
GE在Cortex-M4等ARMv7E-M处理器中存在,在Cortex-M3处理器中则不可用。

  • N:负标志
  • Z:零标志
  • C:进位标志
  • V:溢出标志
  • Q:饱和标志(ARMv6-M中不存在)
  • GE[3:0]:大于或等于标志
  • ICI/IT:中断继续指令位
  • T:Thumb状态,总是1,清除此位会引起错误异常
  • 异常编号:表示处理器正在处理的异常

中断向量表
Cortex-M系列处理器的中断向量表位于0x00000000,但Cortex-M3/4系列提供了Vector table offset register(SCB_VTOR),所以,中断向量表的位置位于0x00000000 + SCB_VTOR。

异常相关指令

  • CPSIE I:使能中断(清除PRIMASK)
  • CPSID I:禁止中断(设置PRIMASK),NMI和HardFault不受影响
  • CPSIE F:使能中断(清除FAULTMASK)
  • CPSID F:禁止中断(设置FAULTMASK),NMI不受影响

移植过程

在嵌入式领域有多种不同CPU架构,例如Cortex-M、ARM920T、MIPS32、RISC-V等等。
为了使RT-Thread能够在不同CPU架构的芯片上运行,RT-Thread提供了一个libcpu抽象层来适配不同的CPU架构。

libcpu层向上对内核提供统一的接口,包括全局中断的开关,线程栈的初始化,上下文切换等。

RT-Thread的libcpu抽象层向下提供了一套统一的CPU架构移植接口,这部分接口包含了全局中断开关函数、线程上下文切换函数、时钟节拍的配置和中断函数、Cache等等内容。

你可能感兴趣的:(RT-Thread,单片机,嵌入式硬件,RTT,学习,RTOS)