第五章:基于裸机的程序设计方法_第1页
第五章:基于裸机的程序设计方法_第2页
第五章:基于裸机的程序设计方法_第3页
第五章:基于裸机的程序设计方法_第4页
第五章:基于裸机的程序设计方法_第5页
已阅读5页,还剩156页未读 继续免费阅读

下载本文档

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

文档简介

5CHAPTER基于裸机的程序设计方法主要内容1324串行口模块程序设计红外模块设计液晶显示模块设计USB模块程序设计5SD卡模块程序设计IIS模块程序设计接触屏模块程序设计PS/2模块程序设计678一、UART接口概述UART(UniversalAsynchronousReceiver/Transmitter,通用异步收发器)是广泛使用的串行数据传输方式,用于控制计算机与串行设备的接口。S3C2410的UART提供三个独立的异步串行I/O端口,每个都可以在中断模式或DMA模式下运行。即,其UART可以产生内部中断或DMA中断请求,从而在CPU和UART之间传输数据。UART在使用系统时钟的情况下,最高可以支持230.4Kbps的波特率。二、UART特点1基于DMA或中断操作的RxD0、TxD0、RxD1、TxD1、RxD2和TxD2;2UART通道0,1,2符合IrDA1.0标准,并且具有16字节的FIFO;3UART通道0和1具有nRTS0、nCTS0、nRTS1

和nCTS1;4接收/发送时支持握手模式。三、UART操作UART的操作包括数据发送、数据接收、中断发生、波特率发生、回送模式、红外模式和自动流控制等。(1)数据发送发送的数据帧可编程,一个起始位,5~8个数据位,一个可选的奇偶校验位和1~2个停止位组成,通过行控制器(ULCONn)来设置。发送器也能产生暂停条件,使串口在一帧的发送期间连续输出若干个0。当前发送的字完全发送之后,暂停条件发送信号,这个信号发送之后,继续发送数据到TxFIFO中。

UART操作(2)数据接收与数据发送一样,接收的数据帧也是可编程的,它由一个起始位,5~8个数据位,一个可选的奇偶校验位和1~2个停止位组成,这些也通过行控制器(ULCONn)来设置。接收器可以检测溢出错误和帧错误。溢出错误表示新的数据在旧的数据没有被读取的情况下,覆盖了旧的数据。帧错误表示接收的数据没有有效的停止位。

UART操作(3)自动流控制(AutoFlowControl,AFC)

S3C2410的UART0和UART1通过nRTS和nCTS信号支持自动流控制,以此实现与外部UART的连接。如果用户想把UART连接到Modem上,需要禁止UMCONn的自动流控制位并且通过软件控制nRTS信号。在AFC模式下,nRTS根据接收器的状态和nCTS信号控制发送器的操作。UART操作(4)RS-232C接口RS-232C是EIA(美国电子工业协会)制定的一种串行通信接口标准。通常RS-232接口以9个引脚(DB-9)或25个引脚(DB-25)的形态出现,常用的一般是DB-9。简单地通过RS-232C接口进行通信时,只需要连接发送数据线、接收数据线和信号地,称为三线连接。UART操作(5)中断/DMA请求的产生S3C2410的每一个UART有5个状态(Tx/Rx/Error)信号:溢出错误、帧错误、接收缓冲数据准备好、发送缓冲区为空和发送移位寄存器空。这些状态通过读取UART状态寄存器(UTRSTATn/UERSTATn)来获取UART操作

在FIFO模式下,如果采用中断请求和查询模式,当发送器将发送FIFO寄存器中的数据传输到发送移位寄存器中,并且发送FIFO寄存器中剩余的数据量达到TxFIFO的触发水平时,Tx中断产生。在非FIFO模式下,如果采用中断请求和查询模式,当把数据从发送保持寄存器中传输到发送移位寄存器时,将会引起Tx中断。 如果控制寄存器中的接收和发送模式位设置为DMAn请求模式,则以上提到的情况下产生的中断是DMAn请求,而不是Rx或Tx中断。

UART操作(6)波特率发生

每个UART的波特率发生器为发送器和接收器提供连续的时钟。时钟源可以选择S3C2410的内部系统时钟或者UEXTCLK。UBRDIVn的值可以通过以下表达式确定:

UBRDIVn=(int)(PCLK/(bps×16))-1

在这里,除数因子的值在1到216-1之间。UART操作(6)波特率发生为了使UART操作精确,S3C2410还支持UEXTCLK作为被除数。

UBRDIVn的值可以由以下表达式确定:

UBRDIVn=(int)(UEXTCLK/(bps×16))-1 在这里,除数因子的值在1~216-1之间,并且UEXTCLK应该小PCLK。

UART操作(7)回送模式

S3C2410的UART提供一个测试模式,即回送模式,以解决通信链接中出现的孤立错误。这种模式在结构上可以使能UART上RXD和TXD之间的连接。因此,在这种模式下发送的数据通过RXD被接收器接收。这个特点使处理器能够检验内部的发送和接收每个SIO通道的数据路径。这种模式可以通过设置UART控制寄存器(UCONn)中的回送模式位进行选择。UART操作(8)红外模式

S3C2410的UART模块支持红外发送和接收,可以通过设置UART行控制寄存器(ULCONn)中的红外模式位进行选择。四、UART特殊功能寄存器1、UART行控制寄存器(ULCONn)

UART模块中含有ULCON0、ULCON1、ULCON2三个行控制寄存器,均是可读/写的,地址分别为0x50000000、0x50004000、0x50008000。行控制寄存器主要用来规定传输帧的格式。UART特殊功能寄存器2、UART控制寄存器(UCONn)

UART模块中含有三个控制寄存器,即UCON0、UCON1和UCON2,均是可读/写的,地址分别是0x50000004、0x50004004、0x50008004。

UCONn主要用于定义发送数据模式和接收数据模式。UART特殊功能寄存器3、UARTFIFO控制寄存器(UFCONn)

UART模块中含有三个UARTFIFO控制寄存器,即UFCON0、UFCON1、UFCON2,均是可读/写的,地址分别为0x50000008、0x50004008、0x50008008。

UART特殊功能寄存器4、UARTTx/Rx状态寄存器(UTRSTATn)

UART模块中含有UTRSTAT0、UTRSTAT1和UTRSTAT2三个UARTTx/Rx状态寄存器,均是只读的,地址分别为0x50000010、0x50004010、0x50008010。UTRSTATn主要功能是读取相应通道的接收和发送状态。UART特殊功能寄存器5、UART错误状态寄存器

UART模块中含有UERSTA0、UERSTAT1和UERSTAT2三个UART错误状态寄存器,均是只读的,地址分别为0x50000014、0x50004014、0x50008014。UART特殊功能寄存器6、UARTFIFO状态寄存器

