第3章 基于S3C2410X处理器的嵌入式应用系统设计.ppt

上传人:sccc 文档编号:4722547 上传时间:2023-05-11 格式:PPT 页数:107 大小:1.80MB
返回 下载 相关 举报
第3章 基于S3C2410X处理器的嵌入式应用系统设计.ppt_第1页
第1页 / 共107页
第3章 基于S3C2410X处理器的嵌入式应用系统设计.ppt_第2页
第2页 / 共107页
第3章 基于S3C2410X处理器的嵌入式应用系统设计.ppt_第3页
第3页 / 共107页
第3章 基于S3C2410X处理器的嵌入式应用系统设计.ppt_第4页
第4页 / 共107页
第3章 基于S3C2410X处理器的嵌入式应用系统设计.ppt_第5页
第5页 / 共107页
点击查看更多>>
资源描述

《第3章 基于S3C2410X处理器的嵌入式应用系统设计.ppt》由会员分享,可在线阅读,更多相关《第3章 基于S3C2410X处理器的嵌入式应用系统设计.ppt(107页珍藏版)》请在三一办公上搜索。

1、第3章 基于S3C2410X处理器的嵌入式应用系统设计,3.1 基本电路设计 3.2 存储器系统设计 3.3 S3C2410X的串行通信设计3.4 S3C2410X的键盘及LED驱动设计 3.5 S3C2410X的D/A功能应用开发,3.1 基本电路设计 3.1.1 电源电路设计 S3C2410X需要3.3V和1.8V两种供电电压,是由5V电源电压经 LM1085-3.3V和 AS1117-1.8V分别得到 3.3V和1.8V的工作电压。开发板上的芯片多数使用了 3.3V电压,而 1.8V是供给 S3C2410 内核使用的。5V电压供给音频功放芯片、LCD、电机、硬盘、CAN总线等电路使用。具

2、体如图3.1所示。,RTC 电路的电压是 1.8V,实际是将电池电压或 3.3V电压经过两个 BAV99(等价于4 个二极管串联)降压后得到的。如图3.2所示。,图3.2 RTC 电路的电压原理图,3.1.2 复位电路设计 硬件复位电路实现对电源电压的监控和手动复位操作。IMP811T 的复位电平可以使 CPU JTAG(nTRST)和板级系统(nRESET)全部复位;RESET反相后得到nRESET信号。,图3.3 系统的复位电路,3.1.3 晶振电路设计S3C2410X微处理器的主时钟可以由外部时钟源提供,也可以由外部振荡器提供,通过引脚OM3:2来进行选择。OM3:2=00时,MPLL和

3、UPLL的时钟均选择外部振荡器;OM3:2=01时,MPLL的时钟选择外部振荡器;UPLL选择外部时钟源;OM3:2=10时,MPLL的时钟选择外部时钟源;UPLL选择外部振荡器;OM3:2=11时,MPLL和UPLL的时钟均选择外部时钟源。,该系统中选择OM3:2均接地的方式,即采用外部振荡器提供系统时钟。外部振荡器由12MHz晶振和2个15pF的微调电容组成。如图3.4所示,,图3.4 晶振电路原理图,图3.5所示的是S3C2410X应用系统所需的RTC时钟电路图,电路由12MHz晶振和2个15pF的电容组成,振荡电路的输出接到S3C2410X微处理器的XTlpll脚,输入由XTOpll提

4、供。12MHz的晶振频率经S3C2410X内部PLL电路的倍频后可达203MHz。,图3.5 系统时钟的选择,3.2 存储器系统设计 在嵌入式应用系统中,通常使用3种存储器接口电路,Nor Flash接口、Nand Flash接口和SDRAM接口电路。引导程序既可存储在Nor Flash中,也可存储在Nand Flash中。而SDRAM中存储的是执行中的程序和产生的数据。存储在Nor Flash中的程序可直接执行,与在SDRAM执行相比速度较慢。存储在Nand Flash中的程序,需要拷贝到RAM中去执行。,3.2.1 8位存储器接口设计,由于ARM微处理器的体系结构支持8位/16位/32位的

