基于ARM9的UART接口驱动程序的设计_第1页
基于ARM9的UART接口驱动程序的设计_第2页
基于ARM9的UART接口驱动程序的设计_第3页
基于ARM9的UART接口驱动程序的设计_第4页
基于ARM9的UART接口驱动程序的设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目目 录录 第 1 章 设计目的 .1 第 2 章 设计思路 .2 2.1 总体说明.2 2.2 硬件设计.2 2.3 系统整体硬件框图.5 第 3 章 关键技术 .6 2.1ARM9 处理器.6 2.2 嵌入式 C 语言开发技术.8 2.3 ADS 开发环境 .8 2.4 题目针对的关键技术.11 第 4 章 程序流程 .13 第 5 章 主要源代码 .15 第 6 章 运行结果及结论 .19 参考文献 .20 第第 1 1 章章 设计目的设计目的 1. 学习模拟输入输出接口的原理 2. 掌握接口程序实现的基本方法 3. 掌握简单并行输入输出接口的工作原理及使用方法, 进一步熟悉掌握输 入输

2、出单元的功能和使用。 第第 2 2 章章 设计思路设计思路 2.12.1 总体说明总体说明 本课程设计为模拟输入输出接口的实验,使用一片缓冲芯片 74LS244 来把 CPU 外面的输入数据写入 CPU 的并行总线上,之后,并行总线上的数据被一片数 据锁存芯片 74LS273 保留,CPU 通过选中锁存芯片,并读取预先设给锁存器地址 内的内容,就可以把数据读出,来确定外面的数据的高低。本实验的输入是用 8 个带锁的按键的按下和未按下两种工作状态来表示输入接口的高低状态(每个按 键代表 1 个数字位,按键均不按下,代表数字量为 255,全按下为 0,每个按键 的都是 2 的权值,在不按下时,最靠

3、近键盘的按键代表 1,之后依次是 2;4;8;16;32;64;128。按下时均代表 0) ,然后,再通过 8 个 LED 灯亮和灭 两种工作状态,以及 LCD 上用数据值来清楚的反映各状态的输出显示,从而完成 模拟的输入输出接口的实现。 2.22.2 硬件设计硬件设计 该程序在硬件上需要 74LS244,74LS273 等接口芯片的支持。 (1)74LS244 是一种三态输出的八缓冲器和线驱动器,该芯片的引脚图和功 能表如下所示。 图 2.1 74LS244 管脚分配 74LS244 功能 从图可见,该缓冲器有 8 个输入端和 8 个输出端,从表中可见 74LS244 的功 能为:当使能端

4、EN 为低电平时,输出等于输入;当使能端 EN 为高电平,输入 X 为任意值(即不论为“H”还是为“L”都一样)时,输出为高阻态。经 74LS244 缓 冲后,输入信号被驱动,输出信号的驱动能力加大了。 74LS244 缓冲器主要用于三态输出的存储地址驱动器、时钟驱动器和总线定向接 收器和定向发送器等。 (2)74LS273 是一种 8D 锁存器,具有三态驱动输出,其逻辑电路及引脚图 如图所示。 图 2.2 74LS273 管脚分配 74LS273 功能表 由图可见,该锁存器由 8 个 D 门组成,有 8 个输入端 1D 一 8D,八个输出端 1Q 一 8Q,使能端有效时,将 D 端数据打入锁

5、存器中 D 门,当输出允许端有效 时,将锁存器中锁存的数据送到输出端 Q。 表中 H 为高电平,L 为低电平, Q0为原状态,Z 为高阻态,X 表示任意值 (即不论为“H”还是为“L”都一样)。 从表中可见 74LS273 的功能为:当使能端为高电平时,同时输出允许端 为低 电平,则输出 Q 等于输入 D;当使能端为低电平,而输出允许端 也为低电平 时,则输出 Q=Qo(原状态,即使能端由高电平变为低电平前,输出端 Q 的状态, 这就是“锁存”的意义)。74LS273 锁存器主要用于锁存地址信息、数据信息以及 DMA 页面地址信息等。 (3)通常是采用 TTL 或 CMOS 电路锁存器、三态门