UART模块中含有UFSTAT0、UFSTAT1、UFSTAT2三个UARTFIFO状态寄存器,均是只读的,地址分别为0x50000018、0x50004018、0x50008018。UART特殊功能寄存器7、UART发送/接收缓冲寄存器

UART模块中含有UTXH0、UTXH1和UTXH2三个UART发送缓冲寄存器,均是只写的,地址分别为0x0x50000020、0x50004020和0x50008020。UART模块中还含有URXH0、URXH1、URXH2三个接收缓冲寄存器,均是只读的,地址分别为0x50000024、0x50004024和0x50008024,这些发送/接收缓冲寄存器用于存放发送和接收的数据。UART特殊功能寄存器8、UART波特率分频寄存器

UART模块中含有UBRDIV0、UBRDIV1和UBRDIV2三个UART波特率分频寄存器,用来设置串行Tx/Rx的波特率。UBRDIVn值的计算公式如下:

UBRDIVn=(int)(PCLK/(bps×16))-1

UBRDIVn=(int)(UEXTCLK/(bps×16))-1

在这里,除数因子的值在1到216-1之间,并且UEXTCLK的值应该比PCLK小。

五、UART编程实例

本实例通过编程实现了从键盘上输入字符串,通过串口发送给S3C2410的UART0,再将从UART0接收的字符串回送显示。仅实现了UART0简单的数据发送接收功能,因此UART0只需RXD0和TXD0两根接线,采用MAX3232作为电平转换器。UART编程实例串口电路如图所示:UART编程实例(1)初始化串口操作函数uart_init()用于UART串口初始化,参数nMainClk表示源时钟的时钟频率,nBaud表示波特率,nChannel表示选择的UART通道,这里选择UART0。初始化需要设置的内容主要有数据位数、停止位、奇偶校验、波特率、选择中断或查询模式、是否使用FIFO等。UART编程实例(2)发送字符操作函数uart_sendbyte()用于发送一字节大小的数据nData。宏定义 #defineWrUTXH0(ch)(*(volatileunsignedchar*)0x50000020)=(unsignedchar)(ch) 用于向发送缓冲寄存器UTXH0中写入发送的数据,本实验采用查询的方式收发数据UART编程实例(3)接收字符操作函数uart_getch()用于接收字符操作,函数返回接收的字符,若没有接收到则返回NULL。 宏定义#defineRdURXH0()(*(volatileunsignedchar*)0x50000024)用于获得接收缓冲寄存器URXH0中的数据。接收操作与发送操作相似,应不断查询寄存器UTRSTAT0[0]是否为1,以等待UART0接收数据。六、实验操作步骤及现象

本书中不带操作系统的实验在Keil环境下进行,采用把程序下载到Flash中调试的方法。主要操作步骤如下:(1)使用串口线连接目标板上的UART0和PC机的串口COM1,在PC机上运行超级终端(波特率115200、1位停止位、无校验位、无硬件流控制),或者使用其他串口程序。使用ULINK2仿真器连接PC机的USB接口和目标板上的JTAG接口。实验操作步骤及现象(2)打开uart_test工程,单击工程属性快捷键,打开工程属性设置窗口,选择C/C++标签页,设置编译器属性。选择优化选项,同时包含头文件的目录。(3)选择Asm标签页进行汇编器属性配置,选择包含头文件的目录。

实验操作步骤及现象(4)选择Linker标签页进行链接器配置,如图5-6所示。在链接器的属性配置中,主要添加分散加载文件,即添加RuninFlash.sct路径。RuninFlash.sct中指定了代码的存储布局,将代码段、只读数据段、可读写的数据段分别存放。实验操作步骤及现象(5)选择Debug标签页进行调试属性配置,如图5-7所示,包括选择仿真器ULINKARMDebugger,添加调试脚本Flash.ini,设置调试方式等。调试脚本除了可以初始化软硬件的调试环境以外,还可以初始化Flash的烧写环境。实验操作步骤及现象(6)选择Utilities标签页进行烧写选项配置,如图5-8所示。选上“UpdateTargetbeforeDebugging”,并添加调试脚本Flash.ini。接下来点击“Settings”按钮,添加Flash烧写算法。已知S3C2410开发板用到的烧写算法为AM29F160DBFlash,因此,只需在点击“Add”按钮后,在里面找到对应的算法即可。

实验操作步骤及现象(7)编译链接工程,对出现的错误警告进行相应修改后重新编译。(8)点击Debug调试快捷键,将生成的.axf文件下载到Flash中进行在线调试,或者直接点击,将.asf文件下到NorFlash中。(9)单击执行程序,通过键盘输入字符串,最后按回车,观察超级终端输出信息。实验正确结果应该是超级终端上显示输入的字符串。主要内容1324串行口模块程序设计红外模块设计液晶显示模块设计USB模块程序设计5SD卡模块程序设计IIS模块程序设计接触屏模块程序设计PS/2模块程序设计678一、红外数据传输概述红外数据传输适用于低成本、跨平台、点对点的高速数据传输,尤其是嵌入式系统。红外线是波长在750nm~1mm之间的电磁波,是人眼看不到的光线。红外数据传输一般采用红外波段内的近红外线,波长在0.75μm~25μm之间。红外数据协会成立以后,为保证不同厂商的红外线产品能获得最佳的通信效果,限定所用红外线波长在850nm~900nm之间。红外数据传输概述IrDA制定了很多红外通信协议,IrDA1.0协议基于异步收发器UART,最高通信速率在115.2kbps,简称SIR(SerialInfrared,串行红外协议)。IrDA1.1协议提高通信速率到4Mbps,简称FIR(FastInfrared,快速红外协议),同时在低速时保留1.0协议规定。之后,IrDA又推出了最高通信速率在16Mbps的协议,简称VFIR(VeryFastInfrared,特速红外协议)。红外数据传输概述红外传输距离在几厘米到几十米,发射角度通常在0°~15°,发射强度与接收灵敏度因不同器件和不同应用设计而强弱不一。使用时只能以半双工方式进行红外通信。红外收发器件集发射与接收为一体,通常,器件的发射部分含有驱动器,接收部分含有放大器,并且内部集成了关断控制逻辑。关断控制逻辑在发送时关断接收,以避免引入干扰;不使用红外传输时,该控制逻辑通过SD引脚接收指令,关闭器件电源供应,以降耗节能。使用器件时需要在LED引脚接入适当的限流电阻。二、红外收发芯ZHX1010概述

ZHX1010SIR收发器适用于便携式低功耗产品,比如手机、数码相机、便携式打印机、笔记本电脑或PDA等。ZHX1010在1米范围内的最高速度可达115.2kbps,供电范围较宽(2.4~5.5V),可方便地与各种电压的CPU进行接口。二、红外收发芯ZHX1010概述

