第3章 Cortex-A8处理器编程
一.ARM编程简介
在嵌入式系统开发中,目前使用的主要编程语言是C和汇编。很多地方,例如开机时硬件系统的初始化,包括CPU状态的设定、中断的使能、主频的设定、以及RAM的控制参数及初始化等都使用汇编语言。汇编语言是和CPU的指令集紧密相连的,作为涉及底层的嵌入式系统开发,汇编语言编程不可或缺的重要方法。
二.Cortex-A8处理器模式和状态
1.处理器模式
2.处理器状态
Cortex-A8处理器有3种操作状态,这些状态由CPSR寄存器的T位和J位控制。
1) ARM状态:执行32位字对齐的ARM指令,T位和J位为0。
2) Thumb状态:执行16位或32位半字对齐的Thumb2指令,T位为1,J位为0。
3) ThumbEE状态:执行为动态产生目标而设计的16位或32位半字对齐的Thumb2指令集的变体。T位和J位为1。
处理器的操作状态可以在以下几种状态间转换:
1) ARM状态和Thumb状态之间转换
使用BL和BLX指令,并加载到PC。
2) Thumb状态和ThumbEE状态之间转换
使用ENTERX指令和LEAVEX指令。
异常会导致处理器进入ARM状态或Thumb状态。一般情况,当退出异常处理时,处理器会恢复原来的T位和J位的值。(异常只能在RAM或Thumb状态下完成)
三.Cortex-A8存储器组织
1.数据类型
Cortex-A8支持以下数据类型:
1)双字,64位;2)字,32位;3)半字,16位;4)字节,8位。
当这些数据类型为无符号数据时,为普通二进制格式,N位数据值代表一个非负整数(范围为0~2N-1);当这些数据类型为有符号数据时,为二进制补码格式,N位数据值代表一个整数(范围为-2N-1~2N-1-1)。
为了达到最好的性能,数据必须按照以下方式对齐:
以字为单位时,按4字节对齐;
以半字为单位时,按2字节对齐;
以字节为单位时,按1字节对齐。
Cortex-A8处理器支持混合大小端格式和非对齐数据访问。
2.存储格式
Cortex-A8处理器支持小端格式和字节不变的大端格式。此外,处理器还支持混合大小端格式(既有大端格式又有小端格式)和非对齐数据访问。对指令的读取,则总是以小端格式操作。
例如:对于0x12345678数据,大端模式和小端模式的存放如图所示。
3.寄存器组
1) Cortex-A8处理器总共有40个32位长的寄存器。
a) 33个通用寄存器。
b) 7个状态寄存器:
——1个CPSR(Current Programs Status Register,当前程序状态寄存器);