6、等作为扩展芯片,通过 P0 口来实现扩展的简单 I/O 口扩展方案。它具有电路简单、成本低、配置灵活的特 点。本实验采用 74LS244 作为扩展输入、74LS273 作为扩展输出的简单 I/O 口扩 展。扩展电路图如下所示: 图 2.3 简单 I/O 口扩展图 在上述电路中采用的芯片为 TTL 电路 74LS244、74LS273。其中 74LS244 为 8 缓冲线驱动器(三态输出),/G1、/G2 为低电平有效的使能端,当二者之一为高 电平时,输出为三态。74LS273 为 8D 触发器,/CLR 为低电平有效的清除端,当 /CLR=0 时,输出全为 0 且与其他输入端无关;CP 端是时

7、钟信号,当 CP 由低电平 向高电平跳变时刻,D 端输入数据传送到 Q 输出端。P0 口作为双向 8 位数据线, 既能够从 74LS244 输入数据,又能够从 74LS273 输出数据。输入控制信号由 P2.0 和/RD 相“或”后形成。当二者都为 0 时,244 的控制端/G 有效,选通 74LS244,外部的信息输入到 P0 数据总线上。当与 244 相连的按键都没有按下时, 输入全为 1,若按下某键,则所在线输入为 0。输出控制信号输入控制信号由 P2.0 和/WR 相“或”后形成。当二者都为 0 后,74LS273 的控制端有效,选通 74LS273, P0 上的数据锁存到 273 的

8、输出端,控制发光二极管 LED,当某线输出 为 0 时,相应的 LED 发光。 因为 74LS244 和 74LS273 都是在 P2.0 为 0 时被选通的,所以二者的口地址 都为 FEFFH(这个地址不是唯一的,只要保证 P2.0=0,其它地址位无关) 。但是 由于分别由/RD 和/WR 控制,两个信号不可能同时为 0,所以逻辑上二者不会发生 冲突。 2.32.3 系统整体硬件框图系统整体硬件框图 Data_bus 8 个按键 8 个 LED 灯 图 2.4 系统整体硬件框图 第第 3 3 章章 关键技术关键技术 2.12.1 ARM9ARM9 处理器处理器 (1)ARM 微处理器结构 R

9、ISC 体系结构:RISC 结构优先选取使用频最高的简单指令,避免复杂指令 CPU 74LS244 CS 74LS273 CS 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 RISC 体系结构应具有如下特点: 采用固定长度的指令格式,指令归整、简单、基本寻址方式有 23 种。 使用单周期指令,便于流水线操作执行。 大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/ 存储指 令可 以访问存储器,以提高指令的执行效率。 除此以外,ARM 体系结构还采用了一些特别的技术,在保证高性能的前提下尽量 缩小芯片的面积,并降低功耗: 所有的指令都可根据前面的执行结果决定是否被执行,

10、从而提高指令的执 行效率。 可用加载/存储指令批量传输数据,以提高数据的传输效率。 可在一条数据处理指令中同时完成逻辑处理和移位处理。 在循环处理中使用地址的自动增减来提高运行效率。 (2) ARM 微处理器的寄存器结构 ARM 处理器共有 37 个寄存器,被分为若干个组(BANK) ,这些寄存器包括: 31 个通用寄存器,包括程序计数器(PC 指针) ,均为 32 位的寄存器。 6 个状态寄存器,用以标识 CPU 的工作状态及程序的运行状态,均为 32 位, 目前只使用了其中的一部分。 同时,ARM 处理器又有 7 种不同的处理器模式,在每一种处理器模式下均有 一组相应的寄存器与 之对应。即

11、在任意一种处理器模式下,可访问的寄存器包 括 15 个通用寄存器(R0R14) 、一至二个状态寄存器和程序计数器。在所有的 寄存器中,有些是在 7 种处理器模式下共用的同一个物理寄存器,而有些寄存器 则是在不同的处理器模式下有不同的物理寄存器。 (3) ARM 微处理器的指令结构 ARM 微处理器的在较新的体系结构中支持两种指令集:ARM 指令集和 Thumb 指令集。其 中,ARM 指令为 32 位的长度,Thumb 指令为 16 位长度。Thumb 指令 集为 ARM 指令集的功能子集,但与等价的 ARM 代码相比较,可节省 30 40 以上的存储空间,同时具备 32 位代码的所有优点。