5、存储器系统,相应地可以构建8位的存储器系统、16位的存储器系统或32位的存储器系统,在采用8位存储器构成8位/16位/32位的存储器系统时,除数据总线的连接不同之处,其它的信号线的连接方法基本相同。,1构建8位的存储器系统 采用8位存储器构成8位的存储器系统如图3.6 所示。此时,在初始化程序中还必须通过BWSCON寄存器中的DWn 设置为00,选择8位的总线方式。存储器的nOE端接S3C2410X的nOE引脚;存储器的nWE端接S3C2410X的nWE引脚;存储器的nCE端接S3C2410X的nGCSn引脚;存储器的地址总线A15A0与S3C2410X的地址总线ADDR15ADDR0相连;存

6、储器的8位数据总线DQ7DQ0与S3C2410X的数据总线DATA7DATA0相连。,2构建16位的存储器系统 采用两片8位存储器芯片以并联方式可构成16位的存储器系统,如图3.7 所示,此时,在初始化程序中将BWSCON寄存器中的DWn 设置为01,选择16位的总线方式。存储器的nOE端接S3C2410X的nOE引脚;低8位的存储器的nWE端接S3C2410X的nWBE0引脚,高8位的存储器的nWE端接S3C2410X的nWBE1引脚;存储器的nCE端接S3C2410X的nGCSn引脚;存储器的地址总线A15A0与S3C2410X的地址总线ADDR16ADDR1相连;低8位的存储器的8位数据

7、总线DQ7DQ0与S3C2410X的数据总线DATA7DATA0相连,高8位的存储器的8位数据总线DQ7DQ0与S3C2410X的数据总线DATA15DATA8相连。,3构建32位的存储器系统采用四片8位存储器芯片以并联方式可构成32位的存储器系统,如图3.8 所示,此时,在初始化程序中将BWSCON寄存器中的DWn 设置为10,选择32位的总线方式。存储器的nOE端接S3C2410X的nOE引脚;低8位的存储器的nWE端接S3C2410X的nWBE0引脚,次低8位的存储器的nWE端接S3C2410X的nWBE1引脚,次高8位的存储器的nWE端接S3C2410X的nWBE2引脚,高8位的存储器

8、的nWE端接S3C2410X的nWBE3引脚;存储器的nCE端接S3C2410X的nGCSn引脚;存储器的地址总线A15A0与S3C2410X的地址总线ADDR17ADDR2相连。,图3.8 32位存储器系统,3.2.2 SDRAM接口电路设计 在ARM嵌入式应用系统中,SDRAM主要用于程序的运行空间、数据及堆栈区。当系统启动时,CPU首先从复位地址0 x0处读取启动程序代码,完成系统的初始化后,为提高系统的运行的速度,程序代码通常装入到SDRAM中运行。在S3C2410X片内具有独立的SDRAM刷新控制逻辑电路,可方便地与SDRAM接口。目前常用的SDRAM芯片有8位和16位的数据宽度、工

9、作电压一般为3.3 V。主要生产厂商有HYUNDAI、Winbond等,下面以K4S561632C-TC75为例说明其与S3C2410X的接口方法,构成16M x 32位的存储系统。,K4S561632C-TC75存储器是4组 4M 16 位的动态存储器,工作电压为3.3 V,其封装形式为54脚TSOP,兼容LVTTL接口,数据宽度为16位,支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh)。其引脚如图3.9所示,引脚功能如表3.1所示。,图3.9 K4S561632C-TC75引脚图,表3.1 K4S561632C-TC75引脚功能表,采用两片K4S561632C-

10、TC75存储器芯片可组成16M 32位SDRAN存储器系统,其片选信号CS*接S3C2410X的nGCS6 引脚,具体连线如图3.10所示。,图3.10 K4S561632C-TC75组成的32位SDRAM存储器系统,3.2.3 Flash接口电路设计 Flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。目前所做用的Flash芯片主要有NorFlash和Nand Flash两种。但这两种Flash芯片在某些方面存在一定的差异,如:Nand器件执行擦除操作简单,而Nor则要求在进行写入前先将目标块内所有的位都写为0;Nor的读速度比Nand稍快一些;Nand的写入速度比No

11、r快很多,Nand需4ms擦除,而Nor需要5s快。Nand Flash的单元尺寸几乎是Nor器件的一半,由于生产过程更为简单,其价格低。在Nand闪存中每个块的最大擦写次数是一百万次,而Nor的擦写次数是十万次。,Nor具有XIP(eXecute In Place,芯片内执行)特性,应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。Nor的传输效率很高,在14MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。Nand结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。在接口方面,Nor Flash和Nand Flash也存