ZHX1010内部集成了红外发射二极管、一个红外检测二极管、一个数组AC耦合驱动、一个接收器解码电路。ZHX1010在3V供电时,电流仅有90µA,非常适用于电池供电产品。它的外围电路也极其简单,只需要一个外部电阻和一个外部电容即可工作。红外收发芯ZHX1010概述ZHX1010有LEDA、TXD、RXD、SD、Vcc和GND共6个引脚,与LEDA内部与RED红外发光二极管相连,外部接一限流电阻到Vcc,用于提供工作电流。TXD是数据发送引脚,内部带有下拉电阻,可以直接与MPU的数据发送端相连,当器件进入省电模式时,该下拉电阻开路。RXD是接收到红外数据后的输出脚,是一个三态输出引脚,该引脚无需外接电阻。SD是省电模式控制引脚,该引脚输入高电平时ZHX1010进入省电模式,此时最大电流仅有1µA。

三、红外发送数据编程实例

本例实现了把红外模块ZHX1010收到的数据发送给S3C2410的UART1,保存并通过超级终端的主窗口显示。因此,UART1需工作在红外模式下,而且应使其波特率可调,以适用于不同通信距离的应用场合。ZHX1010与S3C2410的具体电路连接方式如下图所示。红外发送数据编程实例

具体电路连接方式:红外发送数据编程实例

(1)红外发送主程序 主要设置了UART的波特率和数据发收模式,开启了红外传输的RXD1和ERR1中断。当遥控器向ZHX1010发送数据时,进入中断服务程序,对数据进行接收。(2)中断服务子程序中断服务子程序irda_rx_or_err()判断具体的中断源是RXD1中断还是ERR1中断,跳入对应的函数进行处理。如果中断源是RXD1,则接收数据保存并打印;如果中断源是ERR1,则打印错误信息。四、实验操作步骤及现象

(1)将实验箱上的跳线SW503、SW504端口(1、2、3都不接)。(2)使用串口线连接目标板上的UART0和PC机的串口COM1,在PC机上运行超级终端(波特率115200、1位停止位、无校验位、无硬件流控制),或者使用其他串口程序。使用ULINK2仿真器连接PC机的USB接口和目标板上的JTAG接口。(3)打开irda_test工程,编译链接后下载到FLASH中,运行程序,按照提示使用PC机键盘选择红外数据传输的波特率。例如输入“2”,选择波特率为19.2Kbps,出现等待接收红外信号界面:

rUBRDIV1=164Now…RxwithIrDA(4)按遥控器,出现接收到信号。主要内容1324串行口模块程序设计红外模块设计液晶显示模块设计USB模块程序设计5SD卡模块程序设计IIS模块程序设计接触屏模块程序设计PS/2模块程序设计678一、LCD显示器介绍LCD(LiquidCrystalDisplay,液晶显示器)主要用于显示文本及图形信息。它具有轻薄、体积小、耗电量低、无辐射危险、平面直角显示及影像稳定不闪烁的特点,因此在许多电子应用系统中,常常使用液晶屏作为人机界面。LCD由两块玻璃板构成,其间由液晶材料分隔开。当受到外界电场影响时,液晶分子会产生精确的有序排列。对分子的排列加以适当的控制,液晶分子将会允许光线穿越。因为液晶材料本身并不发光,因此在显示屏两边都设有作为光源的灯管,而在液晶显示器背面有一块背光板和反光膜,背光板是由荧光物质组成的,可以发射光线,其作用主要是提供均匀的背景光源。LCD显示器介绍背光板发出的光线在穿过第一层偏振过滤层后,进入液晶层。液晶层中的液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。每个单元格由一个电极控制,通过改变单元格上电极的电压状态,就能控制单元格内液晶分子的排列,从而控制光路的通断。通常,在彩色LCD面板中,每一个像素都由三个液晶单元格构成,其中每一个单元格前都分别有红色、绿色或蓝色的过滤器,通过不同单元格的光线就可以在屏幕上显示出不同的颜色。LCD显示器介绍液晶显示屏按照显示原理分为STN-LCD(SuperTN-LCD,超扭曲向列LCD)和TFT-LCD(ThinFilmTransistor-LCD,薄膜晶体管LCD)两种。STN在亮度及可视角方面受到较大限制,反应速度较慢,分辨率也不高,但成本比较低廉,因此一般用于一些对图像分辨率和要求不是很高,小尺寸电子显示的领域,例如手表、传真机、移动电话、电子词典等。TFT液晶显示器响应快,显示品质好,适用于大型动画显示,被广泛应用于笔记本电脑、计算机显示器、液晶电视等产品。二、S3C2410的LCD控制器

S3C2410处理器集成了LCD控制器,它的主要功能是传输显示数据和产生控制信号。LCD控制器可以采用时间抖动算法和帧率控制算法,支持规格每像素2位(4级灰度)或4位(16级灰度)的黑白LCD,也可以支持每像素8位(256色)、12位(4096色)的彩色STNLCD。还可以支持每像素1位、2位、4位和8位的调色板显示模式和每像素16、24位的非调色板真彩显示。LCD控制器可以通过编程支持不同LCD屏的要求,例如行和列的像素数、数据宽度、接口时序以及刷新率等

S3C2410的LCD控制器

S3C2410的LCD控制器有33个外部接口信号,包括24个数据位和9个控制位。与STNLCD相关的外部接口信号有以下几个:(1)VFRAME:LCD控制器和LCD驱动器之间的帧同步信号。(2)VLINE:LCD控制器和LCD驱动器之间的同步脉冲信号(3)VCLK:LCD控制器和LCD驱动器之间的像素时钟信号。(4)VM:LCD驱动器的交流信号。S3C2410的LCD控制器

S3C2410的LCD控制器用于传送数据和产生必要的控制信号,例如VFRAME、VLINE、VCLK和VM等。LCD控制器由REGBANK、LCDCDMA、VIDPRCS、TIMEGEN和LPC3600组成,如图5-11所示。REGBANK具有17个可编程寄存器,用于配置LCD控制器。LCDCDMA是一个专用的DMA,自动将帧内存的显示数据传送到LCD驱动器中。通过使用这个专用DMA,可以在不需要CPU介入的情况下显示数据。VIDPRCS从LCDCDMA中接收数据,将相应格式(比如4/8位单扫描或4位双扫描显示模式)的数据通过VD[23:0]端口发送到LCD驱动器。TIMEGEN模块由可编程逻辑组成,支持不同的LCD驱动器中不同接口时序和速率的要求。TIMEGEN模块产生VFRAME、VLINE、VCLK和VM等控制信号。S3C2410的LCD控制器

