ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:561.58KB ,
资源ID:11082819      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11082819.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于μC OS II的键盘驱动的实现.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于μC OS II的键盘驱动的实现.docx

1、基于C OS II的键盘驱动的实现基于C/OS- II的键盘驱动的实现第一章 绪论一嵌入式系统简介 嵌入式系统着眼于应用,己被人们定义为“以应用为中心、以计算机技术为基础、软件硬件可裁减、适应于应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”。 嵌入式系统是将先进的计算机技术、半导体技术、电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。嵌入式系统具有一般计算机组成的共性,都是由硬件和软件组成的。嵌入式系统的硬件部分,是以嵌入式处理器为中心,配合存储器、I/O设备、通信模块、扩展设备接口以及电源等必要的

2、辅助接口组成。嵌入式系统软件部分,一般是按3层划分的:设备驱动层、实时操作系统层、 应用程序层。嵌入式系统的硬件是嵌入式系统的基础,决定了嵌入式系统的运算速度和扩展功能等,提供了嵌入式软件运行的物理平台和通信接口;嵌入式系统的软件是嵌入式系统的灵魂,包括嵌入式操作系统和嵌入式应用软件,决定了硬件的操作模式,通过操作系统和应用程序发挥硬件装置的功能。嵌入式系统是应用于特定环境下,面对专业领域、针对特定用途的系统,所以与通用计算机系统的多样化和适用性不同。与通用计算机系统相比,它具有以下显著的特点:1) 嵌入式系统通常是面向特定应用的,是“专用”的计算机系统;2) 嵌入式系统一般使用实时操作系统;

3、3) 嵌入式系统是技术密集、资金密集、高度分散、不断创新的知识集成系统;4) 嵌入式系统具有功耗低、体积小、集成度高、成本低的特点;5) 嵌入式系统的硬件和软件通过量体裁衣、去除冗余,可以用较少的软硬件资源实现较高的性能;6) 嵌入式系统与具体的行业应用相结合;7) 嵌入式系统的软件一般都固化在非易失性存储器中,提高了执行速度和系统可靠性。二本课题的主要研究工作本课题采用高性能嵌入式处理器S3C2410X和C/OS-II 操作系统,开发了一个轻型嵌入式串行通信系统。具体的工作主要有: 1. 键盘的驱动编程。2. C/OS-II的移植,这是本课题的重点所在。操作系统内核移植是在ARM公司的ADS

4、1.2集成开发环境下完成的。3. 在应用层裁剪移植一个用于监视的图形用户界面(GUI)。 4. 在操作系统的上层编写一个用于人机交互的键盘驱动程序、LCD液晶显示驱动程序和相关的功能运用程序等。 第二章 基于C/OS-II的键盘驱动的总体规划与设计嵌入式系统设计的基本原则是“物尽其用”,与通用计算机相比,嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣,去除冗余,力争在同样的硅片面积上实现更高的性能,以满足应用系统对功能、可靠性、成本、体积和功耗的要求。2.1 系统的设计要求本设计将一个实时操作系统移植到 ARM 嵌入式微处理器后,利用操作系统中提供的系统资源调用把串口及其他外设当成普通文件

5、进行操作,读写方便,从而在进行相应软件开发的过程中,提高系统编程效率,简化调试的复杂程度,实现基于ARM嵌入式微处理器为核芯的串口通信,除此之外,按照嵌入式系统的软、硬件结构组成, 将图形用户界面GUI和实时操作系统整合后移植到ARM微控制器上。系统实现的功能如下:(1)激活超级终端0,敲击PC机的键盘,将字符通过PC机的串口发送给ARM开发板的串口0;通过ARM芯片处理后,在开发板上的LCD上同步显示。(2)利用开发板上的键盘输入字符,同样可在LCD上显示,并发送给PC机。(3)系统还应考虑日后的升级和功能扩展,留下可开发的硬件空间。2.2 系统的硬件和软件选型2.2.1 系统硬件平台的选择

