




已阅读5页,还剩102页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章基于S3C2410X处理器的嵌入式应用系统设计 3 1基本电路设计3 2存储器系统设计3 3S3C2410X的串行通信设计3 4S3C2410X的键盘及LED驱动设计3 5S3C2410X的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总线等电路使用 具体如图3 1所示 RTC电路的电压是1 8V 实际是将电池电压或3 3V电压经过两个BAV99 等价于4个二极管串联 降压后得到的 如图3 2所示 图3 2RTC电路的电压原理图 3 1 2复位电路设计硬件复位电路实现对电源电压的监控和手动复位操作 IMP811T的复位电平可以使CPUJTAG nTRST 和板级系统 nRESET 全部复位 RESET反相后得到nRESET信号 图3 3系统的复位电路 3 1 3晶振电路设计S3C2410X微处理器的主时钟可以由外部时钟源提供 也可以由外部振荡器提供 通过引脚OM 3 2 来进行选择 OM 3 2 00时 MPLL和UPLL的时钟均选择外部振荡器 OM 3 2 01时 MPLL的时钟选择外部振荡器 UPLL选择外部时钟源 OM 3 2 10时 MPLL的时钟选择外部时钟源 UPLL选择外部振荡器 OM 3 2 11时 MPLL和UPLL的时钟均选择外部时钟源 该系统中选择OM 3 2 均接地的方式 即采用外部振荡器提供系统时钟 外部振荡器由12MHz晶振和2个15pF的微调电容组成 如图3 4所示 图3 4晶振电路原理图 图3 5所示的是S3C2410X应用系统所需的RTC时钟电路图 电路由12MHz晶振和2个15pF的电容组成 振荡电路的输出接到S3C2410X微处理器的XTlpll脚 输入由XTOpll提供 12MHz的晶振频率经S3C2410X内部PLL电路的倍频后可达203MHz 图3 5系统时钟的选择 3 2存储器系统设计在嵌入式应用系统中 通常使用3种存储器接口电路 NorFlash接口 NandFlash接口和SDRAM接口电路 引导程序既可存储在NorFlash中 也可存储在NandFlash中 而SDRAM中存储的是执行中的程序和产生的数据 存储在NorFlash中的程序可直接执行 与在SDRAM执行相比速度较慢 存储在NandFlash中的程序 需要拷贝到RAM中去执行 3 2 18位存储器接口设计 由于ARM微处理器的体系结构支持8位 16位 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引脚 存储器的地址总线 A15 A0 与S3C2410X的地址总线 ADDR15 ADDR0 相连 存储器的8位数据总线 DQ7 DQ0 与S3C2410X的数据总线 DATA7 DATA0 相连 2 构建16位的存储器系统采用两片8位存储器芯片以并联方式可构成16位的存储器系统 如图3 7所示 此时 在初始化程序中将BWSCON寄存器中的DWn设置为01 选择16位的总线方式 存储器的nOE端接S3C2410X的nOE引脚 低8位的存储器的nWE端接S3C2410X的nWBE0引脚 高8位的存储器的nWE端接S3C2410X的nWBE1引脚 存储器的nCE端接S3C2410X的nGCSn引脚 存储器的地址总线 A15 A0 与S3C2410X的地址总线 ADDR16 ADDR1 相连 低8位的存储器的8位数据总线 DQ7 DQ0 与S3C2410X的数据总线 DATA7 DATA0 相连 高8位的存储器的8位数据总线 DQ7 DQ0 与S3C2410X的数据总线 DATA15 DATA8 相连 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位的存储器的nWE端接S3C2410X的nWBE3引脚 存储器的nCE端接S3C2410X的nGCSn引脚 存储器的地址总线 A15 A0 与S3C2410X的地址总线 ADDR17 ADDR2 相连 图3 832位存储器系统 3 2 2SDRAM接口电路设计在ARM嵌入式应用系统中 SDRAM主要用于程序的运行空间 数据及堆栈区 当系统启动时 CPU首先从复位地址0 x0处读取启动程序代码 完成系统的初始化后 为提高系统的运行的速度 程序代码通常装入到SDRAM中运行 在S3C2410X片内具有独立的SDRAM刷新控制逻辑电路 可方便地与SDRAM接口 目前常用的SDRAM芯片有8位和16位的数据宽度 工作电压一般为3 3V 主要生产厂商有HYUNDAI Winbond等 下面以K4S561632C TC75为例说明其与S3C2410X的接口方法 构成16Mx32位的存储系统 K4S561632C TC75存储器是4组 4M 16位的动态存储器 工作电压为3 3V 其封装形式为54脚TSOP 兼容LVTTL接口 数据宽度为16位 支持自动刷新 Auto Refresh 和自刷新 Self Refresh 其引脚如图3 9所示 引脚功能如表3 1所示 图3 9K4S561632C TC75引脚图 表3 1K4S561632C TC75引脚功能表 采用两片K4S561632C TC75存储器芯片可组成16M 32位SDRAN存储器系统 其片选信号CS 接S3C2410X的nGCS6引脚 具体连线如图3 10所示 图3 10K4S561632C TC75组成的32位SDRAM存储器系统 3 2 3Flash接口电路设计Flash闪存是非易失存储器 可以对称为块的存储器单元块进行擦写和再编程 目前所做用的Flash芯片主要有NorFlash和NandFlash两种 但这两种Flash芯片在某些方面存在一定的差异 如 Nand器件执行擦除操作简单 而Nor则要求在进行写入前先将目标块内所有的位都写为0 Nor的读速度比Nand稍快一些 Nand的写入速度比Nor快很多 Nand需4ms擦除 而Nor需要5s快 NandFlash的单元尺寸几乎是Nor器件的一半 由于生产过程更为简单 其价格低 在Nand闪存中每个块的最大擦写次数是一百万次 而Nor的擦写次数是十万次 Nor具有XIP eXecuteInPlace 芯片内执行 特性 应用程序可以直接在Flash闪存内运行 不必再把代码读到系统RAM中 Nor的传输效率很高 在1 4MB的小容量时具有很高的成本效益 但是很低的写入和擦除速度大大影响了它的性能 Nand结构能提供极高的单元密度 可以达到高存储密度 并且写入和擦除的速度也很快 在接口方面 NorFlash和NandFlash也存在着差别 NorFlash带有SRAM接口 Nand器件使用复杂的I O口来串行存取数据 1 NorFlash与S3C2410X微处理器接口设计SST39LF VF160是1MX16位的CMOS芯片 SST39LF160工作电压为3 0 3 6V SST39VF160工作电压为2 7 3 6V 采用48脚TSOP封装或TFBGA封装 16位数据宽度 以字模式 16位数据宽度 的方式工作 SST39VF160的在系统编程和编程操作仅需3 3V电压 通过命令可以对芯片进行编程 烧写 擦除 整片擦除和按扇区擦除 以及其他操作 SST39LF VF160的引脚图如图3 11所示 引脚功能如表3 2所示 图3 11SST39LF VF160的引脚图 表3 2SST39LF160 SST39VF160引脚功能表 表3 2SST39LF160 SST39VF160引脚功能表 嵌入式应用系统中 常见的NorFlash存储器芯片单片容量有1MB 2MB 4MB 8MB 16MB等 下面以SST39VF160为例 简述其与S3C2410X微处理器的连线 构成1MX16位的存储器系统 SST39VF160的OE 与S3C2410X的nOE相连 WE 与S3C2410X的nWE相连 地址总线 A19 A0 与S3C2410X的地址总线 ADDR20 ADDR1 相连 注 因为是16位的存储器系统 半字对齐 所以S3C2410X的A0不用连线 16位的数据总线 DQ15 DQ0 与S3C2410X的低16位数据总线 XDATA15 XDATA0 相连 如图3 12所示 图3 12SST39LF VF160的存储系统电路图 2 NandFlash与S3C2410X微处理器接口电路设计NandFlash相对于NorFlash接口复杂得多 但对于S3C2410X微处器提供了NandFlash的接口 使其在嵌入式应用系统中的接口大大简便 例 K9F1208UDM YCB0 K9F1208UDM YIB0存储器与S3C2410X微处理器接口 K9F1208UDM YCB0 K9F1208UDM YIB0存储器是64M 8位的NANDFlash存储器 数据总线宽度为8位 工作电压为2 7V 3 6V 采作48脚TSOP封装 系统的编程和擦除电压仅需3 3V 其引脚如图3 13所示 引脚功能如表3 3所 表3 3U K9F1208UDM引脚功能表 图3 13U K9F1208UDM引脚图 K9F1208UDM与S3C2410X微处理器接口如图3 14所示 K9F1208UDM的ALE和CLE引脚分别与S3C2410X的ALE和CLE引脚相连 K9F1208UDM的WE RE CE 和R B引脚分别与S3C2410X的Nfwe Nfre CLE和R nB引脚相连 K9F1208UDM的数据输入输出线 IO7 IO0 分别与S3C2410X的 DATA7 DATA0 引脚相连 其操作模式如表3 4所示 图3 14NandFlash存储系统电路 3 3S3C2410X的串行通信设计3 3 1串行口原理及接口技术1 异步串行I O异步串行方式是将传输数据的每个字符一位接一位 例如先低位 后高位 地传送 数据的各不同位可以分时使用同一传输通道 因此串行I O可以减少信号连线 最少用一对线即可进行 S3C2410X串行接口 S3C2410X提供了3个通道的UART 要使其与PC机通信 必须将其信号电平转换为RS 232C的电平 RS 232C规定了双极性的信号逻辑电平 3V到 25V之间的电平表示逻辑 1 3V到 25V之间的电平表示逻辑 0 因此这是一套负逻辑定义 以上标准称为EIA电平 图3 16S3C2410X与PC机的异步通信接口图 3 3 2S3C2410X的UART模块S3C2410X与UART有关的寄存器主要有以下几个 1 UART线控制寄存器包括ULCON0 ULCON1和ULCON2 主要用来选择每帧数据位数 停止位数 奇偶校验模式及是否使用红外模式 如表3 5和表3 6所示 表3 5UART寄存器设置 表3 6UART寄存器位描述 2 UART控制寄存器包括UCON0 UCON1andUCON2 主要用来选择时钟 接收和发送中断类型 即电平还是脉冲触发类型 接收超时使能 接收错误状态中断使能 回环模式 发送接收模式等 如表3 7和表3 8所示 图3 7UART控制寄存器设置 图3 8UART控制寄存器器位设置 3 UART错误状态寄存器包括UERSTAT0 UERSTAT1andUERSTAT2 此状态寄存器的相关位表明是否有帧错误或溢出错误发生 如表3 9和表3 10所示 表3 9UART错误状态寄存器 表3 10UART错误状态寄存器位描述 4 在UART模块中有三个接收 发送状态寄存器 包括 UTRSTAT0UTRSTAT1UTRSTAT2如表3 11和表3 12所示 表3 11UART接收 发送寄存器设置 表3 12UART接收 发送寄存器位描述 2 在UART模块中有3个UART发送缓冲寄存器 包括 UTXH0 UTXH1和UTXH2 UTXHn有8位发送数据 如表3 13所示 表3 13UART发送缓冲寄存器 表3 14UART发送缓冲寄存器功能 3 在UART模块中有3个UART接收缓冲寄存器 包括URXH0 URXH1和URXH2 URXHn有8位接收数据 如表3 15所示 表3 15UART接收缓冲寄存器 表3 16UART接收缓冲寄存器功能 4 UART波特率因子寄存器 表3 17UART波特率因子寄存器 表3 18UART波特率因子寄存器功能 UART包括三个波特率因子寄存器UBRDIV0 UBRDIV1andUBRDIV2 存储在波特率因子寄存器 UBRDIVn 中的值决定串口发送和接收的时钟数率 波特率 计算公式如下 UBRDIVn int PCLK bpsx16 1或UBRDIVn int UCLK bpsx16 1例如 如果波特率是115200 PCLKor或UCLKis是40MHz 那么UBRDIVn UBRDIVn int 40000000 115200 x16 1 int 21 7 1 21 1 20 3 3 3S3C2410X的UART模块软件设计1 编写串口驱动函数基于上述的寄存器描述 即可编写出驱动程序 其流程如图3 17和图3 18所示 其源程序代码详见本书所带光盘 在ADS1 2下编译调试通过 图3 19主函数框图 2 在主函数中实现将从串口0接收到的数据发送到串口0 main c 图3 19所示 main c函数 说明 Cmain函数 ucos ii初始化等定义 defineU8unsignedchar include include defineTRUE1 defineFALSE0 pragmaimport use no semihosting swi ensurenofunctionsthatusesemihosting definerUTRSTAT0 volatileunsigned 0 x50000010 definerUTRSTAT1 volatileunsigned 0 x50004010 defineWrUTXH0 ch volatileunsignedchar 0 x50000020 unsignedchar ch defineWrUTXH1 ch volatileunsignedchar 0 x50004020 unsignedchar ch defineRdURXH0 volatileunsignedchar 0 x50000024 defineRdURXH1 volatileunsignedchar 0 x50004024 voidUart SendByten int U8 charUart Getchn char Revdata intUartnum inttimeout voidARMTargetInit void voidhudelay inttime intmain void charc1 1 charerr ARMTargetInit dotarget uHALbasedARMsystem initialisation while 1 Uart SendByten 0 0 xa 换行Uart SendByten 0 0 xd 回车err Uart Getchn c1 0 0 从串口采集数据Uart SendByten 0 c1 0 显示采集的数据 voidUart SendByten intUartnum U8data okericrong if Uartnum 0 while rUTRSTAT0 charUart Getchn char Revdata intUartnum inttimeout if Uartnum 0 while rUTRSTAT0 3 4S3C2410X的键盘及LED驱动设计S3C2410X的键盘采用AVR单片机mega8实现 较为简单 LED驱动采用ZLG7290进行设计 本节将针对ZLG7290进行详细描述 3 4 1LED驱动原理及功能ZLG7290是一片具有串行接口的 可同时驱动8位共阴式数码管 或64只独立LED 的智能显示驱动芯片 该芯片同时还可连接多达64键的键盘矩阵 单片即可完成LED显示 键盘接口的全部功能 其特点如下 I2C串行接口提供键盘中断信号方便与处理器接口 可驱动8位共阴数码管或64只独立LED和64个按键 可控扫描位数可控任一数码管闪烁 提供数据译码和循环移位段寻址等控制 8个功能键可检测任一键的连击次数 无需外接元件即直接驱LED可扩展驱动电流和驱动电压 提供工业级器件多种封装形式PDIP24SO24ZLG7290引脚功能如表3 19所示 表3 19引脚说明 1 键盘部分ZLG7290可采样64个按键或传感器可检测每个按键的连击次数 其基本功能如下 1 键盘去抖动处理当键被按下和放开时可能会出现电平状态反复变化称作键盘抖动若不作处理会引起按键盘命令错误所以要进行去抖动处理以读取稳定的键盘状态为准 2 双键互锁处理当有两个以上按键被同时按下时ZLG7290只采样优先级高的按键优先顺序为S1 S2 S64如同时按下S2和S18时采样到S2 3 连击键处理当某个按键按下时输出一次键值后如果该按键还未释放该键值连续有效就像连续压按该键一样这种功能称为连击连击次数计数器RepeatCnt可区别出单击某些功能不允许连击如开关或连击判断连击次数可以检测被按时间以防止某些功能误操作如连续按5秒经入参数设置状态 4 功能键处理功能键能实现2个以上按键同时按下来扩展按键数目或实现特殊功能 2 显示部分在每个显示刷新周期ZLG7290按照扫描位数寄存器ScanNum指定的显示位数N把显示缓存DpRam0DpRamN的内容按先后循序送入LED驱动器实现动态显示减少N值可提高每位显示扫描时间的占空比以提高LED亮度显示缓存中的内容不受影响修改闪烁控制寄器 FlashOnOff可改变闪烁频率和占空比亮和灭的时间ZLG7290提供两种控制方式寄存器映象控制和命令解释控制如上述对显示部分的控制寄存器映象控制是指直接访问底层寄存器实现基本控制功能这些寄存器须字节操作命令解释控制是指通过解释命令缓冲区CmdBuf0 CmdBuf1中的指令间接访问底层寄存器实现扩展控制功能如实现寄存器的位操作对显示缓存循环移位对操作数译码等操作请参考指令详解部分 3 寄存器详解 系统状态部分 1 系统寄存器 SystemReg 地址00H复位值11110000B系统寄存器保存ZLG7290系统状态并可对系统运行状态进行配置其功能分位描述如下 KeyAvi SystemReg 0 置1时表示有效的按键动作普通键的单击连击和功能键状态变化 INT引脚信号有效变为低电平清0表示无按键动作 INT引脚信号无效变为高阻态有效的按键动作消失后或读Key后KeyAvi位自动清0 键盘部分 2 键值寄存器 Key 地址01H复位值00HKey表示被压按键的键值当Key 0时表示没有键被压按 3 连击次数计数器 RepeatCnt 地址02H复位值00HRepeatCnt 0时表示单击键RepeatCnt大于0时表示键的连击次数用于区别出单击键或连击键判断连击次数可以检测被按时间 4 功能键寄存器 FunctionKey 地址03H复位值0FFHFunctionKey对应位的值 0表示对应功能键被压按FunctionKey 7 FunctionKey 0对应S64 S57 命令接口部分 5 命令缓冲区CmdBuf0 CmdBuf1地址07H 08H复位值00H 00H用于传输指令 显示部分 6 闪烁控制寄存器 FlashOnOff 地址0CH 复位值0111B 0111B 高4位表示闪烁时亮的时间 低4位表示闪烁时灭的时间 改变其值同时也改变了闪烁频率 也能改变亮和灭的占空比 FlashOnOff的1个单位相当于150 250ms 亮和灭的时间范围为1 160000B相当1个时间 单位 所有象素的闪烁频率和占空比相同 7 扫描位数寄存器 ScanNum 地址0DH复位值7用于控制最大的扫描显示位数有效范围为0 7对应的显示位数为1 8减少扫描位数可提高每位显示扫描时间的占空比以提高LED亮度不扫描显示的显示缓存寄存器则保持不变如ScanNum 3时只显示DpRam0 DpRam3的内容 8 显示缓存寄存器 DpRam0 DpRam7 地址10H 17H 复位值00H 00H 缓存中一位置1表示该像素亮DpRam7 DpRam0的显示内容对应Dig7 Dig0引脚 4 指令详解ZLG7290提供两种控制方式 寄存器映象控制和命令解释控制 寄存器映象控制是指直接访问底层寄存器 除通信缓冲区外的寄存器 实现基本控制功能 请参考寄存器详解部分 命令解释控制是指通过解释命令缓冲区 CmdBuf0 CmdBuf1 中的指令 间接访问底层寄存器 实现扩展控制功能 如实现寄存器的位操作 对显示缓存循环移位 对操作数译码等操作 一个有效的指令由一字节操作码和数个操作数组成 只有操作码的指令称为纯指令 带操作数的指令称为复合指令 一个完整的指令须在一个I2C帧中 起始信号和结束信号间 连续传输到命令 CmdBuf0 CmdBuf1 中 否则会引起错误 ZLG7290的控制指令分为二大类 纯指令和带有数据的指令 纯指令 1 左移指令 该指令使与ScanNum相对应的显示数据和显示属性 闪烁 自右向左移动N位 N3 N0 1 移动后右边N位无显示 而与ScanNum不相关的显示数据和显示属性则不受影响 例DpRamB DpRam0 87654321 其中4闪烁 ScanNum 5 87 不显示 执行指令00010001B后DpRamB DpRam0 4321 4 闪烁高两位和低两位无显示 2 右移指令 与左移指令类似 只是移动方向为自左向右 移动后左边N位 N3 N0 1 无显示 例DpRamBDpRam0 87654321 其中 3 闪烁ScanNum 5 87 不显示 执行指令00100001B后DpRamB DpRam0 6543 3 闪烁 高四位无显示 3 循环左移指令 与左移指令类似 不同的是在每移动一位后 原最左位的显示数据和属性转移到最右位 例DpRamB DpRam0 87654321 其中 4 闪烁 ScanNum 5 87 不显示 执行指令00110001B后DpRamB DpRam0 432165 4 闪烁 高两位无显示 4 循环右移指令 与循环左移指令类似 只是移动方向相反 例DpRamB DpRam0 87654321 其中 3 闪烁 ScanNum 5 87 不显示 执行指令01000001B后DpRamB DpRam0 216543 3 闪烁 5 SystemReg寄存器位寻址指令 当On 1时第S S2 S0 位置1 当On 0时第S位清0 复合指令 1 显示像素寻址指令 表3 20显示像素寻址指令 当On 1时第S S5 S0 点像素亮 置1 当On 0时第S点像素灭 清0 该指令用于点亮关闭数码管中某一段或LED矩阵中某一特定的LED 该指令受ScanNum的内容影响 S6 S0为像素地址有效范围从00H 3FH 无效的地址不会产生任何作用 像素位地址映象如下 复合指令 1 显示像素寻址指令 表3 20显示像素寻址指令 表3 21像素位地址映像 2 按位下载数据且译码指令 表3 22译码指令 其中A3 A0为显示缓存编号 范围为 0000B 0111B对应DpRam0 DpRam7 无效的编号不会产生任何作用 DP 1时点亮该位小数点 Flash 1时该位闪烁显示 Flash 0时该位正常显示 D4 D0为要显示的数据 按以下表规则进行译码 表3 23译码 3 闪烁控制指令 表3 24闪烁控制指令 当Fn 1时 该位闪烁 n的范围为 0 7 对应0 7位 当Fn 0 时该位不闪烁 该指令会改变所有像素的闪烁属性 例执行指令01110000B 00000000B后所有数码管不闪烁 5 通信接口ZLG7290的I2C接口传输速率可达32kbit s 容易与处理器接口 并提供键盘中断信号 提高主处理器时间效率 ZLG7290的从地址slaveaddress为70H 01110000B 有效的按键动作 普通键的单击连击和功能键状态变化都会令系统寄存器SystemReg的KeyAvi位置1 INT引脚信号有效变为低电平 用户的键盘处理程序可由 INT引脚低电平中断触发 以提高程序效率 也可以不采样 INT引脚信号 节省系统的I O数而轮询系统寄存器的KeyAvi位 要注意读键值寄存器会令KeyAvi位清0 并会令 INT引脚信号无效 为确保某个有效的按键动作 所有参数寄存器的同步性 建议利用I2C通信的自动增址功能连续读RepeatCntFunctionKey和Key寄存器 但用户无需担心寄存器的同步性问题 应为键参数寄存器变化速度较缓慢 典型为250ms 最快9ms ZLG7290内可通过I2C总线访问的寄存器地址范围为00H17H 任一寄存器都可按字节直接读写 也可以通过命令接口间接读写或按位读写 请参考指令详解部分 支持自动增址功能 访问一寄存器后 寄存器子地址subaddress自动加一和地址翻转功能 访问最后一寄存器子地址17H后 寄存器子地址翻转为00HZLG7290的控制和状态查询全部都是通过读 写寄存器实现的 用户只需象读写24C02内的单元一样 即可实现对ZLG7290的控制 关于I2C总线访问的细节请参考I2C总线规范 3 4 2键盘驱动键盘驱动程序详见本书所附光盘 键盘扫描码是通过中断的方式获得的 当设置好上位机的IIC地址以后 单片机 MEGA8 检测到键盘变化时 会主动发送键盘扫描码 这时ARM将产生IIC中断 在中断服务程序中获得键盘扫描码 键盘按下时发送0 x80 scancode 抬起时发送scancode scancode即为键盘扫描码 再通过GetKey 函数映射成可以在led上显示的数据 关于单片机 MEGA8 的使用有文档说明 下面主要说明键盘中断的流程 本实验在中断前进行了两步初始化 首先是对中断中用到一个结构体的设置 结构体中各成员变量的意义见结构体的定义 这一步是在函数ISR Init 中完成的 这个函数在ISR C中 主要是对中断中用到的寄存器进行初始化 这些寄存器包括 INTMOD INTMSK INTSUBMSK SRCPND INTPND 其次是在主函数中完成对键盘中断服务函数和中断偏移量 INTOFFSET 的关联及对单片机 MEGA8 工作方式的设置 其中包括对IIC总线的初始化 这是在函数Key init 中完成的 此函数在KeyBoard c中 中断服务函数和中断偏移量 INTOFFSET 的关联是通过函数SetISR Interrupt IRQ KBD Key ISR NULL 来完成的 有了这一步的关联以后当查询到中断偏移量是IRQ KBD时就会根据此偏移量调用键盘中断服务函数Key ISR 有了上面两步的初始化工作以后 当有键盘按下时就会发生IRQ中断 过程是先跳转到startup s中的bIRQ Handler处 然后保存寄存器r0 r12 lr跳转到函数ISR IrqHandler中 在这个函数中查询中断向量的偏移量 根据这个偏移量调用相应的中断服务函数 执行完中断服务函数后再跳转回startup s中的LDMFDsp 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 include inc Uart h include inc lcd h include include defineKBDTYPE ZLG72901 defineKBDTYPE MCUIIC2 defineKEYBOARD TYPEKBDTYPE MCUIIC defineKEY DOWN 1ul 31 include inc i2c tomega8 h defineIRQ KBDIRQ IIC defineMCU IICCON IICCON ACKEN IICCON INTR IICCON CLKPRE 7 unsignedshortmcukey tempmcukey up count staticvoidKey ISR intvector void data staticintframecnt 0 U8status kdata status rIICSTAT if status case1 if GetI2C Devtype kdata DTYPE MKEYB framecnt 0 framecnt break case2 mcukey kdata if mcukey elseif mcukey voidKey init void I2C controli2c ctrl IIC init Set IIC mode MCU IICCON NULL i2c ctrl cmd CMD MST ADDR i2c ctrl ctrl I2COWNER ADDRESS IIC Send MEGA8 I2CADDRESS constchar voidKey init restor void IIC init Set IIC mode MCU IICCON NULL unsignedcharGetKey unsignedcharscankey unsignedcharKeyBoard Map 0 0 0 x9e 0 0 0 xe0 0 x66 0 x60 0 0 0 x8e 14 0 0 xfe 0 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 include inc lcd h include inc reg2410 h include inc iic h include inc uhal h include inc lib h pragmaimport use no semihosting swi ensurenofunctionsthatusesemihosting intmain void U8key ARMTargetInit dotarget uHALbasedARMsystem initialisation Key init while 1 key GetKey Led IIC init hudelay 100 IIC Write 0 x70 0 x0d 0 IIC Write 0 x70 0 x10 key hudelay 2000 Key init restor hudelay 100 return0 3 5S3C2410X的D A功能应用开发3 5 1D A转换器类型DA转换器的内部电路构成无太大差异 一般按输出是电流还是电压 能否作乘法运算等进行分类 大多数DA转换器由电阻阵列和n个电流开关 或电压开关 构成 按数字输入值切换开关 产生比例于输入的电流 或电压 1 电压输出型 如TLC5620 电压输出型DA转换器虽有直接从电阻阵列输出电压的 但一般采用内置输出放大器以低阻抗输出 直接输出电压的器件仅用于高阻抗负载 由于无输出放大器部分的延迟 故常作为高速DA转换器使用 2 电流输出型 如THS5661A 电流输出型DA转换器很少直接利用电流输出 大多外接电流 电压转换电路得到电压输出 转换有两种方法 一是只在输出引脚上接负载电阻而进行电流 电压转换 二是外接运算放大器 用负载电阻进行电流 电压转换的方法 虽可在电流输出引脚上出现电压 但必须在规定的输出电压范围内使用 而且由于输出阻抗高 所以一般外接运算放大器使用 此外 大部分CMOSDA转换器当输出电压不为零时不能正确动作 所以必须外接运算放大器 当外接运算放大器进行电流电压转换时 则电路构成基本上与内置放大器的电压输出型相同 这时由于在DA转换器的电流建立时间上加入了运算放入器的延迟 使响应变慢 此外 这种电路中运算放大器因输出引脚的内部电容而容易起振 有时必须作相位补偿 3 乘算型 如AD7533 DA转换器中有使用恒定基准电压的 也有在基准电压输入上加交流信号的 后者由于能得到数字输入和基准电压输入相乘的结果而输出 因而称为乘算型DA转换器 乘算型DA转换器一般不仅可以进行乘法运算 而且可以作为使输入信号数字化地衰减的衰减器及对输入信号进行调制的调制器使用 4 一位DA转换器一位DA转换器与前述转换方式全然不同 它将数字值转换为脉冲宽度调制或频率调制的输出 然后用数字滤波器作平均化而得到一般的电压输出 又称位流方式 用于音频等场合 3 5 2MAX504与S3C2410X的接口D A转换器的主要技术指标 分辩率 Resolution 指最小模拟输出量 对应数字量仅最低位为 1 与最大量 对应数字量所有有效位为 1 之比 建立时间 SettingTime 是将一个数字量转换为稳定模拟信号所需的时间 也可以认为是转换时间 DA中常用建立时间来描述其速度 而不是AD中常用的转换速率 一般地电流输出DA建立时间较短 电压输出DA则较长 其他指标还有线性度 Linearity 转换精度 温度系数 漂移 下面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师体育学期工作总结
- 公司用电安全培训材料课件
- 辽宁省2025年成人高校招生考试英语(高起点)练习题库及答案
- 广东省2025年成人高考医学类复习题及答案
- 黑龙江省2025年全国成人高等学校招生统一考试理、体育类综合练习题及答案
- 公司汛期安全培训内容课件
- 正规的不定期承包合同样本7篇
- 护理查房演绎经验总结
- 配液系统工作总结
- 民法典婚姻篇培训
- 2025《煤矿安全规程》新旧对照专题培训
- 磷化铝管理办法
- 2025年海底捞企业面试题及答案
- 小学体育家长会课件
- 教育的人口功能
- 抗凝剂皮下注射技术临床实践指南2024版
- 中小学教辅材料征订管理制度
- 2025年芳香保健师(初级)职业技能鉴定理论考试真题解析试卷
- 2025年陕西省中考数学试题(原卷版)
- 注塑加工项目可行性研究报告
- 痛风中医辨证论治课件
评论
0/150
提交评论