12、在着差别。Nor Flash带有SRAM接口,Nand器件使用复杂的I/O口来串行存取数据。,1Nor Flash与S3C2410X微处理器接口设计SST39LF/VF160是1M X 16位的CMOS芯片,SST39LF160工作电压为3.03.6V,SST39VF160工作电压为2.73.6V,采用48脚TSOP封装或TFBGA封装,16位数据宽度,以字模式(16位数据宽度)的方式工作。SST39VF160的在系统编程和编程操作仅需3.3V电压,通过命令可以对芯片进行编程(烧写)、擦除(整片擦除和按扇区擦除)以及其他操作。SST39LF/VF160的引脚图如图3.11所示,引脚功能如表3.

13、2所示。,图3.11 SST39LF/VF160的引脚图,表3.2 SST39LF160/SST39VF160引脚功能表,表3.2 SST39LF160/SST39VF160引脚功能表,嵌入式应用系统中,常见的Nor Flash存储器芯片单片容量有1MB、2MB、4MB、8MB、16MB等。下面以SST39VF160为例,简述其与S3C2410X微处理器的连线,构成1M X 16位的存储器系统。SST39VF160的OE*与S3C2410X的nOE相连;WE*与S3C2410X的nWE相连;地址总线A19A0与S3C2410X的地址总线ADDR20ADDR1相连(注:因为是16位的存储器系统,

14、半字对齐,所以S3C2410X的A0不用连线);16位的数据总线DQ15DQ0与S3C2410X的低16位数据总线XDATA15XDATA0相连,如图3.12所示。,图3.12 SST39LF/VF160的存储系统电路图,2Nand Flash与S3C2410X微处理器接口电路设计 Nand Flash相对于Nor Flash接口复杂得多,但对于S3C2410X微处器提供了Nand Flash的接口,使其在嵌入式应用系统中的接口大大简便。例:K9F1208UDM-YCB0/K9F1208UDM-YIB0 存储器与S3C2410X微处理器接口。K9F1208UDM-YCB0/K9F1208UDM

15、-YIB0 存储器是64M8位的NAND Flash存储器,数据总线宽度为8位,工作电压为2.7V-3.6V,采作48脚TSOP封装,系统的编程和擦除电压仅需3.3V,其引脚如图3.13所示,引脚功能如表3.3所,表3.3 U-K9F1208UDM引脚功能表,图3.13 U-K9F1208UDM引脚图,K9F1208UDM与S3C2410X微处理器接口如图3.14所示。K9F1208UDM的ALE和CLE引脚分别与S3C2410X的ALE和CLE引脚相连;K9F1208UDM的WE*、RE*、CE*和R/B引脚分别与S3C2410X的Nfwe、Nfre、CLE和R/nB引脚相连;K9F1208

16、UDM的数据输入输出线IO7IO0分别与S3C2410X的DATA7DATA0引脚相连。其操作模式如表3.4所示。,图3.14 Nand Flash存储系统电路,3.3 S3C2410X的串行通信设计 3.3.1 串行口原理及接口技术 1异步串行IO 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行IO 可以减少信号连线,最少用一对线即可进行。,图3.15 串行通信字符格式,S3C2410X串行接口,S3C2410X提供了3个通道的UART,要使其与PC机通信,必须将其信号电平转换为RS232C 的电平。RS232C规定

17、了双极性的信号逻辑电平:-3V 到-25V 之间的电平表示逻辑“1”。+3V 到+25V 之间的电平表示逻辑“0”。因此这是一套负逻辑定义,以上标准称为EIA 电平。,图3.16 S3C2410X与PC机的异步通信接口图,3.3.2 S3C2410X的UART模块 S3C2410X与UART 有关的寄存器主要有以下几个:(1)UART线控制寄存器包括ULCON0,ULCON1和ULCON2,主要用来选择每帧数据位数、停止位数,奇偶校验模式及是否使用红外模式,如表3.5和表3.6所示。,表3.5 UART寄存器设置,表3.6 UART寄存器位描述,(2)UART控制寄存器包括UCON0,UCON