6、嵌入式开发的硬件平台的选择主要是嵌入式处理器的选择。在一个系统中使用什么样的嵌入式处理器内核主要取决于应用的领域、用户的需求、成本问题、开发的难易程度等因素。目前非常流行的ARM核有ARM7TDMI,StrongARM,ARM720T,ARM9TDMI,ARM922T,ARM940T,ARM946T,ARM966T,ARM10TDMI等。自V5版本以后,ARM公司提供Piccolo DSP的核心给芯片设计者,用于设计ARM DSP的SOC(System On Chip)结构芯片。此外,ARM核还获得了许多实时操作系统(Real Time Operating System)供应商的支持,比较知名

7、的实时操作系统有:Windows CE、Linux、pSOS、VxWorks、Nucleus、EPOC、C/OS-II、BeOS等。S3C2410A微处理器是一款由韩国SamSung电子公司为手持设备设计的低功耗、高集成度的基于ARM920T核的16/32位RISC处理器。为了降低整个系统的成本,S3C2410A还集成了以下部件:16KB指令Cache、16KB数据Cache、具有虚拟存储器管理单元MMU、外部存储器控制器、LCD控制器(支持STN和TFT)、8通道10位ADC、触摸屏接口、NAND Flash控制器、3个UART通道、4个DMA通道、4个PWM定时器、1个内部定时器、I/O端

8、口、RTC、IIC-BUS控制器、IIS-BUS控制器、USB主、USB从、SD主卡/MMC卡接口、2通道的SPI以及内部PLL时钟倍频器等。S3C2410A采用0.18um工艺生产制造,核心频率最高可以达到203MHz,功能强大而且体积小、功耗低。S3C2410A片上资源丰富,可以简化外围电路设计,减少了整个系统的成本,为嵌入式系统提供了一个高效的硬件平台。S3C2410A处理器不仅在手机、PDA等手持设备方面广泛应用,在通信系统、数据终端等方面也得到广泛应用。考虑到本项目的开发要带操作系统并运行CGUI,本文选定SamSung(三星)公司生产的一款基于ARM920T核的高性能低功耗SOC芯

9、片S3C2410A作为硬件开发平台的主控制器。2.2.2 嵌入式操作系统的选择嵌入式操作系统EOS(Embedded Operating System)是一种支持嵌入式系统应用的操作系统软件,是嵌入式系统的重要组成部分。嵌入式操作系统负责完成嵌入式系统的全部软、硬件资源的分配、调度、控制、协调;它必须体现其所在系统的特征,能够通过加载/卸载某些模块来达到系统所要求的功能。嵌入式操作系统具有小巧、可定制性、强稳定性、弱交互性、较强的实时性、外设接口统一性等特点。随着嵌入式系统的快速发展,嵌入式操作系统已经从简单走向成熟,比较著名的有Windows CE、CLinux、C/OS-II、VxWork

10、s、Palm OS和Linux等。基于实时性、成本以及开发难度方面的考虑 ,系统设计时选择了C/OS-II开放源代码的嵌入式实时操作系统。实时操作系统C/OS- II是一个源码公开、可移植、可固化、可裁剪及占先式的实时多任务操作系统 ,它运行优先级最高的就绪任务,其绝大部分源码是用 C 语言编写。C/OS - 的正常运行需要处理器平台满足以下要求: 处理器的 C编译器能产生可重入代码。 用 C语言就可以打开和关闭中断。 处理器支持中断,并且能产生定时中断 (通常在 10至 100Hz之间 )。 处理器支持能够容纳一定量数据 (可能是几千字节 )的硬件堆栈。 处理器有将堆栈指针和其它 CPU寄存

