1、 3.硬件模块设计3.1硬件平台功能模块的规划对于彻能完备的PDA,至少应该包含以下功能:(1)基本功能 CPU,RAM和外部存储器构成的个基本的嵌入式计算机系统。CPU应该具备优良的运算能力,具有进行较为复杂事务处理的能力,还应该有较低的功耗。大容量和快速访问的RAM是执行复杂处理的基本保证。较大容量外部存储器能够保证操作系统和用户软件的保存,还能为用户预留较大的存储空间来储存私人资料。(2)人机接口 PDA硬件平台的人机接口是使用者和PDA进行互动时非常重要的部件,基于PDA的特点本文采用TFT LCD和触摸屏作为输出部件和输入部件。TFT液晶显示屏具有亮度好,对比度高,层次感强,颜色鲜艳
2、的优点,基于用户界面良好的要求,TFTLCD是不错的选择。(3)外部扩展 本设计主要以S3C2419基础上扩展USB接口,SD接口和GPS模块。S3C2410微处理器内含个ARM920T内核和LCD控制器、触摸屏接口、SDRAM控制器、USB主机接口、SD接口和MMC卡接口、3个通道的UART、MMU等片内外围功能部件。对比以上的PDA功能规划,S3C2410从芯片级提供了支持,而且MMU的存在保证了嵌入式操作系统的良好运行,应该是不错的选择。 此外,系统还应该具有存储系统模块和支持电路等。 PDA硬件总体结构图32硬件平台的构建321微处理器的选择 目前,在移动终端领域,获得广泛应用的主要是
3、ARM公司所推出的ARM系列微处理器。这是一套具有高性能、低费用、高效率的RISC处理器,并且经过特殊优化以适应于鼠入式系统的开发环境。 本系统采用MC2410E(采用S3C2410处理器)开发板。S3C2410是韩国三星电子公司推出的款为手持设备设计的低功耗、高度集成的微处理器,采用272脚FBGA封装,内含个ARM920T内核和如下片内外围功能部件:(1)1个LCD控制器(支持STN和唧带有触摸屏的液晶显示器);(2)SDRAM控制器; (3)3们厦道的I 7ART;(4)4个通道的DMA; (5)4个具有PWM功能的计时器和1个内部时钟;(6)8通道的lO位ADC; (7)触摸屏接口;(
4、8)IIC总线接口; (9)1个USB主机接口,1个USB设备接口;(10)2个SPI接口; (11)SD接口和MMC卡接口; S3C2410结构图322人机接口PDA硬件平台的人机接口是使用者和PDA进行互动时非常重要的部件,基于PDA的特点设计了采用TFTLCD的输出部件和触摸屏的输入部件。(1)TFT LCD 块LCD屏显示图像,不但需要LCD驱动器,还需要有相应的LCD控制器。通常LCD驱动器会以COFCOG的形式与LCD玻璃基板制作在一起,而LCD控制器则有外部电路来实现。而S3C2410内部已经集成了LCD控制器,因此可以很方便地去控制各种类型的LCD屏,例如:STN和TFT屏。由
5、于TFT屏将是今后应用的主流,因此在PDA中选用了TFT屏。对于控制TFT屏来说,除了要给它送视频资料(VD23:0】)以外,还有以下一些信号是必不可少的,分别是: VSYNC(VFRAME):帧同步信号; HSYNC(VLD屺):行同步信号;VCLK:像素时钟信号; VDEN():数据有效标志信号。REGBANK是LCD控制器的寄存器组,用来对LCD控制器的各项参数进行设置。而LCDCDMA则是LCD控制器专用的DMA信道,负责将视频资料从系统总线(System Bus)上取来。323USB USB是Universal Serial Bus的简称。它是一种可以同时处理计算机与具有USB接口的
6、多种外设之间通信的电缆总线。这些连接到计算机上的外设共同分享USB19的带宽。USB的分时处理机制真正在硬件的意Y_tz实现了计算机外设的即插即用。USB主机系统不仅包含了用于和USB外设进行通信的USB主机控制器及用于连接的USB接口(Sm),而且还是USB系统软件和USB客户软件的载体。USB主机软件系统可以分为三个部分: 客户软件部分(CSW),在逻辑上和外设的功能部件部分进行资料的交换。USB系统软件部分(即HCD),在逻辑和实际中作为HCD和USBD之间的接口。 USB主机控制器软件部分(即HCD和USBD),用于对外设和主机的所有USB有关部分的控制管理,包括外设的SIE部分、US
7、B资料发送接收器(Transreceiver)部分及外设的协议层等。(2)S3C2410内置USBl1 Host控制器S3C2410内置的USB Host控制器具有以下特性:完全兼容USBl1协议:支持全速(Full Speed)设备; 支持Control、Interrupt和Bulk传输模式;5个具备FIFO的通讯端点; Bulk端点支持DMA操作方式; 接收和发送均有64Byte的FIFO;4.软件模块设计 完成硬件电路设计并调试通过后主要针对以下3 方面的软件编程功能实现:对硬件电路中存储系统部分的初始化NAND_ FLASH 驱动程序和LCD 驱动程序及USB接口程序的编写及实现。4.
8、 1NAND_FLASH 驱动程序 NAND_ FLASH 的驱动主要包括芯片的复位, ID 的正确读取,块的擦除,和页的写入和读取几个操作。此外NAND_ FLASH 允许要2 %的坏块,在编写驱动时要做好NANDFLASH 的坏块的统计与管理,坏块的识别主要是读取块中第一页的第6 字节的1 个WORD 是否为FF 来判断块的好坏。坏块管理流程如图5 所示。NAND_FLASH 驱动主要步骤:(1) 向指令寄存器写入0xFF 使芯片复位;(2) 调用Unsigned int check_ Flash_ Id (void) 函数读取芯片ID :For (i = 0 ;i 10 ;i + + )
9、 ; id = Nand_ IO 8 ; id + = Nand_IO ; / / 读出2 个字节即芯片ID(3) 调用NAND_manage () 函数做坏块管理;(4) 调用Unsigned int Erase_Block ( unsigned intblock) 实现块的擦除;(5) 调用int Write_page () 和int Read_page () 写入和读出页数据。4. 2 LCD 驱动程序设计 在系统中LCD 驱动程序主要是对屏幕显示的初始化包括字符显示高度和宽度、行字符显示数、显示频率的设置以及显示点位移设置、显示合成设置、休眠模式设置、光标形状设置、光标指针设置等操作。
10、LCD 驱动LCD_Initialize (void) 主要步骤:(1) 调用LCD_WriteCommand (SYSTEM_SET) ;用于系统初始化。(2) 调用LCD_WriteCommand ( SCROLL) ; 用于显示域设置。(3) 调用LCD_WriteCommand ( HDOT_SCR) ;用于光标点位移设置。(4) 调用LCD_WriteCommand (OVLA Y) ;用于显示合成设置。(5) 调用LCD_WriteCommand (CSRFORM) ;LCD_WriteData (0x07) ; LCD_WriteData (0x87) ;用于初始化光标形状。 设
11、计好驱动后利用ADS1. 2 编译器将程序烧至RAM 进行调试,可根据屏幕显示字符尺寸大小及适宜程度再做修改驱动程序直至满意。4.3USB设备驱动实现 USB的设备驱动利用分层实现,底层模块和硬件互交,而上层模块实现具体的功能和协议。这样可以把各部分功能分离,方便添加和修改功能。无论何种功能,硬件的互交是不变的,比如数据发送的开始和停止,数据的同步,读写FIFO中的数据等等都是相同的,所以把实现这些功能的函数放在底层实现,上层不同模块都可以调用这些函数来实现不同功能。除了和硬件互交以外,底层模块还要和操作系统紧密相连,即向系统注册USB的设备驱动。其采用如下的结构体并在内核中注册。struet
12、 device driver udedriver=n卸Ile:zylonite-udc,bus:&platform_bus_type,probe:zylonite_ude_probe,i,ulfflovezylonite_udc_remove); 其中name项是本驱动的名称,根据bus项提供的接口与内核中的设备相匹配。probe和remove分别是设备插上和移除时所进行的操作。在probe函数中除了一些硬件和软件的初始化外,还注册了一个中断用来在收到数据和发送完毕数据时通知系统:request_ira(IRQUSB,zylonite_udc_irq,SA_INTERRUPT,driver_n
13、ame,dev);其中zylonite 便是中断处理函数,此几乎所有的发送和接受udeirq据。当有数据接收到时,中断函数负责把接收到的数据送给上层模块。当FIFO中的数据发送完毕时,中断函数检查是否还有数据未发送,如果有则把数据填入发送FIFO,否则通知上层模块数据发送完毕。底层模块提供了个通用的接口给上层模块,并可以方便的注册,卸载。每个上层模块使用usb_gadget_driver数据结构表示。其中包含了上层模块函数指针,这些函数分别实现E层模块注册,卸载时的些操作。最后上层模块使用下层模央提供的函数:int usb_gadget_mgistcr_driver(stmct usb_gadget_ddver幸driver);来完成个功能模块在下层模块中的注册。上层模块的usb_gadget_driver结构如下:stmct usb_gadget_driver fsg_driver=speed:USB_SPEED_FULL,bind:fsg_bind,unbind:fsg unbind,;其中speed表示该设备使用USB的何种速度,此处使用USB全速即12M每秒。该内核线程平时处于休眠状态,每当有数据要发送或者接受时被唤醒,然后首先调用get_next_commandO函数
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1