18、1 and UCON2,主要用来选择时钟,接收和发送中断类型(即电平还是脉冲触发类型),接收超时使能,接收错误状态中断使能,回环模式,发送接收模式等。如表3.7和表3.8所示。,图3.7 UART控制寄存器设置,图3.8 UART控制寄存器器位设置,(3)UART错误状态寄存器包括 UERSTAT0,UERSTAT1 and UERSTAT2,此状态寄存器的相关位表明是否有帧错误或溢出错误发生。如表3.9和表3.10所示。,表3.9 UART错误状态寄存器,表3.10 UART错误状态寄存器位描述,(4)在UART 模块中有三个接收/发送状态寄存器,包括:UTRSTAT0 UTRSTAT1 U

19、TRSTAT2 如表3.11和表3.12 所示。,表3.11 UART接收/发送寄存器设置,表3.12 UART接收/发送寄存器位描述,(2)在UART 模块中有3 个UART 发送缓冲寄存器,包括:UTXH0,UTXH1 和UTXH2,UTXHn 有8位发送数据。如表3.13所示。,表3.13 UART发送缓冲寄存器,表3.14 UART发送缓冲寄存器功能,(3)在UART 模块中有3 个UART 接收缓冲寄存器,包括URXH0,URXH1 和URXH2,URXHn 有8位接收数据。如表3.15所示。,表3.15 UART接收缓冲寄存器,表3.16 UART接收缓冲寄存器功能,(4)UART

