嵌入式系统与应用何为嵌入式系统•嵌入式系统三要素:–嵌入性:嵌入到对象体系中,有对象环境要求,如物理环境(小型)、电气/环境(可靠)、成本(价廉)等要求。–专用性:软、硬件按对象要求裁减。–计算机:实现对象的智能化功能。专用性强低功耗、高可靠性、高稳定性各学科结合的产物实时性要求具有较长的生命周期软件固化在存储器芯片中专门开发工具的支持嵌入式系统的特点硬件抽象层嵌入式系统组成应用软件嵌入式操作系统•Linux•RT-Linux•WindowsCE•μC/OS-Ⅱ•PalmOS•VxWorks等嵌入式Linux•是最为流行的一款开放源代码的操作系统•资源丰富,而且免费•内核小、效率高,更新速度快•支持多种操作平台,如ARM、PowerPC、MIPS等•提供了强大的应用程序开发环境嵌入式系统的应用嵌入式系统的应用按照市场领域划分,可以分为以下几类:消费电子如移动电话,数码相机等通信网络工业控制机器人汽车电子军事国防医疗仪器所有的电子设备都属于嵌入式设备?RISC和CISC指标RISCCISC指令集指令长度固定指令长度不固定寻址方式简单多种灵活寻址方式寄存器更多通用寄存器用于特定目的的专用寄存器Load/Store结构对内存的访问只能通过Load/Store指令来实现处理器能够直接处理存储器中的数据。CISC将被RISC所取代?ARM处理器模式ARM微处理器支持7种运行模式,分别为:系统模式(sys)用户模式(usr)快速中断模式(fiq)外部中断模式(irq)管理模式(svc)数据访问终止模式(abt)未定义指令中止模式(und)•不同的工作模式下,算术运算及逻辑运算等操作所使用的通用寄存器组不同处理器模式•异常模式未定义(und)中止(abt)管理(svc)中断(irq)快中断(fiq)除了系统和用户模式外这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。大端存储和小端存储大端模式:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。小端模式:较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址。通用寄存器•通用寄存器用于保存数据或地址,可分成未分组寄存器、分组寄存器及程序计数器三种。未分组寄存器分组寄存器程序计数器R13寄存器在ARM指令中常用作堆栈指针,又称为SPR14寄存器可用作子程序连接寄存器或链接寄存器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指令NegativeZeroCarryOverflowIRQ中断的响应:置1:禁止响应置0:允许响应FIQ中断的响应:置1:禁止响应置0:允许响应条件标志模式控制位ARM/Thumb控制标志中断标志16异常的优先级当某时刻同时出现多个异常时,ARM处理器按优先级的高低顺序处理。异常异常名称对应模式复位管理(svc)未定义指令未定义(und)软件中断(SWI)管理(svc)指令预取中止中止(abt)数据中止中止(abt)IRQ(中断)IRQ(irq)FIQ(快速中断)FIQ(fiq)17ARM指令分类及格式–数据处理指令:数据传输指令,算术指令,逻辑指令,比较指令,乘法指令,前导零计数–程序状态访问指令:MRS和MSR–分支指令:B、BL和BX–访存指令:单数据访存指令,多数据访存指令,数据交换指令18opcode{cond}{S}Rd,Rn{,operand2}{;注释}ARM数据处理指令cond00XOpcodeSRnRdOperand2011121516192021242527283178条件码助记符含义标志1000HI无符号数大于C=1且Z=01001LS无符号数小于或等于C=0或Z=103:2120ARM指令寻址方式寻址方式分类寻址方式:就是处理器根据指令中给出的地址信息来寻找操作数物理地址的方式。ARM处理器具有9种基本寻址方式。1.寄存器寻址;2.立即寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.块拷贝寻址;9.相对寻址。练习指出下述各指令为何种寻址方式:LDRR0,[R1],#4STMIAR0!,{R1,R2,R3,R4}STRR0,[R1]BLNEXTADDR0,R0,#0x3fMOVR0,R1,LSL5基址变址寻址(后变址)立即(数)寻址寄存器间接寻址寄存器移位寻址相对寻址多寄存器寻址助记符说明操作数据传送Rd←operand2数据传送指令MOV{cond}{S}Rd,operand2MOV指令可完成从另一个寄存器、被移位的寄存器或将一个8位图立即数加载到目的寄存器。MOV指令举例如下:MOVR1,#0x10;R1=0x10MOVR0,R1;R0=R1MOVR3,R0,LSL#2;R3=R0×4MOVPC,LR;PC=LR,子程序返回算术运算指令助记符说明操作加法运算指令Rd←Rn+operand2减法运算指令Rd←Rn-operand2ADD{cond}{S}Rd,Rn,operand2SUB{cond}{S}Rd,Rn,operand2逻辑运算指令助记符说明操作BIC{cond}{S}Rd,Rn,operand2位清除指令Rd←Rn&(~operand2)BICR1,R1,#0x0F;将R1的低4位清零,其它位不变比较指令——CMP指令将寄存器Rn的值减去operand2的值,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。应用示例:CMPR1,#10;R1与10比较,设置相关标志位CMPR1,R2;R1与R2比较,设置相关标志位比较指令CMP{cond}Rn,operand2注意:CMP指令与SUBS指令的区别在于CMP指令不保存运算结果。在进行两个数据的大小判断时,常用CMP指令及相应的条件码来操作。26程序状态访问指令cpsr/spsr不是通用寄存器,不能使用mov指令来读写。当需要修改cpsr/spsr的内容时,首先要读取它的值到一个通用寄存器,然后修改某些位,最后将数据写回到状态寄存器,即:修改状态寄存器一般是通过“读取-修改-写回”三个步骤的操作来实现。在ARM处理器中,只有mrs指令可以读取cpsr/spsr;只有msr可以写cpsr/spsr。助记符说明操作MRS{cond}Rd,psr读状态寄存器指令Rd←psr,psr为CPSR或SPSRMSR{cond}psr_fields,Rd/#immed_8r写状态寄存器指令psr_fields←Rd/#immed_8r,psr为CPSR或SPSR(1)(2)(3)(4)应用示例1:;子程序:使能FIQ中断ENABLE_IRQMRSR0,CPSRBICR0,R0,#0x40MSRCPSR_c,R0MOVPC,LR应用示例2:;子程序:禁能FIQ中断DISABLE_IRQMRSR0,CPSRORRR0,R0,#0x40MSRCPSR_c,R0MOVPC,LR1.将CPSR寄存器内容读出到R0;2.修改对应于CPSR中的I控制位;3.将修改后的值写回CPSR寄存器的对应控制域;4.返回上一层函数;程序状态寄存器处理指令313029282726…876543210NZCV(保留)IFTM4M3M2M1M028注意:T控制位的修改问题:程序中不能通过MSR指令,直接修改CPSR中的T控制位来实现ARM状态/Thumb状态的切换,必须使用BX指令完成处理器状态的切换。程序状态寄存器处理指令03:2129零偏移。如:LDRRd,[Rn]前索引偏移。如:LDRRd,[Rn,#0x04]!后索引偏移。如:LDRRd,[Rn],#0x04•LDR和STR——字和无符号字节加载/存储指令单寄存器操作指令LDRR1,[R2,#0x04]!前索引偏移单寄存器操作指令R2=1000H,(1000H)=0x35,(1004H)=0xA2执行指令R1?R2?分支指令03:2131助记符说明操作条件码位置Blabel分支指令PC←labelB{cond}BLlabel带链接的分支指令LR←PC-4,PC←labelBL{cond}BXRm带状态切换的分支指令PC←label,切换处理器状态BX{cond}【例3-2】实现1+2+……+N。NEQU5;常量的定义AREAExample,CODE,READONLY;定义段名属性等ENTRY;程序入口CODE32;ARM代码START;行标定义LDRR0,=N;R0赋值MOVR2,R0;R2充当计数器MOVR0,#0;R0←0MOVR1,#0;R1←0LOOP;行标CMPR1,R2;比较R1R2BHIADD_END;如果R1R2跳转到ADD_END;分支的实现ADDR0,R0,R1;R0←R0+R1ADDR1,R1,#1;R1←R1+1BLOOP;无条件跳转至LOOP;循环的实现ADD_END;行标定义BADD_END;无条件跳转ADD_ENDEND;代码结束ARM汇编语言程序设计举例汇编语言与C语言的混合编程如果汇编代码比较简单,则可以直接利用内嵌汇编的方式进行混合编程;如果汇编代码比较复杂,则可以将汇编程序和C程序分别以文件的形式加到一个工程里,通过ATPCS标准来完成汇编程序和C程序之间的调用。参数的传递规则–参数不超过4个时,使用寄存器R0~R3来进行参数传递–当参数超过4个时,可以使用数据栈来传递参数。–应尽可能使函数的参数控制在4个以下ATPCS过程调用规范35NANDFlash和NORFlash比较•NORflash:读速度高,擦写速度低,容量小,价格高。•NANDflash:读速度不如Norflash(NANDflash串行读写),擦写速度高,容量大,价格低。2020/3/2936DMA传送过程HOLD和HLDA用于DMA方式请求和响应,DMAC(DMA控制器)是DMA传送的核心电路。DMA传送过程如下:①I/O接口电路向DMA控制器发出DMA请求;②DMA控制器向总线仲裁器发出总线请求;③总线仲裁器向DMA控制器回答总线应答信号;④DMA控制器向I/O接口电路回答DMA应答信号;⑤DMA传输开始,完毕引起中断。内存CPUDMAC设备HOLD总线请求HLDA总线响应DMA请求DMA响应系统总线RS-232CRS-232C是由美国电子工业协会(EIA)于1969年制定的一种异步串行通信接口标准EIA标准规定了RS-232C串口电器规格,它是一套负逻辑定义:-3V--25V之间的电平表示逻辑“1”;3V-25V之间的电平表示逻辑“0”;阳性插座DB9载波检测CD清除发送CTS发送请求RTS数据设置就绪DSR数据终端就绪DTR发送TXD接受RXD信号地GND振铃检测RI987654321ULCONn位描述复位值保留70红外模式6指示是否使用红外模式。0:正常操作模式1:红外接收发送模式0校验模式5:3指示UART发送和接收操作中校验位的产生和校验类型。0xx:不进行校验100:奇校验101:偶校验110:强制为’1’111:强制为’0’000停止位数目2指示帧结束的停止位有几位。0:每帧一位1:每帧两位0WordLength1:0指示每帧发送和接收的数据位有多少位。00:5位01:6位10:7位11:8位00ULCON:线路控制寄存器规定传输帧的格式波特率产生UBRDIVn位描述UBRDIV1