12、(4)ARM 微处理器的工作状态 从编程的角度看,ARM 一般有两种工作状态:ARM 状态和 Thumb 状态。并可 在两个状态之间随时切换。 ARM 状态下,大多数指令都是有条件执行的;而 Thumb 状态下,只有分支指 令是有条件执行的。 (5)ARM 体系结构的存储器结构 ARM 体系结构可以用两种方式存储:大端格式和小端格式。最大寻址空间为 4GB(232 字节) 。 (6)指令长度和数据类型 ARM 处理器的指令长度可以是 32 位(ARM 状态下) ,也可以是 16 位(Thumb 状态下) 。ARM 处理器支持字节(8 位) 、半字(16 位) 、字(32 位)三种数据类 型。其

13、中字需要 4 字节对齐(地址的低两位为 0) 、半字需要 2 字节对齐(地址的 最低位为 0) 。 (7)处理器模式 ARM 微处理器支持 7 种运行模式: 用户模式(usr) 快速中断模式(fiq) 外部中断模式(irq) 管理模式(svc) 数据访问中止模式(abt) 系统模式(sys) 未定义指令中止模式(und) (8)ARM 体系结构所支持的异常类型 复位、未定义指令、软件中断、指令预取中止、数据中止、IRQ(外部中断请求) 、 FIQ(快速中断请求) 。 (9)对中断的响应: 将下一条指令的地址存入相应连接寄存器 LR,以便程序在处理异常返回 时能从正确的位置重 新开始执行。若异常

14、是从 ARM 状态进入,LR 寄存器中保存 的是下一条指令的地址(当前 PC4 或 PC8,与异常的类型有关) ;若异常是从 Thumb 状态 进入,则在 LR 中保存当前 PC 的偏移量。 将 CPSR 复制到相应的 SPSR。 根据异常的类型,强制转换 CPSR 的运行模式位。 强制 PC 从相关的异常向量地址取下一条指令执行,从而跳转到相应的异 常处理程序处。 (10) 各类异常的具体描述: FIQ 异常是为了支持数据传输或者通道处理而设计的。 IRQ 属于正常的中断请求。 ABORT 意味着对存储器的访问失败 2.22.2 嵌入式嵌入式 C C 语言开发技术语言开发技术 嵌入式 C 语

15、言程序设计是利用基本的 C 语言知识,面向嵌入式工程实际应用 进行程序设计。它首先是 C 语言程序设计,因此必须符合 C 语言基本语法,只是 它是面向嵌入式的应用而设计的程序。 函数是 C 语言程序设计的核心。一个较大的 C 语言程序一般是由一个主函数 和若干个子函数组成,每个函数完成一个特定的功能。主函数可以调用其他函数, 其他函数之间也可以相互调用。通过函数间的相互调用可以大大减少编程的工作 量。 嵌入式开发出来的应用程序最终不是要运行在 PC 上的,而是目标板。所以 嵌入式开发就一定会有交叉编译这个环节。 所基于的硬件平台包括两部分: (1) 以通用处理器为中心的协议处理模块,用于网络控

16、制协议的处理; (2) 以数字信号处理器(DSP)为中心的信号处理模块,用于调制、解调和数/ 模信号转换。 2.32.3 ADSADS 开发环境开发环境 ADS 全称为 ARM Developer Suite 是 ARM 公司推出的新一代 ARM 集成开发工 具。现在 ADS 的最新版本是 1.2,它取代了早期的 ADS1.1 和 ADS1.0。 在 ADS 工具诞生之前,一直使用的是 ARM SDT 工具,目前 ARM SDT 工具已经 慢慢淘汰。ADS 除了可以安装在 Windows NT4、Windows 2000、Windows 98 和 Windows 95 操作系统下,还支持 Wi

17、ndows XP 和 Windows Me 操作系统。 ADS 软件组成 ADS 由命令行开发工具、GUT(Graphics User Interface,图形用户界面) 开发环境(Code Warrior 和 AXD) 、实用程序和支持软件组成。 (一)命令行开发工具 命令行开发工具在实际应用中比较广泛,用它最大的好处就是可以将许多编 译命令写在一个脚本文件中,然后只执行该脚本文件就可以让工具自动完成所有 编译的工作。命令行中常用的命令如下 (1) armcc armcc 是 ARM C 编译器,这个编译器通过了 Plum Hall C Validation Suite 为 ANSI C 的

