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位指令,提供更高的性能。
Cortex-M3处理器支持两种工作模式,线程模式和处理模式。
● 在复位时处理器进入线程模式,异常返回时也会进入该模式。特权和用户(非特权)代码能够在线程模式下运行。
● 出现异常时处理器进入处理模式,在处理模式中,所有代码都是特权访问的。
● Cortex-M3处理器有两种工作状态。
● Thumb状态:这是16位和32位半字对齐的thumb 和thumb-2指令的正常执行状态。
● 调试状态:处理器停机调试时进入该状态。
Cortex-M3处理器代码可以是特权执行或非特权执行。非特权执行时对有些资源的访问受到限制或不允许访问。特权执行可以访问所有资源。处理模式始终是特权访问,线程模式可以是特权或非特权访问。
线程模式在复位之后为特权访问,但可通过MSR 指令清零CONTROL[0],将它配置为用户(非特权)访问。用户访问禁止:
● 部分指令的使用,例如设置FAULTMASK和PRIMASK的CPS指令。
● 对系统控制空间(SCS)的大部分寄存器的访问。
当线程模式从特权访问变为用户访问后,本身不能回到特权访问。只有处理操作能够改变线程模式的访问特权。这里需要注意的是,处理模式始终是特权访问的。
Cortex-M3处理器支持以下数据类型:
● 32位字。
● 16位半字。
● 8位字节。
一般来说,存储器系统应该支持所有的数据类型。尤其是要求在不破坏一个字中的相邻字节的情况下支持小于1个字(subword)的写操作。
Cortex-M3 处理器将存储器看做从 0 开始向上编号的字节的线性集合。例如:字节 0~3存放第一个被保存的字,字节4~7存放第二个被保存的字。
Cortex-M3处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始终使用小端格式。
● 在小端格式中,一个字中最低地址的字节为该字的最低有效字节,最高地址的字节为最高有效字节。存储器系统地址0的字节与数据线7-0相连。
● 在大端格式中,一个字中最低地址的字节为该字的最高有效字节,而最高地址的字节为最低有效字节。存储器系统地址0的字节与数据线31-24相连。
这里需要注意的是,小端格式是ARM Cortex-M3处理器默认的存储器格式。