11、器读出和存储到堆栈或内存中的指令。S3C2410处理器采用 ARM920T内核 ,内部共有 37个寄存器 ,其中 R13通常用作堆栈指针 ,只要系统 RAM空间允许 ,堆栈空间理论上没有限制。ARM处理器提供 ARM指令和 Thumb指令两种指令集 ,每种指令集都包含有丰富的指令对堆栈进行操作 ,可以随意的对处理器中的寄存器进行堆栈操作。根据堆栈生长方向的不同 ,可以生成 4种不同的堆栈,分别是满递增、空递增、满递减 (此移植中使用的是满递减方式 )、空递减。芯片内集成 5个定时时钟 ,任何一个都可以产生定时中断 ,满足第三条要求。ADS集成开发环境的内置编译器可以产生可重入代码 ,并且支持内

12、嵌汇编 , C环境中可任意的进行开关中断操作。综上所述,从理论上讲C/OS - 完全可以移植到 S3C2410A上运行。2.2.3 嵌入式GUI的选择图形用户界面GUI(Graphic User Interface)是系统与用户交流沟通的一个平台,为用户提供了友好的人机界面和简单的图形化操作,是嵌入式软件平台的重要组成部分。嵌入式GUI要求简单、直观、可靠、占用资源少并且反应快速,以满足嵌入式系统中硬件资源有限的要求。独立开发嵌入式GUI需要大量的人力物力,所以对于大多数用户来说一般采用目前比较成熟的GUI系统,从而将更多的精力用来开发自己的应用程序。面向比较流行的嵌入式GUI系统有:Micr

13、owindows、MiNiGUI、OpenGUI、Qt/Embedded和CGUI等。基于C/OS-II的图形用户界面支持系统的选型,我们有多种选择,对上述5种嵌入式图形用户界面进行了综合比较,CGUI在API完整性、函数库大小、可移植性、多进程执行性、健壮性、执行效率等各方面都具有优势,符合本系统对嵌入式GUI的要求,因此选择CGUI作为本系统的嵌入式GUI。图2-1 系统平台设计框图2.3 4X4键盘的简介2.5 本章总结本章给出了嵌入式键盘系统的平台选配,包括系统的MCU内核、操作系统、GUI选择等,并给出了相关功能模块如S3C2410A、C/OS-II实时操作系统、CGUI等的工作原理

14、及相关介绍,最后给出了键盘驱动的总体设计方案。第三章 基于S3C2410A的嵌入式键盘驱动系统实现ARM嵌入式系统在基于ARM CPU为核心的硬件平台和以ADS或相关软件集成开发环境为软件平台,在其基础上,搭建中间件、驱动程序及嵌入式操作系统平台,最终在此基础上完成ARM嵌入式系统应用的开发。嵌入式系统硬件平台结构主要分为2大部分:一部分为系统主板,为基于ARM的最小系统,包括ARM CPU、Flash、SDRAM、键盘等最基本部分;另一部分为系统扩展板,提供了用于完成各个不同硬件的功能模块。3.1 硬件总体结构设计文章选择基于ARM920T精简指令集的S3C2410A微处理器作为硬件的控制核

15、心,附加外围的电源、晶振、调试接口、SDRAM,Flash ,人机接口等功能模块构成嵌入式键盘驱动的硬件平台。硬件的整体结构设计如图3-1所示。图3-1 基于S3C2410A的硬件整体设计各部分功能表述如下:电源电路:电源电路为5V到3.3V和5V到1.8V的DC-DC转换器,给MCU的I/O和ARM内核供电,向系统提供+5V、+3.3V、+1.8v电压;时钟电路:32.768K有源晶振为系统提供工作时针,通过片内PLL电路倍频为50MHZ作为微处理器的工作时钟;复位电路:复位电路主要完成上电、掉电复位和系统在运行时用户的按键复位功能。本系统所采用专门的系统监视复位芯片IMP811S,可以手动

