21天学通Linux嵌入式开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.4 ARM编程模型

Cortex-M3处理器采用ARM v7-M架构。它包括所有的16位thumb指令集和基本的32位thumb-2指令集架构。Cortex-M3处理器不能执行ARM指令。

Thumb指令集是ARM指令集的子集,重新被编码为16位。它支持较高的代码密度,以及16位或小于16位的存储器数据总线系统。

Thumb-2在thumb指令集架构(ISA)上进行了大量的改进,它与thumb相比,代码密度更高,并且通过使用16/32位指令,提供更高的性能。

3.4.1 工作模式和工作状态

Cortex-M3处理器支持两种工作模式,线程模式和处理模式。

· 在复位时处理器进入线程模式,异常返回时也会进入该模式。特权和用户(非特权)代码能够在线程模式下运行。

· 出现异常时处理器进入处理模式,在处理模式中,所有代码都是特权访问的。

Cortex-M3处理器有两种工作状态。

· Thumb状态:这是16位和32位半字对齐的thumb和thumb-2指令的正常执行状态。

· 调试状态:处理器停机调试时进入该状态。

3.4.2 特权访问和用户访问

Cortex-M3处理器代码可以是特权执行或非特权执行。非特权执行时对有些资源的访问受到限制或不允许访问。特权执行可以访问所有资源。处理模式始终是特权访问,线程模式可以是特权或非特权访问。

线程模式在复位之后为特权访问,但可通过MSR指令清零CONTROL[0],将它配置为用户(非特权)访问。用户访问禁止:

· 部分指令的使用,例如设置FAULTMASK和PRIMASK的CPS指令。

· 对系统控制空间(SCS)的大部分寄存器的访问。

当线程模式从特权访问变为用户访问后,本身不能回到特权访问。只有处理操作能够改变线程模式的访问特权。这里需要注意的是,处理模式始终是特权访问的。

3.4.3 数据类型

Cortex-M3处理器支持以下数据类型:

· 32位字。

· 16位半字。

· 8位字节。

一般来说,存储器系统应该支持所有的数据类型。尤其是要求在不破坏一个字中的相邻字节的情况下支持小于1个字(subword)的写操作。

3.4.4 存储器格式

Cortex-M3 处理器将存储器看做从0 开始向上编号的字节的线性集合。例如:字节0~3存放第一个被保存的字,字节4~7存放第二个被保存的字。

Cortex-M3处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始终使用小端格式。

· 在小端格式中,一个字中最低地址的字节为该字的最低有效字节,最高地址的字节为最高有效字节。存储器系统地址0的字节与数据线7-0相连。

· 在大端格式中,一个字中最低地址的字节为该字的最高有效字节,而最高地址的字节为最低有效字节。存储器系统地址0的字节与数据线31-24相连。

这里需要注意的是,小端格式是ARM Cortex-M3处理器默认的存储器格式。