LCD控制器的结构框图

三、STNLCD控制器操作

S3C2410能够支持STNLCD和TFTLCD,这两种LCD屏在显示时有很大差别,而且所涉及到的寄存器也会不同。Embest

EduKit-III实验平台采用的是STNLCD。四、点阵字库原理

(1)汉字点阵字库结构及显示原理在GB2312-80标准中,所有的汉字分为94个区,每个区有94个位可以存放94个汉字,这种汉字编码方式即为区位码。在计算机中,英文可以用ASCII码来表示,而汉字使用的是两个码值大于128的扩展ASCII码,称为汉字内码。

点阵字库原理

其中: 汉字内码的第一个字节=区码+80h+20h

汉字内码的第二个字节=位码+80h+20h

由此可以计算出一个汉字的区位码为: 区码=内码的第一个字节-128-32 =内码的第一个字节-160

位码=内码的第二个字节-128-32 =内码的第二个字节-160点阵字库原理(2)英文点阵字库原理英文点阵字库的原理与汉字基本相同,唯一不同的是在点阵字库的寻址上,英文使用的就是ASCII码,码值为0~127,寻址公式为:

location=ASCII码×一个英文字模占用的字节数。点阵字库原理通过以上介绍可以看出,区分中英文的关键就是标示字符的码是ASCII码还是扩展ASCII码,如果是ASCII码,则为英文字库,如果是扩展ASCII码,则与其后的另一个扩展ASCII码组成汉字内码,使用中文字库进行显示。只要正确区分ASCII码的类型并进行分别处理,也就能实现中英文字符串的混合输出了。在嵌入式系统中有时需要显示的汉字不多,可以利用字模提取软件提取所需的字模建立小字库,从而达到节省存储空间的目的。五、S3C2410的LCD相关寄存器S3C2410的LCD控制器包含16个相关寄存器,用户通过设置相关寄存器来控制LCD的显示。下面对这些寄存器进行具体说明。

(1)LCD控制寄存器1(LCDCON1)

LCDCON1寄存器是可读/写的,地址为0x4D000000,主要用于确定VCLK、VM的速率,选择显示模式,选择BPP模式和确定LCD视频输出使能。S3C2410的LCD相关寄存器(2)LCD控制寄存器2(LCDCON2)

LCDCON2寄存器是可读/写的,地址为0x4D000004,主要用于定义时间间隔(3)LCD控制寄存器3(LCDCON3)

LCDCON3寄存器是可读/写的,地址为0x4D000008(4)LCD控制寄存器4(LCDCON4)

LCDCON4寄存器是可读/写的,地址为0x4D00000CS3C2410的LCD相关寄存器(5)LCD控制寄存器5(LCDCON5)

LCDCON5寄存器是可读/写的,地址是0x4D000000,主要用于确定相关信号的格式和极性(6)帧缓冲起始地址寄存器1(LCDSADDR1) LCDSADDR1寄存器是可读/写的,地址为0x4D000014(7)帧缓冲起始地址寄存器2(LCDSADDR2) LCDSADDR2寄存器是可读/写的,地址为0x4D000018S3C2410的LCD相关寄存器(8)帧缓冲起始地址寄存器3(LCDSADDR3) LCDSADDR3寄存器是可读/写的,地址为0x4D00001C(9)红色查找表寄存器(REDLUT)

REDLUT寄存器是可读/写的,地址为0x4D000020,可以从该寄存器的位[31:0]中查找不同的红色值S3C2410的LCD相关寄存器(10)绿色查找表寄存器(GREENLUT)

GREENLUT寄存器是可读/写的,地址为0x4D000024,可以从该寄存器的位[31:0]中查找不同的绿色值(11)蓝色查找表寄存器(BLUELUT)

BLUELUT寄存器是可读/写的,地址为0x4D000028,可以从该寄存器的位[15:0]中查找不同的蓝色值S3C2410的LCD相关寄存器(12)抖动模式寄存器(DITHMODE)

DITHMODE寄存器是STNLCD显示控制器的抖动模式寄存器,可进行读/写。对于不同的LCD,此寄存器设置为0x00000或0x12210两个值(13)临时调色板寄存器(TPAL)

TPAL寄存器主要功能包括是否开启临时调色板以及设置临时调色板的值,该寄存器是可读/写的,地址为0x4D000050S3C2410的LCD相关寄存器(14)LCD中断挂起寄存器(LCDINTPND)

LCDINTPND寄存器是可读/写的,地址为0x4D000054,用于定义相关中断未决位(15)LCD源挂起寄存器(LCDSRCPND)

LCDSRCPND寄存器是可读/写的,地址为0x4D000058,用于定义相关中断源未决位(16)LCD中断屏蔽寄存器(LCDINTMSK)

LCDINTMSK寄存器是可读/写的,地址为0x4D00005C,用于确定LCDFIFO的触发级别以及屏蔽相关中断六、LCD显示的编程实例

本实验采用的是320×240像素的256色STN液晶屏,通过编程控制相关寄存器,在LCD上显示字符、几何图形和图片文件。使用液晶显示屏最基本的是像素控制数据的使用,像素控制数据的存放与传输格式,决定了显示的效果,这也是所有显示控制的基本程序设计思想。实现了在LCD上的特定位置显示像素点,再通过编程对这些点进行不同排列,就能实现显示字符、几何图形和位图。LCD显示的编程实例

(1)LCD初始化函数Lcd_Init()通过switch语句实现了对不同LCD的初始化方法,主要根据实际的LCD配置相关寄存器LCDCON1~LCDCON5、LCDADDR1~LCDADDR3、LCDINTMSK、DITHMODE、TPAL寄存器等。本实验中用的STN采用8位单扫描方式。LCD显示的编程实例

(2)画点函数画点函数是所有图形显示操作的基础,它实现了在LCD上特定位置改变像素颜色的功能。画点的实质就是修改帧缓冲区的数据,从而引起显示屏上相应位置图像的变化。(3)画线算法及代码画出比较平直的直线,一般采用Bresenham算法。其原理是过各行各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。七、实验操作步骤及现象

(1)使用串口线连接目标板上的UART0和PC机的串口COM1,在PC机上运行超级终端(波特率115200、1位停止位、无校验位、无硬件流控制),或者使用其他串口程序。使用ULINK2仿真器连接PC机的USB接口和目标板上的JTAG接口。(2)打开LCD_TEST工程,编译链接后下载到开发板FLASH上,运行程序,观察LCD液晶屏上显示的字符、几何图形和图片。实验操作步骤及现象