16、控制系统的复位,还可以实时监控系统的电源;Flash存储器:是一种可在线擦写,掉电后数据不丢失的存储器,具有功耗低、容量大、擦写速度快等优点。本系统包含2MB NOR Flash和32MB NAND Flash存储器,内部存放系统引导代码、C/OS-II内核、用户程序等。SDRAM:SDRAM(Synchronous Dynamic Random Access Memory)是同步动态RAM,具有容量大、成本低、存储快等优点,广泛应用在嵌入式系统中。S3C2410A处理器内部没有集成的SRAM,无法满足本系统的需要,因此我们扩展了两片SDRAM芯片HY57V561620,主要用作程序运行空间、

17、数据和堆栈区。JTAG接口电路:JTAG是一种国际标准测试协议,主要用于芯片内部测试以及对系统仿真和调试。本系统采用14脚JTAG仿真调试接口电路,芯片内部有JTAG核,可以通过外部仿真器与开发系统连接调试;键盘:本系统采用HD7279芯片,该芯片支持IIC总线协议,可以扩展64位键盘,驱动8个LED数码管;LCD接口:支持多种尺寸的STN、TFT LCD。3.2 电源电路设计由于S3C2410A的内核电压为1.8V/2.0V,I/O模块和存储器供电为3.3V,而电路板、LCD屏及USB接口等提供供电电压外部设备通常为5V,因此系统需要1.8/2.0V ,3.3V及5V共三种电压。图32 系统

18、的5V电源图3-3 S3C2410A 的电源电路本课题设计中的电源系统包括交流电源和直流电源。首先选用或自制由交流到直流(AC-DC)的直流稳压电源输出5V电压,电流大小根据外部设备及接口情况,选择1A、1.5A或更大的电流输出。目前在S3C2410A中使用广泛的DC-DC模块是ALPHA公司的AS1117AU系列,尾标1.8、3.3分别代表输出电压值为1.8V和3.3V。本课题的电源电路设计如下图3-2与图3-3所示。3.3 时钟电路设计S3C2410A的主时钟源来自外部晶振或外部时钟。时钟发生器有一个振荡放大器,其外部需要接一个石英振荡器。同时它还有一个锁相环(PLL),其输入信号是低频振

19、荡器的输出,输出信号是S3C2410A的需的高频时钟(倍频作用)。S3C2410A的时钟电路的设计见图3-4。图3-4 S3C2410A 时钟电路 3.4 复位电路设计微控制器在上电时状态并不确定,将造成微控制器不能正常工作。为解决这个问题,所有微控制器均有一个复位逻辑,它负责将微控制器初始化为某个确定的状态。多数嵌入式系统一般采用专用复位电路IC芯片,如IMP811等。S3C2410A的复位电路设计见下图3-5。图3-5 S3C2410A 复位电路3.5 存储器接口电路设计S3C2410A内部没有存储器,因此必须采用总线方式扩展外部存储器,包程序存储器和数据存储器。3.5.1 数据存储器SD

20、RAM的接口设计在本设计中数据存储器选用了典型的SDRAM(Synchronous DRAM)存储器芯片HY57V641620B 两片,如下图3-6所示,它是1M4 Banks 16 Bit 的SDRAM芯片,带自刷新电路、16条数据线,11条地址线,由于是 SDRAM,因此容量为8M。通过S3C2410A的nSCLK0 和nSCLK1对两片HY57V641620B进行选择存储,可实现32位的数据存储功能。图3-6 SDRAM存储器电路3.5.2 程序存储器NAND Flash的接口设计通常使用的Flash有NOR Flash和NAND Flash两种,由于NOR Flash读取速度快,多用于

21、存储操作系统等重要信息;大容量的信息通常存储在NAND Flash中,可在线擦除。本设计中选用的程序存储器是SAMSUNG公司的32M x 8 Bit NAND Flash Memory K9F5608U0A。电路设计见下图3-7。图3-7 NAND Flash存储器电路3.6 键盘及LED显示器接口设计设计过程中,键盘采用的控制芯片是HD7279A。HD7279是一片具有串行接口的可同时驱动8位共阴式数码管或独立的LED的智能显示驱动芯片。该芯片同时还可连接多达64键的键盘矩阵,单片即可完成显示键盘接口的全部功能。内部含有译码器可直接接受BCD码或16进制码并同时具有两种译码方式。电路设计如

