1、
ARM7TDMI处理器内核
内核采用ARM v4 T结构实现,具有ARM和Thumb两种操作状态,支持7种处理器模式:
用户(usr):程序正常工作模式
快中断(fiq):
中断(irq):用于通用中断
管理(svc):
中止(abt):
未定义(und):
系统(sys):用于支持操作系统的特权任务等
初用户和系统模式外,其他5种称为异常模式,除可通过程序切换进入外,还可有特定异常进入。每种模式都有附加的寄存器,下有说明。
2、
内部寄存器
共37个,包括31个通用32位寄存器:R0~R15、R13_svc~R14_svc、R13_abt~R14_abt、R13_und~R14_und、R13_irq~R14_irq、R8_fiq~R14_fiq。还包括6个状态寄存器:CPSR、SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq、SPSR_fiq。
这些寄存器的访问权有处理器状态和工作模式决定。
重点介绍:
R13:用作堆栈指针SP,用于异常保护,每个异常模式对应不同的R13分组。
R14:链接寄存器,R14对应的异常模式用于保存子程序返回地址或异常返回地址。
R15:程序计数器。
CPSR:程序状态寄存器,为个模式共享,但每种异常有自己的SPSR,用于异常保护。格式为NZCV_IFTM4M3M2M1M0。
3、 ARM指令
BL:跳转
ADDS:相加,会影响标志位
LDR/STR:加载存储
例:STR R1,[R0,#0x0C] ;将R1的数据保存到R0+0x0C的单元,R0不变。
DCD: 分配一片连续的字存储单元并用指定的数据初始化
LDM/STM:多寄存器加载/存储
SWP:寄存器和存储器数据交换
例:SWP R1,R1,[R0] ; 将R1内容与R0指向的存储单元的内容进行
交换。
BX:带状态切换的分支指令
例:ADR R0,THUMB_CODE+1
BX R0 ; 跳转到R0指向的地址并切换处理器状态
4、
复位和异常
复位ARM7TDMI内核将执行下列操作:
(1)、强制进入管理模式
(2)、置位CPSR的I和F位
(3)、清零CPSR的T位
(4)强制PC从地址0x00取址
5)返回到ARM状态并恢复执行
进入异常ARM7TDMI内核将:
(1)、在适当的LR中保存下一条指令地址
(2)、复制CPSR到SPSR
(3)、根据异常将CPSR模式强制设为某一值
(4)、强制PC从异常向量出取值
退出异常时:
(1)、将LR减去偏移量后移入PC
(2)、将SPSR复制到CPSR
(3)、清零入口置位的中断禁止标志。
异常分类:
(1)
快速中断请求,快中断有8个专用寄存器
(2)
中断请求
(3)
中止,指对存储器的访问不能完成
(4)
软件中断,SWI
(5)
未定义的指令
(6)
复位
各异常的优先级由高到低依次为:复位、数据中止、FIQ、IRQ、预取中止、未定义指令、SWI。ARM提供功能强大的向量中断控制器处理不同中断,分为:FIQ、向量IRQ和非向量IRQ,优先级依次降低。其中,每一种外围设备都有一条中断线连接到向量控制器,各中断源与VIC有一一对应的连接关系。中断源有:
看门狗定时器、定时器0、定时器1、UART0、UART1、PWM、IIC0、SPI0、RTC、GPIO、管脚连接模块、ADC0、IIC1、ADC1、SSP、DAC、USB和系统控制模块(包括PLL、功率等)。
5、 ARM7启动过程
芯片复位后,系统进入管理模式、ARM状态、PC(15)寄存器值为0,向量表代码必须位于或者映射到0x00000000处。之后开始初始化程序,包括各模式下的堆栈初始化、目标板的初始化(包括不同的存储器映射方式、PLL和系统时钟cclk和外设VPB时钟pclk等、存储器加速模快、向量中断初始化等),完了之后就跳转到main()运行。
文章评论(0条评论)
登录后参与讨论