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

上传人:本田雅阁 文档编号:3128852 上传时间:2019-07-14 格式: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时,MP

3、LL和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脚,输入由X

4、TOpll提供。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

5、位/32位的存储器系统,相应地可以构建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的地址总线ADDR1

6、5ADDR0相连; 存储器的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

7、相连; 低8位的存储器的8位数据总线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端接S3C24

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

9、DRAM芯片有8位和16位的数据宽度、工作电压一般为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引

10、脚功能表,采用两片K4S561632C-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的读速度比

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

12、Nor Flash和Nand Flash也存在着差别。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/VF1

13、60的引脚图如图3.11所示,引脚功能如表3.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的地址总线ADDR

14、20ADDR1相连(注:因为是16位的存储器系统,半字对齐,所以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微处理器接口。

15、 K9F1208UDM-YCB0/K9F1208UDM-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的N

16、fwe、Nfre、CLE和R/nB引脚相连; K9F1208UDM的数据输入输出线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机通信

17、,必须将其信号电平转换为RS232C 的电平。 RS232C规定了双极性的信号逻辑电平: -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

18、 UART寄存器位描述,(2)UART控制寄存器包括UCON0, UCON1 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 模

19、块中有三个接收/发送状态寄存器,包括: UTRSTAT0 UTRSTAT1 UTRSTAT2 如表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.1

20、5 UART接收缓冲寄存器,表3.16 UART接收缓冲寄存器功能,(4)UART 波特率因子寄存器,表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 M

21、Hz,那么UBRDIVn : UBRDIVn = (int)(40000000 / (115200 x 16) ) -1= (int)(21.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 U

22、8 unsigned char #include #include #define TRUE 1 #define FALSE 0 #pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting #define rUTRSTAT0 (*(volatile unsigned *)0x50000010) #define rUTRSTAT1 (*(volatile unsigned *)0x50004010) #define WrUTXH0(ch) (*(volatile unsigned char

23、*)0x50000020)=(unsigned char)(ch) #define WrUTXH1(ch) (*(volatile unsigned char *)0x50004020)=(unsigned char)(ch) #define RdURXH0() (*(volatile unsigned char *)0x50000024) #define RdURXH1() (*(volatile unsigned char *)0x50004024),void Uart_SendByten(int,U8); char Uart_Getchn(char* Revdata, int Uartn

24、um, int timeout); void ARMTargetInit(void); void hudelay(int time); int main(void) char c11; char err; ARMTargetInit(); / do target (uHAL based ARM system) initialisation / while(1) Uart_SendByten(0,0xa);/换行 Uart_SendByten(0,0xd);/回车 err=Uart_Getchn(c1,0,0); /从串口采集数据 Uart_SendByten(0,c10); /显示采集的数据