(3)如果想要更换图片,需要使用软件Image2Lcd将图片转换为数组形式存放,具体方法为打开Image2Lcd,如图5-12所示,点击“打开”选择要转换的图片文件,选择输出数据类型为C语言数组,扫描形式为水平扫描,输出灰度为256色,最大宽度和高度为320和240。最后选择“保存”,选择数组文件保存的路径。主要内容1324串行口模块程序设计红外模块设计液晶显示模块设计USB模块程序设计5SD卡模块程序设计IIS模块程序设计接触屏模块程序设计PS/2模块程序设计678一、USB基础知识(1)USB的定义及主要特点

USB(UniversalSerialBus,通用串行总线)是一种可以同时处理计算机与具有USB接口的多种外设之间通信的电缆总线。USB有以下主要特点:①支持即插即用。允许外设在主机和其他外设进行工作时,进行连接、配置、使用以及移除。

USB基础知识②传输速度快。USB支持三种设备传输速率:低速设备1.5Mb/s、中速设备12Mb/s和高速设备480Mb/s。③可连接多个外部设备。USB可以通过串行连接或者使用集线器Hub连接127个USB设备,从而以一个串行通道取代PC上其他I/O端口如串行口、并行口等,使PC与外设之间的连接更容易。④较强的纠错能力。USB系统可以实时地管理设备插拔。在USB协议中包含了传输错误管理、错误恢复等功能,同时根据不同的传输类型来处理传输错误。USB基础知识⑤总线供电。USB总线可为连接在其上的设备提供5V电压/100mA电流的供电,最大可提供500mA的电流。USB设备也可以采用自供电方式。⑥低成本。USB接口电路简单,易于实现,特别是低速设备,成本比串口和并口低。USB基础知识(2)数据传输类型针对设备对系统资源需求的不同,USB规范中规定了四种不同的数据传输方式:①控制传输(Control),用来处理主机到USB设备的数据传输,包括设备控制、设备状态查询以及确认命令,当USB设备收到这些数据和命令后,将依据先进先出的原则处理到达的数据。端点0只可以采用控制传输的方式。②批量传输(Bulk),用于进行批量的、非实时的数据传输。该方式不能保证传输的速率,但可以保证数据的可靠性,当出现错误时,会要求发送方重新发送数据。通常打印机、扫描仪和数码相机以这种方式与主机连接。USB基础知识③同步传输(Isochronous),用于那些要求连续传输数据,且对数据的正确性要求不高而对时间极为敏感的外部设备,如麦克风、喇叭及电话等。同步传输方式以固定的传输速率,连续不断地在主机与USB设备之间传输数据。在传输数据发生错误时,USB并不处理这些错误,而是继续传送新的数据。同步传输方式的发送方和接收方都必须保证传输速率的匹配,否则会造成数据的丢失。④中断传输(Interrupt),用来传输数据量较小,但需要及时处理,以达到实时效果的设备,如鼠标、键盘、操纵杆等。USB基础知识(3)USB总线协议

USB总线是一种轮询方式的总线,主机控制端口初始化所有的数据传输,大部分总线事务涉及三个包的传输。按照传输前制定好的原则,在每次传送开始时,主机控制器发送一个描述传输种类、方向,USB设备地址和端点号的USB数据包,这个数据包通常称为标志包(tokenpacket)。标志包发送后,发送端发送包含信息的数据包(datapacket),或表明没有数据传送,接收端相应发送一个握手包(handshakepacket),表明是否传送成功。USB基础知识发送端和接收端之间的USB数据传输,在主机和设备的端口之间,可视为一个管道。管道有流和消息两种类型,消息数据具有USB所定义的结构,而流数据没有。管道与数据带宽、传送服务类型,端点特性(如方向和缓冲区大小)有关。多数管道在USB设备设置完成后存在,但有一个特殊的通道——缺省控制管道,它属于消息管道,当设备加电时即存在,为设备的设置、查询状况和输入控制信息提供入口。二、S3C2410USB设备控制器

S3C2410芯片中集成有USB设备控制器,具有集成的USB收发器(12Mbit/s),批量传输的DMA接口,5个带有FIFO的端点,支持DMA接口在大端口上的接收和发送,并支持挂起和远程唤醒功能。USB设备控制器中,所有的寄存器都是通过字节或字方式进行访问,在小端和大端方式下,访问的偏移地址会有所不同。

S3C2410USB设备控制器

通过操作相应的控制寄存器、状态寄存器、中断寄存器和数据寄存器,可以管理和使用USB设备控制器提供的端点。其中,控制寄存器用于设置端点的工作模式、启用端点的功能等;状态寄存器用于查询端点的当前状态;中断寄存器用于设置端点的中断触发和响应功能;数据寄存器是设备与主机交换数据用的缓冲区。三、USB设备收发数据编程实例

本实例采用批量传输方式,实现了PC机端USB主机与实验板USB设备进行数据的接收和发送。端点1为批量输入端点,端点3为批量输出端点。端点3数据的批量传输由DMA接口实现。在所有的操作之前,必须对S3C2410的杂项控制器进行如下设置:

rMISCCR=rMISCCR&~(1<<3); //使用USB设备而不是USB主机功能

rMISCCR=rMISCCR&~(1<<13); //使用USB端口1模式USB设备收发数据编程实例

(1)初始化USB

在使用USB之前必须要进行初始化。USB主机和USB设备接口都需要48MHz的时钟频率。在S3C2410中,这个时钟是由UPLL(USB专用PLL)来提供的。USB初始化的第一步就是要对UPLL控制器进行设置。USB设备收发数据编程实例

在UXB1.x规范中,规定了5种标准的USB描述符:设备描述符(DeviceDescriptor)、配置描述符(ConfigurationDescriptor)、接口描述符(InterfaceDescriptor)、端点描述符(EndPointDescriptor)和字符串描述符(StringDescriptor)。每个USB设备只有一个设备描述符,而一个设备中可以包含一个或多个配置描述符,即USB设备可以支持多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口),接口的特性通过接口描述符提供。在Embest

Edukit-III实验平台的USB设备中只有一种配置,支持一种功能。关于设备描述符表的初始化及配置由下面的两个函数实现:USB设备收发数据编程实例

InitDescriptorTable(); //初始化描述符表

ConfigUsbd(); //设备的配置 在函数ConfigUsbd()中,将USB设备控制器的端点0设置为控制端点,端点1设置为批量输入端点,端点3设置为批量输出端点,端点2和端点4暂时没有使用。同时,还使能了端点0,1,3的中断和USB的复位中断。

rEP_INT_EN_REG=EP0_INT|EP1_INT|EP3_INT; rUSB_INT_EN_REG=RESET_INT;

除此之外,初始化过程还对中断服务程序入口等进行了设置。USB设备收发数据编程实例

(2)USB中断

