首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM芯片的PDA系统中硬件设计实现(2)

基于ARM芯片的PDA系统中硬件设计实现(2)

完成硬件电路设计并调试通过后主要针对以下3方面的软件编程功能实现:
    对硬件电路(CPU及主要外围电路)的初始化,NAND_FLASH驱动程序和LCD驱动程序的编写及实现。
2.1 系统的初始化
    初始化硬件电路主要完成STR7lO各寄存器的配置及内存映射和中断向量配置、处理器与外芯片的初始化以及功能库函数加载等。其主要步骤是首先调用71x_init.s源文件完成CPU各寄存器的初始化配置后中断异常的处理实现及中断优先级设置、系统堆栈和变量的初始化最后完成初始化后使用BL语句跳转至MAIN功能函数:IMPORT main;B main;main为C语言主函数入口。初始化流程图如图4所示。

2.2 NAND_FLASH驱动程序
    NAND_FLASH的驱动主要包括芯片的复位,ID的正确读取,块的擦除,和页的写入和读取几个操作。此外NAND_FLASH允许要2%的坏块,在编写驱动时要做好NANDFLASH的坏块的统计与管理,坏块的识别主要是读取块中第一页的第6字节的1个WORD是否为FF来判断块的好坏。为了便于统计坏块和存储管理须在调用NAND_FLASH内存管理函数时建立坏块统计表,系统不断使用会增加坏块的数量,在每次系统启动时都可以通过调用内存管理函数来更新坏块表实现对内存的最优管理以提高系统的性能。坏块管理流程如图5所示。


    NAND_FLASH驱动主要步骤:
    (1)向指令寄存器写入0xFF使芯片复位;
    (2)调用Unsigned int check_Flash_Id(void)函数读取芯片ID:
For(i=0;i<10;i++);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()写入和读出页数据。
2.3 LCD驱动程序设计
    在系统中LCD驱动程序主要是对屏幕显示的初始化包括字符显示高度和宽度、行字符显示数、显示频率的设置以及显示点位移设置、显示合成设置、休眠模式设置、光标形状设置、光标指针设置等操作。
    LCD驱动LCD_Initialize(void)主要步骤:
    (1)调用LCD_WriteCommand(SYSTEM_SET);用于系统初始化。
    (2)调用LCD_WriteCommand(SCROLL);用于显示域设置。
    (3)调用LCD_WriteCommand(HDOT_SCR);用于光标点位移设置。
    (4)调用LCD_WriteCommand(OVLAY);用于显示合成设置。
    (5)调用LCD_WriteCommand(CSRFORM);
    LCD_WriteData(0x07);LCD_WriteData(0x87);用于初始化光标形状。
    设计好驱动后利用ADSl.2编译器将程序烧至RAM进行调试,可根据屏幕显示字符尺寸大小及适宜程度再做修改驱动程序直至满意。


3 系统调试
    当设计好硬件系统后,要对电路板进行整体调试看各功能模块是否正常,值得注意的是在设计NAND_FLASH接口电路时不能将ALE,CLE,WP,R/B全部连接到STR710的地址线上否则会引起两者间的时序不匹配。在设计NAND_FLASH文件系统时采用F16系统可根据系统需要修改ST公司提供的F16文件系统代码。


4 结 语
    该设计是基于ARM芯片的STR710嵌入式PDA系统,很好实现了硬件系统的设计以及LCD显示器、NAND_FLASH的驱动程序、基于F16文件系统在NAND_FLASH大容量数据的文件存储管理。随着信息化、智能化、网络化的快速发展,嵌入式PDA技术也将获得广阔的发展空间。
继承事业,薪火相传
返回列表