18、一致性测试。Armcc 用于将用 ANSI C 编写的程序编译成 32 为 ARM 指 令代码。 在命令控制台环境下,输入以下命令: armcc help 将可以查看 armcc 的语法格式以及最常用的一些操作选项。 armcc 最基本的用法为: armccoptions file1 file2filen 其中 oprtons 是编译器所需要的选项,file1,file2filen 是相关的文件 名。 (2)armcpp 是 ARM C+编译器,它将 ISO C+或 EC+编译成 32 位 ARM 指令代 码。该编译器的命令选项和 armcc 的选项基本一样。 (3)tcc Tcc 是 Thu

19、mb C 编译器,该编译器通过了 Plum Hall C Validation Suite 为 ANSI 一致性的测试。Tcc 将 ANSI C 源代码编译成 16 位的 Thumb 指令代码,同 时它的编译选项和用法类似 armcc. (4)tcpp Tcpp 是 Thumb C+编译器,它将 ISO C+和 EC+源码编译成 16 位 Thumb 指令代码,同时它的编译选项和用法类似 armcc。 (5)armasm Armasm 是 ARM 和 Thumb 的汇编器,它对用 ARM 汇编语言和 Thumb 汇编语言 写的源代码进行汇编。在命令行输入:armasm -help 将会看到 a

20、rmasm 汇编器的用 法以及它的编译选项。 armasmoptions sourcefile objectfile armasmoptions -o objectfile sourcefile 其中 options 为它的选项 (6)armlink Armlink 是 ARM 连接器,该命令既可以编译得到的一个或多个目标文件和相 关的一个或多个库文件进行连接,生成一个可执行文件,也可以将多个目标文件 部分连接成一个目标文件,以供进一步的连接。ARM 连接器生成的是 ELF 格式的 可执行映像文件。Armlink 的一般用法如下: armlink oprion-list input-file-

21、list 其中,option-list 是一个区分大小写的选项表;input-file-list 是一系 列库和对象文件。 (7)armsd Armsd 是 ARM 和 Thumb 的符号调试器,它能够进行源码即的程序调试。用户 可以在用 C 或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存 单元内容。Armsd 的一般用法如下: armsdoprions 其中,options 是一系列调试选项;imagefile 定义一个 AIF 或 ELF 文件的名 字;arguments 是呗 imagefile 接受的命令行参数。 (二)GUI 开发环境 ADS GUI 开发环境包含 Co

22、de Warrior 和 AXD 两种,其中 Code Warrior 是集 成开发工具,而 ACD 是调试工具。 Code Warrior for ARM 是一套完整的集成开发工具,充分发挥了 ARM RISE 的优势,使产品开发人员哪个很好的应用尖端的片上系统技术。该工具是专为基 于 ARM RISC 的处理器而设计的,它可加速并简化嵌入式开发过程中的每一个环 节,使得开发人员只需要通过一个集成软件开发环境就能研制出 ARM 产品,在整 个开发周期中开发人员无需离开 Code Warrior 开发环境,因此节省了在操作工 具上花的时间,使得开发人员有更多的精力投入到代码编写上来,Code

23、Warrior 集成开发环境(IDE)为管理和开发项目提供了简单多样化的图形用户界面。用 户可以实验 ADS 的 Code Warrior IDE 为 ARM 和 Thumb 处理器开发用 C、C+或 ARM 汇编演绎编写的程序代码。Code Warrior IDE 缩短了用户开发项目代码的周 期,主要是由于:一是签名的项目管理功能;二是子函数的代码导航功能,使得 用户能迅速找到程序中的子函数。 AXD(ARM eXtended Debugger) ,即 ARM 扩展调试器。调试器本身是一个软 件,以后通过这个软件使用调试代理可以对包含有调试信息的,正在运行的可执 行代码进行比如变量的查看,断

24、点的控制等调试操作。调试代理既不是被调试的 程序,也不是调试器。 (三) 实用程序 ADS 提供了以下的实用工具来配合前面介绍的命令行开发工具的使用。 (1)Flash downloader 是用于把二进制映像文件下载到 ARM 开发板上的 Flash 存储器的工具。 (2)fromELF 是 ARM 映像文件转换工具。该命令将 ELF 格式的文件作为输入 文件,将该格式转换玩各种输出格式的文件 (3)armar,ARM 库函数生成器将一系列 ELF 格式的目标文件以库函数的形 式集合在一起,用户可以把一个库传递给一个连接器以代替几个 ELF 文件。 (四)支持的软件 ADS 为用户提供 AR