S3C2410能够接收56个中断源的请求,当它接收到来自USB设备的中断请求时,就会将SRCPND寄存器的INT_USBD置位,经过仲裁之后,中断控制器就向内核发送IRQ中断请求。(3)USB中断服务例程 当内核接收USB设备的中断请求之后,就会转入相应的中断服务程序运行。这个中断服务程序入口是在USB初始化时设置的。

pISR_USBD=(unsigned)IsrUsbd;

中断服务程序IsrUsbd主要判断中断类型,再转入相应的程序进行处理。USB设备收发数据编程实例

(4)USB读写

USB设备的读写通过管道来完成,管道式USB设备和USB主机之间数据通信的逻辑通道,它的物理介质就是USB系统中的数据线。在设备端,管道的主体是端点,每个端点占据各自的管道和USB主机通信。 所有的设备都需要有支持控制传输的端点,协议将端点0定义为设备默认的控制端点。在设备正常工作之前,USB主机必须为设备分配总线上唯一的设备地址,并完成读取设备的各种描述符,根据描述符的需求为设备的端点配置管道,分配带宽等工作。另外,在设备的工作过程中,主机希望及时获取设备的当前状态,也是通过端点0来完成的。四、实验步骤本实例在运行时,需要借助USB数据传送演示软件DNW.exe一起调试并观察实验结果。具体步骤如下:(1)编译通过后,运行程序。一定要在程序下载运行正确后,才可以进行安装驱动。(2)用USB线连接目标板的USB接口到主机的USB接口,第一次运行时将会出现驱动安装对话框,将安装路径指向到USB的driver文件夹,点击确认安装。实验步骤(3)运行调试工具DNW.exe,进行适当配置,选择波特率为115200,使用COM1接口。注意USBPort的DownloadAddress设置应该在系统的RAM空间,且不能和当前运行的程序空间重叠,例如0x30200000。如果设置正确,程序运行时,DNW的标题栏上会显示信息:[COM1,115200bps][USB:OK],表明串口和USB连接成功。(4)在SelectMenu中,选择[1],给出要下载到的SDRAM地址,可以看到提示信息:USBhostisconnected.Waitingadownload.

选择USBPort->Transmit,即可进行文件的下载。 选择USBPort->RxTest,接收来自USB设备端点1上发送的测试数据。 选择USBPort->Status,可以观察USB的状态。

主要内容1324串行口模块程序设计红外模块设计液晶显示模块设计USB模块程序设计5SD卡模块程序设计IIS模块程序设计接触屏模块程序设计PS/2模块程序设计678一、SD卡概述SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制,是一种基于Flash的新一代存储器,它的容量大,性价比高,体积小并且访问接口简单,被广泛应用于各种数码产品如手机、大容量存储设备中。标准SD的外形尺寸是24mm×32mm×2.1mm,采用9芯的接口,CLK为时钟线,CMD为命令/响应线,DAT0-DAT3为双向数据传输线,VDD、VSS1和VSS2为电源和地。SD卡系统支持SD模式和SPI模式,不同的通信模式下,SD卡的引脚定义不同。

SD卡概述SPI是串行的工作模式,速度相对较低,但是使用方便,只要MPU含有SPI接口均可使用。SD模式可以最多4线传输,因此速度比较快,由于SD卡的普及,越来越多的MPU内部集成了SD控制器,简化了工作。本章仅以S3C2410为例讨论最常用的SD协议。

SD卡概述SD总线是一个星型的总线结构,系统初始化时,主控制器分别为每个设备分配一个设备地址,此后主控制器就可以根据此设备地址独立操作该设备。SD总线通信基于命令和数据位流,SD命令由命令线CMD进行传输,每个SD命令表示一个卡操作的开始,SD卡在收到命令后,会向主控制器发送一个应答信号,表示已经接受了一个命令。应答信号也传输在CMD线上。有小部分的命令没有应答信号,这取决于命令类型。SD数据传输是双向的,所有数据都在数据线上进行传输,每个数据流都包括一个起始位和一个结束位。二、S3C2410的SD主控制器

S3C2410的SD主控制器支持MMC/SD卡和SDIO设备,它完成了协议上的很多工作,用户只需要按照协议配置寄存器,以及按照协议流程对SD卡操作,就可以完成SD卡的功能了。S3C2410的SD卡接口电路如下图所示:S3C2410的SD主控制器

S3C2410的SD卡接口电路:S3C2410的SD主控制器

使用S3C2410控制SD卡工作,需要配置的寄存器主要有以下几个:(1)SDI控制寄存器(SDICON)

SDICON寄存器主要用于完成SD卡基础配置,包括大小端、中断允许、模式选择、时钟使能等,它是可读/写的,地址为0x5A000000。

S3C2410的SD主控制器

(2)SDI波特率预分频寄存器(SDIPRE)

SDIPRE主要用于对SDCLK的配置,它是可读/写的,地址为0x5A000004(3)SDI命令参数寄存器(SDICARG)

SDICARG寄存器用于存放指令的参数,它是可读/写的,地址为0x5A000008(4)SDI命令控制寄存器(SDICCON)

SDICCON寄存器用于控制指令形式,配置SPI还是SDI指令,指令的反馈长度,是否等待反馈,是否运行指令,指令的索引等。它是可读/写的,地址为0x5A00000CS3C2410的SD主控制器

SD卡发送命令时,需要按以下步骤配置寄存器:(1)向SDICARG寄存器中写入命令参数。(2)定义命令形式并且通过设置SDICCON[8]位开始令。(3)当SDISTA的特定标志被设置时,确认SDI命令操作的结果,如果命令的类型为无答应类型,那么这个标记为SDICSTA[11],如果命令的类型为有答应类型,那么这个标记为SDICSTA[9]。(4)通过写1到SDICSTA的标记位上,从而清除相应的位。三、SD卡的操作步骤

(1)初始化操作步骤:①配置时钟,设置工作模式。在初始化时,设备需要工作在一个较低的频率,一般为400KHz。设置完时钟和工作模式后,延时至少74SDCLK,等待SD卡内部操作完成。②发送CMD0命令,初始化SD卡,让SD卡进入空闲态,SD卡获得一个缺省的地址0(相对卡地址RCA=0x0)。如果CS引脚被拉低,卡将转到SPI模式。③发送ACMD41命令,判断目标卡是SD卡还是MMC卡。但是ACMD命令是特殊用途命令,使用之前应该先发送CMD55命令来声明。

SD卡的操作步骤④发送CMD2命令,以获得SD卡的标识号CID,验证SD卡是否接入。⑥配置高速时钟,准备数据传输。一般设置为20MHz-25MHz。⑦发送CMD7命令,进入传输数据状态。⑧发送ACMD6命令,设置总线宽度为4,默认总线宽度为1。ACMD6命令在传输模式才有效,因此要在执行完CMD7之后执行。SD卡的操作步骤

