嵌入式系统概论
嵌入式系统的定义:
- 以应用为中心
- 以计算机技术为基础
- 软/硬件可裁剪
- 满足应用系统对功能、可靠性、成本、体积和功耗的要求
与通用计算机相比,嵌入式系统具有一下重要特征:
- 通常是面向特定应用的
- 软硬件都必须高效率的设计,满足功耗、可靠性、功能的要求
- 实时操作系统支持
- 嵌入式系统的与具体应用有机结合在一起
- 有专门的开发工具支持
与一般操作系统相比,嵌入式系统的的特点:
- 强稳定性,弱交互性
- 较强的实时性
- 可伸缩性
- 外围硬件接口的统一性
根据响应时间不同,嵌入式系统可分为:
- 强实时嵌入式操作系统
- 一般实时嵌入式操作系统
- 弱实时操作系统
嵌入式系统的组成:
- 微处理器
- 外围硬件设备
- 嵌入式操作系统
- 用户应用软件
ARM体系结构
ARM9的五级流水线
- 取指:从存储器中取出指令(fetch),并将其放入指令流水线
- 译码:对指令进行译码(dec)
- 执行:执行运算ALU(exe)
- 访存(缓冲/数据):如果需要,则访问数据存储器(acc mem);否则ALU的结果只是简单地缓冲1个时钟周期,以便所有的指令具有同样的流水线程
- 回写:将指令产生的结果回写到寄存器(wtbk res),包括任何从存储器中读取的数据
AMBA总线接口:
- AHB:用于连接高性能系统模块
- ASB:用于连接高性能系统模块,他支持突发数据传输模式
- APB:一个简单接口,支持低性能的外围接口
ARM9工作模式:
ARM9TDMI处理器核共支持以下7种工作模式:
- 用户模式(usr):ARM处理器正常执行程序时的处理
- 快速中断模式(fiq):用于高速数据传输或通道处理
- 外部中断模式(irp):用于通用的中断处理
- 管理模式(svc):操作系统使用的保护模式
- 指令/数据访问终止模式(abt):当数据或指令预取终止时进入该模式。可用于虚拟存储及存储保护
- 系统模式(sys):运行具有特权的操作系统任务时的模式
- 未定义指令终止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真
除用户模式外,其余6种模式称为非用户模式或特权模式;
除用户模式和系统模式外,其余5种模式称为异常模式;
大端存储和小端存储
- 大端存储:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。
- 小端存储:小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。
为简单起见,本文使用OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。
I/O端口的访问方式:
- 端口的地址和存储器统一编址(存储器映射方式)
优点:对I/O端口设备的访问是使用访问存储器的指令,这不仅使访问I/O端口可实现输入/输出操作,而且还可以对端口内容进行算术逻辑运算、移位等操作;另外,它能给I/O端口较大的编址空间,这对大型控制系统及数据通信是很有意义的
缺点:I/O端口占用了存储器的地址空间,使存储器的容量变小 - I/O端口地址与存储器分开独立编址(I/O映射(独立编址))
优点:I/O端口地址不占用存储器空间;使用专门的I/O指令对I/O端口进行操作;由于专门I/O指令与存储器访问指令助记符有明显的区别,使得1/O操作和存储器操作层次清晰,程序可读性强。
内部存储器:
ARM9处理器内部有37个32位寄存器,分为通用寄存器和状态寄存器两种;
程序代码运行是涉及的工作寄存器组是由ARM9处理器的工作模式确定的;
1.通用寄存器
- 未分组寄存器R0~R7
未分组寄存器包括RO~R7,在所有工作模式下﹐它们在物理上是同一个寄存器。也就是说,不管在哪种工作模式下,若访问R0寄存器,访问到的是同一个32位的物理寄存器Ro;若访问R1寄存器,访问到的是同一个32位的物理寄存器R1;以此类推。由于不同的处理器工作模式均使用相同的未分组寄存器,可能会造成寄存器中数据的破坏 - 分组寄存器R8~R14
分组寄存器包括R8~ R14。对于分组寄存器,它们每次所访问的物理寄存器与处理器当前的工作模式有关,如图2.5.所示。对于R8~R12寄存器,每个寄存器对应两个不同的物理寄存器。当使用fiq模式时,访问寄存器R8_fiq ~R12_fiq;当使用fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr
R13寄存器在ARM指令中常用作堆栈指针,又称为SP(Stack Pointer)
R14寄存器可用作子程序链接寄存器(Subroutine Link Register)或链接寄存器LR(Link Register) - 程序计数器R15
R15寄存器的用途是程序计数器(PC),用于控制程序中指令的执行顺序
2.程序状态寄存器
ARM9体系结构包含一个当前程序状态寄存器CPSR(Current Program StatusRegister)和5个备份的程序状态寄存器SPSR (Saved Program Status Register),CPSR又称为R16;
- 条件码标志
CPSR寄存器的高4位是N 、Z,C、V(Negative、Zero.Carry、Overflow),称为条件码标志位
- 控制位
CPSR寄存器的低8位是IF、T和 M[4:0],称为控制位。当发生异常时,这些位可以被改变;当处理器运行在特权模式时,这些位也可以由程序修改。 - 中断禁止位.:包括I和F,用来禁止或允许IRQ和FIQ两类中断。当I=1时,表示禁止IRQ中断;I=0时,表示允许IRQ中断。当F=1时,表示禁止FIQ中断;F=0时,表示允许 FIQ中断。
- T标志位.:标志位用于标识/设置处理器的工作状态。对于ARM 体系结构v4及以上版本的T系列处理器,当T=1时,表示程序运行于 Thumb 状态;当T=0时,表示程序运行于 ARM状态。ARM 指令集和 Thumb指令集均有切换处理器状态的指令,这些指令通过修改T位的值为1或0来实现两种工作状态之间的切换,但 ARM处理器在开始执行代码时,应该处于ARM状态。
- 工作模式位:工作模式位(M[4:0])用于标识或设置处理器的工作模式。M4,M3,M2,M1,M0决定了处理器的工作模式,具体含义如表所列。需要强调的是,表2.3中未列出的模式位的组合是不可用的
- 保留位
CPSR寄存器中的其余位是保留位,当改变CPSR 中的条件码标志位或者控制位时,保留位不需要被改变,在程序中也不要使用保留位来存储数据。
ARM9异常
异常的类型及向量地址
- (1)复位异常
当系统上电或按下复位按键时,ARM9处理器会收到一个复位信号。当处理器收到复位信号后,产生复位异常,中断执行当前指令,并在禁止中断的管理模式下,从地址0x00000000 或oxFFFFO000 开始执行程序。 - (2)未定义指令异常
当ARM9处理器执行未定义的指令时,会产生未定义指令异常,可分为两种情况:
1、当处理器在执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,会出现未定义指令异常。利用未定义指令异常,可以在没有设计硬件协处理器的系统上,对协处理器的功能进行软件仿真。
2、试图执行未定义的指令,也会出现未定义指令异常。
未定义指令异常结束时,将 R14 - und中的值赋给PC,并将SPSR – und中的值赋给 CPSR,处理器即返回到未定义指令的下一一条指令继续执行。 - (3)软件中断异常
处理器执行软件中断指令 SWI将产生软件中断异常,处理器进入管理模式
异常的优先级
ARM指令系统
ARM9具有32位ARM指令和16位Thumb指令
ARM指令分类及格式
ARM指令可以分为以下6类:
-
数据处理指令:数据传输指令、算数指令、逻辑指令、比较指令、乘法指令和前导零计数
-
程序状态访问指令:MRS和MSR
-
分支指令:B、BL和BX
-
访存指令:单数据访存指令、多数据访存指令和数据交换指令
-
异常产生指令:SWI和BKPT
-
协处理指令:CDP、LDC、STC、MCR、MRC
-
opcode:指令操作符编码
-
cond:指令执行条件编码
-
S:指令的操作是否影响CPSR的值
-
Rn:包含第一个操作数的寄存器编码
-
Rd:目标寄存器编码
-
Shifter operand:第二个操作数
-
x:x=1表示第二位操作数是立即数寻址;x=0表示第二位操作数是寄存器寻址
ARM指令寻址方式:
-
寄存器寻址
-
立即数寻址
-
寄存器移位寻址(移位的位数可以用立即数或寄存器表示)
(1)算术右移ASR
(2)逻辑左移LSL
(3)逻辑右移LSR
(4)循环右移ROR
(5)扩展的循环右移RRX -
寄存器间接寻址
-
变址寻址
(1)前变址方式
(2)自动变址方式
(3)后变址方式 -
多寄存器寻址
-
堆栈寻址
-
块复制寻址
-
相对寻址
PC的值=当前执行地址+8(ARM)/4(Thumb)
常见ARM指令
-
数据处理指令
(1)数据传送指令
(2)算数运算指令
(3)逻辑运算指令
(4)比较指令
(5)乘法指令:MUL乘法指令;MLA乘加指令 -
程序状态访问指令
(1)读取状态寄存器指令
(2)写状态寄存器指令 -
分支指令
(1)转移指令
(2)带链接的转移指令
(3)带状态切换的转移指令 -
访问指令
(1)单数据访存指令STR、LDRH、LDRSB、LDRSH
(2)多数据访存指令LDM
(3)数据交换操作指令 -
异常指令(SWI主要)
(1)软件中断指令SWI
(2)断点指令BKPI
(3)前导0计数指令 -
协处理器指令
(1)协处理器数据处理指令
(2)协处理器数据存取指令
(3)ARM存储器与协处理器数据传送指令
ARM汇编伪指令与伪操作
常见ARM汇编指令
- ADR
- ADRL
- LDR
- NOP
常见ARM汇编伪操作
- 符合定义伪操作
GBLA、GBLL和GBLS:声明全局变量
LCLA、LCLL和LCLS:声明局部变量
SETA、SETL、SETS:给变量赋值
RLIST:给通用寄存器列表定义名称 - 数据定义伪操作
LTORG:声明一个数据缓冲池的开始
SPACE 用于分配一片连续的存储单元,并用0初始化
DCB 用于分配一片连续的字节存储单元并用指定的数据初始化
DCW(DCWU) 用于分配一片连续的半字存储单元并用指定的数据初始化 - 汇编控制常用伪操作
IF、ELSE、ENDIF:有条件选择汇编
WHILE、WEND:有条件循环汇编
MACRO、MEND、MEXIT:宏定义汇编 - 其他常用伪操作
CODE16和CODE32:16:16位的Thumb指令;32:32位的ARM指令
ARM汇编基础
ARM程序常用文件格式
源程序文件 | 文件扩展名 | 说明 |
---|---|---|
汇编程序文件 | *.s | 用ARM汇编语言编写的ARM程序或Thumb程序 |
C程序文件 | *.c | 用C语言编写的程序代码 |
头文件 | *.h | 为简化源程序,通常将程序中经常适用的常量名、宏定义、数据结构定义等单独存放在一个文件中 |
ARM预定义变量:
- Ro-R15和r0-r15
- a1-a4(参数,结果或者临时寄存器,与r0-r3同意)
- v1-v8(变量寄存器,与r4-r11同意)
- sb和SB(静态基址寄存器,与r9同意)
- sl和SL(堆栈限制寄存器,与r10同意)
- fp和FP(帧指针,与r11同意)
- ip和IP(过程调用中间临时寄存器,与r12同意)
- sp和SP(堆栈指针,与r13同意)
- lr和LR(连接寄存器,与r14同意)
- pc和PC(程序计数器,与r15同意)
- cpsr和CPSR(程序状态寄存器)
- spsr和SPSR(程序状态寄存器)
- f0-f7和F0-F7(FPA寄存器)
- s0-s31和S0-S31(VFP单精度寄存器)
- d0-d15和D0-D15(VFP双精度寄存器)
- p0-p15(协处理器0-15)
- c0-c15(协处理器寄存器0-15)
C语言与汇编混合编程
- C程序嵌入汇编程序
- 交互规则
- C程序调用汇编程序
- 汇编程序调用C程序
时钟及电源管理
主时钟来源于外部晶振(XTlpll)或外部时钟(EXT-CLK)
时钟发生器包含一个连接外部晶振的振荡器,两个产生高频时钟的锁相环(PLLs)
两个时钟源依据模式控制引脚(OM3和OM2)的不同组合来选择,在nRESET的上升沿查询OM3和OM2引脚状态并锁到OM[3:2]
S3C2410电源管理模式
- 正常模式
- 空闲模式
- 低速模式
- 休眠模式
SRAM和DRAM
SRAM和DRAM被称为随机存储器,其保存信息在通电情况下是不会丢失的,主要用来存储正在运行的程序和数据
- SRAM读/写速度比DRAM读/写速度快
- SRAM比DRAM的功耗大
- DRAM的集成度可以做得更高,其存储器容量也可以更大
- DRAM需要周期性的刷新,而SRAM不需要
NOR Flash和NAND Flash
比较特点:
- NOR的读速度比NAND稍快一些
- NAND的写入速度比NOR快很多
- NAND的4ms擦除速度远比NOR的5s快
- 大多数写入操作需要先进行擦除操作
- NAND的擦除单元更小,相应的擦除电路更少
存储器接口方式
- SRAM型的全地址/数据总线接口
- DRAM型动态存储器接口
- 串行存储器接口
存储管理单元(MMU)
主要用来完成虚实地址之间的转换
MMU实现的主要功能有:
- 将主存地址从虚拟存储空间映射到物理空间
- 存储器访问权限控制
- 设置虚拟存储空间的缓冲特性等
定时器工作原理
主要用作定时功能或计数功能
当定时器输入条件满足计时要求时开始计时,设定值寄存器存储设定时间值不变,当前值寄存器存储当前时间值随时间发生变化,一旦当前时间值增加到与设定时间值相同,定时器发生动作,常开触点接通而常闭触电断开,并通过程序作用于被控制对象,以达到控制时间的目的
DMA
DMA方式与中断方式传输数据比较特点:
- 中断方式下,CPU需要执行多条指令,占用一定的时间;而DMA传送1字节只占用CPU的一个总线周期,占用CPU的时间少
- DMA的响应速度比中断快
- 对于快速的I/O设备,中断方式传输速度已经无法满足要求
DMA传送过程
- 申请阶段
- 响应阶段
- 数据传送阶段
- 传送结束阶段
DMA方式传送的工作过程
- 外设可通过baiDMA控制器向CPU发出DMA请求
- CPU响应DMA请求,系统转变为DMA工作方式,并把总线控制权交给DMA控制器
- 由DMA控制器发送存储器地址,并决定传送数据块的长度
- 执行DMA传送
- DMA操作结束,并把总线控制权交还CPU
S3C2410 DMA
有4个独立通道的DMA控制器处理情况:
- 源设备和目的设备都在内部系统总线上
- 源设备和目的设备都在外部系统总线上
- 源设备在内部系统总线上,目的设备在外部总线上
- 源设备在外部系统总线上,目的设备在内部总线上