20、 波特率因子寄存器,表3.17 UART波特率因子寄存器,表3.18 UART波特率因子寄存器功能,UART包括三个波特率因子寄存器UBRDIV0,UBRDIV1 and UBRDIV2,存储在波特率因子寄存器(UBRDIVn)中的值决定串口发送和接收的时钟数率(波特率),计算公式如下:UBRDIVn=(int)(PCLK/(bps x 16)1或UBRDIVn=(int)(UCLK/(bps x 16)1例如:如果波特率是115200,PCLK or或UCLK is是40 MHz,那么UBRDIVn:UBRDIVn=(int)(40000000/(115200 x 16)-1=(int)(2

21、1.7)-1=21-1=20,3.3.3 S3C2410X的UART模块软件设计1编写串口驱动函数基于上述的寄存器描述,即可编写出驱动程序,其流程如图3.17和图3.18所示,其源程序代码详见本书所带光盘,在ADS1.2下编译调试通过。,图3.19 主函数框图,2在主函数中实现将从串口0 接收到的数据发送到串口0(main.c),图3.19所示。,/main.c函数/说明:C main 函数,ucos-ii初始化等定义#define U8 unsigned char#include#include#define TRUE 1#define FALSE 0#pragma import(_use_

22、no_semihosting_swi)/ensure no functions that use semihosting#define rUTRSTAT0(*(volatile unsigned*)0 x50000010)#define rUTRSTAT1(*(volatile unsigned*)0 x50004010)#define WrUTXH0(ch)(*(volatile unsigned char*)0 x50000020)=(unsigned char)(ch)#define WrUTXH1(ch)(*(volatile unsigned char*)0 x50004020)=(

23、unsigned char)(ch)#define RdURXH0()(*(volatile unsigned char*)0 x50000024)#define RdURXH1()(*(volatile unsigned char*)0 x50004024),void Uart_SendByten(int,U8);char Uart_Getchn(char*Revdata,int Uartnum,int timeout);void ARMTargetInit(void);void hudelay(int time);int main(void)char c11;char err;ARMTar

24、getInit();/do target(uHAL based ARM system)initialisation/while(1)Uart_SendByten(0,0 xa);/换行 Uart_SendByten(0,0 xd);/回车 err=Uart_Getchn(c1,0,0);/从串口采集数据 Uart_SendByten(0,c10);/显示采集的数据,void Uart_SendByten(int Uartnum,U8 data)/ok eric rong if(Uartnum=0)while(!(rUTRSTAT0,char Uart_Getchn(char*Revdata,i

25、nt Uartnum,int timeout)if(Uartnum=0)while(!(rUTRSTAT0,3.4 S3C2410X的键盘及LED驱动设计 S3C2410X的键盘采用AVR单片机mega8实现,较为简单,LED驱动采用ZLG7290进行设计,本节将针对ZLG7290进行详细描述。3.4.1 LED驱动原理及功能 ZLG7290是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示键盘接口的全部功能。,其特点如下:I2C 串行接口提供键盘中断信号方便与处理器接口 可驱动8 位共阴数码

26、管或64 只独立LED 和64 个按键 可控扫描位数可控任一数码管闪烁 提供数据译码和循环移位段寻址等控制 8 个功能键可检测任一键的连击次数 无需外接元件即直接驱LED 可扩展驱动电流和驱动电压 提供工业级器件多种封装形式PDIP24 SO24ZLG7290引脚功能如表3.19所示。,表3.19 引脚说明,1键盘部分 ZLG7290 可采样64 个按键或传感器可检测每个按键的连击次数,其基本功能如下:(1)键盘去抖动处理当键被按下和放开时可能会出现电平状态反复变化称作键盘抖动若不作处理会引起按键盘命令错误所以要进行去抖动处理以读取稳定的键盘状态为准。(2)双键互锁处理当有两个以上按键被同时按

27、下时ZLG7290 只采样优先级高的按键优先顺序为S1S2S64如同时按下S2 和S18 时采样到S2。,(3)连击键处理当某个按键按下时输出一次键值后如果该按键还未释放该键值连续有效就像连续压按该键一样这种功能称为连击连击次数计数器RepeatCnt 可区别出单击某些功能不允许连击如开关或连击判断连击次数可以检测被按时间以防止某些功能误操作如连续按5 秒经入参数设置状态。(4)功能键处理功能键能实现2 个以上按键同时按下来扩展按键数目或实现特殊功能。,2显示部分 在每个显示刷新周期ZLG7290 按照扫描位数寄存器ScanNum 指定的显示位数N 把显示缓存DpRam0 DpRamN 的内容

28、按先后循序送入LED 驱动器实现动态显示减少N 值可提高每位显示扫描时间的占空比以提高LED 亮度显示缓存中的内容不受影响修改闪烁控制寄器。FlashOnOff可改变闪烁频率和占空比亮和灭的时间ZLG7290 提供两种控制方式寄存器映象控制和命令解释控制如上述对显示部分的控制寄存器映象控制是指直接访问底层寄存器实现基本控制功能这些寄存器须字节操作命令解释控制是指通过解释命令缓冲区CmdBuf0 CmdBuf1 中的指令间接访问底层寄存器实现扩展控制功能如实现寄存器的位操作对显示缓存循环移位对操作数译码等操作请参考指令详解部分。,3寄存器详解 系统状态部分(1)系统寄存器(SystemReg):

29、地址00H 复位值11110000B 系统寄存器保存ZLG7290 系统状态并可对系统运行状态进行配置其功能分位描述如下:KeyAvi(SystemReg.0)置1 时表示有效的按键动作普通键的单击连击和功能键状态变化/INT 引脚信号有效变为低电平清0 表示无按键动作/INT 引脚信号无效变为高阻态有效的按键动作消失后或读Key 后KeyAvi 位自动清0。,键盘部分(2)键值寄存器(Key):地址01H 复位值00H Key 表示被压按键的键值当Key=0 时表示没有键被压按。(3)连击次数计数器(RepeatCnt):地址02H 复位值00H RepeatCnt=0 时表示单击键Repe

30、atCnt 大于0 时表示键的连击次数用于区别出单击键或连击键判断连击次数可以检测被按时间。(4)功能键寄存器(FunctionKey):地址03H 复位值0FFH FunctionKey 对应位的值=0 表示对应功能键被压按FunctionKey.7FunctionKey.0 对应S64S57。命令接口部分(5)命令缓冲区CmdBuf0CmdBuf1 地址07H08H 复位值00H00H 用于传输指令。,显示部分(6)闪烁控制寄存器(FlashOnOff):地址0CH,复位值0111B/0111B,高4 位表示闪烁时亮的时间,低4 位表示闪烁时灭的时间,改变其值同时也改变了闪烁频率,也能改变

31、亮和灭的占空比,FlashOnOff的1 个单位相当于150250ms(亮和灭的时间范围为116 0000B 相当1 个时间)单位,所有象素的闪烁频率和占空比相同。(7)扫描位数寄存器(ScanNum):地址0DH 复位值7 用于控制最大的扫描显示位数有效范围为07 对应的显示位数为18 减少扫描位数可提高每位显示扫描时间的占空比以提高LED 亮度不扫描显示的显示缓存寄存器则保持不变如ScanNum3 时只显示DpRam0DpRam3的内容。,(8)显示缓存寄存器(DpRam0DpRam7):地址10H17H,复位值00H00H,缓存中一位置1表示该像素亮DpRam7DpRam0 的显示内容对

32、应Dig7Dig0 引脚。,4指令详解 ZLG7290 提供两种控制方式:寄存器映象控制和命令解释控制。寄存器映象控制是指直接访问底层寄存器(除通信缓冲区外的寄存器),实现基本控制功能。请参考寄存器详解部分。命令解释控制是指通过解释命令缓冲区(CmdBuf0CmdBuf1)中的指令,间接访问底层寄存器,实现扩展控制功能。如实现寄存器的位操作,对显示缓存循环移位、对操作数译码等操作。一个有效的指令由一字节操作码和数个操作数组成,只有操作码的指令称为纯指令,带操作数的指令称为复合指令,一个完整的指令须在一个I2C 帧中(起始信号和结束信号间)连续传输到命令(CmdBuf0CmdBuf1)中。否则会

33、引起错误,ZLG7290的控制指令分为二大类:纯指令和带有数据的指令。,纯指令(1)左移指令,该指令使与ScanNum 相对应的显示数据和显示属性(闪烁)自右向左移动N 位(N3N0)+1),移动后右边N 位无显示,而与ScanNum 不相关的显示数据和显示属性则不受影响。例 DpRamBDpRam0=“87654321”,其中4 闪烁,ScanNum=5(“87”不显示)。执行指令00010001B 后DpRamBDpRam0=“4321”。”4”闪烁高两位和低两位无显示。,(2)右移指令,与左移指令类似,只是移动方向为自左向右,移动后左边N 位(N3N0)+1)无显示。例 DpRamB D

34、pRam0=“87654321”。其中“3”闪烁ScanNum=5(“87”不显示),执行指令 00100001B 后DpRamBDpRam0=“6543”。“3”闪烁,高四位无显示。,(3)循环左移指令,与左移指令类似,不同的是在每移动一位后,原最左位的显示数据和属性转移到最右位。例 DpRamBDpRam0=“87654321”,其中“4”闪烁,ScanNum=5(“87”不显示),执行指令 00110001B 后DpRamBDpRam0=“432165”。“4”闪烁,高两位无显示。,(4)循环右移指令,与循环左移指令类似,只是移动方向相反。例 DpRamBDpRam0=“87654321

35、”,其中”3”闪烁,ScanNum=5(”87”不显示)。执行指令 01000001B 后DpRamBDpRam0=“216543”。”3”闪烁。(5)SystemReg 寄存器位寻址指令,当On=1时第S(S2S0)位置1;当On=0 时第S 位清0。,复合指令(1)显示像素寻址指令,表3.20 显示像素寻址指令,当On=1时第S(S5S0)点像素亮(置1),当On=0 时第S 点像素灭(清0),该指令用于点亮关闭数码管中某一段或LED 矩阵中某一特定的LED,该指令受ScanNum 的内容影响,S6S0为像素地址有效范围从00H3FH,无效的地址不会产生任何作用,像素位地址映象如下:,复合

36、指令(1)显示像素寻址指令,表3.20 显示像素寻址指令,表3.21 像素位地址映像,(2)按位下载数据且译码指令,表3.22 译码指令,其中A3A0为显示缓存编号(范围为:0000B0111B对应DpRam0DpRam7,无效的编号不会产生任何作用),DP=1 时点亮该位小数点,Flash=1 时该位闪烁显示,Flash=0 时该位正常显示,D4D0为要显示的数据,按以下表规则进行译码。,表3.23 译码,(3)闪烁控制指令,表3.24 闪烁控制指令,当Fn=1时,该位闪烁(n 的范围为:07,对应07 位),当Fn=0,时该位不闪烁,该指令会改变所有像素的闪烁属性。例 执行指令 01110

37、000B,00000000B 后所有数码管不闪烁。,5通信接口 ZLG7290 的I2C 接口传输速率可达32kbit/s,容易与处理器接口,并提供键盘中断信号,提高主处理器时间效率,ZLG7290 的从地址 slave address 为70H(01110000B)有效的按键动作,普通键的单击连击和功能键状态变化都会令系统寄存器SystemReg 的KeyAvi 位置1,/INT 引脚信号有效变为低电平,用户的键盘处理程序可由/INT 引脚低电平中断触发,以提高程序效率,也可以不采样/INT 引脚信号,节省系统的I/O 数而轮询系统寄存器的KeyAvi 位,要注意读键值寄存器会令KeyAvi

38、 位清0,并会令/INT 引脚信号无效。为确保某个有效的按键动作,所有参数寄存器的同步性,建议利用I2C 通信的自动增址功能连续读RepeatCnt FunctionKey 和Key寄存器。,但用户无需担心寄存器的同步性问题,应为键参数寄存器变化速度较缓慢,典型为250ms,最快9ms。ZLG7290 内可通过I2C 总线访问的寄存器地址范围为00H 17H,任一寄存器都可按字节直接读写,也可以通过命令接口间接读写或按位读写,请参考指令详解部分,支持自动增址功能,访问一寄存器后,寄存器子地址sub address 自动加一和地址翻转功能,访问最后一寄存器子地址17H 后,寄存器子地址翻转为00

39、H ZLG7290 的控制和状态查询全部都是通过读/写寄存器实现的,用户只需象读写24C02 内的单元一样,即可实现对ZLG7290 的控制,关于I2C 总线访问的细节请参考I2C 总线规范。,3.4.2 键盘驱动 键盘驱动程序详见本书所附光盘,键盘扫描码是通过中断的方式获得的,当设置好上位机的IIC地址以后,单片机(MEGA8)检测到键盘变化时,会主动发送键盘扫描码。这时ARM将产生IIC中断,在中断服务程序中获得键盘扫描码,键盘按下时发送 0 x80|scancode,抬起时发送 scancode,scancode即为键盘扫描码,再通过GetKey()函数映射成可以在led上显示的数据.关

40、于单片机(MEGA8)的使用有文档说明,下面主要说明键盘中断的流程.本实验在中断前进行了两步初始化:,首先是对中断中用到一个结构体的设置,结构体中各成员变量的意义见结构体的定义,这一步是在函数ISR_Init()中完成的,这个函数在ISR.C中,主要是对中断中用到的寄存器进行初始化,这些寄存器包括:INTMOD,INTMSK,INTSUBMSK,SRCPND,INTPND。其次是在主函数中完成对键盘中断服务函数和中断偏移量(INTOFFSET)的关联及对单片机(MEGA8)工作方式的设置,其中包括对IIC总线的初始化,这是在函数Key_init()中完成的,此函数在KeyBoard.c中。中断

41、服务函数和中断偏移量(INTOFFSET)的关联是通过函数SetISR_Interrupt(IRQ_KBD,Key_ISR,NULL)来完成的。有了这一步的关联以后当查询到中断偏移量是IRQ_KBD时就会根据此偏移量调用键盘中断服务函数Key_ISR。,有了上面两步的初始化工作以后,当有键盘按下时就会发生IRQ中断,过程是先跳转到startup.s中的b IRQ_Handler处,然后保存寄存器r0-r12,lr跳转到函数ISR_IrqHandler中,在这个函数中查询中断向量的偏移量,根据这个偏移量调用相应的中断服务函数。执行完中断服务函数后再跳转回startup.s中的LDMFD sp!,

42、r0-r12,lr处,恢复执行中断服务函数之前的状态,继续执行发生中断服务前的下一条指令.至此中断过程结束,在中断服务函数中获得键盘的扫描码,再通过GetKey()函数映射成led可以显示的数据。其源程序代码详见本书所带光盘,在ADS1.2下编译调试通过。,3.4.3 键盘及LED驱动软件设计(KeyBoard.c)1定义键盘映射表:#include./inc/reg2410.h#include./inc/lib.h#include./inc/macro.h#include./inc/isr.h#include./inc/KeyBoard.h#include./inc/iic.h#includ

43、e./inc/Uart.h#include inc/lcd.h#include#include,#define KBDTYPE_ZLG72901#define KBDTYPE_MCUIIC2#define KEYBOARD_TYPEKBDTYPE_MCUIIC#define KEY_DOWN(1ul31)#include./inc/i2c-tomega8.h#define IRQ_KBDIRQ_IIC#define MCU_IICCON(IICCON_ACKEN|IICCON_INTR|IICCON_CLKPRE(7)unsigned short mcukey,tempmcukey,up,co

44、unt;,static void Key_ISR(int vector,void*data)static int framecnt=0;U8 status,kdata;status=rIICSTAT;if(status,case 1:if(GetI2C_Devtype(kdata)!=DTYPE_MKEYB)framecnt=0;framecnt+;break;case 2:mcukey=kdata;if(mcukey,else if(!(mcukey,void Key_init(void)I2C_control i2c_ctrl;IIC_init();Set_IIC_mode(MCU_IIC

45、CON,NULL);i2c_ctrl.cmd=CMD_MST_ADDR;i2c_ctrl.ctrl=I2COWNER_ADDRESS;IIC_Send(MEGA8_I2CADDRESS,(const char*),void Key_init_restor(void)IIC_init();Set_IIC_mode(MCU_IICCON,NULL);,unsigned char GetKey()unsigned char scankey;unsigned char KeyBoard_Map=0,0,0 x9e,0,0,0 xe0,0 x66,0 x60,0,0,0 x8e,14,0,0 xfe,0

46、 xb6,0 xda,0 xfc,0 x1c,0 x6e,0,0,0 xf6,0 xbe,0 xf2,0 x3e,0,0,0,0,0 xce,0,0 x7c,0,1,0,0,17,2,0,0,0,4,0,6,0,5,0,0,0,7,0,9,15,8,0,0,0,0,0,0,0,0,0,0;/64,键值映射表,while(1)if(up=1),2主函数,将按键值在数码管上显示,流程图如图3.20所示。,图3.20 主函数,/main()主函数#include inc/macro.h#include inc/KeyBoard.h#include#include#include inc/Uart.h

47、#include inc/lcd.h#include inc/reg2410.h#include inc/iic.h#include inc/uhal.h#include inc/lib.h#pragma import(_use_no_semihosting_swi)/ensure no functions that use semihosting,int main(void)U8 key;ARMTargetInit();/do target(uHAL based ARM system)initialisation/Key_init();while(1)key=GetKey();Led_IIC

48、_init();hudelay(100);IIC_Write(0 x70,0 x0d,0);IIC_Write(0 x70,0 x10,key);hudelay(2000);Key_init_restor();hudelay(100);return 0;,3.5 S3C2410X的D/A功能应用开发3.5.1 D/A 转换器类型 DA 转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等进行分类。大多数DA 转换器由电阻阵列和n 个电流开关(或电压开关)构成。按数字输入值切换开关,产生比例于输入的电流(或电压)。1电压输出型(如TLC5620)电压输出型DA 转换器虽有直

49、接从电阻阵列输出电压的,但一般采用内置输出放大器以低阻抗输出。直接输出电压的器件仅用于高阻抗负载,由于无输出放大器部分的延迟,故常作为高速DA 转换器使用。,2电流输出型(如THS5661A)电流输出型DA 转换器很少直接利用电流输出,大多外接电流电压转换电路得到电压输出,转换有两种方法:一是只在输出引脚上接负载电阻而进行电流电压转换,二是外接运算放大器。用负载电阻进行电流电压转换的方法,虽可在电流输出引脚上出现电压,但必须在规定的输出电压范围内使用,而且由于输出阻抗高,所以一般外接运算放大器使用。此外,大部分CMOS DA 转换器当输出电压不为零时不能正确动作,所以必须外接运算放大器。当外接

50、运算放大器进行电流电压转换时,则电路构成基本上与内置放大器的电压输出型相同,这时由于在DA 转换器的电流建立时间上加入了运算放入器的延迟,使响应变慢。此外,这种电路中运算放大器因输出引脚的内部电容而容易起振,有时必须作相位补偿。,3乘算型(如AD7533)DA 转换器中有使用恒定基准电压的,也有在基准电压输入上加交流信号的,后者由于能得到数字输入和基准电压输入相乘的结果而输出,因而称为乘算型DA 转换器。乘算型DA 转换器一般不仅可以进行乘法运算,而且可以作为使输入信号数字化地衰减的衰减器及对输入信号进行调制的调制器使用。4一位DA 转换器 一位DA 转换器与前述转换方式全然不同,它将数字值转

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号