22、图3-8所示。图3-8 键盘及LED显示器接口3.7 LCD控制器接口设计S3C2410A 与LCD液晶显示屏的连接很简单,直接将相关引脚相连即可,无需其他硬件。本系统中选用的LCD为5.7寸,256色,640480像素的TFT(Thin Film Transistor, 薄膜场效应晶体管)彩色显示屏。电路设计如图3-9。图3-9 S3C2410A 与LCD控制器接口TFT液晶显示屏的连接3.8.3 JTAG接口电路设计为便于系统设计开发与系统扩展,设计了一个JTAG接口电路,方便程序的下载与联机在线调试。其设计电路如图3-12所示。S3C2410A采用ARM公司提供的标准20脚JTAG仿真调

23、试接口电路,芯片内部有JTAG CORE,因此,可通过外部的JTAG调试电缆或仿真器和开发系统连接调试。图3-12 JTAG接口电路第四章 系统软件设计嵌入式系统软件部分,一般是按3层划分的:设备驱动层、实时操作系统层、 应用程序层。嵌入式系统的硬件是嵌入式系统的基础,决定了嵌入式系统的运算速度和扩展功能等,提供了嵌入式软件运行的物理平台和通信接口;嵌入式系统的软件是嵌入式系统的灵魂,包括嵌入式操作系统和嵌入式应用软件,决定了硬件的操作模式,通过操作系统和应用程序发挥硬件装置的功能。其中,嵌入式操作系统是用来支持嵌入式应用的系统软件,通常包括与硬件相关的底层软件、系统内核、图形用户界面(GUI

24、)、设备驱动接口等。4.1 实时操作系统C/OS-II在S3C2410A 上的移植C/OS-II在S3C2410A上的移植主要包括两个部分的代码配置或者编写: 第一部分与应用相关的配置, 体现在对OS_ CFG.H 和 INCLUDES.H 配置上;第二部分与特定处理器(这里指S3C2410A)相关的代码编写, 体现在OS_ CPU.H,OSCU P_ A.ASM ,OS_CPU _ C.C 编写上。这两部分代码的正确的配置与编写, 只能确保基于S3C2410A 的C/OS-II微内核代码形成, 并不能立即烧入目标板运行, 要在目标板上运行, 必须还要编写目标板初始化引导程序, 初始化引导程序

25、主要实现硬件初始化、内存映射(S3C2410A 不支持二次映射)、中断向量初始化、系统堆栈空间的分配、等功能, 以引导C/OS- II的正确运行。移植过程中选用的开发工具为 ARM 公司提供的 ADS1.2 集成开发环境。移植工作主要集中在与处理器相关的3个文件 :OS_ CPU.H,OS_CPU_C.C,OS_CPU_A.S。其中OS_ CPU. H文件主要包含与编译器相关的数据类型定义、堆栈类型定义、两个宏定义和几个函数说明OS_ CPU_ C.C 包含与移植有关 6 个 C 函数,为 OS2TaskStkInit(),OSTaskCreateHook(),OSTaskDelHook(),

26、OSTaskSwHook(),OSTaskStatHook(),OSTimeTickHook()。除第一个任务堆栈初始化函数外的5个函数为钩子函数,需要声明,没有实际内容,由系统函数调用,以便用户能在操作系统中加入自己需要的功能。OS_ CPU_ A.S中包含与移植有关的4个汇编语言函数,为 OSStartHighRdy(),OSCtxSw(),OSIntC2txSw(),OSTickISR()。C/OS-II在S3C2410A上的移植流程图如图4-1所示。图4-1 C/OS-II移植流程4. 1. 1 OS_CPU.H文件移植C/ OS- II不使用C语言中short ,int和long等数

