360 likes | 744 Views
主讲人:鞠 雷 山东大学 计算机科学与技术学院. 微机原理与接口技术 第五章 ARM 接口设计技术. 内容提要. 通用并行接口 GPIO. 键盘接口. LED 显示器. 通讯与中断接口. A/D 和 D/A 转换器接口. 2. 芯片 S3C44B0X. S3C44B0X 是基于 ARM7TDMI 的体系结构,是 ARM 公司最早为业界普遍认可并且赢得最广泛应用的处理核。. 3. 芯片 S3C44B0X Ⅰ/ 芯片体系结构. 7 个多功能并行接口 A--G. 2 个异步串行接口 通用异步收发器 0/1.
E N D
主讲人:鞠 雷 山东大学 计算机科学与技术学院 微机原理与接口技术第五章 ARM接口设计技术
内容提要 通用并行接口 GPIO 键盘接口 LED显示器 通讯与中断接口 A/D和D/A转换器接口 2
芯片S3C44B0X S3C44B0X是基于ARM7TDMI的体系结构,是ARM公司最早为业界普遍认可并且赢得最广泛应用的处理核。 3
芯片S3C44B0XⅠ/芯片体系结构 7个多功能并行接口 A--G 2个异步串行接口 通用异步收发器0/1 LCD液晶显示器接口,连接LCD显示器。 中断控制接口,管理30个中断源(26个中断向量)。 8路A/D转换接口
ARM系统硬件体系结构P260 存储器: 1 1M flash 存储器,保存基本输入输出系统. 28M静态随机存储器. 316M非线性(NAND) Flash硬盘 LCD显示 UART串口电平转换: 0v------+3v~12v 5v-------3v~-12v 1MB线性Flash(BIOS) 基于ARM架构的32位微处理器Sam sung S3C44B0X USB接口 USBN9603 外设: LCD显示器,连接LCD接口。 点阵:640X480,320X240,160X160。 8MBSDRM (系统内存) 两个RS-232串行通信接口 扩充网络接口: RT8019以太网控制器,IEEE802.3协议,10M同轴电缆。 扩充键盘接口: 硬件实现: 采用zlg7289实现键盘扫描。 软件实现:以内部接口和软件实现。 16MB非线性Flash(硬盘) JTAG调试端口 扩充网络接口: CANBUS, AreaNetworkcontroller ,现场总线,用于工业控制,1M/1KM。 TCP/IP协议 键盘输入 CAN BUS 5
S3C44B0X具有71个通用多功能输入输出引脚,构成了7个I/O接口:S3C44B0X具有71个通用多功能输入输出引脚,构成了7个I/O接口: • 一个10位的输出接口(A) • 一个11位的输出接口(B) • 一个16位的输入/输出接口(C) • 两个8位的输入/输出接口(D和G) • 两个9位的输入/输出接口(E和F) • 特点: 1、每个接口含有1或两个控制端口和一个数据端口。其中A、B口含有一个控制口和一个数据口,C、D、E、F和G口又增加一个上拉电阻配置口(控制口)。 2、 ARM系统完成I/O功能的方法是使用使用特定的存储器地址映射I/O地址。 6
44B.H中gpio寄存器定义 (一般了解) #define rPCONA (*(volatile unsigned *)0x1d20000); #define rPDATA (*(volatile unsigned *)0x1d20004); #define rPCONB (*(volatile unsigned *)0x1d20008) #define rPDATB (*(volatile unsigned *)0x1d2000c) #define rPCONC (*(volatile unsigned *)0x1d20010) #define rPDATC (*(volatile unsigned *)0x1d20014) #define rPUPC (*(volatile unsigned *)0x1d20018) #define rPCOND (*(volatile unsigned *)0x1d2001c) #define rPDATD (*(volatile unsigned *)0x1d20020) #define rPUPD (*(volatile unsigned *)0x1d20024)
(一般了解) #define rPCONE (*(volatile unsigned *)0x1d20028) #define rPDATE (*(volatile unsigned *)0x1d2002c) #define rPUPE (*(volatile unsigned *)0x1d20030) #define rPCONF (*(volatile unsigned *)0x1d20034) #define rPDATF (*(volatile unsigned *)0x1d20038) #define rPUPF (*(volatile unsigned *)0x1d2003c) #define rPCONG (*(volatile unsigned *)0x1d20040) #define rPDATG (*(volatile unsigned *)0x1d20044) #define rPUPG (*(volatile unsigned *)0x1d20048)
内容提要 键盘接口 LED显示器 LCD显示器与触摸屏接口(了解) 通讯与中断接口 A/D和D/A转换器接口 ARM的JTAG接口 9
键盘接口 霍耳效应按键利用活动电荷在磁场中的偏转效果。 压键时,晶体便在磁力线垂直于参考电流方向的磁场中移动。晶体在磁场中移动会在晶体另外两个相对的表面之间产生一个小电压,该电压经过放大之后用来表示键已被压下。 晶体切割磁力线感生电压。 • 键盘有两种方案: 1、采用芯片实现键盘扫描;zlg7289 2、用软件实现键盘扫描。嵌入式控制器的功能很强,可允分利用这一资源。 计算机的键实际上就是开关,制造这种键的方法是多种多样的,以下是几种常用的按键: • 机械式按键 • 电容式按键 • 薄膜式按键 • 霍耳效应按键 内含两个金属片和一个复位弹簧,按下时,两个金属片便被压在一起。结构简单成本低,缺点是容易产生抖动。 压键时,可活动的金属片向两块固定的金属片靠近,从而改变了两块固定的金属片之间的电容。此时,检测电容变化的电路就会产生一个逻辑电平信号以表示该键已被按下。 这是一种特殊的机械式按键开关,由三层塑料或橡胶夹层结构构成。 上面一层在每一行键下面有一条印制银导线,中间层在每个键下面有一个小园孔,下面一层在每一列键下面也有一条印制银导线。压键时将上面一层的印制银导线压过中层的小孔与下面一层的印制银导线接触。 10
用ARM芯片实现键盘接口 +5V • 与4X4的矩阵键盘接口,采用 “行扫描法”方法来检测键盘,只需要8根口线. • 选取PF口作为检测键盘用端口,设定PF0 –PF3为输出扫描码的端口,PF4--PF7为键值读入口。 PF0 PF1 PF2 PF3 S3C44B0X PF4 PF5 PF6 PF7 输出扫描码端口 外接上拉电阻 键值读入口 11
矩阵键盘按键的识别方法 • ①识别键盘是否有键按下: 让所有行线均为低电平,检查各列线电平是否为低,如果有列线为低,则说明该列有键被按下,否则说明无键被按下。 rPDATF=0xf0;输出全0值 • ②若有键按下,则识别哪行的键被按下:逐行置低电平,并置其余各行为高电平,检查各列线电平的变化,如果列电平变为低电平,则可确定此行此列交叉点处按键被按下。 行扫描码 0xfe 0xfd 0xfb 0xf7 12
键值与行扫描码、列输入值间的关系 PF7 由行扫描码、列输入值求行号、列号: 行扫描码右移直到最低位是零,次低位是1,移位次数就是行号。 列输入值先右移4次再按行扫描码处理。 PF3 2列 3列 1列
行扫描法识别矩阵键盘按键 所有的行线为低电平 +5V 逐行为低电平 某一按键按下 PF0 PF1 PF2 PF3 S3C44B0X PF4 PF5 PF6 PF7 14
编写键盘扫描程序 开始 初始化键值为-1 PF0-3输出全0 PF4-7读入为全1? N Y PF0-3输出扫描码 Y PF4-7读入为全1? 扫描码指针移位 N 获得行号和列号,计算键值 返回键值 15
寄存器设置 • 设置PCONF寄存器 PF口的有3个端口: 控制口 PCONF,用于设置接口的功能。 数据口 PDATF,用于输入、输出数据。 上拉电阻配置口 PUPF,用于使能上拉电阻。 设定PF0-3为输出口,PF4 - 7为输入口,在端口工作之前设置 1、 rPCONF= 000 000 000 00 01 01 01 01 B PF4-7为输入 PF0-3为输出 16
寄存器设置 2、设置PDATF寄存器 • PF0-3作为输出口输出扫描码时,采用语句: rPDATF=Oxf0 //PF0-3全写入0 • PF4-7作为输入口读入键值时,采用语句: Keyval=(rPDATF&0xf0)>>4; 3、设置PUPF寄存器 • 设置内部上拉电阻的语句为: rPUPF=0x00; //使能PF0-7的内部上拉电阻 18
PDATF PUPF 位 位 描述 描述 PF[8:0] PF[8:0] [8:0] [8:0] 0:相应位的上拉电阻使能 1:相应位的上拉电阻禁止 当端口设定为输入口时,这个寄存器的相应位就对应着引脚的状态;当端口设定为输出口时,输出引脚的状态与该寄存器的相应位相同;当端口设定为多功能口时,PDATF中的内容无效 行扫描法获取键值的程序设计 • 寄存器设置 接口中利用了PF口的相关寄存器,PF口的寄存器有3个——PCONF ,PDATF(PF口数据寄存器 )和PUPF(口上拉电阻寄存器 ) 19
键盘扫描子程序代码如下:返回的是各键的键值:键盘扫描子程序代码如下:返回的是各键的键值: 0 – F。 #include <string.h> #include <stdio.h> char ReadKeyVal(void) { unsigned char i,j,H_val,L_val; char keyval= -1; rPCONF = 0x55; rPUPF=0xff;上拉电阻禁止 rPDATF=0xf0;输出全0值,判是否有键按下
if((L_val=(rPDATF&0xf0))!=0xf0) { H_val=0xfe; // 0xfe ,0xfd 0xfb 0xf7对应于第0、1、2、3行键 for(i=0;i<4;i++) { rPDATF=H_val;输出扫描码 for(j=0;j<100;j++);延时 if((L_val=(rPDATF&0xf0))!=0xf0)//输入列数据不全为1 { L_val=( (L_val>>4))|0xf0;循环右移4次 Keyval =get_val(H_val)× 4 + get_val(L_val); return keyval; } else H_val = H_val <<1; // H_val 行无键按下,此行输出0不影响H_val+1 行。 } } return keyval; }
//get_val子函数是由行扫描值、读取的列值分别得到行号、列号。//get_val子函数是由行扫描值、读取的列值分别得到行号、列号。 char get_val(unsigned char val) { unsigned char i,x; x=0; for(i=0;i<4;i++) { if((~val)==1) return x;//取反 val = (val>>1)|0x80 ;//负数算数右移 x = x+1 ; } }
内容提要 键盘接口 LED显示器 LCD显示器与触摸屏接口(了解) 通讯与中断接口 A/D和D/A转换器接口 ARM的JTAG接口 23
LED显示器接口概述 • LED(Light Emitting Diode)常称为发光二极管,在专用的微型计算机系统中,特别是在嵌入式控制系统中, 应用非常普遍. • 价格低廉、体积小、功耗低,而可靠性又很好 • 从单板微型机、袖珍计算机到许多微型机控制系统及数字化仪器都用LED作为输出显示 24
LED优缺点(百度百科) • 优点 • 体积小,轻 • 耗电量低(相同照明效果比传统光源节能近80%) • 使用寿命长(比传统光源寿命长10倍以上) • 高亮度、低热量(冷光灯) • 环保(不含水银,光谱中不含紫外线和红外线,安全触摸等) • 坚固耐用 • 多变幻 • 技术先进(融合了计算机技术、网络通信技术、图像处理技术、嵌入式控制技术等,具有在线编程、无限升级、灵活多变的特点。)
LED优缺点(百度百科) • 缺点 • 近日由美国加州大学艾尔文分校进行的一项调查却显示,LED灯中包含有锑、砷、铬、铅以及其他多种金属元素。其中,部分LED灯的有毒元素含量已经超过了监管部门制定的标准。比如在低亮度红色LED灯中,研究人员发现其铅含量超标达到8倍,镍含量也超标2.5倍。 • 实际上在美国加州法律中,绝大多数LED灯都已经被明确定义为有毒垃圾,如果使用普通填埋的办法处理将会污染土壤和地下水。而如果LED灯破碎,还可能会对直接接触的人体健康造成损害。但至今,无论各国政府还是民众都对LED灯的环境和健康危险知之甚少。
LED优缺点(百度百科) • 缺点 • LED需要由于单个发光面比较窄,通常大规模集成在线路板上,形成一个比较大的发光源,由此会造成大量热量积累,有时会击穿电路板。所以LED灯的散热一定要好。 • 人眼最不能接受的是蓝光和UV光(即紫外线光),蓝光杀伤人眼活性细胞的能力是绿光的10倍,而UV光杀伤人眼活性细胞的能力又是蓝光的10倍,长期接触大量低波长的蓝光能大量杀伤人眼活性细胞,最终癌化形成斑块。而LED白光形成主要是靠450-455NM波长蓝光激发荧光粉,属于伤害最强的区段 • 易出现「黄圈」问题
LED 的工作原理 • 7个字段分别称为a、b、c、d、e、f、g段,有时还有一个小数点段DP。 • 通过7个发光段的不同组合,可以显示0到9和A到F共16个字母数字,从而实现十六进制的显示 数 据 端 阴极控制端 28
电路原理 动态显示: 1、译码,待显示数字转换成7段代码。 2、位控端口输出位码,每次控制显示一位,从而实现数据的动态显示。 位码:0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 3、段控端口输出欲显示数字的7段代码。 译码: 将一个4位二进制数(可能为十六进制数或BCD码)译为LED的7段字形码。 采用两种方法: 1、 采用专用芯片,实现对BCD码的译码(7447) 2、软件译码法:在软件设计时,将0到F共16个数字(或者0到9)对应的显示代码组成一个表,查表译码。 30
用ARM芯片实现LED显示接口 • 接口电路 结构特点: 8位LED的各段并联,任一时刻只能显示一位。PG口输出只能一位为1。 PF口输出共阳极LED的字型码。 31
7段数码LED编程(初始化) • 设置PCONF、PCONG寄存器(F、G设置为输出口) • rPCONF= 001 001 001 01 01 01 01 01 B=0x12555; • rPCONG= 01 01 01 01 01 01 01 01 B=0x5555; • 设置PUPF、PUPG寄存器 • rPUPF=0x00; //使能PF0-7的内部上拉电阻 • rPUPG=0x00; //使能PG0-7的内部上拉电阻 • 在端口工作之前设置为输出端口。 • 设置内部上拉电阻。 32
指向缓冲区首址 • 流程图 指向第7位 取显示位指针 取要显示的数 将数变为段码 修改缓冲区指针和位码 段码送到段控制通道 位码送到位控制通道 延迟一段时间 N 是否最后一位 Y 退出 33
保存待显示数字的数组。 0~F及小数位段码表 void DisplayLedl(unsigned char dis_8_num[]) { unsigned char led_dis[] ={0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x8C}; unsigned char i, j, D_val(段码) , B_val (位码); rPCONF= 0x12555; rPCONG=0x5555; rPUPF=0x00; B_val = 0x80; 将端口设置为输出端口 使能PG和PF内部上拉电阻 先显示最右侧的位 34
B_val = 0x80; //首先显示第七位 for(i=0;i<8;i++) { D_val = dis_8_num[i]; rPDATF = led_dis[D_val]; rPDATG = B_val; for(j=0;j<100;j++); B_val = B_VAL >> 1;显示下一位 } } 取出待显示字符。 转换成七段字型码送F口。 位控信号送G口。 函数调用: unsigned char num[]={1,2,3,a,f,7,8,0}; DisplayLedl(num[]) 延迟一段时间 35