25、Mulator 软件,使用户可以在软件仿真的环境小或者在基 于 ARM 的硬件环境调试用户应用程序。ARMulator 是一个 ARM 指令集仿真器,集 成在 ARM 的调试器 AXD 中,它提供对 ARM 处理器的指令集的仿真,为 ARM 和 Thumb 提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。 2.42.4 题目针对的关键技术题目针对的关键技术 (1)LCD 的显示原理:LCD 俗称液晶,LCD 显示器的基本原理就是通过给不 同的液晶单元供电,控制其光线的通过与否,从而达到显示目的。 在 JXARM9-2410 中以图形方式显示之前必须对 LCD 控制器进行初始化,其

26、过 程包括: 初始化 LCD 端口,将其设置为 LCD 驱动控制端口; 申请显示缓冲区; 初始化 LCD 控制寄存器,包括设置 LCD 分辨率、扫描频率、显示缓冲区等。 详细的 LCD 初始化代码如下所示: Lcd_Port_Init(); Lcd_Init(MODE_CSTN_8BIT); Glib_Init(MODE_CSTN_8BIT); Lcd_CstnOnOff(1); (2)GUI 的图形显示程序 API 文件,其中包括: 填充矩形函数 void Fill_Rect (int x0, int y0, U16 x1, U16 y1) 设定颜色函数 void Set_Color(int

27、 color) 填充矩形函数:void LCD_FillRect(U16 x0, U16 y0, U16 x1, U16 y1)等函 数。 (3)GUI 的字符显示程序文件,其中包括: 设定字体函数 const Set_Font(const GUI_FONT*pNewFont); 显示字符串函数 void DispString(const U8 *s) 得到单个字符的 X 方向长度 U16 GUI_GetCharDistX(U16 c)等函数 (4)串口的驱动文件,其中包括: 串口初始化函数 Uart_Init(int mclk,int baud,char port) 选择串口通道函数 voi

28、d Uart_Select(int ch) 等待发送转换寄存器空函数 Uart_TxEmpty(int port)等函数。 第第 4 4 章章 程序流程程序流程 设计实验系统的主程序入口,之后将主程序中用到的各函数按功能分类,并 保存到相应的文件中具体地实现,函数彼此之间反复的调用。 实现本实验功能的主要 C 程序如下: while(1) for(i=0;i7 d1 = rrr6 d2 = rrr5 d3 = rrr4 d4 = rrr3 d5 = rrr2 d6 = rrr1 d7 = rrr0 data = (d77|d66|d55|d44|d33|d22|d11|d0); (*(vola

29、tile unsigned char*)0 x) = data;/CPU 把总线值写入锁存器 for(i=0;i1000;i+); if (data != data_pre) Set_Color(GUI_YELLOW); Set_Font( Disp_BinAt(data,170,120,8);/显示二进制数据 Disp_HexAt(data,170,140,4);/显示十六进制数据 Disp_DecAt(data,170,160,3);/显示十进制数据 data_pre = data; 对应的程序流程图如下: 开始 从键盘输入数据 CPU 把值写入 并行数据总线 rrr=(*(volatil

30、eunsignedchar *)0 x); data=(d77|d66|d55|d4 4|d33|d22|d17 d1 = rrr6 d2 = rrr5 d3 = rrr4 d4 = rrr3 d5 = rrr2 d6 = rrr1 d7 = rrr0 data = (d77|d66|d55|d44|d33|d22|d1=1; 显示 16 进制函数 void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len) char ac9; char* s = ac; GUI_AddHex(v, Len, Disp_String(ac, x, y); static c

31、onst char acHex16 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F ; 设定字体函数 void Set_Font( GUI_FONT* pFont) if (pFont) GUI_Context.pAFont = pFont; 显示字符串函数 void DispString(const I8 *s) I16 xOrg; U8 FontSizeY; if (!s) return; FontSizeY = GUI_Context.pAFont-YDist; xOrg = GUI_Context.DispPosX; for (; *s

32、; s+) GUI_RECT r; U16 LineLen= GUI_GetLineLen(s,0 x7fff); U16 xLineSize = GUI_GetLineDistX(s, LineLen); r.x0 = GUI_Context.DispPosX; r.x1 = r.x0 + xLineSize-1; r.y0 = GUI_Context.DispPosY; r.y1 = r.y0 + FontSizeY-1; GUI_DispLine(s, LineLen, GUI_Context.DispPosY = r.y0; s += LineLen; if (*s=n) | (*s=r) GU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论