27、据类型定义,因为它们与处理器类型相关,隐含不可移植性,因此必须对其进行移植。H 文件中主要包含与编译器相关数据类型定义、堆栈类型定义、两个宏定义和几个函数说明。数据类型定义部分代码如下:typedef unsigned char BOOLEAN; / *布尔变量 */typedef unsigned char INT8U; / * 无符号8 位整型变量 */typedef signed char INT8S; / * 有符号8 位整型变量 */typedef unsigned short INT16U; /* 无符号16 位整型变量 */typedef signed short INT16S;

28、 / * 有符号16 位整型变量 */typedef unsigned int INT32U; / * 无符号 32 位整型变量 */typedef signed int INT32S; / * 有符号32 位整型变量 */typedef float FP32; / * 单精度浮点数(32 位长度) */typedef double FP64; / * 双精度浮点数(64 位长度 */typedef INT32U OS STK; / * 堆栈是32 位宽度 */另外,带T 变量的ARM7 处理器内核有两个指令集,用户任务可使用两种处理器模式即用户模式和系统模式,本移植使用软中断指令SWI 作为

29、底层接口,使用不同功能号区分不同函数。在 ADS 中,用关键字_ _swi声明一个不存在的函数,则调用该函数就在调用的地方插入一条 SWI 指令并可指定功能号。SWI函数部分代码如下:_ _ swi 0x00 void OS- TASK- SW void ; / *任务级任务切换函数 */_ _swi(0x01) void- OSStartHighRdy(void) ; / *运行优先级最高的任务 */_ _swi(0x02) void OS- ENTER- CRITICAL(void) ; /* 关中断 */ _ _swi(0x03) void OS- EXIT- CRITICAL(void

30、) ; /* 开中断 */_ _swi(0x42) void OSISRBegin(void) ; /* 中断开始处理 */_ _swi 0x43 int OSISRNeedSwap void ; / * 判断中断是否需要切换 */_ _swi(0x80) void ChangeToSYSMode(void) ; / *任务切换到系统模式 */_ _swi(0x81) void ChangeToUSRMode(void) ; /* 任务切换到用户模式 */由于 ADSv1.2 的 C语言编译器只支持满递减堆栈,所以只能定义堆栈增长方向从上向下,即 #define OS_STK_ GROWTH

31、1;4. 1. 2 OS_CPU_ C.C文件移植每个任务要有自己的堆栈空间,以便进行任务切换时能将当时处理器现场保存到任务堆栈空间中,在下次执行时再恢复出来。因此必先确定任务堆栈结构,而任务堆栈结构与 CPU 体系结构、编译器密切关联。在ARM体系下,处理器现场通常指PC,LR,R0- R12 ,CPSR,SPSR。本移植堆栈结构如图4-2 所示。任务堆栈由高到低依次将保存 PC,LR,R12 ,R11 ,R10R1 ,R0 ,CPSR等。每个任务有独立的OSEnterSum,在任务切换时保存和恢复各自OsEnterSum 值。各个任务开关中断的状态可不同,这样实现了开关中断的嵌套。图4-2

32、 任务堆栈结构图堆栈任务初始化代码即函数OSTaskStkInit() ,该函数用于系统创建用户任务时,建立并初始化任务堆栈,其跟处理器硬件体系密切相关,它将所有的寄存器压栈,返回新的堆栈栈顶,并将它们保存在该任务的任务控制块OS_TCB 中,最终使初始化后的堆栈跟刚发生过一次中断一样。这样,系统无需对调度程序作特殊处理即可直接对新任务进行调度。由于在S3C2410A中堆栈是按32 位数据类型来进行操作,所以堆栈数据类型 OS_STK 声明为 32 位无符号整 数。OS2TaskStkInit()函数关键代码如下:* stk = (OS- STK) task; /* pc */* _ _ stk = (OS- STK) task; /*

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2