(2)写操作步骤:①单块写入发送CMD24命令,多块写入发送CMD25命令。②发送CMD12命令,终止写操作。(3)读操作步骤:①单块读取发送CMD17命令,多块读取发送CMD18命令。②发送CMD12命令,终止读操作。 四、SD卡读写数据编程实例

本实例实现了通过S3C2410的SD卡接口,设置SD卡块的大小为512字节,通过查询方式,向其中的一个块写入128个字,再读出并在终端上回显,同时显示SD卡的标识码CID。(1)初始化操作 函数SD_card_init()对SD主控制器和SD卡进行初始化,包括设置时钟、工作模式、线宽等。SD卡读写数据编程实例

(2)写操作函数Wt_Block()实现了对SD卡的块进行写操作,根据block变量执行单块或多块写操作,把Tx_buffer数组中的数字1-128写进SD卡(3)读操作读操作与写操作相对应,函数Rd_Block()实现了对SD卡的块进行读操作,根据block变量执行单块或多块读操作,把SD卡块中的数据读到Rx_buffer数组中。代码与Wt_Block非常相似,只是执行的命令不同,单块写操作执行命令CMD17,多块写操作执行命令CMD18。五、实验操作步骤及现象

(1)使用串口线连接目标板上的UART0和PC机的串口COM1,在PC机上运行超级终端(波特率115200、1位停止位、无校验位、无硬件流控制),或者使用其他串口程序。使用ULINK2仿真器连接PC机的USB接口和目标板上的JTAG接口。(2)打开SD_TEST工程,编译链接后下载到FLASH中,运行程序。实验操作步骤及现象(3)如果没有插入SD卡,可以看到终端上不断输出信息:

CMD55Timeout! CMD41Timeout! Initializefail NoCardassertion将SD卡插入开发平台上的SD卡插槽,可以看到输出了写入的数据0-128和SD卡的CID号:实验操作步骤及现象InSDreadyInstand-by****4bitbus****Blocks=1[Blockwritetest,Pollingwrite]writedataok0000000100020003000400050006000700080009000a000b000c000d000e000f0010001100120013001400150016001700180019001a001b001c001d001e001f[Blockreadtest:Pollread]chkdataendreaddata0000000100020003000400050006000700080009000a000b000c000d000e000f0010001100120013001400150016001700180019001ª001b001c001d001e001f811CID=3534453,44303247,80019d04,6ª009c6f主要内容1324串行口模块程序设计红外模块设计液晶显示模块设计USB模块程序设计5SD卡模块程序设计IIS模块程序设计接触屏模块程序设计PS/2模块程序设计678一、IIS总线接口概述IIS(Inter-ICSound)总线是一种串行总线设计技术,专门用于音频设备之间的数据传输。S3C2410的IIS总线接口能用来连接一个外部8/16位立体声音频CODEC(编码解码器),既支持IIS总线数据模式,也支持MSB-justified数据模式。该接口提供基于FIFO的DMA传输模式而不是中断模式,既可以同时发送和接收数据,也可以只发送或只接收数据。

IIS总线接口概述

IIS总线接口如图所示:IIS总线接口概述上图中各部分功能描述如下: 总线接口、寄存器区和状态机BRFC:负责控制总线接口逻辑和FIFO访问。 两个5位预分频器IPSR:一个作为IIS总线接口的主时钟发生器,另一个作为外部CODEC的时钟发生器。

64字节大小的FIFO(TxFIFO和RxFIFO):发送数据时,数据写入TxFIFO,接收数据时,数据从RxFIFO读出。

IIS总线接口概述主IISCLK发生器SCLKG:主模式下,串行位时钟由主时钟产生。 通道发生器和状态机CHNC:用来生成并控制IISCLK和IISLRCK。

16位的移位寄存器SFTR:在发送模式下,并行数据转换成串行数据输出;在接收模式下,串行数据转换成并行数据输入。二、S3C2410的IIS总线接口IIS总线仅处理音频数据,其他信号如控制信号等单独传送,基于减少引脚数目和布线简单的目的,IIS总线只由三根串行线组成:时分复用的数据通道线SD、字选择线WS和时钟线SCK。S3C2410的IIS总线接口S3C2410处理器中与IIS相关的信号线有5根: (1)串行数据输入IISDI:对应IIS总线接口中的SD信号,方向为输入。 (2)串行数据输入IISDO:对应IIS总线接口中的SD信号,方向为输出。 (3)左右通道选择IISLRCK:对应IIS总线接口中的WS信号,即采样时钟。 (4)串行位时钟IISCLK:对应IIS总线接口中的SCK信号。 (5)音频系统主时钟CODECLK:一般为采样频率的256倍或384倍,符号为256fs或384fs,其中fs为采样频率。CODECLK通过处理器主时钟分频获得,可以通过在程序中设定分频寄存器获取,分频因子可以为1到32。

S3C2410的IIS总线接口S3C2410的IIS总线接口有三种工作模式: (1)普通传输模式 在普通传输模式下,对于发送和接收FIFO,IIS有准备好标志位。当FIFO准备发送数据时,如果发送FIFO非空,则该标志位置1;如果发送FIFO为空,则该标志位置0。准备接收数据时,如果接收FIFO不满,则该标志位置1,表示FIFO可以接收数据。如果接收FIFO已满,则该标志位置0。这些标志位决定CPU何时读写FIFO。 (2)DMA传输模式 在这种模式下,发送或接收FIFO的存取由DMA控制器来实现,由FIFO就绪标志位来自动请求DMA服务。S3C2410的IIS总线接口S3C2410的IIS总线接口有三种工作模式: (3)发送和接收模式 在这种模式下,IIS总线接口可以同时发送和接收数据。

IIS总线接口可以由处理器S3C2410的IIS模块和音频芯片UDA1341硬件实现,UDA1341TS作为音源的控制器,把采集到的音频模拟信号通过配置其寄存器,转换成IIS格式的数字信号送给S3C2410的IIS控制器,然后CPU使用DMA控制器把得到的数字信号存放到一块内存空间上。因此需要关注的是正确地配置IIS模块和UDA1341芯片,音频数据的传输反而比较简单。三、IIS总线的特殊控制器

处理器中与IIS相关的寄存器有五个:(1)IIS控制寄存器IISCON

通过该寄存器可以获取FIFO的准备好状态、启动或停止发送和接收时的DMA请求,使能IISLRCK、分频功能和IIS接口。IISCON寄存器是可读/写的,对于小端/半字、小端/字或大端/字系统,地址为0x55000000;对于大端/半字系统,地址为0x55000002IIS总线的特殊控制器

