资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,5,章 嵌入式系统输入输出设备接口,5.1 GPIO,(通用输入,/,输出接口),5.1.1 GPIO,原理与结构,GPIO,(,General Purpose I/O,,通用输入,/,输出接口)也称为并行,I/O,(,parallel I/O,),是最基本的,I/O,形式,由一组输入引脚、输出引脚或输入,/,输出引脚组成,,CPU,对它们能够进行存取操作。有些,GPIO,引脚能够通过软件编程改变输入,/,输出方向。,一个双向,GPIO,端口(,D0,)的简化功能逻辑图如图,5.1.1,所示,图中,PORT,为数据寄存器和,DDR,(,Data Direction Register,)为数据方向寄存器。,图,5.1.1,双向,GPIO,功能逻辑图,DDR,设置端口的方向。如果,DDR,的输出为,1,,则,GPIO,端口为输出形式;如果,DDR,的输出为零,则,GPIO,端口为输入形式。写入,WR,DDR,信号能够改变,DDR,的输出状态。,DDR,在微控制器地址空间中是一个映射单元。这种情况下,如果需要改变,DDR,,则需要将恰当的值置于数据总线的第,0,位(即,D0,),同时激活,WR,DDR,信号。读,DDR,,就能得到,DDR,的状态,同时激活,RD,DDR,信号。,如果设置,PORT,引脚端为输出,则,PORT,寄存器控制着该引脚端状态。如果将,PORT,引脚端设置为输入,则此输入引脚端的状态由引脚端上的逻辑电路层来实现对它的控制。对,PORT,寄存器的写操作,需要激活,WR,PORT,信号。,PORT,寄存器也映射到微控制器的地址空间。需指出,即使当端口设置为输入时,如果对,PORT,寄存器进行写操作,并不会对该引脚产生影响。但从,PORT,寄存器的读出,不管端口是什么方向,总会影响该引脚端的状态。,5.1.2 S3C2410A,输入输出端口编程实例,S3C2410A,共有,117,个多功能复用输入输出端口(,I/O,口),分为端口,A,端口,H,共,8,组。为了满足不同系统设计的需要,每个,I/O,口可以很容易地通过软件对进行配置。每个引脚的功能必须在启动主程序之前进行定义。如果一个引脚没有使用复用功能,那么它可以配置为,I/O,口。注意:端口,A,除了作为功能口外,只能够作为输出口使用。,在,S3C2410A,中,大多数的引脚端都是复用的,所以对于每一个引脚端都需要定义其功能。为了使用,I/O,口,首先需要定义引脚的功能。每个引脚端的功能通过端口控制寄存器(,PnCON,)来定义(配置)。与配置,I/O,口相关的寄存器包括:端口控制寄存器(,GPACON,GPHCON,)、端口数据寄存器(,GPADAT,GPHDAT,)、端口上拉寄存器(,GPBUP,GPHUP,)、杂项控制寄存器以及外部中断控制寄存器(,EXTINTN,)等。,S3C2410A,的,I/O,口配置情况请参考第,3,章如表,3.4.1,3.4.7,所列。,下面介绍一个通过,G,口的控制发光二极管,LED1,和,LED2,轮流闪烁,I/O,口编程实例,徐英慧,。,对,I/O,口的操作是通过对相关各个寄存器的读写实现的。要对寄存器进行读写操作,首先要对寄存器进行定义。有关,I/O,口相关寄存器的宏定义代码如下:,/Port A,控制寄存器,#definerGPACON,(*(,volatile unsigned*,),0 x56000000,),/Port A,数据寄存器,#definerGPADAT,(*(,volati1e unsigned*,),0 x56000004,),/Port B,控制寄存器,#definerGPBCON,(*(,volatile unsigned*,),0 x56000010,),/Port B,数据寄存器,#definerGPBDAT,(*(,volatile unsigned*,),0 x56000014,),/Port B,上拉电阻禁止寄存器,#definerGPBUP,(*(,volatile unsigned*,),0 x56000018,),/Port C,控制寄存器,#definerGPCCON,(*(,volatile unsigned*,),0 x56000020,),/Port C,数据寄存器,#definerGPCDAT,(*(,volatile unsigned*,),0 x56000024,),/Port C,上拉电阻禁止寄存器,#definerGPCUP,(*(,volatile unsigned*,),0 x56000028,),/Port D,控制寄存器,#definerGPDCON,(*(,volatile unsigned*,),0 x56000030,),/Port D,数据寄存器,#definerGPDDAT,(*(,volatile unsigned*,),0 x56000034,),/Port D,上拉电阻禁止寄存器,#definerGPDUP,(*(,volatile unsigned*,),0 x56000038,),/Port E,控制寄存器,#definerGPECON,(*(,volatile unsigned*,),0 x56000040,),/Port E,数据寄存器,#definerGPEDAT,(*(,volatile unsigned*,),0 x56000044,),/Port E,上拉电阻禁止寄存器,#definerGPEUP,(*(,volatile unsigned*,),0 x56000048,),/Port F,控制寄存器,#definerGPFCON,(*(,volatile unsigned*,),0 x56000050,),/Port F,数据寄存器,#definerGPFDAT,(*(,volatile unsigned*,),0 x56000054,),/Port F,上拉电阻禁止寄存器,#definerGPFUP,(*(,volatile unsigned*,),0 x56000058,),/Port G,控制寄存器,#definerGPGCON,(*(,volati1e unsigned*,),0 x56000060,),/Port G,数据寄存器,#definerGPGDAT,(*(,volatile unsigned*,),0 x56000064,),/Port G,上拉电阻禁止寄存器,#definerGPGUP,(*(,volatile unsigned*,),0 x56000068,),/Port H,控制寄存器,#definerGPHCON,(*(,volatile unsigned*,),0 x56000070,),/Port H,数据寄存器,#definerGPHDAT,(*(,volatile unsigned*,),0 x56000074,),/Port H,上拉电阻禁止寄存器,#definerGPHUP,(*(,volatile unsigned*,),0 x56000078,),要想实现对,G,口的配置,只要在地址,0 x5600 0060,中给,32,位的每一位赋值就可以了。如果,G,口的某个引脚被配置为输出引脚,在,PDATG,对应的地址位写入,1,时,该引脚输出高电平;写入,0,时该引脚输出低电平。如果该引脚被配置为功能引脚,则该引脚作为相应的功能引脚使用。,下面是实现,LED1,和,LED2,轮流闪烁的程序代码。,void Main,(,void,),int flag,,,i,;,Target Init,();,/,进行硬件初始化操作,,,包括对,I,O,口的初始化操作,for,(;),if,(,flag=0,),for,(,i=0,;,i 1000000,;,i+,);,/,延时,rGPGCON,rGPGCON,0 xfff0ffff|0 x00050000,;,/,配置第,8,、,第,/9,位为输出引脚,rGPGDAT,rGPGDAT,0 xeff|0 x200,;,/,第,8,位输出为低电平,/,第,9,位输出高电平,for,(,i=0,;,i 10000000,;,i+,);,/,延时,flag=1,;,else,for,(,i=0,;,i 1000000,;,i+,);,/,延时,rGPGCON,rGPGCON,0 xfff0ffff,(,0 x00050000,;,/,配置第,8,、,/,第,9,位为输出引脚,rGPGDAT,rGPGDAT,Oxdff|0 x100,;,/,第,8,位输出为高电平,/,第,9,位输出低电平,for,(,i=0,;,iVi,的情况时,此时,比较器的输出为低电平,使计数控制信号,C,为,0,,计数器停止计数。这时候数字输出量,D7,D0,就是与模拟电压等效的数字量。计数控制信号由高变低的负跳变也是,A/D,转换的结束信号,表示已完成一次,A/D,转换。,计数式,A/D,转换器结构简单,但转换速度较慢。,2,双积分式,A/D,转换器原理,双积分式,A/D,转换器对输入模拟电压和参考电压进行两次积分,将电压变换成与其成正比的时间间隔,利用时钟脉冲和计数器测出其时间间隔,完成,A/D,转换。双积分式,A/D,转换器主要包括积分器、比较器、计数器和标准电压源等部件,其电路结构图如图,5.2.2,(,a,)所示。,双积分式,A/D,转换器的转换过程如下:,首先对输入待测的模拟电压,Vi,进行固定时间的积分;,然后转换到标准电压,VR,进行固定斜率的反向积分(定值积分),如图,5.2.2,(,b,)所示。反向积分进行到一定时间,便返回起始值。从图,5.2.2,(,b,)中可看出对标准电压,VR,进行反向积分的时间,T2,正比于输入模拟电压,输入模拟电压越大,反向积分回到起始值的时间,T,越长,有,Vi,(,T2/T1,),VR,。,用标准时钟脉冲测定反向积分时间(如计数器),就可以得到对应于输入模拟电压的数字量,实现,A/D,转换。,双积分式,A/D,转换器具有很强的抗工频干扰能力,转换精度高,但速度较慢。,图,5.2.2,(,a,)双积分式,A/D,转换器电路结构图,双积分式,A/D,转换图,图,5.2.2,(,b,)积分输出波形,3,逐次逼近式,A/D,转换器原理,逐次逼近式,A/D,转换器电路结构如图,5.2.3,所示,其工作过程可与天平称重物类比,图中的电压比较器相当于天平,被测电压,Ux,相当于重物,基准电压,Ur,相当于电压法码。该方案具有各种规格的按,8421,编码的二进制电压法码,Ur,,根据,UxUr,,比较器有不同的输出以打开或关闭逐次逼近寄存器的各位。输出从大到小的基准电压法码,与被测电压,Ux,比较,并逐渐减小其差值,使之逼近平衡。当,Ux=Ur,时,比较器输出为零,相当于天平平衡,最后以数字显示的平衡值即为被测电压值。,逐次逼近式,A/D,转换器转换速度快,转换精度较高,对,N,位,A/D,转换只需,N,个时钟脉冲即可完成,可用于测量微秒级的过渡过程的变化,是在计算机系统中采用最多的一种,A/D,转换方法。,图,5.2.3,逐次逼近式,A/D,转换器电路结构,4,A/D,转换器的主要指标,(,1,)分辨率(,Resolution,),分辨率用来反映,A/D,转换器对输入电压微小变化的响应能力,通常用数字输出最低位(,LSB,)所对应的模拟输入的电平值表示。,n,位,A/D,转换能反应,1/2n,满量程的模拟输入电平。分辨率直接与转换器的位数有关,一般也可简单地用数字量的位数来表示分辨率,即,n,位二进制数,最低位所具有的权值,就是它的分辨率。,值得注意的是,分辨率与精度是两个不同的概念,不要把两者相混淆。即使分辨率很高,也可能由于温度漂移、线性度等原因,而使其精度不够高。,(,2,)精度(,Accuracy,),精度有绝对精度(,Ab
展开阅读全文