版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、24小时学会嵌入式系统编程参考文献:1、魏洪兴 周亦敏 嵌入式系统设计与实例开发实验教材I基于ARM微处理器与UC/OS-II实时操作系统 清华大学出版社 2005年9月2、田泽 嵌入式系统开发与应用教程 北京航天航空大学出版社 2005年3月3、任哲 嵌入式实时操作系统UC/OS-II原理及应用北京航天航空大学出版社 2005年8月目录第1小时:认识嵌入式系统第2小时:熟悉硬件和软件第3小时:串行通信口第4小时:端口程序的设计第5小时:键盘和LED第6小时:键盘应用程序第7小时:LCD显示第8小时:中文显示(1)第9小时:中文显示(2)第10小时:图形函数的设计第11小时:定时器中断程序第1
2、2小时:设计一个秒表程序第13、14小时:设计一个时钟程序,可以利用键盘输入修改时钟第1524小时:设计一个俄罗斯方块游戏第1小时:认识嵌入式系统一、什么是嵌入式系统1、嵌入式系统的定义IEEE(国际电气和电子工程师协会)定义:嵌入式系统是用于控制、监视或者辅助操作机器和设备的装置。国内定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。2、嵌入式系统的特点是“专用”的计算机系统运行环境差异大比通用PC系统资源少功耗低、体积小、集成度高、成本低具有系统测试和可靠性评估体系具有较长的生命周期具有固化在非易失性存储器中的代码
3、使用实时操作系统RTOS(Real Time Operation System)需要专用开发工具和方法进行设计包含专用调试电路是知识集成系统二、嵌入式系统的组成嵌入式系统由硬件和软件两部分组成。嵌入式系统的硬件是以嵌入式处理器为中心,由存储器、I/O设备、通信模块以及电源等必要的辅助接口组成。但是除了处理器和基本外围电路以外,其他电路可以进行裁剪、定制。嵌入式系统的软件包括嵌入式操作系统和嵌入式应用软件两部分。1、嵌入式处理器的介绍目前比较有影响的嵌入式RISC处理器产品有:IBM公司的PowerPC,MIPS公司的MIPS,Sun公司的Sparc,ARM公司的ARM系列。ARM系列处理器是英
4、国先进RISC机器公司(Advanced RISC Machines)的产品是我们学习的主要处理器。目前ARM处理器核因其低功耗、高性能等突出优点在32位嵌入式应用中稳居第一,成为低功耗、高性能嵌入式处理器的代名词。2、嵌入式操作系统与计算机系统一样,嵌入式系统也需要操作系统,我们称之为嵌入式操作系统。但注意的是:嵌入式操作系统对于嵌入式系统本身并不是必须的,对于一些应用简单的嵌入式系统,嵌入式操作系统可以省略。嵌入式操作系统的特点微型化:由于受嵌入式系统芯片内部的存储器容量所限嵌入式操作系统的内核都比较小,例如uC/OS-II最小内核2KB,完整内核小于10KB。可裁剪性:由于嵌入式操作系统
5、运行的硬件平台多种多样,其宿主对象五花八门,所以要求嵌入式操作系统中所提供的各个功能模块可以让用户根据需要选择使用。实时性。高可靠性易移植性:为了适用多种硬件平台,嵌入式操作系统应可在不做大量修改的情况下稳定的运行于不同平台。实时操作系统嵌入式操作系统通常都是实时操作系统,实时操作系统必须满足两个要求:一、实时操作系统的计算必须产生正确的结果,称为逻辑或功能正确(Logical or Functional Correctness);二、实时操作系统的计算必须在预定的周期内完成,称为时间正确(Time Correctness)。普通的操作系统只保证逻辑或功能正确,而不考虑时间正确。实时操作系统需
6、要满足三个条件: 实时操作系统必须是多任务系统多任务系统可以提高CPU的利用率。如果把一个大任务分解成多个可并行运行的小任务,在一个任务需要等待I/O时,可以交出对CPU的使用权,让CPU去运行其他任务。另外多任务便于软件设计与维护。多任务实时操作系统的内核分成两种:不可剥夺型内核与可剥夺型内核。但是无论哪种类型的内核,每个任务都必须具有一个唯一的优先级来表示它获得CPU的能力。不可剥夺型内核也叫合作型多任务内核,在这种内核中,总是优先级高的任务最先获得CPU的使用权,为了防止某个任务独霸CPU的使用权,这种内核要求每个任务必须能主动放弃CPU的使用权。可剥夺型内核总是运行优先级最高的任务,即
7、使CPU正在运行某个优先级低的任务,一旦发现有优先级更高的任务就绪,就立即转向执行优先级高的任务,即优先级高的任务剥夺优先级低的任务的CPU的使用权。 任务的切换时间应与系统中的任务数无关多任务系统中会出现任务之间的切换,通常操作系统会有一个调度器来完成这个工作,调度器在进行任务切换时要消耗一定的时间,这个时间的长短影响系统的实时性,为了使应用程序的设计者可以计算出系统完成某个任务的准确执行时间,要求调度器的运行时间固定。中断延时的时间可预知并尽可能短。嵌入式操作系统的管理功能多任务管理存储管理周边资源管理中断管理2、嵌入式操作系统的介绍uC/OS-II,源码开发的嵌入式操作系统VxWorks
8、,WindRiver Systems公司的实时操作系统WinCEuCLinux三、嵌入式系统软件开发流程1、开发环境的建立嵌入式系统应用软件的开发属于跨平台开发,因此需要一个交叉开发环境。交叉开发是指在一台通用计算机上进行软件的编辑、编译,然后下载到嵌入式设备中运行调试的开发方式。用来开发的通用计算机称为宿主机,嵌入式设备称为目标机。2、源文件编辑阶段3、编译4、链接5、下载6、调试第2小时:熟悉硬件和软件一、硬件环境:博创公司的UP-NETARM3000开发板1、硬件资源CPU:ARM7TDMI结构芯片S3C44B0X,工作频率60MHzBIOS:2M,NOR FLASH内存:8M,SDRA
9、M海量存储器:16M,NAND FLASH键盘:17键数字小键盘。显示:320*240像素,256色LCD(液晶显示器是 Liquid Crystal Display),带四线电阻式触摸屏USB接口:D12芯片,USB1.1标准串口:2路,最高波特率(比特率)b/s网络接口:RTL8019,10M以太网CAN接口:波特率125Kb,250Kb,500Kb,1Mb调试接口:JTAG,14针,20针电机:直流电机(有刷),步进电机(带1/64减速器)A/D:ARM自带8路10位A/D,满量程2.5V,4路电位器,4路扩展D/A:10位,满量程4.096VLED:8个,共阴极,与键盘共同由ZLG72
10、89芯片驱动音频输出:IIS总线,UDA1341芯片,44.1KHz音频。扩展插槽:2个,提供系统总线以及其他空余资源接口。 配套JTAG仿真器,电源适配器,通信电缆。2、相关资源UarmJtag并口仿真器驱动程序23个实验案例源代码 uC/OS-II操作系统,文件系统,驱动程序,API函数的库文件开发平台全部电路原理图BIOS原始映像文件。产品DEMO映像文件,系统必备的字库文件,相关图片文件等S3C44B0X等芯片文档ADS环境下的工程模板教案API手册,实验指导书。3、S3C44B0X处理器S3C44B0X处理器是三星公司出品的微处理器,片内集成ARM7TDMI核,并在ARM7TDMI核
11、的功能的基础上集成了丰富的外围模块。主要有:在ARM7TDMI核的基础上增加了8KB的Cache可以根据编程需要Cache的大小可以改为0/4/8KB,未用的Cache可以作为片内的SRAM使用。外部扩充存储器控制器(FP/EDO/SDRAM控制,片选逻辑)S3C44B0X处理器最多可以外接8个地址空间,每个地址空间为32MB,共256MB。本开发板内存从H开始2MB空间是BIOS,在H处保存BOOTLOADER,以启动开发板。从01C00000H开始到01FFFFFFH共4MB空间是特殊功能寄存器。从H开始16MB空间是海量存储器充当硬盘,从0CH开始8MB空间是内存。其中前512Kbyte
12、的空间划分出来,作为系统的LCD显示缓冲区使用(更新其中的数据,就可以更新LCD的显示)。系统的程序存储空间从0xC开始。也就是,引导系统的时候,需要把system.bin文件复制到0xC开始的地址空间,把PC指针指向0xC。LCD控制器(最大支持256色的DSTN),并带有1个LCD专用的DMA通道。2个通用的DMA通道/2个带外部请求引脚的DMA通道。2个带有握手协议的UART,1个SIO。1个多主的I2C总线控制器1个IIS总线控制器5个PWM定时器和1个内部定时器。看门狗定时器71个通用可编程I/O口,8个外部中断源功耗控制模式:正常、低、休眠和停止8路10位ADC具有日历功能的RTC
13、(实时时钟)PLL时钟发生器:可编程多相位锁相环路(PLL)时钟发生器二、安装系统1、开发平台硬件安装电源适配器提供5V稳压直流电源,输出端插入平台电源插口。 用并行电缆连接PC机并口和简易JTAG仿真器,仿真器的JTAG电缆插入平台上方的JTAG接口。 用串口电缆连接PC机串口和平台的UART0接口,主要用于监视平台运行情况。 需要时用USB电缆连接PC机主USB口和平台的从USB设备口,用于激活U盘或USB通信。需要时用对等网线连接PC机网口和平台网口,用于网络通信。2、开发平台软件安装编译软件的安装,安装ADS1.2。安装超级终端,超级终端与平台的UART0口有关,用于监视平台运行情况。
14、关于安装超级终端的方法见参考文献1的1.3节(第1619页)。JTAG驱动程序的安装。关于安装JTAG驱动程序的方法见参考文献1的附录A第四部分中第3点:JTAG驱动程序的安装(第209213页)。然后对ADS集成开发环境进行配置、建立工程文件、并调试。具体操作见参考文献1的1.2节第五部分(第816页)。关于工程文件的简单说明。工程包括两个子目录:init目录和STARTUP目录init目录包括7个文件,分别是 heap.s;isr_address.s; readme.txt;retarget.c;scat_ram.scf;scat_rom.scf; stack.sSTARTUP目录包括19
15、个文件,不同工程此目录内容有所变化,分别是44B.H;44BINIT.S; BITOPS.H; DEF.H; EXIO.c; EXIO.h; ISR.H;ISR.c;LCD320.c;MEMCFG.S; Main.c; Maro.h; MyUart.c; MyUart.h; OPTION.H; OPTION.S; UHAL.c; lcd320.h; uhal.hinit目录包括7个文件,分别是 heap.s:汇编文件,设置系统的堆;isr_address.s:汇编文件,设置系统的中断向量表; readme.txt:文本文件,说明文档;retarget.c:C语言文件,与heap.s,stack
16、.s配合设置系统的堆栈;scat_ram.scf,scat_rom.scf:说明文件,说明系统内存设置的情况; stack.s:汇编文件,设置系统的栈STARTUP目录包括19个文件,不同工程此目录内容有所变化,分别是44B.H:C语言头文件,设置特殊功能寄存器,中断向量表,以及中断屏蔽字;44BINIT.S:汇编文件,初始化程序,每个工程执行时先运行此程序; BITOPS.H:C语言头文件,设置一个关于位操作的函数; DEF.H:C语言头文件,替换了标注的C的数据类型,以便移植; EXIO.c,EXIO.h:设置一些函数; ISR.H: C语言头文件,设置中断向量号;ISR.c: C语言文件
17、,与中断有关的函数;lcd320.h,LCD320.c:设置与显示有关的函数;MEMCFG.S:汇编文件,初始化内存的配置; Main.c:C语言文件,主函数; Maro.h:C语言头文件,设置几个函数; MyUart.c; MyUart.h:设置与UART有关的函数; OPTION.H; OPTION.S:与时钟,Cache有关的设置; UHAL.c; uhal.h:与CPU开发板有关的初始化函数3、开发过程打开超级终端。 运行JTAG。运行ADS1.2 三、软件编程1、以实验1.1为例体会编程过程。2、附加要求:编写一个“百钱买百鸡”的程序,要求把运算结果在LCD和超级终端上显示。(鸡翁一
18、值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?)第3小时:串行通信口一、 关于串行通信的知识1、串行通信的概念数据通信分两种:并行通信和串行通信。并行通信是指数据的各位同时进行传送;串行通信是指数据一位位地顺序传送。串行通信又分为:同步串行通信和异步串行通信。同步串行通信是指在约定的波特率下,发送和接收的两个频率保持同步,因而传送和接收的每位数据保持同步,故传送的信息位几乎不受限制,典型的信息长度为几十到几百个字节,要实现这种传送,必须在串行数据中加入或隐含加入同步脉冲,接收时将其分离出来以便实现同步。这种通信方式的发送器接收器都比较复杂,成本较高。异步串行通信是指
19、在约定的波特率下,传送和接收的数据不需要严格的保持同步,允许有相对延迟,即频率差别不大于1/16,就可以正确地完成通信,它每传送一个数据靠数据的起始位同步一次,这种传送方式,要传送20%的额外附加控制信息,速度要相应受影响。但是,它的控制电路和接口都比较简单,因此广泛应用于计算机接口技术中。并行通信时数据的各个位同时传送,可以字或字节为单位并行进行。并行通信速度快,但用的通信线多、成本高,故不宜进行远距离通信。计算机或PLC各种内部总线就是以并行方式传送数据的。另外,在PLC底板上,各种模块之间通过底板总线交换数据也以并行方式进行。串行通信时数据是一位一位顺序传送,只用很少几根通信线,串行传送
20、的速度低,但传送的距离可以很长,因此串行适用于长距离而速度要求不高的场合。在PLC网络中传送数据绝大多数采用串行方式。 2、串行通信的方式从通信双方信息的交互方式看,串行通信方式可以有以下三种:单工通信:只有一个方向的通信而没有反方向的交互。半双工通信。通信双方都可以发送(接收)信息,但不能同时双向发送。半双工通信线路简单,有两条通信线就行了,这种方式得到广泛应用。全双工通信。通信双方可以同时发送和接收信息,双方的发送与接收装置同时工作。全双工通信的效率最高,但控制相对复杂一些,系统造价也较高。通信线至少三条(其中一条为信号地线),或四条(无信号地线)。单工通信不能实现双方交流信息,故在PLC
21、网络中极少使用。而半双工及全双工通信可实现双方数据传送,故在PLC网络中应用很多。串行通信中,传输速率用每秒中传送的位数(位/秒)来表示,称之为比特率(bps)。常用的标准比特率有300、600、1200、2400、4800、9600和19200 bps等。3、异步串行通信的接口方式:RS-232-C。RS表示“推荐标准”,是指美国电子工业协会(EAT)正式公布的标准,它规定了异步串行通信接口的电气连接方式,这些方式的数据格式有统一的标准,它规定:开始1位起始位,以发送一个逻辑“0”表示,接着是数据位,数据位可以是5、6、7、8位,再加1个奇偶校验位(也可以不用),然后是1个、1个半或2个停止
22、位,停止位用逻辑“1”表示,所有的位持续时间是相同的,如果传送后数据间有空闲,则以持续“1”表示。当下一数据起始位到达时,传送线上能产生一个由高电平到低电平的变化,从而判断出新数据的到来。传送时,先传送数据最低位,最后是最高位。 111 0 D0 D1 D2 D3 D4 D5 D6 D7 P 1 111 空闲位 起始位 数据位 校验位 停止位 空闲位接收方按约定格式可以检测出三种错误:奇偶错:是否符合约定的奇偶校验方式帧格式错:一个字符从起始位到停止位的总位数是否正确溢出错:若先接收的字符未被微机读取,后面的字符又传送到了,则产生溢出错。RS-232-C的信号线问题(DCE:数据通信设备,DT
23、E:数据终端设备。)RS-232C规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,常用的只有9根,它们是:引脚1:PG,保护地信号线引脚2:TxD(Transmitted data-TxD),发送数据通过TxD终端将串行数据发送到MODEM,(DTEDCE)。 引脚3:RxD(Received data-RxD),接收数据通过RxD线终端接收从MODEM发来的串行数据,(DCEDTE)。 引脚4:RTS (Request to send-RTS), 请求发送用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送。它
24、用来控制MODEM是否要进入发送状态。 引脚5:CTS(Clear to send-CTS),允许发送用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。 引脚6:DSR(Data set ready-DSR),数据装置准备好有效时(ON)状态,表明MODEM处于可以使用的状态。 引脚7:SG,信号地信号线引脚8:DCD(Data Carrier dectection-DCD)或称RLSD(Received Line detection-RLSD),数据载波检出线
25、(或称接收线信号检出)用来表示DCE已接通通信链路,告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使DCD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端。 引脚20:DTR(Data set ready-DTR),数据终端准备好有效时(ON)状态,表明数据终端可以使用。 引脚22:RI(Ringing-RI),振铃指示当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。 RS-232-C接口连线方式如下:三线式:它把通信双方都当作数据终端设
26、备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。七线式:七线式可以看出,RS-232C接口标准定义的所有信号线都用到了,并且是按照DTE和DCE之间信息交换协议的要求进行连接的,只不过是把DTE自己发出的信号线送过来,当作对方DCE发来的信号,因此,又把这种连接称为双叉环回接口。双方的握手信号关系如下: (1)当甲方的DTE准备好,发出DTR信号,该信号直接联至乙方的RI(振铃信号)和DSR(数传机准备好)。即只要甲方准备好,乙方立即产生呼叫(RI)有效,并同时准备好(DSR)。尽管此时乙方并不存在DCE(数传机)
27、。(2)甲方的RTS和CTS相连,并与乙方的DCD互连。即:一旦甲方请求发送(RTS),便立即得到允许(CTS),同时,使乙方的DCD有效,即检测到载波信号。 (3)甲方的TXD与乙方的RXD相连,一发一收。逻辑电平:RS-232-C规定:逻辑“1”的电平在-3V-15V,逻辑“0”的电平在+3V+15V,高于+15V,低于-15V,或在-3V+3V之间都无意义,这个电平称ELA电平,它和TTL电平的转换时通过电平转换器件完成的。二、UART接口功能及寄存器在嵌入式开发中,通过对UART特殊寄存器的设置来实现对UART接口的操作。UART特殊寄存器包括:UART的行控制寄存器(ULCON0,U
28、LCON1),UART控制寄存器(UCON0,UCON1),UART FIFO控制寄存器(UFCON0,UFCON1),UART MODEM控制寄存器(UMCON0,UMCON1),UART Tx/Rx状态寄存器(UTRSTAT0,UTRSTAT1),UART错误状态寄存器(UERSTAT0,UERSTAT1),UART FIFO状态寄存器(UFSTAT0,UFSTAT1),UART MODEM状态寄存器(UMSTAT0,UMSTAT1),UART发送保持寄存器(UTxH0,UTxH1),UART接收保持寄存器(URxH0,URxH1),UART波特率分频寄存器(UBRDIV0,UBRDIV1
29、),共11个寄存器,因为UART有两路端口,所有寄存器都是2个。我们重点学习UART Tx/Rx状态寄存器(UTRSTAT0,UTRSTAT1),UART发送保持寄存器(UTxH0,UTxH1),UART接收保持寄存器(URxH0,URxH1)。UTRSTATn寄存器有效位在末三位:UTRSTATn2:发送移位器空,即当发送移位寄存器没有有效数据时,该位自动设置为1。该位=0,表示发送移位器不空;该位=1,表示发送移位器空。UTRSTATn1:发送缓冲器空,即当发送FIFO/缓冲寄存器没有有效数据时,该位自动设置为1。该位=0,表示发送缓冲寄存器不空,即发送保持寄存器有内容;该位=1,表示发送
30、缓冲寄存器空,即发送保持寄存器没有内容。注:如果UART工作在FIFO(自动流控制)方式,该位无效。UTRSTATn0:接收缓冲数据准备,即当接收缓冲寄存器收到有效数据时,该位自动设置为1。该位=0,表示没有收到有效数据,即接收保持寄存器没有内容;该位=1,表示收到有效数据,即接收保持寄存器有内容。注:如果UART工作在FIFO(自动流控制)方式,该位无效。我们看一下主程序:通过键盘输入在超级终端上显示输入内容,但每次显示一个字符。()#includeuhal.h#includemyuart.h#pragma import(_use_no_semihosting_swi) / ensure n
31、o functions that use semihosting int main(void)char c11;char err;ARMTargetInit();/开发版初始化while(1) Uart_SendByte(0,0xa);/换行Uart_SendByte(0,0xd);/回车 err=Uart_Getch(c1,0,0);/从串口采集数据 Uart_SendByte(0,c10);/显示采集的数据return 0;在这里我们重点分析函数Uart_Getch和Uart_SendByte。void Uart_SendByte(int Uartnum, U8 data)/ 开发板上的信
32、息送微机,在超级终端上显示信息。/Uartnum:UART通路号(0/1)if(Uartnum=0) while(!(rUTRSTAT0 & 0x2); /如果发送缓冲器不空,即UTRSTAT01=0,则等待。Delay(1);WrUTXH0(data);/向发送缓冲器写数据。ARM是发送方。 else while(!(rUTRSTAT1 & 0x2); /Wait until THR is empty.Delay(1);WrUTXH1(data); char Uart_Getch(char* Revdata, int Uartnum, int timeout)/通过键盘送信息给开发板int
33、i=0;if(Uartnum=0)while(!(rUTRSTAT0 & 0x1); /如果接收缓冲器空,即UTRSTAT00=0,则等待。ARM是接收方。*Revdata=RdURXH0();return TRUE;elsewhile(!(rUTRSTAT1 & 0x1);/Receive data read*Revdata=RdURXH1();return TRUE;三、软件编程1、以实验2.1为例体会编程过程。2、附加要求:编写一个带子函数的程序,子函数功能:通过超级终端输入一个字符串,该字符串是由数字构成,将该字符串转换成对应的数字,返回主函数,然后在主函数中把该返回值显示出来。第4小
34、时:端口程序的设计一、软件编程编写一个程序,要求通过程序获取ARM系统的系统时间,并通过超级终端输入三个数字,来修改系统时间的小时、分钟、秒。相关端口信息见参考文献1的4.7节(第139147页),通过这个程序提高学生对端口编程的理解和能力。第5小时:键盘和LED一、键盘操作的基本知识1、硬件电路实验箱键盘的操作依靠的是一个外接芯片ZLG7289,ZLG7289既可以接收键盘传送的信息也可以驱动LED显示,所以键盘操作和LED显示同在一个实验中。ZLG7289共有28个引脚,其中与键盘操作直接相关的引脚有4个:引脚6:,片选输入,此引脚为低电平,可以向芯片发送指令或读取键盘数据。引脚7:CLK
35、,同步时钟输入端,向芯片发送指令或读取键盘数据时,此引脚电平为上升沿表示数据有效。引脚8:DATA,串行数据输入/输出端,当芯片接收指令时此引脚为输入端,当读取键盘数据时,此引脚在读指令最后一个时钟的下降沿变成输出端。引脚9:,按键有效输出端,平时为高电平,当检测到有效按键时,此引脚变为低电平。与CPU连接:CPU ZLG7289GPB5 SIOCLK CLKSDIO DATAEXTINT4(GPG4) 2、相关寄存器SIO(Synchronous I/O)同步输入/输出的英文缩写,它是一种串行接口标准,提供了与各种串行外设相连的接口。S3C44B0X的SIO可以工作在正常操作模式下(1个字节
36、1个字节的传送),也可以工作在自动运行模式(DMA方式)下。在这里重点涉及到SIO控制寄存器(SIOCON)和SIO波特率预分频寄存器(SBRDR)。此外还有SIO间隔计数寄存器(IVTCNT),SIO DMA计数零寄存器(DCNTZ)。在打开ZLG7289时,先将SIO控制寄存器(SIOCON)和SIO波特率预分频寄存器(SBRDR)的内容保存起来,然后对这两个寄存器重新设置。SIOCON7:SIO移位时钟源的选择,0=内部时钟,1=外部时钟SIOCON6:传送数据方向的选择,0=MSB模式,1= LSB模式(MSB模式先传递高位,后传递低位,LSB正相反)SIOCON5:传送数据方式的选择
37、,0=接收模式,1= 发送/接收模式SIOCON4:时钟边沿的选择,0=时钟下降沿,1= 时钟上升沿SIOCON3:SIO开始,0=没动作,1= 清3位计数器并开始移位SIOCON2:移位操作,0=自动模式,1= 保留 SIOCON1,0:SIO模式的选择,00=无操作,01= SIO中断模式(正常),10=BDMA0模式,11=BDMA1模式。SBRDR保存波特率预分频值波特率=MCLK/2/(预分频值+1)以上设置可知ZLG7289的SIO为:内部时钟,MSB模式,发送/接收模式,时钟上升沿,无动作,自动模式(怀疑),SIO中断模式波特率=MCLK/2/(0XFF+1)rPDATB&=(Z
38、LG7289_CS)/允许ZLG7289工作在关闭ZLG7289时,将SIO控制寄存器(SIOCON)和SIO波特率预分频寄存器(SBRDR)的内容恢复。二、程序注释1、相关宏的说明#define ZLG7289_CS(0x20)/GPB5#define ZLG7289_KEY(0x10)/GPG4#define ZLG7289_ENABLE()doZlg7289SIOBand=rSBRDR;Zlg7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(ZLG7289_CS);while(0)#define ZLG7289_DISABLE()
39、dorPDATB|=ZLG7289_CS; rSBRDR=Zlg7289SIOBand; rSIOCON=Zlg7289SIOCtrl;while(0)/do-while(条件):条件为假不循环,以上只执行1次。以上两个宏定义是对ZLG7289进行打开,关闭的操作,此操作与S3C44B0X的SIO端口相关。#define WriteSDIO(data) SendSIOData(data)2、相关程序Keyboard.C#include 44b.h#include def.h#include Zlg7289.hunsigned char KeyBoard_Map=4,8,11,0,0,0,0,0
40、,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; /64,键值映射表U32 GetKey()U16 key;while(1)while(rPDATG&ZLG7289_KEY);/有键按下/当GPG4为低电平,循环结束。/初始时,外部中断控制寄存器EXTINT低电平触发。key=Zlg7289_ReadKey();/得到按键扫描码Uart_Printf(n%d,key);if(key=64)/按键值有效key
41、=KeyBoard_Mapkey;/通过键盘映射表得到按键值break;Delay(1000);return key;三、软件编程1、以实验2.2为例体会编程过程。2、附加要求:编写一个程序,要求测试出小键盘的扫描码,并把键值改成与字符一致在LCD上显示。第6小时:键盘应用程序一、软件编程编写一个程序,要求通过小键盘输入两个数据进行算术运算(其中del键盘表示求余,Enter表示等号),循环运行输入两个数的运算,直到按Lock键盘结束。把运算结果在LCD和LED上显示。输入数据可以采用函数实现,输入非数值键表示输入结束。第7小时:LCD显示一、LCD显示原理 关于嵌入式系统的显示和通用计算机的
42、显示基本一致。此ARM试验系统内存中地址0xc0xc07ffff的空间作为显示空间,其中每一个字节对应一个像素点。在这里LCD显示依靠的是对像素点的描点操作。二、软件编程1、以实验2.8为例体会编程过程。2、附加要求:编写一个程序,要求程序利用瞄点的方式在LCD上显示一个字符。首先显示一个彩色屏幕,然后通过超级终端输入一个字符,同时把输入的字符在LCD上左上角处开始显示。/LCD例程序#include 44b.h#includeuhal.h#include option.h#includedef.h#includeMyUart.h#pragma import(_use_no_semihosti
43、ng_swi) / ensure no functions that use semihosting extern U32 LCDBuffer240320;/12x8字模/U8 LCDTxtData12812=0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c,0x10,0x10,0x10,0x10,0x10,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
44、0x10,0x10,0x10,0x1c,0x0, 0x0, 0x0, 0x0, 0x0, 0x10,0x10,0x10,0x10,0x10,0x10,0xf0,0x0, 0x0, 0x0, 0x0, 0x0, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30,0x78,0x78,0x78,0x30,0x0, 0x0, 0x0, 0x0, 0xfc,0xfc,0xfc,
45、0xcc,0x84,0x84,0x84,0xcc,0xfc,0xfc,0xfc,0xfc,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c,0xc, 0xc, 0x14,0x10,0x30,0x48,0x48,0x30,0x0, 0x0, 0x0, 0x38,0x44,0x44,0x38,0x10,0x7c,0x10,0x10,0x10,0x0, 0x0, 0x0, 0x0, 0x0,
46、0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x34,0x2c,0x34,0x24,0x24,0x2c,0x6c,0x60,0x0, 0x0, 0x0, 0x54,0x54,0x28,0x28,0x6c,0x28,0x28,0x54,0x54,0x0, 0x0, 0x10,0x10,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x10,0x10,0x0, 0x4, 0xc, 0x1c,0x3c,0x7c,0x3c,0x1c,0xc, 0x4, 0x0, 0x0, 0x10,0x38,0x10,
47、0x10,0x10,0x10,0x10,0x10,0x38,0x10,0x0, 0x0, 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x0, 0x28,0x28,0x0, 0x0, 0x3c,0x54,0x54,0x54,0x34,0x14,0x14,0x14,0x14,0x14,0x0, 0x0, 0x10,0x10,0x10,0x10,0x10,0x10,0xfc,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
48、0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0, 0x0, 0x10,0x10,0x10,0x10,0x10,0x10,0x1c,0x10,0x10,0x10,0x10,0x10,0x0, 0x0, 0x0, 0x0, 0x8, 0x7c,0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20,0x7c,0x20,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
49、0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20,
50、0x20,0x20,0x20,0x20,0x20,0x0, 0x20,0x0, 0x0, 0x0, 0x28,0x50,0x50,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28,0x28,0xfc,0x28,0x50,0xfc,0x50,0x50,0x0, 0x0, 0x0, 0x20,0x78,0xa8,0xa0,0x60,0x30,0x28,0xa8,0xf0,0x20,0x0, 0x0, 0x0, 0x48,0xa8,0xb0,0x50,0x28,0x34,0x54,0x48,0x0, 0x0, 0x0, 0x0, 0x20,
51、0x50,0x50,0x78,0xa8,0xa8,0x90,0x6c,0x0, 0x0, 0x0, 0x40,0x40,0x80,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x10,0x10,0x10,0x10,0x10,0x10,0x8, 0x4, 0x0, 0x0, 0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x0, 0x0, 0x0, 0x0, 0x20,0xa8,0x70,0x70,0xa8,0x20,0x0, 0x0, 0x0, 0x0, 0x0, 0x20,
52、0x20,0x20,0xf8,0x20,0x20,0x20,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,0x40,0x80,0x0, 0x0, 0x0, 0x0, 0x0, 0xf8,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,0x0, 0x0, 0x0, 0x8, 0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x0, 0x0, 0x0, 0x70,
53、0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x0, 0x0, 0x0, 0x0, 0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x0, 0x0, 0x0, 0x0, 0x70,0x88,0x88,0x10,0x20,0x40,0x80,0xf8,0x0, 0x0, 0x0, 0x0, 0x70,0x88,0x8, 0x30,0x8, 0x8, 0x88,0x70,0x0, 0x0, 0x0, 0x0, 0x10,0x30,0x50,0x50,0x90,0x78,0x10,0x18,0x0, 0x0, 0x0, 0x0, 0xf8,
54、0x80,0x80,0xf0,0x8, 0x8, 0x88,0x70,0x0, 0x0, 0x0, 0x0, 0x70,0x90,0x80,0xf0,0x88,0x88,0x88,0x70,0x0, 0x0, 0x0, 0x0, 0xf8,0x90,0x10,0x20,0x20,0x20,0x20,0x20,0x0, 0x0, 0x0, 0x0, 0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x0, 0x0, 0x0, 0x0, 0x70,0x88,0x88,0x88,0x78,0x8, 0x48,0x70,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20,0x0, 0x0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 感染性心内膜炎抗感染治疗
- DB5307T 50-2023 丽薯系列马铃薯原原种生产技术规程
- 焊接作业安全操作制度
- 2026福建南平邵武市机关事业单位编外人员招聘31人备考题库及一套参考答案详解
- 2026上海市教师教育学院(上海市教育委员会教学研究室)招聘博士研究人员6人备考题库及参考答案详解1套
- 2026广东清远市佛冈县司法局公益性岗位招聘1人备考题库及参考答案详解一套
- 车间作业安全细则
- 2026江苏民政康复医院(江苏中大民康医院)招聘非编人员4人备考题库及完整答案详解1套
- 2026安徽老年开放大学兼职教师招聘备考题库及1套完整答案详解
- 某汽修厂维修安全准则
- 2026年高考云南卷物理高考真题
- 【计算题专项练习】人教版五年级数学下册第六单元5:分数裂项(含答案)
- 2026年执业中药师《中药学综合知识与技能》考试试题及答案解析
- 6月5日世界环境日主题班会课件
- 2026年1月热点时事素材汇编:一文纵览时事+角度+示例
- 戏曲演员考核标准手册
- 人民日报招聘笔试题库2026
- 鲁科版二年级劳动实践指导手册全册教案
- 施工项目检查考核制度
- 【2026春2完整版】二年级下册语文【1-8单元重难考点梳理】答案
- 拆除施工安全培训课件
评论
0/150
提交评论