25、,void Uart_SendByten(int Uartnum, U8 data)/ok eric rong if(Uartnum=0) while(!(rUTRSTAT0 ,char Uart_Getchn(char* Revdata, int Uartnum, int timeout) if(Uartnum=0) while(!(rUTRSTAT0 ,3.4 S3C2410X的键盘及LED驱动设计 S3C2410X的键盘采用AVR单片机mega8实现,较为简单,LED驱动采用ZLG7290进行设计,本节将针对ZLG7290进行详细描述。 3.4.1 LED驱动原理及功能 ZLG7290是

26、一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示键盘接口的全部功能。,其特点如下: I2C 串行接口提供键盘中断信号方便与处理器接口 可驱动8 位共阴数码管或64 只独立LED 和64 个按键 可控扫描位数可控任一数码管闪烁 提供数据译码和循环移位段寻址等控制 8 个功能键可检测任一键的连击次数 无需外接元件即直接驱LED 可扩展驱动电流和驱动电压 提供工业级器件多种封装形式PDIP24 SO24 ZLG7290引脚功能如表3.19所示。,表3.19 引脚说明,1键盘部分 ZLG7290 可采

27、样64 个按键或传感器可检测每个按键的连击次数,其基本功能如下: (1)键盘去抖动处理 当键被按下和放开时可能会出现电平状态反复变化称作键盘抖动若不作处理会引起按键盘命令错误所以要进行去抖动处理以读取稳定的键盘状态为准。 (2)双键互锁处理 当有两个以上按键被同时按下时ZLG7290 只采样优先级高的按键优先顺序为S1S2S64如同时按下S2 和S18 时采样到S2。,(3) 连击键处理 当某个按键按下时输出一次键值后如果该按键还未释放该键值连续有效就像连续压按该键一样这种功能称为连击连击次数计数器RepeatCnt 可区别出单击某些功能不允许连击如开关或连击判断连击次数可以检测被按时间以防止

28、某些功能误操作如连续按5 秒经入参数设置状态。 (4)功能键处理 功能键能实现2 个以上按键同时按下来扩展按键数目或实现特殊功能。,2显示部分 在每个显示刷新周期ZLG7290 按照扫描位数寄存器ScanNum 指定的显示位数N 把显示缓存DpRam0 DpRamN 的内容按先后循序送入LED 驱动器实现动态显示减少N 值可提高每位显示扫描时间的占空比以提高LED 亮度显示缓存中的内容不受影响修改闪烁控制寄器。FlashOnOff可改变闪烁频率和占空比亮和灭的时间ZLG7290 提供两种控制方式寄存器映象控制和命令解释控制如上述对显示部分的控制寄存器映象控制是指直接访问底层寄存器实现基本控制功

29、能这些寄存器须字节操作命令解释控制是指通过解释命令缓冲区CmdBuf0 CmdBuf1 中的指令间接访问底层寄存器实现扩展控制功能如实现寄存器的位操作对显示缓存循环移位对操作数译码等操作请参考指令详解部分。,3寄存器详解 系统状态部分 (1)系统寄存器(SystemReg):地址00H 复位值11110000B 系统寄存器保存ZLG7290 系统状态并可对系统运行状态进行配置其功能分位描述如下: KeyAvi(SystemReg.0)置1 时表示有效的按键动作普通键的单击连击和功能键状态变化/INT 引脚信号有效变为低电平清0 表示无按键动作/INT 引脚信号无效变为高阻态有效的按键动作消失后

30、或读Key 后KeyAvi 位自动清0。, 键盘部分 (2)键值寄存器(Key):地址01H 复位值00H Key 表示被压按键的键值当Key=0 时表示没有键被压按。 (3)连击次数计数器(RepeatCnt):地址02H 复位值00H RepeatCnt=0 时表示单击键RepeatCnt 大于0 时表示键的连击次数用于区别出单击键或连击键判断连击次数可以检测被按时间。 (4)功能键寄存器(FunctionKey):地址03H 复位值0FFH FunctionKey 对应位的值=0 表示对应功能键被压按FunctionKey.7FunctionKey.0 对应S64S57。 命令接口部分

31、(5)命令缓冲区CmdBuf0CmdBuf1 地址07H08H 复位值00H00H 用于传输指令。, 显示部分 (6)闪烁控制寄存器(FlashOnOff):地址0CH,复位值0111B/0111B,高4 位表示闪烁时亮的时间,低4 位表示闪烁时灭的时间,改变其值同时也改变了闪烁频率,也能改变亮和灭的占空比,FlashOnOff的1 个单位相当于150250ms(亮和灭的时间范围为116 0000B 相当1 个时间)单位,所有象素的闪烁频率和占空比相同。 (7)扫描位数寄存器(ScanNum):地址0DH 复位值7 用于控制最大的扫描显示位数有效范围为07 对应的显示位数为18 减少扫描位数可

32、提高每位显示扫描时间的占空比以提高LED 亮度不扫描显示的显示缓存寄存器则保持不变如ScanNum3 时只显示DpRam0DpRam3的内容。,(8)显示缓存寄存器(DpRam0DpRam7): 地址10H17H,复位值00H00H ,缓存中一位置1表示该像素亮DpRam7DpRam0 的显示内容对应Dig7Dig0 引脚。,4指令详解 ZLG7290 提供两种控制方式:寄存器映象控制和命令解释控制。寄存器映象控制是指直接访问底层寄存器(除通信缓冲区外的寄存器),实现基本控制功能。请参考寄存器详解部分。命令解释控制是指通过解释命令缓冲区(CmdBuf0CmdBuf1) 中的指令,间接访问底层寄

33、存器,实现扩展控制功能。如实现寄存器的位操作,对显示缓存循环移位、对操作数译码等操作。一个有效的指令由一字节操作码和数个操作数组成,只有操作码的指令称为纯指令,带操作数的指令称为复合指令,一个完整的指令须在一个I2C 帧中(起始信号和结束信号间)连续传输到命令(CmdBuf0CmdBuf1) 中。否则会引起错误,ZLG7290的控制指令分为二大类:纯指令和带有数据的指令。, 纯指令 (1) 左移指令,该指令使与ScanNum 相对应的显示数据和显示属性(闪烁)自右向左移动N 位(N3N0)+1),移动后右边N 位无显示,而与ScanNum 不相关的显示数据和显示属性则不受影响。 例 DpRam

34、BDpRam0= “87654321”,其中4 闪烁,ScanNum =5 (“87”不显示)。 执行指令00010001B 后DpRamBDpRam0= “4321”。”4” 闪烁高两位和低两位无显示。,(2) 右移指令,与左移指令类似,只是移动方向为自左向右,移动后左边N 位(N3N0)+1)无显示。 例 DpRamB DpRam0=“87654321”。其中“3” 闪烁ScanNum=5 (“87” 不显示),执行指令 00100001B 后DpRamBDpRam0=“ 6543”。“3” 闪烁,高四位无显示。,(3) 循环左移指令,与左移指令类似,不同的是在每移动一位后,原最左位的显示

35、数据和属性转移到最右位。 例 DpRamBDpRam0= “87654321”,其中“4” 闪烁,ScanNum=5(“87” 不显示),执行指令 00110001B 后DpRamBDpRam0= “432165”。“4”闪烁,高两位无显示。,(4) 循环右移指令,与循环左移指令类似,只是移动方向相反。 例 DpRamBDpRam0= “87654321”,其中”3”闪烁,ScanNum=5(”87”不显示)。 执行指令 01000001B 后DpRamBDpRam0= “216543”。”3” 闪烁。 (5) SystemReg 寄存器位寻址指令,当On=1时第S(S2S0)位置1; 当On

36、=0 时第S 位清0。, 复合指令 (1) 显示像素寻址指令,表3.20 显示像素寻址指令,当On=1时第S(S5S0)点像素亮(置1),当On=0 时第S 点像素灭(清0),该指令用于点亮关闭数码管中某一段或LED 矩阵中某一特定的LED,该指令受ScanNum 的内容影响,S6S0为像素地址有效范围从00H3FH,无效的地址不会产生任何作用,像素位地址映象如下:, 复合指令 (1) 显示像素寻址指令,表3.20 显示像素寻址指令,表3.21 像素位地址映像,(2) 按位下载数据且译码指令,表3.22 译码指令,其中A3A0为显示缓存编号(范围为:0000B0111B对应DpRam0DpRa

37、m7,无效的编号不会产生任何作用),DP=1 时点亮该位小数点,Flash=1 时该位闪烁显示,Flash=0 时该位正常显示,D4D0为要显示的数据,按以下表规则进行译码。,表3.23 译码,(3) 闪烁控制指令,表3.24 闪烁控制指令,当Fn=1时,该位闪烁(n 的范围为:07,对应07 位),当Fn=0,时该位不闪烁,该指令会改变所有像素的闪烁属性。 例 执行指令 01110000B,00000000B 后所有数码管不闪烁。,5通信接口 ZLG7290 的I2C 接口传输速率可达32kbit/s,容易与处理器接口,并提供键盘中断信号,提高主处理器时间效率,ZLG7290 的从地址 sl

38、ave address 为70H(01110000B)有效的按键动作,普通键的单击连击和功能键状态变化都会令系统寄存器SystemReg 的KeyAvi 位置1 ,/INT 引脚信号有效变为低电平,用户的键盘处理程序可由/INT 引脚低电平中断触发,以提高程序效率,也可以不采样/INT 引脚信号,节省系统的I/O 数而轮询系统寄存器的KeyAvi 位,要注意读键值寄存器会令KeyAvi 位清0 ,并会令/INT 引脚信号无效。为确保某个有效的按键动作,所有参数寄存器的同步性,建议利用I2C 通信的自动增址功能连续读RepeatCnt FunctionKey 和Key寄存器。,但用户无需担心寄存

39、器的同步性问题,应为键参数寄存器变化速度较缓慢,典型为250ms,最快9ms。ZLG7290 内可通过I2C 总线访问的寄存器地址范围为00H 17H ,任一寄存器都可按字节直接读写,也可以通过命令接口间接读写或按位读写,请参考指令详解部分,支持自动增址功能,访问一寄存器后,寄存器子地址sub address 自动加一和地址翻转功能,访问最后一寄存器子地址17H 后,寄存器子地址翻转为00H ZLG7290 的控制和状态查询全部都是通过读/写寄存器实现的,用户只需象读写24C02 内的单元一样,即可实现对ZLG7290 的控制,关于I2C 总线访问的细节请参考I2C 总线规范。,3.4.2 键

40、盘驱动 键盘驱动程序详见本书所附光盘,键盘扫描码是通过中断的方式获得的,当设置好上位机的IIC地址以后, 单片机(MEGA8)检测到键盘变化时,会主动发送键盘扫描码。这时ARM将产生IIC中断,在中断服务程序中获得键盘扫描码, 键盘按下时发送 0x80|scancode,抬起时发送 scancode,scancode即为键盘扫描码,再通过GetKey()函数映射成可以在led上显示的数据.关于单片机(MEGA8)的使用有文档说明,下面主要说明键盘中断的流程.本实验在中断前进行了两步初始化:,首先是对中断中用到一个结构体的设置,结构体中各成员变量的意义见结构体的定义,这一步是在函数ISR_Ini

41、t()中完成的,这个函数在ISR.C中,主要是对中断中用到的寄存器进行初始化,这些寄存器包括:INTMOD,INTMSK,INTSUBMSK,SRCPND,INTPND。 其次是在主函数中完成对键盘中断服务函数和中断偏移量(INTOFFSET)的关联及对单片机(MEGA8)工作方式的设置,其中包括对IIC总线的初始化,这是在函数Key_init()中完成的,此函数在KeyBoard.c中。中断服务函数和中断偏移量(INTOFFSET)的关联是通过函数SetISR_Interrupt(IRQ_KBD, Key_ISR,NULL)来完成的。有了这一步的关联以后当查询到中断偏移量是IRQ_KBD时就

42、会根据此偏移量调用键盘中断服务函数Key_ISR。,有了上面两步的初始化工作以后,当有键盘按下时就会发生IRQ中断,过程是先跳转到startup.s中的b IRQ_Handler处,然后保存寄存器r0-r12,lr跳转到函数ISR_IrqHandler中,在这个函数中查询中断向量的偏移量,根据这个偏移量调用相应的中断服务函数。执行完中断服务函数后再跳转回startup.s中的LDMFD sp!,r0-r12, lr处,恢复执行中断服务函数之前的状态,继续执行发生中断服务前的下一条指令.至此中断过程结束,在中断服务函数中获得键盘的扫描码,再通过GetKey()函数映射成led可以显示的数据。其源

43、程序代码详见本书所带光盘,在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“ #include “/inc/Uart.h“ #include “inc/lcd.h“ #include #include ,#define KBDTYPE_ZLG7290

44、1 #define KBDTYPE_MCUIIC 2 #define KEYBOARD_TYPE KBDTYPE_MCUIIC #define KEY_DOWN (1ul31) #include “/inc/i2c-tomega8.h“ #define IRQ_KBD IRQ_IIC #define MCU_IICCON (IICCON_ACKEN | IICCON_INTR | IICCON_CLKPRE(7) unsigned short mcukey,tempmcukey,up,count;,static void Key_ISR(int vector, void* data) stat

45、ic 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_IICCON, NULL); i2c_ctrl.cmd

46、=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,0x9e,0,0,0xe0,0x66,0x60,0,0,0x8e ,14,0,0xfe,0xb6,0xda,0xfc,0x1

47、c,0x6e,0,0,0xf6,0xbe,0xf2,0x3e,0,0,0,0,0xce,0,0x7c,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“ #include “i

48、nc/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_init(); hudelay(100); IIC_Write(0x70, 0x0d, 0); IIC_Write(0x70, 0x10, key); hudelay(2000); Key_init_restor(); hudelay(100); return 0; ,3.5 S3C2410X的D/A功能应用开发 3.5.1 D/A 转换器类型 DA 转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等进行分类。大多数DA 转换器由电阻阵

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1