(2)IIS模式寄存器IISMOD IISMOD寄存器选择主/从、发送/接收模式,设置有效电平、数据通道位,选择CODECLK和IISLRCK频率。IISMOD是可读/写的,对于小端/半字、小端/字或大端/字系统,地址为0x55000004;对于大端/半字系统,地址为0x55000006(3)IIS分频寄存器IISPSR。

IISPSR主要用于设置分频器的系数值,该寄存器是可读/写的,对于小端/半字、小端/字或大端/字系统,地址为0x55000008;对于大端/半字系统,地址为0x5500000AIIS总线的特殊控制器

(4)IISFIFO控制寄存器(IISFCON)

IISFCON用于设置发送/接收FIFO的传输模式、使能选择以及数据计数等,该寄存器是可读/写的,对于小端/半字、小端/字或大端/字系统,地址为0x5500000C,对于大端/半字系统,地址为0x55000012(5)IISFIFO寄存器(IISFIFO)

IISFIFO主要用于IIS传输或接收数据,IIS总线接口包含两个64位的FIFO用于发送和接收模式。IISFIFO寄存器是可读/写的,对于小端/半字系统,地址为0x55000010;对于大端/半字系统,地址为0x55000012四、音频芯片UDA1341TS说明UDA1341TS是Philips公司的音频数字信号编译码器,可将立体声模拟信号转化为数字信号,同样也能把数字信号转换成模拟信号,并可用PGA(可编程增益控制),AGC(自动增益控制)对模拟信号进行处理;对于数字信号,该芯片提供了DSP(数字音频处理)功能。实际使用中,UDA1341TS广泛应用于MD、CD、PC和数码摄像机等。UDA1341TS提供两组音频输入信号线、一组音频信号输出线,一组IIS总线接口信号,一组L3总线。UDA1341TS与IIS接口的连接电路如图5-17所示。S3C2410的五根IIS总线接口信号线分别与UDA1341TS的DATA0、DATA1、WS、BCK和SYSCLK相连。

音频芯片UDA1341TS说明UDA1341TS的L3总线,包括微处理器接口数据L3DATA、微处理器接口模式L3MODE和微处理器接口时钟L3CLOCK三根信号线。当UDA1341TS芯片工作于微控制器输入模式时,微处理器通过L3总线对UDA1341TS中的数字音频处理参数和系统控制参数进行配置。S3C2410处理器中没有L3总线专用接口,可以利用通用I/O口进行控制。音频芯片UDA1341TS说明

UDA1341TS与IIS接口的连接电路:

五、WAV文件格式

WAV格式的文件是多媒体中使用的声波文件格式之一,在Windows操作系统下,开机或关机,以及打开文件出错时都会听到一些熟悉的声音,这些声音就是WAV格式的音频文件。WAV文件格式与MP3或一些视频文件相比要简单得多,它以RIFF(ResourceInterchangeFileFormat,资源互换文件格式)格式为标准,包括RIFFhead、RIFFtype、fmtchunk和音频datachunk四个部分,下面对这四个部分进行具体介绍。

WAV文件格式

(1)RIFFheadRIFFhead大小为8字节,前4个字节以“RIFF”作为标示,后4个字节size表示整个WAV文件的大小,不包括RIFFhead,即FileLen-8=size。(2)RIFFtype RIFFtype大小为4字节,内容为“WAVE”,表示该文件是WAV文件。WAV文件格式(3)fmtchunk

fmtchunk的格式如表5-35所示,一般情况下大小Size为16,此时没有最后2个字节的附加信息;如果为18,则最后多了2个字节的附加信息,主要由一些软件制作成的WAV格式中含有2个字节的附加信息。(4)datachunk datachunk为整个音频文件的主体,是真正保存WAV数据的地方,前4个字节为标示“data”,然后是大小为4字节的Size,表示音频数据的大小,接着就是WAV数据。根据fmtchunk中断声道数及采样bit数,音频数据的形式也不同。六、音频播放的编程实例

本实例实现了用DMA方式播放wav格式的文件,要播放的音频文件以数组的形式存放在内存区。(1)IIS初始化

主要任务是设置通用I/O端口,定义各管脚功能。(2)播放音频

函数iis_play_wave()实现了播放音频的功能。参数nTimes表示播放的次数,pWavFile表示wav文件转换后的数组存放的内存地址,nSoundLen表示这个数组的长度。七、实验操作步骤及现象(1)使用串口线连接目标板上的UART0和PC机的串口COM1,在PC机上运行超级终端(波特率115200、1位停止位、无校验位、无硬件流控制),或者使用其他串口程序。使用ULINK2仿真器连接PC机的USB接口和目标板上的JTAG接口,将耳机与实验箱的AUDIOOUT接口相连。实验操作步骤及现象(2)打开iis_test工程,编译链接后下载到FLASH中,运行程序后,按照提示按下“1”后可以通过耳机听到WAV格式的音频循环播放。(3)如要播放其他WAV格式的音频文件,需先将其转换成数组格式。运行格式转换工具Data2Hex,如图5-18所示,点击“打开文件”,选择要转换的WAV音频文件,选择转换后的文件名以及存储路径,“偏移量”一栏填“0”,表示从音频文件开头开始转换,选择想要转换的数据长度,点击“生成51数组”后退出即可。

主要内容1324串行口模块程序设计红外模块设计液晶显示模块设计USB模块程序设计5SD卡模块程序设计IIS模块程序设计接触屏模块程序设计PS/2模块程序设计678一、触摸屏工作原理触摸屏(TouchScreenPanel,TSP)按其技术原理可以分为五类:矢量压力传感式、电阻式、电容式、红外线式和表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。电阻式触摸屏是一个多层的复合膜,由一层玻璃或有机玻璃作为基层,其表面涂有一层透明导电层,最上面是一层外表面经过硬化处理从而光滑防刮的塑料层,其内表面也涂有一层透明导电层,在两个导电层之间有许多细小的透明隔离点把它们隔开绝缘。当手指触摸屏幕时,平常绝缘的两个导电层在触摸点处就有了接触。触摸屏工作原理检测器检测到这个接通后,其中一个导电层接通Y轴方向的5V均匀电压场,另一导电层将接触点的电压引至控制电路进行A/D转换,将得到的电压值与5V相比即可得知触摸点的Y轴坐标。同理可得知触摸点的X轴坐标。这是所有电阻式触摸屏共同的基本原理。电阻式触摸屏根据信号线数又分为四线、五线、六线…等类型,信号线数越多,技术越复杂,坐标定位也越精确。Embest

EduKit-III采用四线式电阻触摸屏,点数为320×240。二、S3C2410的触摸屏

温馨提示

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

评论

0/150

提交评论