第十章基于ARM的硬件系统设计1、ARM嵌入式系统的开发过程(裸机系统、OS)2、ARM微处理器最小硬件系统电源、时钟、复位、存储器、调试接口3、人机交互接口键盘与LED接口、LCD显示接口、触摸屏接口4、通信接口串行通信接口、其他通信接口JTAG/USB/网络线目标机宿主机在嵌入式开发过程中有宿主机和目标机的角色之分•宿主机是开发嵌入式软件的计算机•目标机是运行嵌入式软件的硬件平台ARM选型确定开发模式建议ARM初学者先学裸机系统的开发需求(功能)分析明确性能参数、外设接口、开发复杂性总体方案设计(硬、软件)基于ARM的硬件电路设计(最小系统【第10章】+功能电路)软件设计【第11章】(裸机模式、OS模式)编写程序(集成开发环境ADS、RVDS、MDK等等)编译、调试(软件仿真,或J-link硬件仿真器,或编写调试代码)下载通过USB直接下载(Flash内自带烧录程序)或利用FlashPGM、H-JTAG等烧写工具将可执行映像烧写至Flash存储器脱离开发环境,上电运行!裸机系统的开发建立交叉编译环境(arm-linux-gcc)操作系统裁剪(内核配置和编译)编写程序(linux开发环境下,启动程序、驱动、用户程序)编译、调试下载脱离开发环境,上电运行!基于OS的开发嵌入式开发流程多通道高精度数据采集系统设计功能要求:采集被测设备数据,并显示处理结果。指标要求:通道数:8路(由键盘选择当前采集通道);信号幅度范围:-15V~+15V;A/D分辨率:16Bit;满量程精度:0.1%;最高采样速率:100KSa/s。通信接口:RS232接口及10Mbps以太网,实现与上位机通信。设计要求最小系统(CPU板)AD采集模块LCD显示模块通信模块键盘、LED模块被测对象ARM芯片选型原则•性能参数的考虑ARM核版本工作频率内部存储器容量电源控制DSP协处理器功耗•外设接口的考虑USB接口RTCGPIO数量其他因素•芯片封装的选择芯片的封装有很多种类型,如:DIP、QFP、PGA、BGA等在散热性能、信号完整性特性、体积大小等方面的要求三星公司的S3C2440A芯片采用ARM920T内核:内核运行速度最高达533MHz,满足系统需要;LCD控制器(支持可达到4K色的STN和256K色的TFT),并配有一个LCD专用DMA;S3C2440A芯片参考资料非常丰富,开发难度小;同时S3C2440A价格合适(原装正品30-45RMB)。综合考虑上述因素,本数据采集装置选用S3C2440A为主控CPU。一些主流的ARM9处理器芯片如:飞思卡尔:MC9328MX27…三星:S3C2440A…Atmel公司:AT91SAM9263…意法半导体:STR91x…恩智浦半导体:LPC2000系列…硬件设计方案•核心板的设计(CPU板的设计)自行设计开发(价格便宜,设计灵活)ARM微处理器+存储器模块+电源模块+时钟模块+复位模块+JTAG调试接口模块。【最小系统】购买成品(开发板)•功能电路设计AD采集模块LCD显示模块通信模块(串口、网络)最小系统(CPU板)AD采集模块LCD显示模块通信模块键盘、LED模块核心板(CPU板)的设计——最小系统的设计最小系统设计内容对应课本P311-P317最小系统的设计ARM微处理器;存储器模块,包括程序保存存储器(FLASH)和程序运行存储器(SDRAM);电源模块,包括CPU内核和I/O接口电源电源;时钟模块,包括系统主时钟和实时时钟;复位模块,包括外部复位和内部复位;JTAG调试接口模块。最小系统(最小硬件系统)通常是指以嵌入式处理器为核心,包含电源、时钟和复位等保障处理器正常工作的基本硬件电路。S3C2440A最小硬件系统:存储器模块存储器模块为系统程序的保存和运行提供空间,在系统设计中主要根据处理器的存储器接口选择合适的存储器芯片(存储类型、容量、速度和接口类型)ARM最小系统中的存储器通常包括存放程序的NORFlash、NANDFlash和用于程序运行的SDRAM。存储器模块通常挂接在ARM芯片的局部总线上(外部三总线)。使用16位存储芯片构造32位宽存储器系统12S3C2440A最小硬件系统:电源模块电源模块是系统工作的能量来源,其电压、纹波、内阻和驱动能力等性能直接影响到系统工作的稳定性,因此电源模块在系统设计中至关重要。电源电压一定要在系统需求的范围之内电源的驱动能力一定要能满足整个系统的功率需求电源纹波和电路干扰的处理在设计PCB时需要对模拟电源和数字电源进行物理上的隔离13IO端口供电电源3.3V(输入端大于4.75V)内核供电电源1.2V接至VDDOP(IO端口电源)引脚接至VDDi等引脚(内部模块核心逻辑电源)接至VDDA_ADC(ADC电源)引脚S3C2440A最小硬件系统:时钟模块时钟模块为系统提供同步工作信号,其稳定性直接关系到系统的工作稳定性。在ARM嵌入式系统中通常包括频率较高的系统主时钟16.9344MHz和频率较低的实时时钟32.768KHz。时钟经内部锁相环后得到四组时钟信号:FCLK:ARM920T内核HCLK:AHB总线、存储器控制器、中断控制器、LCD控制器、DMA控制器和USB主机模块PCLK:访问APB总线的外设,如WDT,I2S,I2C,PWM定时器,MMC接口,ADC,UART,GPIO等模块UCLK:USB模块需要的48MHz时钟S3C2440A最小硬件系统:复位模块系统外部复位和内部复位一般来说系统对外部复位信号波形有一定的要求(低电平至少持续4个FCLK),若不能满足要求(例如持续时间过短),则系统将不能正常工作。低电平复位芯片复位后内核执行的操作:1、PC—R14_svc,CPSR-SPSR_svc2、M[4:0]=10011,I,F置位,T清零3、PC=0x000000004、恢复ARM工作状态S3C2440A最小硬件系统:调试接口ARM微处理器一般都采用JTAG作为基本调试接口nTRST(测试复位信号),TMS(测试模式选择),TCK(测试时钟),TDI(测试数据输入)和TDO(测试数据输出)JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。功能电路的设计(AD模块、LCD显示、通信模块)LCD显示模块(人机交互接口)、通信模块设计内容对应课本P318-P333功能电路的设计——AD模块多通道共享多通道并行本方案采用多通道共享方式,其ADC数据采集装置有如下两种常见方案:方案1:ARM直接控制AD采样方案2:由单独的ADC控制逻辑控制AD采样,同时利用FIFO缓存采样数据。第一种方案:ARM需要控制AD的整个采样过程,包括AD启动、通道切换、并使用中断方式读取转换结果,如果AD工作在连续转换模式下,会导致ARM频繁进入中断,增大ARM负担,造成系统效率低下,降低系统可靠性。第二种方案:采用独立的ADC控制器控制AD采样,同时将采样结果使用FIFO缓存,当数据累积到一定量时再通知ARM进行中断处理。这种方案虽然增加了独立的ADC控制器和FIFO缓存,但是可以明显降低ARM负担,显著提高系统效率和可靠性。本方案采用FPGA实现ADC控制器和FIFO功能,具体作用是地址译码、AD时序控制、通道切换和数据缓冲。考虑到成本及适用性等因素,可选用Altera公司推出的Cyclonen系列芯片中EP1C3T100FPGA内部逻辑主要包括以下几个部分:1.地址译码逻辑:这部分逻辑主要产生ARM访问FPGA内部逻辑各个寄存器的地址,2.模拟开关切换时钟和AD采样控制时钟产生逻辑:这部分逻辑主要产生模拟开关的切换时钟和AD转换器的转换信号。3.模拟开关通道选通逻辑:用于当SWITCH_CLK有效时,将模拟开关切换到下一个预设通道。4.FIFO缓冲逻辑:这部分逻辑主要实现AD采样数据的缓冲和ARM对缓冲数据的读取.功能电路的设计——人机交互接口人机交互接口主要用于人与设备之间的信息交换,通常包括用于信息输入的键盘、触摸屏,以及信息输出的各类显示设备。以S3C2440A的相关接口为例介绍各类接口硬件结构与使用:•键盘与LED接口•LCD显示接口键盘与LED接口按键和LED是最常用的两种输入输出器件,使用它们可以实现简单的信号输入和输出,在嵌入式系统中有重要用途。这类简单外设与处理器进行连接时,通常有两种方式:一是使用处理器的GPIO直接控制,由处理器运行相应软件来实现所需功能;二是使用专用的控制芯片来获取按键信息以及驱动显示。GPIO(GeneralPurposeInput)可以实现任何一般用途的信号输入/输出。ARM处理器芯片的大部分引脚都可以通过设定相应的控制寄存器实现基本的GPIO功能,并可编程设置信号方向、电平上拉/下拉等功能。在S3C2440A中共有130个多功能I/O引脚,这些引脚除了可以作为某个特殊功能使用外,均可以配置成GPIO模式,并分为以下八组:•PortA(GPA):25个输出端口•PortB(GPB):11个输入/输出端口•PortC(GPC):16个输入/输出端口•PortD(GPD):16个输入/输出端口•PortE(GPE):16个输入/输出端口•PortF(GPF):8个输入/输出端口•PortG(GPG):16个输入/输出端口•PortH(GPH):9个输入/输出端口•PortJ(GPJ):13个输入/输出端口GPIO例10.1:使用S3C2440A的端口G的第4~7引脚驱动四个LED,并点亮GPG4引脚的LED。GPIO控制键盘或LED的内容必须掌握!每组GPIO端口均有各自的寄存器组,主要包括端口配置寄存器(GPxCON)、端口数据寄存器(GPxDAT)、端口上拉寄存器(GPxUP)。寄存器名地址读写属性功能复位值GPGCON0x56000060可读可写配置引脚功能为输入/输出/其他0x00000000GPGDAT0x56000064可读可写G端口数据寄存器未定义GPGUP0x56000068可读可写上拉配置寄存器低电平0有效0xFC00G端口共有16个GPIO引脚,寄存器GPGCON宽度为32位,每个引脚的功能各由2位来选择控制,第4~7引脚的控制位如下:端口GGPGCON寄存器位功能选择GPG7[15:14]00=输入01=输出10=EINT1511=保留GPG6[13:12]00=输入01=输出10=EINT1411=保留GPG5[11:10]00=输入01=输出10=EINT1311=保留GPG4[9:8]00=输入01=输出10=EINT1211=保留寄存器GPGDAT和GPGUP宽度均为16位,各引脚按其编号与相应的寄存器位对应。GPGDAT中存放的即为需要输出的数据,根据硬件电路连接图可知,要将第4引脚LED点亮,则对应的引脚应输出低电平,所以寄存器GPGDAT中的[7:4]位应设置为二进制值1110。本例中端口为输出功能,因此寄存器GPGUP中对应各位均设置为1,将上拉电阻断开。GPGCONEQU0x56000060GPGDATEQU0x56000064GPUPEQU0x56000068;配置GPGCON寄存器,设置相关引脚为输出功能LDRR0,=GPGCONLDRR1,[R0]BICR1,R1,#0x0000FF00ORRR1,R1,#0x00005500STRR1,[R0];配置GPGUP寄存器,断开各上拉电阻LDRR0,=GPGUPLDRR1,[R0]ORRR1,R1,#0x00F0STRR1,[R0];输出驱动数据,点亮GPG4引脚对应的LEDLDRR2,=GPGDATLDRR3,[R2]ORRR3,R3,#0x00F0BICR3,R3,#0x0010STRR3,[R2]在嵌