ARM初识(一)

来源:互联网 发布:网络教育机构 编辑:程序博客网 时间:2024/06/07 20:49

 【1】ARM公司成立于1990年11月,前身为 Acorn计算机公司,主要设计ARM系列RISC处理器内核。

          ARM公司不生产芯片,另外也提供基于ARM架构的开发设计技术


【2】ARM芯片的分类

        cortex_A系列:主要用于多媒体功能-----手机,平板
        cortex_R系列:主要用于实时系统的研发----军工(导弹的发射),汽车电子
        cortex_M系列:主要用作微控制器(MCU)---stm32


【3】工作模式

ARM 有7个基本工作模式:
用户模式(usr)                     User : 非特权模式,大部分任务执行在这种模式
快中断模式(fiq)                  FIQ :   当一个高优先级(fast) 中断产生时将会进入这种模式
中断模式(irq)                     IRQ :   当一个普通外部(normal) 中断产生时将会进入这种模式
管理模式(svc)                    Supervisor :当复位或软中断指令执行时将会进入这种模式
数据访问终止模式(abt)      Abort : 当存取异常时将会进入这种模式
未定义指令终止模式(und)  Undef : 当执行未定义指令时会进入这种模式
系统模式(sys)                    System : 使用和User模式相同寄存器集的特权模式
Cortex-A特有模式:
Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;也是一种特权模式
除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问(特权模式可以访问任何资源)。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式(只能依靠触发异常进入,由CPU自动切换,不能人为的进入)。
用户模式和系统模式: 这两种模式都不能由异常进入(没有异常源),而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
            用户模式和系统模式之外的5种模式称为异常模式。ARM处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。


【4】寄存器

ARM 有37个32-Bits长的寄存器.
1 个用作PC( program counter)
1个用作CPSR(current program status register)
5个用作SPSR(saved program status registers)
30 个通用寄存器   


【5】程序计数器 PC

为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址。程序计数器(PC )正是起到这种作用,所以通常又称之为“指令计数器”。CPU总是按照PC的指向对指令序列进行取指、译码和执行,也就是说,最终是PC 决定了程序运行流向。故而,程序计数器(PC )属于特别功能寄存器范畴,不能自由地用于存储其他运算数据。
 在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU  按照 PC的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC  的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。
ARM 处理器中使用R15 作为PC,它总是指向取指单元,并且ARM 处理器中只有一个PC 寄存器,被各模式共用。R15 有32 位宽度(R15[31:0],表示R15 的‘第31位’到‘第0位'),ARM 处理器可以直接寻址4GB 的地址空间(2^32 = 4G )。
当处理器执行在ARM状态:
所有指令 32 bits 宽
所有指令必须 word 对齐
所以 pc值由bits [31:2]决定, bits [1:0] 未定义 (所以指令不能halfword / byte对齐).
当处理器执行在Thumb状态:
所有指令 16 bits 宽
所有指令必须 halfword 对齐
所以 pc值由bits [31:1]决定, bits [0] 未定义 (所以指令不能 byte对齐).


备注:什么是字(word)对齐什么是半字(halfword)对齐

存储器是计算机中用于记忆数据信息的电子装置,它记忆“高/低”电平记忆“1/0”。能记忆1 位“1/0”数据的电子单元,称之为存储元,计算机中的存储器通常将每8个这样的存储元组成一个单元,称之为字节,字节是处理器访问存储器的最小单位。ARM处理器对存储器空间的访问分辨率以字节为最小单位;ARM 处理器还支持 16bit 数据(2 字节)的存储器访问和 32bit数据(4 子节)的存储器访问。在ARM 中将32 位的数据称之为‘字’,将 16 位的数据称之为‘半字’。
       ARM 处理器在对于“字”/ “半字”数据进行访问时,对数据的存储格式是有要求的。要求被访问的“半字”必须存放在存储器紧邻的两个字节单元,并且首字节地址必须能被2整除,这样存储的 16bit 数据称为 ‘半字对齐’存储数据,16bit 数据这样的存储方式称为 ‘半字对齐’存储。类似的,ARM 处理器在进“字”数据访问时,要求被访问的“字”必须 存放在存储器紧邻的4 个字节单元,并且首字节地址必须能被4 整除,这样存储的32bit 数 据称为‘字对齐’存储数据,32bit 数据这样的存储方式称为‘字对齐’存储。


【6】三级流水线

流水线使用3个阶段,因此指令分3个阶段执行。
⑴ 取指从存储器装载一条指令
⑵ 译码识别将要被执行的指令
⑶ 执行处理指令并将结果写会寄存器
处理时实际是这样的:ARM正在执行第1条指令的同时对第2条指令进行译码,并将第3条指令从存储器中取出。
所以,三级流水线只有在取第4条指令时,第1条指令才算完成执行。
无论处理器处于何种状态,程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或者正在“译码”的指令。

人们一般会习惯性的将正在执行的指令作为参考点,即当前第1条指令。所以,PC总是指向第3条指令,或者说PC总是指向当前正在执行的指令地址再加2条指令的地址。


【7】程序状态寄存器

CPSR:保存ALU当前操作信息、控制允许和禁止中断、设置处理器操作模式

高四位:条件位

31 N:负数标志位--当ALU的运算结果位负数时,N=1,否则N=0

30 Z:零标志位---当ALU的运算结果为零时,Z=1,否则Z=0

29 C:进借位 --- ALU的操作为加法运算时,当产生进位,C = 1 ,否则C=0

ALU的操作为减法运算时,当产生借位,C = 0,否则C = 1

28 V:溢出位 ---ALU的运算结果产生溢出时,V = 1 ,否则V = 0。

低八位:

7 I:IRQ中断禁止位---当I = 1时,禁止所有的IRQ中断,当I = 0时,打开所有的IRQ中断

6 F:FIQ中断禁止位---当F = 1时,禁止所有的FIQ中断,当F = 0时,打开所有的FRQ中断

5 T:处理器状态位---当T = 1时,处理器位于Thumb态,当T = 0时,处理器位于ARM态

[4:0]模式位:

10000-usr模式 10010-IRQ模式 10011-SVC模式  11111-SYS模式

10001-FIQ模式 10110-monitor模式 10111-abort模式 11011-undef模式

CPSR中【31:24】条件域F表示  【23:16】状态域S表示  【15:8】预留域X表示  【8:0】控制域C表示

CPSR_F 条件域 CPSR_S状态域 CPSR_X预留域 CPSR_C控制域


【8】异常处理

当异常产生时, ARM core:
拷贝 CPSR 到 SPSR_<mode>
设置适当的 CPSR 位:                                 
改变处理器状态进入 ARM 态
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断 (如果需要)
保存返回地址到 LR_<mode>
设置 PC 为相应的异常向量
返回时, 异常处理需要:
从 SPSR_<mode>恢复CPSR
从LR_<mode>恢复PC 
Note:这些操作只能在 ARM 态执行


备注:异常和中断的区别

中断(Interruption),也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成,希望处理机能够向设备发下一个输入 / 输出请求,同时让完成输入/输出后的程序继续运行。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前程序运行无关的事件,即它们与当前处理机运行的程序无关。
异常(Exception),也称内中断、例外或陷入(Trap),指源自CPU执行指令内部的事件,如程序的非法操作码、 地址越界、算术溢出、虚存系统的缺页以及专门的陷入指令等引起的事件。对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现应立即处理。                                


0 0