首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

《Cortex-M0权威指南》之体系结构---系统模型

《Cortex-M0权威指南》之体系结构---系统模型

本帖最后由 yuchengze 于 2016-12-27 12:26 编辑

Cortex-M0体系结构包括:系统模型、存储器映射、异常中断。这篇文章主要讲解Cortex-M0的系统模型。


操作模式和状态
如上图所示,Cortex-M0包括两种操作模式和两种状态
  • Thumb状态(Thumb state)
  • 处理模式
  • 线程模式
  • 调试状态
  处理器启动后处于Thumb状态,在这种状态下,处理器可以处于线程模式和处理模式,线程模式时执行普通代码,处理模式时执行异常处理。线程模式和处理模式的系统模型几乎一模一样,唯一的不同在于线程模式通过配置CONTROL特殊寄存器,可以使用进程指针。
  调试状态仅用于调试操作,暂停处理器内核后,执行不会再执行。在这种状态下,调试器可以读取甚至改变内核寄存器的值。
  处理器上电后默认处于Thumb状态的线程模式,执行普通代码。


寄存器和特殊寄存器

  数据的解析和控制器的处理过程中,需要处理器内核寄存器的参与。如果需要处理控制器中的数据,这些数据需要先加载到处理器内核的寄存器(寄存器组中的摸个),处理完成后,如果有需必要,它们还会被送到存储器中,这种方式被称为“加载-存储架构”(load-store architecture)。
  Cortex-M0有13个32位通用寄存器R0-R12,以及多个特殊寄存器。
  寄存器组包含16个32位寄存器,其中13个时通用的,其余三个具有特殊用途。



R0-R12 通用寄存器  R0-R12为32位通用寄存器,由于16位thumb指令集在空间上的限制,许多Thumb指令只能操作R0-R7,它们被称为低寄存器,而想MOV之类的一些指令则可以使用全部的寄存器。R0-R12寄存器的初始化值未定义。


R13,栈指针(SP)  R13为栈指针,对栈空间进行存取操作(通过PUSH和POP指令),Cortex-M0在不同的物理地址上有两个栈指针,一个为主栈指针(MSP),也被称为SP_main,一个指针称为进程栈指针(PSP),也为称为SP_process,只能用在线程模式。可以通过CONTROL寄存器,选择使用那个栈指针。
  在ARM处理器中,由于寄存器是32位的,所以PUSH和POP指令永远是32位操作,而且存取地址是32位字对齐(32位对齐)。在处理器上电过程中,中断向量表的头4字节会被去除(中断向量表在0x000000000地址),然后填充到MSP,作为MSP的初始值,PSP的初始值为定义。
  一般使用操作系统是PSP进程栈指针才会被使用,这是因为操作系统内核的栈空间和线程级的应用程序的栈空间是相互独立的。
返回列表