《arm嵌入式期末复习》由会员分享,可在线阅读,更多相关《arm嵌入式期末复习(46页珍藏版)》请在金锄头文库上搜索。
1、嵌入式系统与应用,何为嵌入式系统,嵌入式系统三要素 : 嵌入性:嵌入到对象体系中,有对象环境要求,如物理环境(小型)、电气/环境(可靠)、成本(价廉)等要求。 专用性:软、硬件按对象要求裁减。 计算机:实现对象的智能化功能 。,专用性强 低功耗、高可靠性、高稳定性 各学科结合的产物 实时性要求 具有较长的生命周期 软件固化在存储器芯片中 专门开发工具的支持,嵌入式系统的特点,硬件抽象层,嵌入式系统组成,应用软件,嵌入式操作系统,Linux RT-Linux Windows CE C/OS- Palm OS Vx Works等,嵌入式Linux,是最为流行的一款开放源代码的操作系统 资源丰富,而
2、且免费 内核小、效率高,更新速度快 支持多种操作平台,如ARM、PowerPC、MIPS等 提供了强大的应用程序开发环境,嵌入式系统的应用,嵌入式系统的应用按照市场领域划分,可以分为以下几类:消费电子 如移动电话,数码相机等通信网络工业控制机器人汽车电子军事国防医疗仪器,所有的电子设备都属于嵌入式设备?,RISC和CISC,CISC将被RISC所取代 ?,ARM处理器模式,ARM微处理器支持7种运行模式,分别为: 系统模式(sys) 用户模式(usr) 快速中断模式(fiq) 外部中断模式(irq) 管理模式(svc) 数据访问终止模式(abt) 未定义指令中止模式(und) 不同的工作模式下
3、,算术运算及逻辑运算等操作所使用的通用寄存器组不同,处理器模式,异常模式,除了系统和用户模式外 这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。 每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。,大端存储和小端存储,大端模式:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。 小端模式:较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址。,通用寄存器,通用寄存器用于保存数据或地址,可分成未分组寄存器、分组寄存器及程序计数器三种。,程序计数器,R13寄存器在ARM指令中常用作堆栈指针,又称为
4、SP R14寄存器可用作子程序连接寄存器或链接寄存器LR 当ARM9处理器执行带链接的分支指令BL时,R14中保存R15(程序计数器PC)的备份。 当发生中断或异常时,对应的分组寄存器R14_fiq、R14_irq、R14_svc、R14_abt、R14_und用于保存R15的返回值。,通用寄存器,程序状态寄存器,由于用户模式和系统模式不属于异常模式,它们没有SPSR。在这两种情况下访问SPSR,结果是未知的。,ARM微处理器:程序状态寄存器,置0表示执行32bit的ARM指令 置1表示执行16bit的Thumb指令,Negative,Zero,Carry,Overflow,IRQ中断的响应:
5、 置1:禁止响应 置0:允许响应,FIQ中断的响应: 置1:禁止响应 置0:允许响应,16,异常的优先级,当某时刻同时出现多个异常时,ARM处理器按优先级的高低顺序处理。,异常,17,ARM指令分类及格式,数据处理指令:数据传输指令,算术指令,逻辑指令,比较指令,乘法指令,前导零计数 程序状态访问指令:MRS和MSR 分支指令:B、BL和BX 访存指令:单数据访存指令,多数据访存指令,数据交换指令,18, S , , ,ARM数据处理指令,03:23,20,ARM指令寻址方式,寻址方式分类,寻址方式:就是处理器根据指令中给出的地址信息来寻找操作数物理地址的方式。ARM处理器具有9种基本寻址方式
6、。 1.寄存器寻址; 2.立即寻址; 3.寄存器移位寻址; 4.寄存器间接寻址; 5.基址寻址; 6.多寄存器寻址; 7.堆栈寻址; 8.块拷贝寻址; 9.相对寻址。,练习,指出下述各指令为何种寻址方式:,LDR R0,R1 ,4,STMIA R0!,R1,R2,R3,R4,STR R0,R1,BL NEXT,ADD R0,R0,0x3f,MOV R0,R1,LSL 5,基址变址寻址(后变址),立即(数)寻址,寄存器间接寻址,寄存器移位寻址,相对寻址,多寄存器寻址,数据传送指令,MOVcondS Rd,operand2,MOV 指令可完成从另一个寄存器、被移位的寄存器或将一个8位图立即数加载到
7、目的寄存器。,MOV指令举例如下:MOV R1,#0x10 ;R1=0x10 MOV R0,R1 ;R0=R1 MOV R3,R0,LSL #2 ;R3=R04MOV PC,LR ;PC=LR,子程序返回,算术运算指令,ADDcondS Rd, Rn, operand2,SUBcondS Rd, Rn, operand2,逻辑运算指令,BIC R1,R1,#0x0F ;将R1的低4位清零,其它位不变,比较指令CMP指令将寄存器Rn的值减去operand2的值,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。 应用示例:CMP R1,#10 ; R1
8、与10比较,设置相关标志位CMP R1,R2 ; R1与R2比较,设置相关标志位,比较指令,CMPcond Rn, operand2,注意:CMP指令与SUBS指令的区别在于CMP指令不保存运算结果。在进行两个数据的大小判断时,常用CMP指令及相应的条件码来操作。,26,程序状态访问指令,cpsr/spsr不是通用寄存器,不能使用mov指令来读写。 当需要修改cpsr/spsr的内容时,首先要读取它的值到一个通用寄存器,然后修改某些位,最后将数据写回到状态寄存器,即: 修改状态寄存器一般是通过“读取修改写回”三个步骤的操作来实现。 在ARM处理器中,只有mrs指令可以读取cpsr/spsr;只
9、有msr可以写cpsr/spsr。,(1),(2),(3),(4),应用示例1: ;子程序:使能FIQ中断 ENABLE_IRQMRS R0, CPSRBIC R0, R0,#0x40MSR CPSR_c,R0MOV PC,LR,应用示例2: ;子程序:禁能FIQ中断 DISABLE_IRQMRS R0, CPSRORR R0, R0,#0x40MSR CPSR_c,R0MOV PC,LR,1.将CPSR寄存器内容读出到R0;,2.修改对应于CPSR中的I控制位;,3.将修改后的值写回 CPSR寄存器的对应控制域;,4.返回上一层函数;,程序状态寄存器处理指令,28,注意: T控制位的修改问题
10、:程序中不能通过MSR指令,直接修改CPSR中的T控制位来实现ARM状态Thumb状态的切换,必须使用BX指令完成处理器状态的切换。,程序状态寄存器处理指令,03:23,29,零偏移。 如:LDR Rd,Rn 前索引偏移。 如:LDR Rd,Rn,#0x04! 后索引偏移。 如:LDR Rd,Rn,#0x04,LDR和STR字和无符号字节加载/存储指令,单寄存器操作指令,LDR R1, R2,#0x04!,前索引偏移,单寄存器操作指令,R2=1000H,(1000H)=0x35,(1004H)=0xA2执行指令R1? R2?,分支指令,03:23,31,【例3-2】 实现1+2+N。N EQU
11、 5 ; 常量的定义AREA Example,CODE,READONLY ; 定义段名属性等ENTRY ; 程序入口CODE32 ; ARM代码 START ; 行标定义LDR R0,=N ; R0赋值MOV R2,R0 ; R2充当计数器MOV R0,#0 ; R00MOV R1,#0 ; R10 LOOP ; 行标CMP R1,R2 ; 比较R1 R2BHI ADD_END ; 如果R1R2 跳转到 ADD_END; 分支的实现ADD R0,R0,R1 ; R0R0+R1ADD R1,R1,#1 ; R1R1+1B LOOP ; 无条件跳转至LOOP; 循环的实现 ADD_END ; 行标
12、定义B ADD_END ; 无条件跳转ADD_ENDEND ; 代码结束,ARM汇编语言程序设计举例,汇编语言与C语言的混合编程,如果汇编代码比较简单,则可以直接利用内嵌汇编的方式进行混合编程;如果汇编代码比较复杂,则可以将汇编程序和C程序分别以文件的形式加到一个工程里,通过ATPCS标准来完成汇编程序和C程序之间的调用。,参数的传递规则 参数不超过4个时,使用寄存器R0R3来进行参数传递 当参数超过4个时,可以使用数据栈来传递参数。 应尽可能使函数的参数控制在4个以下,ATPCS过程调用规范,35,NAND Flash和NOR Flash比较,NOR flash:读速度高,擦写速度低,容量小
13、,价格高。 NAND flash: 读速度不如Nor flash(NAND flash串行读写),擦写速度高,容量大,价格低。,2018/10/15,36,DMA传送过程,HOLD和HLDA用于DMA方式请求和响应,DMAC(DMA控制器)是DMA传送的核心电路。DMA传送过程如下 : I/O接口电路向DMA控制器发出DMA请求; DMA控制器向总线仲裁器发出总线请求; 总线仲裁器向DMA控制器回答总线应答信号; DMA控制器向I/O接口电路回答DMA应答信号; DMA传输开始,完毕引起中断。,RS-232C,RS-232C是由美国电子工业协会(EIA)于1969年制定的一种异步串行通信接口标
14、准 EIA标准规定了RS-232C串口电器规格,它是一套负逻辑定义: -3V-25V之间的电平表示逻辑“1”; 3V25V之间的电平表示逻辑“0”;,ULCON:线路控制寄存器,规定传输帧的格式,波特率产生,UART波特率分频系数寄存器(UBRDIV0,UBRDIV1和UBRDIV2 ):用于计算波特率的大小,计算公式如下: UBRDIVn = (int)(PCLK/(bps x 16) ) -1 例如:系统时钟为40MHz,当波特率为11520时, UBRDIVn = (int)(40000000/(115200 x 16) ) -1 = (int)(21.7) 1= 21 -1 = 20,
15、程序、进程,程序:是为了完成某种任务而设计的软件,比如vi是程序。 进程:一个进程是一个程序的一次执行的过程;程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合;进程是一个动态的概念,它是Linux系统的基本的调度单位。 一个程序可以对应多个进程,嵌入式Linux的组成,嵌入式Linux由以下三个部分组成为: Bootloader(引导加载器) 内核 根文件系统,存储结构的分配顺序,Bootloader概念,bootloader是操作系统内核运行前运行地一段小程序。 可以对硬件设备,如CPU、SDRAM、Flash、串口等进行初始化。 加载和运行内核程序。,占先式内核操作系统,在占先式内核中,更高优先级的任务一旦就绪,总能得到CPU的使用权。 优点:实时性好,优先级高的任务只要具备了运行的条件,或者说进入了就绪态,就可以立即(任务切换时间)运行。 缺点:如果任务之间抢占CPU控制权处理不好,会产生系统崩溃、死机等严重后果;调用不可重入型函数时,要满足互斥条件。 实时性:取决于任务(上下文)切换时间。,占先式内核,NFS-挂载共享目录,例:将宿主机NFS服务共享的目录/rootfs挂载到开发板的 /mnt目录下(假设宿主机的IP地址为192.168.0.1)# mount -t nfs 192.168.0.1: /rootfs /mnt,