资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,按照章节进行分类,嵌入式系统总结,嵌入式系统的概念及现实中的实例,两种比较合理定义:,从,技术的角度,定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。,从,系统的角度,定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。,第一章嵌入式系统概述,2.1 ARM,简介,ARM,公司简介,ARM,是,A,dvanced,R,ISC,M,achines,的缩写,它是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的,RISC,(精简指令集)处理器。,公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和,OEM,厂商,并提供服务。,ARM,两大处理器状态特点及其关系,ARM7TDMI,处理器内核包含,2,套指令系统,分别为,ARM,指令集和,Thumb,指令,并且各自对应,1,种处理器的状态:,ARM,状态:,32,位,处理器执行字方式的,ARM,指令,处理器默认为此状态;,Thumb,状态:,16,位,处理器执行半字方式的,Thumb,指令。,第,3,章,ARM7TDMI(-S),指令系统,简介,ARM,处理器是基于精简指令集计算机,(RISC),原理设计的,指令集和相关译码机制较为简单。,ARM7TDMI(-S),具有,32,位,ARM,指令集,和,16,位,Thumb,指令集,,,ARM,指令集效率高,但是代码密度低,;,而,Thumb,指令集具有较高的代码密度,却仍然保持,ARM,的大多数性能上的优势,它是,ARM,指令集的子集。所有的,ARM,指令都是可以有条件执行的,而,Thumb,指令仅有一条指令具备条件执行功能。,ARM,程序和,Thumb,程序可相互调用,相互之间的状态切换开销几乎为零。,第,3,章,ARM7TDMI(-S),指令系统,ARM,指令集与,Thumb,指令集的关系,Thumb,指令集具有灵活、小巧的特点,ARM,指令集支持,ARM,核所有的特性,具有高效、快速的特点,3.1 ARM,处理器寻址方式,寻址方式分类,寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。,ARM,处理器具有,8,种基本寻址方式。,1.,寄存器寻址;,2.,立即寻址;,3.,寄存器移位寻址;,4.,寄存器间接寻址;,5.,基址寻址;,6.,多寄存器寻址;,7.,堆栈寻址;,8.,相对寻址。,3.2,指令集,常用指令的使用,3.2,指令集介绍,ARM,存储器访问指令,单寄存器存取,装载指令:,LDR,目标寄存器,源地址,存储指令:,STR,源寄存器,目标地址,存储器,源地址,目标寄存器,存储器,目标地址,源寄存器,思考与练习,?,1.,MOV,指令与,LDR,指令都是往目标寄存器中传送数据,但是它们有什么区别吗?,MOV,指令用于将数据从一个寄存器传送到另一个寄存器中,或者将一个常数传送到一个寄存器中,但是不能访问内存。,LDR,指令用于从内存中读取数据放入寄存器中。,3.2,指令集介绍,算术逻辑运算指令,算术逻辑运算指令包括,“,加,/,减,”,以及,“,与,/,或,/,异或,”,等指令,它们的格式如下:,OpCode,结果寄存器,运算寄存器,第二操作数,运算寄存器,第二操作数,运算符,结果寄存器,1.LPC2000,系列简介,2.,引脚描述,3.,存储器寻址,4.,系统控制模块,5.,存储器加速模块 (,MAM,),6.,外部存储器控制器(,EMC,),7.,引脚连接模块,8.GPIO,第四章,LPC2000,系列,ARM,硬件结构,9.,向量中断控制器,10.,外部中断输入,11.,定时器,0,和定时器,1,12.SPI,接口,13.I,2,C,接口,14.UART(0,、,1),15.A/D,转换器,16.,看门狗,17.,脉宽调制器,(PWM),18.,实时时钟,4.3.1,片内存储器,片内,Flash,编程方法,1.,使用,JTAG,仿真,/,调试器,通过芯片的,JTAG,接口下载程序;,2.,使用在系统编程技术(即,ISP,),通过,UART0,接口下载程序;,3.,使用在应用编程技术(即,IAP,),在用户程序运行时对,Flash,进行擦除和,/,或编程操作,实现数据的存储和固件的现场升级。,ARM7,处理器核,外设,控制器,RAM,Boot,Block,FLASH,JTAG,UART0,串口,并口,JTAG,JTAG,UART0,4.3.1,片内存储器,片内,Flash,编程方法,2.,使用在系统编程技术(即,ISP,),通过,UART0,接口下载程序;,3.,使用在应用编程技术(即,IAP,),在用户程序运行时对,Flash,进行擦除和,/,或编程操作,实现数据的存储和固件的现场升级。,1.,使用,JTAG,仿真,/,调试器,通过芯片的,JTAG,接口下载程序;,4.3.2,片外存储器,片外,Flash,编程方法,Flash,的擦写操作需要配合一段符合,Flash,编程时序的代码,这段代码称为,装载程序,,一般由用户编写。,程序代码(源),程序代码(目标),Loader,目标板,CPU,BUS,Flash,串口,下载用户代码时,首先得在,CPU,内运行装载程序,通过它把从串口(或其它接口)接收的代码写到片外,Flash,中。,概述,4.3.3,存储器映射,ARM,芯片可以存在片内和片外存储器,这些存储器本身不具有地址信息,它们在芯片中的地址是由芯片厂家或用户分配的,那么,给物理存储器分配逻辑地址的过程称为存储器映射,。通过这些逻辑地址就可以访问到相应存储器的物理存储单元。,4.3.5,存储器重映射及引导块,存储器重映射,将已经过映射的存储器再次映射的过程称为,存储器重映射,,它使同一物理存储单元出现多个不同的逻辑地址。这些存储单元主要包括,引导块,“,Boot Block,”,和用于保存异常向量表的少量存储单元。,Addr1,程序所见存储器,.,Addr2,Addr1,存储器管理部件,0 x1234,0 x1234,实际物理存储器,0 x1234,注意:,存储器重映射并不是对映射单元的内容进行了复制,而只是将多个地址指向了同一个存储单元,这种效果是通过芯片内部的,“,存储器管理部件,”,实现的。,实际物理存储单元通过,存储器管理部件进行存储器,映射,获得逻辑地址,Addr1,。,1,实际物理存储单元通过,存储器管理部件进行存储器,重映射,获得逻辑地址,Addr2,。此时,逻辑地址,Addr1,和,Addr2,可以访问同一,实际物理存储单元。,2,4.4.2,时钟系统,时钟系统结构,LPC2000,系列微控制器的时钟系统包括四个部分:,晶体振荡器、唤醒定时器、锁相环(,PLL,)和,VPB,分频器。,外接晶体或外接时钟源,产生稳定的时钟信号,将,F,osc,提升到合适的频率,PLL,晶体,振荡器,VPB,分频器,F,CCLK,F,PCLK,f,OSC,F,OSC,CPU,内核,芯片外设,唤醒,定时器,ON/OFF,1,3,4,2,为系统提供基本的时钟信号,(,Fosc,),。,1,在复位或处理器从掉电模式被唤醒时,为输入的时钟信号做计数延时,使芯片内部部件有时间进行初始化。,2,把,Fosc,信号提高到一个符合用户需要的频率,(,Fcclk,),其中,Fcclk,用于,CPU,内核。,3,用于把,Fcclk,信号降低到一个合适的,Fpclk,值(也可以不降低),该信号用于外设部件。,4,4.5,存储器加速模块(,MAM,),概述,LPC2000,微控制器扩展了器件内部,Flash,总线宽度为,128,位,用于提高处理器的指令执行速度。这个接口通过存储器加速模块,(MAM),来控制。,Flash,组,2,Flash,组,1,CPU,执行指令,取指阶段,等待,指令,提供指令,1,提供指令,3,.,.,取指阶段,提供指令,4,取指阶段,等待,3,等待,取指阶段,提供指令,2,取指阶段,等待,1,2,4,关闭,MAM,指令执行情况,从,Flash,组,1,中读取指令,,CPU,处于等待状态。,1,CPU,从,1,组指令缓存区中获取指令并执行。,2,从,Flash,组,2,中读取指令,,CPU,处于等待状态。,3,CPU,从,2,组指令缓存区中获取指令并执行。,4,所有存储器操作请求都会直接对,Flash,操作,由此产生了,CPU,停止,等待若干周期的情况。,Flash,组,2,Flash,组,1,CPU,执行指令,开启,MAM,指令执行情况,.,14,13,提供指令,13,14,15,16,取指阶段,12,11,10,9,取指阶段,提供指令,9,10,11,12,8,7,6,5,取指阶段,提供指令,5,6,7,8,4,3,2,1,提供指令,1,2,3,4,5,6,7,8,取指阶段,取指阶段,等待,指令,.,.,两组指令缓存区中不存在指令,启动,Flash,存储器指令读取周期,,CPU,停止,等待若干周期。,1,CPU,执行,Flash,组,1,指令缓存区中的指令。,2,CPU,执行,Flash,组,2,指令缓存区中的指令,同时从,Flash,组,1,中读取指令。,3,只要指令存在两个组的指令缓存区中,,CPU,的指令执行是连续的,由此大大提高了指令执行效率。,4.9,向量中断控制器,概述,ARM7TDMI,内核具有两个中断输入,分别为,IRQ,中断和,FIQ,中断。向量中断控制器(,VIC,)负责管理芯片的中断源,最多可以管理,32,个中断输入请求。,CPU,内核,ARM7TDMI-S,4.9,向量中断控制器,FIQ,中断硬件处理流程,将当前的程序状态寄存器的内容备份,即,,SPSR_fiq,=CPSR,处理器切换到,FIQ,模式,禁止,IRQ,和,FIQ,中断,即,,I=F=1,保存返回地址,LR_fiq,=PC,设置,FIQ,异常入口地址,PC=0 x1C,发生,FIQ,异常事件,说明:,ARM7,不支持,FIQ,中断嵌套,4.9,向量中断控制器,IRQ,中断相应流程,将当前的程序状态寄存器的内容备份,即,,SPSR_irq,=CPSR,处理器切换到,IRQ,模式,禁止,IRQ,中断,即,,I=1,保存返回地址,LR_irq,=PC,设置,IRQ,异常入口地址,PC=0 x18,发生,IRQ,异常事件,说明:,ARM7,不支持,IRQ,中断嵌套,4.10,外部中断输入,概述,LPC2000,系列,ARM,具有,4,路外部中断,可以设置为,2,种类型:,边沿触发:,上升沿触发,下降沿触发,电平触发:,高电平触发,低电平触发,4.12 SPI,接口,(Serial Peripheral Interface-,串行外设接口,),SPI,总线系统是一种同步串行外设接口,它可以使,MCU,与各种外围设备以串行方式进行通信以交换信息。外围设置,FLASHRAM,、网络控制器、,LCD,显示驱动器、,A/D,转换器和,MCU,等。,SPI,总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用,4,条线:串行时钟线(,SCK,)、主机输入,/,从机输出数据线,MISO,、主机输出,/,从机输入数据线,MOSI,和低电平有效的从机选择线,SS(,有的,SPI,接口芯片带有中断信号线,INT,或,INT,、有的,SPI,接口芯片没有主机输出,/,从机输入数据线,MOSI),。,SCL,SDA,CPU A,CPU B,LCD,驱动器,E,2,PROM,ADC,4.13 I,2,C,接口,概述,I,2,C,总线是,Philips,推出的串行传输总线,它以,2,根连线实现了完善的全双工同步数据传送,可以极方便地构成多机系统和外围器件扩展系统。,I2C,总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了期间的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。,I2C,总线的两根线(串行数据,SDA,,串行时钟,SCL,)连接到总线上的任何一个器件,每个器件都应有一个唯一的地址,而且都可以作为一个发送器或接收器。此外,器件在执行数据传输时也可以被看作是主机或者从机。,I,2,C,总线规范,传输协议,主机发送数据到从机,主机,从机,主机发送起始信号,开始数据传输,对从机进行寻址,同时,R/W=0,发送应答信号,发送,1,字节数据,发送应答信号,发送,1,字节数据,发送停止信号,结束数据通信,I,2,C,总线规范,传输协议,主机读取从机数据,主机,从机,发送停止信号,结束数据通信,主机发送起始信号,开始数据传输,对从机进行寻址,同时,R/W=1,发送应答信号,发送,1,字节数据,发送应答信号,发送,1,字节数据,发送应答信号,发送非应答信号,复合格式,发送停止信号,结束数据通信,再次发送起始信号,对从机进行寻址,同时,R/W=1,发送应答信号,发送应答信号,发送,1,字节数据,发送应答信号,发送非应答信号,主机发送起始信号,开始数据传输,对从机进行寻址,同时,R/W=0,发送,1,字节数据,主机,从机,发送应答信号,发送应答信号,发送应答信号,发送,1,字节数据,发送,1,字节数据,UART,简介,UART:Universal Asynchronous Receiver/Transmitter,,通用异步接收,/,发送装置,,UART,是一个并行输入成为串行输出的,芯片,,通常集成在,主板,上,多数是,16550AFN,芯片。因为,计算机,内部采用并行数据,不能直接把数据发到,Modem,,必须经过,UART,整理才能进行异步传输,其过程为:,CPU,先把准备写入串行设备的数据放到,UART,的寄存器(临时内存块)中,再通过,FIFO,(,First Input First Output,,先入先出队列)传送到串行设备,若是没有,FIFO,,信息将变得杂乱无章,不可能传送到,Modem,。,应用示例,LPC2000,的,I/O,电压为,3.3V,,连接时须注意电平的匹配。,LPC2000,其它,通信设备,TxD0,RxD0,TxD0,RxD0,与,PC,机相连时,由于,PC,机串口是,RS232,电平,所以连接时需要使用,RS232,转换器。,LPC2000,PC,机串口,232,电平转换,TxD0,RxD0,TxD0,RxD0,RxD1,RTS,CTS,DSR1,DTR1,TxD1,LPC2000,Modem,TxD,RxD,DCD,RI1,RTS,CTS,DSR1,DTR1,DCD1,RI1,RS232,电平转换,当使用,Modem,接口时,需要一个,RS232,转换器将信号转换为,RS232,电平后,才能与,Modem,连接。,4.16,看门狗,看门狗简介,在嵌入式应用中,,CPU,必须可靠工作,即使因为某种原因进入了一个错误状态,系统也应该可以自动恢复。看门狗的用途就是使微控制器在进入错误状态后的一定时间内复位。,其原理是在系统正常工作时,用户程序每隔一段时间执行喂狗动作(一些寄存器的特定操作),如果系统出错,喂狗间隔超过看门狗溢出时间,那么看门狗将会产生复位信号,使微控制器复位。,4.16,看门狗,看门狗简介,看门狗分,硬件看门狗和软件看门狗,。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零,(,俗称“喂狗”,),,因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。,4.17,脉宽调制器,PWM,简介,LPC2000,的,PWM,基于标准的定时器模块,具有定时器的所有特性,它是定时器匹配功能的扩展。使用,PWM,功能,可以在指定引脚输出需要的波形。输出波形可分为两类:,单边沿输出;,双边沿输出。,5.1,最小系统,框图,嵌入式控制器,时钟系统,调试测试接口,复位及其,配置系统,存储器系统,供电系统,(,电源,),可选,因为许多面向嵌入式领域的微控制器内部集成了程序和数据存储器,可选,但是在样品阶段通常都会设计这部分电路,C,/OS-II,程序设计基础,September,2007,任务设计,|,C,/OS-II,程序设计基础,任务的分类,任务,单次执行类,事件触发类,周期执行,类,按照执行方式分类,一般的操作系统都提供时间管理的函数,最基本的就是延时函数,,C,/OS-II,也不例外,,C,/OS-II,所具有的时间管理函数见下表。,C,/OS-II,具有简单的动态内存管理能力。,C,/OS-II,的动态内存管理函数见下表。,任务管理函数是操作与任务相关功能的函数,详见下表。,系统管理函数是一些与,C,/OS-II,内核或功能相关的一些函数,详见下表。,C,/OS-II,的初始化函数有,2,个:,OSInit,(),和,OSStart,(),,它们不能在任何任务和中断服务程序中使用,仅在,main(),函数中按照一定的规范被调用,其中,OSInit,(),函数初始化,C,/OS-II,内部变量,,OSStart,(),函数启动多任务环境。,C,/OS-II,把信号量等都称为事件,管理它们的就是事件管理函数。,C,/OS-II V2.52,具有的事件有普通信号量、互斥信号量、事件标志组、消息邮箱和消息队列,这些都是,C,/OS-II,用于同步与通讯的工具,本章后述的内容将会详细介绍。,系统函数概述,|,C,/OS-II,程序设计基础,系统函数的分类,初始化,任务管理,时间管理,内存管理,根据功能分类,事件管理,函数名,功能,备注,OSStatInit,(),使能任务统计功能,复位一次只能调用一次,并且必须在任务中调用,在调用时其它用户任务不能处于就绪状态,OSIntEnter,(),进入中断处理,必须由中断服务程序按照规范调用,使用本公司的模版就不需要调用它们,OSIntExit,(),退出中断处理,OSSchedLock,(),锁调度器,必须配对使用,一般情况不需要使用。事实上,,C,/OS-II,不推荐使用它们,OSSchedUnlock,(),解锁调度器,OS_ENTER_CRITICAL(),进入临界区,必须配对使用,一般通过禁止中断和允许中断来实现的。对于一些移植代码来说,不能嵌套调用,OS_EXIT_CRITICAL(),退出临界区,函数名,功能,函数名,功能,OSTaskChangePrio,(),改变任务优先级,OSTaskSuspend,(),挂起任务,OSTaskCreate,(),建立任务,OSTaskResume,(),恢复任务,OSTaskCreateExt,(),建立任务,比,OSTaskCreate,(),控制任务属性更多,OSTaskStkChk,(),检查堆栈,OSTaskDel,(),删除任务,OSTaskQuery,(),获得任务信息,OSTaskDelReq,(),请求删除任务,有特殊用途,系统管理,函数名,功能,备注,OSTimeDly(),以时钟节拍为单位延时,OSTimeDlyHMSM,(),以钟时分秒毫秒为单位延时,OSTimeDlyResume,(),恢复延时的任务,OSTimeDlyHMSM,(),可能需要多次才能恢复,OSTimeGet,(),获得系统时间,以时钟节拍为单位,OSTimeSet,(),设置系统时间,以时钟节拍为单位,OSTimeTick,(),时钟节拍处理函数,由时钟节拍中断处理程序调用,用户很少使用,函数名,功能,OSMemCreate,(),初始化一个堆,OSMemGet,(),从指定堆中获得一个内存块,OSMemPut,(),从指定堆中释放一个内存块,OSMemQuery,(),查询指定堆的状态,C,/OS-II,程序设计基础,互斥信号量,简介,资源同步,函数列表,1,2,3,互斥信号量,|,C,/OS-II,程序设计基础,简介,互斥信号量也称为,mutex,,专用于资源同步。互斥信号量具有一些特性:占用一个空闲优先级,以便解决优先级反转问题。,在日常生活中,出租车是一种常用的共享资源,当出租车载客时,从外面可以看到标识为载客;当空闲时,标识为空车。这样等车的人就可以根据标识知道出租车的当前状态,判断是否能够座上这辆车。这个标识牌就是一个二值信号量。由于这种二值信号量可以实现对共享资源的独占式处理,所以叫做互斥信号量。,载客,空车,二值信号量,可以实现对共享资源的独占式处理,互斥信号量,互斥信号量,|,C,/OS-II,程序设计基础,简介,优先级列表,任务,1,任务,2,任务,3,高,低,共享资源,假设任务,1,和任务,3,共享一个资源,任务,2,为优先级介于任务,1,和任务,3,之间的一个与该共享资源无关任务,分析优先级反转问题。,任务,2,优先级高于任务,3,而进入运行状态,任务,1,申请共享资源而处于等待状态,此时,虽然任务,1,比任务,2,优先级更高,但却在任务,2,之后运行,这种现象就是优先级反转。,任务,3,得到共享资源而处于运行状态,互斥信号量,|,C,/OS-II,程序设计基础,简介,综上所述,可以说能防止优先级反转现象的信号就是互斥信号量。,优先级列表,互斥信号量,任务,1,任务,2,任务,3,高,低,互斥信号量,任务,3,互斥信号量,假设任务,1,和任务,3,共享一个资源,使用互斥信号量进行资源同步,任务,2,为优先级介于任务,1,和任务,3,之间的一个与该共享资源无关任务,通过互斥信号量解决优先级反转问题。,任务,2,优先级不够高无法获得,CPU,任务,1,申请互斥信号量而处于等待状态,任务,3,此时,任务,2,无法在任务,1,之前得到运行,不发生优先级反转,互斥信号量,任务,1,任务,3,获得,CPU,,且优先级升到互斥信号量优先级,任务,1,获得,CPU,,且优先级升到互斥信号量优先级,祝大家考试顺利!,
展开阅读全文