STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记二(1):Cortex-M3处理器程序模型

本节介绍Cortex-M3程序模型。除了各个核心寄存器描述之外,还包括关于程序执行和堆栈的处理器模式和特权级别的信息。

处理器模式:      线程模式:用于执行应用软件。

                             处理模式:用于处理异常,当执行完异常处理时,返回线程模式。

软件执行的特权级别:

                             无特权级别

                             特权级别

在线程模式,控制寄存器控制软件执行是在特权级别还是无特权级别;在处理模式,软件执行在特权级别。只有特权级别软件可以写控制寄存器,改变在线程模式下软件执行的特权级别。非特别级别软件可以使用管理程序调用转移控制到特权级别软件。

处理器使用一个完全下降的栈。这意味着栈指针指向在栈内存中的最有一个堆放的条目。当处理器向栈压入一个新的条目时,首先减小栈指针然后写入条目到新的内存地址。处理器通过独立的栈指针复制执行两个栈,主栈和进程栈。

在线程模式,控制寄存器控制处理使用主栈还是进程栈;在处理模式,处理器一直使用主栈。


核心寄存器如下:



通用目的寄存器:R0-R12是用于数据操作的32位通用目的寄存器。

栈指针寄存器:栈指针是寄存器R13.在线程模式,控制寄存器的bit[1]表明栈指针用于主栈指针(复位值,复位时,处理器从地址0X00000000转载主栈指针的值)或者进程栈指针。

链接指针:链接指针是寄存器R14。它存储子程序、函数调用、异常的返回信息。在复位时,处理器转载链接寄存器的值为0xFFFFFFFF。

程序计数器:程序计数器是寄存器R15。它包含了目前程序地址。因为指令获取必须半字对齐,Bit[0]总是0。在复位时,用地址为0x00000004的复位向量装载程序计数器的值。

程序状态寄存器:程序状态寄存器包含:应用程序状态寄存器(APSR),中断程序状态寄存器(IPSR),异常程序状态寄存器(EPSR)。这些寄存器在32位程序状态寄存器中占有相互互斥的位段。



可以独立或者两三个组合的访问这些寄存器。


       应用程序状态寄存器包含了从前一个执行执行的条件标志的状态。


中断程序状态寄存器包含了当前中断服务例程的异常类型编号。


异常程序状态寄存器包含Thumb状态位,异常状态位。用于如果-然后指令或中断-继续指令

尝试通过应用程序使用指令读取异常程序标志位寄存器返回0,尝试通过应用程序用指令写异常标志寄存器被忽略。错误处理函数可以检查异常在栈中的程序标志寄存器表明有故障的操作。

       中断-继续指令:当在执行某些指令时中断发生,处理器首先停止加载或暂时存储多个指令操作,存储在多重操作中的下一个寄存器操作数至异常程序状态寄存器位。在中断服务后,处理器返回异常程序状态寄存器位指向的寄存器,恢复执行。当异常程序状态寄存器保持中断-继续指令执行状态,bits[26:25,11:10] 为0。

       如果-然后块: 如果-然后块 在一个16位的如果-然后指令后包含高达4个指令。在块中的每一个指令是有条件的。说明的条件可以完全相同,也可能有些与其他条款相反。

       异常屏蔽寄存器 处理器可以失能异常处理。失能异常在那些它们可能影响事件要求严格任务的场合。

       优先级屏蔽寄存器优先级屏蔽寄存器阻止所有可配置优先级的异常激活。


故障屏蔽寄存器 故障屏蔽寄存器阻止除了非屏蔽中断外的所有异常的激活。


处理器清除错误屏蔽寄存器在离开除了非屏蔽中断之外的异常处理函数中。

       基本优先级屏蔽寄存器基本优先级屏蔽寄存器定义了异常处理的最小优先级。当基本优先级屏蔽寄存器被设为一个非零值时,它阻止等于和小于基本优先级的优先级别的异常激活。

控制寄存器控制使用的栈和处理器在线程模式下软件执行的优先级级别。




处理模式下,处理器使用主栈,所以处理器忽略在处理模式下明确的对控制寄存器有效栈指针位写。异常进入和返回机制更新控制寄存器。

       在一个操作系统环境中,建议线程跑在线程模式下使用进程栈,内核和异常程序使用主栈。

默认的,线程模式下使用主栈,为了切换在线程模式的栈指针位进程栈指针,使用MSR指令设置有效栈指针位为1。

当改变了栈指针,软件必须迅速使用ISB指令在MSR指令后,它确保在ISB指令后执行的指令使用新的栈指针。

Cortex-M3处理器支持中断和系统异常。处理器和嵌套向量中断控制器优先考虑和处理所有异常。一个异常改变软件控制的正常流。处理器采用处理模式处理除了复位的所有异常。

嵌套向量中断控制器寄存器控制中断处理。

处理器支持的数据类型: 32-位字;16-位 半字;8-位 字节。。支持64位数据传输指令。以小端字节序方式管理所有的数据访问(数据内存,指令内存,私有外设总线)。

Cortex microcontrollersoftware interface standard(CMSIS)

Cortex微控制器软件接口标准定义了:

        访问外设寄存器,定义异常向量 共同的方法

        核心外设仅存器,核心异常向量 的名字

        一个为了实时操作系统内核的独立于设备的接口,包括一个调试通道。

Cortex微控制器软件接口标准包含用于Cortex-M3处理器核心外设的地址定义和数据结构。它也包含了一些可选的包含TCP/IP栈和flash文件系统的中间件组件接口。

Cortex微控制器软件接口标准通过使模板代码的重用和由各种各样中间件供应商提供的顺从CMSIS软件组件组合,简化了软件开发。软件供应商可以扩张CMSIS,包含他们的外设定义和那些外设的访问函数。

这个文档包含了CMSIS定义的寄存器名字,和处理处理器核心和核心外设的CMSIS函数的简短描述。文档使用的寄存器缩写名由CIMSIS定义。在少数情况下,他们不同于使用在其他文档中架构缩写名词。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值