ARM处理模式和部分处理指令

ARM 102浏览

1、先介绍ARM的处理模式(7种)

用户模式(User):ARM处理器正常的程序执行状态 

快速中断模式(FIQ):用于高速数据传输或通道处理 
外部中断模式(IRQ):用于通用的中断处理 
管理模式(Svc):操作系统使用的保护模式 
数据访问中止模式(Abort):数据或指令预取终止时进入该模式,用于虚拟存储及存储保护 
系统模式(System):运行具有特权的操作系统任务 
未定义指令中止模式(Undifined):当未定义指令运行时进入该模式,可用于支持硬件协处理器的软件仿真。

2、介绍基于ARM内核的微处理器

 1.它是由ARM公司设计。
 2.是微处理器中的核心部分,相当于人的大脑,控制着整个系统的运行。
 3.主要功能是实现程序的自动化执行,包括从哪个地址取指令,进行指令译码,指令执行,从哪个地址取待操作的数据,进行数据的数学运算或逻辑运算,将数据结果存储到哪个地址。
4.某些ARM内核还进行CACHE和MMU的管理。
5.唯一可以配置ARM内核的途径是CP15协处理器接口(JTAG调试口除外)。
6.在ARM内核的眼里,它看不到所有的外围设备,包括GPIO,UART,ADC,NAND FLASH,LCDC等许多的设备,在它眼里,数据和地址就是整个世界。所以别期待ARM内核知道当前在操作系统的哪个外围设备。
7.由ARM内核提供给外部的接口我们也可以知道内核在芯片中起的作用。

3、介绍外围设备和接口控制器

       外围设备和外围接口控制器是芯片设计厂家在ARM内核上集成的,它由芯片厂家根据自己芯片所面对的市场来集成需要的外围设备和接口,比如GPIO,UART,IIC,SPI,ADC.LCDC.SENSOR,NAND FLASH,DDR,H.263/H.264等等。
      芯片设计厂家如何分配和组织ARM内核提供的这4G的地址空间,完全取决于芯片厂家的习惯和方便,更何况加入了MMU后,将哪段地址分配给哪个外围设备或外围接口,就更加变得无关紧要了。

4、介绍外围设备和ARM内核连接的桥梁:

1. 寄存器,下面以GPIO来分析一下ARM内核是怎么通过寄存器来控制GPIO的:
       通常ARM内核通过如下几个寄存器来控制GPIO:第一个是方向寄存器(方向配置),第二个是数据寄存器,第三个是上拉下拉电阻配置寄存器。ARM内核通过方向寄存器来控制GPIO管脚的输入和输出;通过数据寄存器来输出高电平和低电平,或读取GPIO管脚的高低电平状态;通过上拉下拉配置寄存器来开启上拉下拉电阻。
       总结:寄存器一端连接ARM内核的总线(当然,有可能是间接连接),另一端连接外围控制逻辑,是ARM内核和外围的连接桥梁。采用寄存器控制外围的方式除了GPIO,还有UART,IIC,SPI,ADC.LCDC.SENSOR,NAND FLASH,H.263/H.264等其它很多外围控制器。
        2. 总线接口

5、介绍ARM汇编指令
格式: 
{} {S} {Rd}, {Rn}, {operand2} 
: 指令操作编码,如LDR,STR 
{} :指令执行的条件编码,如EQ,NE等 
{S} :决定指令的执行是否影响CPRS的值 
{Rd} :目标寄存器编码 
{Rn} :包括第一个源操作数的寄存器编码 
{operand2} 第二个操作数

6、跳转指令
跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法实现程序的流程的跳转 
1.使用专门的跳转指令 
2.直接向程序计数器PC写入跳转的地址值 
ARM汇编中共有四种跳转指令 
1.B跳转指令 B指令编码中的跳转地址值是相依当前PC的一个偏移量,经过汇编器计算得到跳转的绝对地址 
2.BL 带返回的跳转指令,BL指令在执行完跳转的同时将转移指令的下一条指令的地址复制到当前处理器模式下的链接地址LR中,一般用于子程序的调用和返回 
3.BLX带返回和状态切换的跳转指令 
4.BX带状态切换的跳转指令

7、数据处理指令
数据传送指令 
MOV 传送 MOV R1, R0 ;R1 = R0 
MVN 求反传送 MVN R1, R0 ;R1 = ~R0

CMP 比较 CMP R1, #100 ;R1-100—>CPSR 

CMN 负数比较 CMN R1, R0 ;R1+R0—->CPSR 
TST 测试 TST R1, #0xffe ;R1&0xffe–>CPSR 
TEQ 测试相等 TEQ R1, R0 ;R1^R2—–>CPSR

ADD 相加 ADD R0, R1, R2 ;R0 = R1+R2 

ADC 带进位相加 ADC R0, R1, R2 ;R0 = R1+R2+CPSR->C 
SUB 相减 SUB R0, R1, R2 ;R0 = R1 - R2 
RSB 反向相减 RSB R0, R1, R2 ;R0 = R2 - R1 
MUL 乘法 MUL R0,R1, R2 ;R0 = R1 * R2;

AND 与 AND R0, R0, #3 ;R0 = R0 & 3 
ORR 或 ORR R0, R0, #3 ;R0 = R0 | 3 
BIC 位清除 BIC R0, R0,#0xf0 ;R0 = R0 | 0xf0

LDR 加载 LDR R0, {R1,R2} ;将存储器地址为R1+R2的字数据读入寄存器R0 
LDR R0, {R1,R2}! ;将存储器地址为R1+R2的字数据读入寄存器R0并将新地址R1+R2写入R1 
STR R0, [R1], #8 ;将R0中的字数据写入R1+8为地址的存储器中

MSR 通用–>CPSR MSR CPSR, R0 ;传输R0的内容到CPSR寄存器 
MRS CPSR–>通用 MRS R0, CPSR ;传送CPSR的内容到R0寄存器