单片机上电复位 时间时, i/o 端口配置为输出引脚.对不对

STM8S学习――操作单个IO口_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STM8S学习――操作单个IO口
&&操作STM8S单个IO口
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢单片机I/O口的结构的详解
我的图书馆
单片机I/O口的结构的详解
IO接口&1.什么是源型&漏型?什么是上拉电阻?下拉电阻?什么是&线驱动输出&集电极开路输出,推挽式输出?&&&&&&我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”)。对于图1,当左端的输入为“0”时,前面的三极管截止(即集电极c跟发射极e之间相当于断开),所以5v电源通过1k电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。我们将图1简化成图2的样子。图2中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。再看图三。图三中那个1k的电阻即是上拉电阻。如果开关闭合,则有电流从1k电阻及开关上流过,但由于开关闭和时电阻为0(方便我们的讨论,实际情况中开关电阻不为0,另外对于三极管还存在饱和压降),所以在开关上的电压为0,即输出电平为0。如果开关断开,则由于开关电阻为无穷大(同上,不考虑实际中的漏电流),所以流过的电流为0,因此在1k电阻上的压降也为0,所以输出端的电压就是5v了,这样就能输出高电平了。但是这个输出的内阻是比较大的(即1kω),如果接一个电阻为r的负载,通过分压计算,就可以算得最后的输出电压为5*r/(r+1000)伏,即5/(1+1000/r)伏。所以,如果要达到一定的电压的话,r就不能太小。如果r真的太小,而导致输出电压不够的话,那我们只有通过减小那个1k的上拉电阻来增加驱动能力。但是,上拉电阻又不能取得太小,因为当开关闭合时,将产生电流,由于开关能流过的电流是有限的,因此限制了上拉电阻的取值,另外还需要考虑到,当输出低电平时,负载可能还会给提供一部分电流从开关流过,因此要综合这些电流考虑来选择合适的上拉电阻。如果我们将一个读数据用的输入端接在输出端,这样就是一个io口了(51的io口就是这样的结构,其中p0口内部不带上拉,而其它三个口带内部上拉),当我们要使用输入功能时,只要将输出口设置为1即可,这样就相当于那个开关断开,而对于p0口来说,就是高阻态了。对于漏极开路(od)输出,跟集电极开路输出是十分类似的。将上面的三极管换成场效应管即可。这样集电极就变成了漏极,oc就变成了od,原理分析是一样的。&另一种输出结构是推挽输出。推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,下面的开关断;而要输出低电平时,则刚好相反。比起oc或者od来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的oc或od输出则不会有这样的情况,因为上拉电阻提供的电流比较小。如果是推挽输出的要设置为高阻态时,则两个开关必须同时断开(或者在输出口上使用一个传输门),这样可作为输入状态,avr单片机的一些io口就是这种结构。2.AVR单片机IO口的结构分析AVR的IO是真正双向IO结构,由于大部分网友都是从标准51转过来的,受标准51的准双向IO和布尔操作概念影响,没能掌握AVR的IO操作,所以有必要撰文说明一下,其实采用真正双向IO结构的新型MCU很多,常用的有&增强型51,PIC,AVR等。先简单的回顾一下标准51的准双向IO结构这种准双向IO结构的特点是1&输出结构类似&OC门,输出低电平时,内部NMOS导通,驱动能力较强(800uA);输出高电平靠内部上拉电阻,驱动能力弱(60uA)。2&永远有内部电阻上拉(P0口除外),高电平输出电流能力很弱,所以即使IO口长时间短路到地也不会损坏IO口(同理,IO口低电平输出能力较强,作低电平输出时不能长时间短路到VCC)3&作输入时,因为OC门有"线与"特性,必须把IO口设为高电平(所以按键多为共地接法)4&作输出时,输出低电平可以推动LED(也是很弱的),输出高电平通常需要外接缓冲电路(所以LED多为共阳接法)5&软件模拟&OC结构的总线反而比较方便-----例如&IIC总线*&P0口比较特殊,做外部总线时,是推挽输出,做普通IO时没有内部上拉电阻,所以P0口做按键输入需要外接上拉电阻。*&OC门:三极管的叫集电极开路,场效应管的叫漏极开路,简称开漏输出。具备"线与"能力,有0得0。*&为什么设计成输出时高电平弱,低电平强----是考虑了当年流行的TTL器件输入特性 &&&&相信我们大多数人都接触过51单片机,51单片机的I/O口是准双向I/O口。其实这种说法是不严谨的,我们知道,51单片机有4个I/O口,分别是P0、P1、P2、P3,这4个I/O口的结构并不完全一致,其中P0口是标准的双向I/O口,而P1、P2、P3则是准双向I/O口。&&&&&&关于准双向I/O口和双向I/O口的区别请看另一篇文章“准双向I/O口和标准双向I/O口的区别”&&&&&&AVR单片机的I/O口是标准的双向I/O口,它的IO结构就就比51的I/O口复杂多了,单是控制端口的寄存器就有3个&PORTx(数据寄存器)、DDRx(数据方向寄存器)、PINx(端口输入引脚);另外还有一个SFIOR(特殊功能I/O寄存器),这个寄存器中的PUD位控制全部I/O口的上拉电阻是允许还是被禁止。&&&&&&&&下图是AVR单片机通用I/O口结构示意图:&&&&&从图中可以看出,每组I/O口配备三个8位寄存器,它们分别是数据方向寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x表示端口序号)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制。&&&&数据方向寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。当DDRx=1时,I/O口处于输出工作方式。此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚,如下图。AVR的输出采用推挽电路提高了I/O口的输出能力,当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O引脚呈现低电平,同时可吸纳20mA电流。因此,AVR的I/O在输出方式下提供了比较大的驱动能力,可以直接驱动LED等小功率外围器件。&&&&&&当DDRx=0时,I/O处于输入工作方式。此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻,如下图:&&&&&AVR单片机通用I/O端口的主要特点为:双向可独立位控的I/O口ATmega16的PA、PB、PC、PD四个端口都是8位双向I/O口,每一位引脚都可以单独的进行定义,相互不受影响。如用户可以在定义PA口第0、2、3、4、5、6位用于输入的同时定义第1、7位用于输出,互不影响。Push-Pull大电流驱动(最大40mA)可控制的引脚内部上拉电阻每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。DDRx可控的方向寄存器。AVR的I/O端口结构同其它类型单片机的明显区别是,AVR采用3个寄存器来控制I/O端口。一般单片机的I/O仅有数据寄存器和控制寄存器,而AVR还多了一个方向控制器,用于控制I/O的输入输出方向。由于输入寄存器PINx实际不是一个寄存器,而是一个可选通的三态缓冲器,外部引脚通过该三态缓冲器与MCU的内部总线连接,因此,读PINx时是读取外部引脚上的真实和实际逻辑值,实现了外部信号的同步输入。这种结构的I/O端口,具备了真正的读-修改-写(Read-Modify-Write)特性。AVR单片机通用I/O口设计注意事项:&&&&数据寄存器PORTx和数据方向寄存器DDRx为读/&写寄存器,而端口输入引脚PINx为只读寄存器。&&&&&但是需要特别注意的是,对PINx&寄存器某一位写入逻辑"1“&将造成数据寄存器相应位的数据发生"0“&与“1“&的交替变化。当寄存器MCUCR&的上拉电阻禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。&&&&&&在&高阻态和输出高电平&两种状态之间进行切换时,上拉电阻使能或输出低电平这两种模式必然会有一个发生。编写程序时要注意两者的顺序。&&&&&通常,上拉电阻使能是完全可以接受的,因为高阻状态下强高电平输出还是上拉输出都是可以接受的。&&&&&如果使用情况不是这样,可以通过置位SFIOR&寄存器的PUD&来禁止所有端口的上拉电阻。在上拉输入和输出低电平之间切换也有同样的问题。用户必须选择高阻态或输出高电平作为中间步骤。不论如何配置DDxn,都可以通过读取PINxn&寄存器来获得引脚电平PINxn寄存器的各个位与其前面的锁存器组成了一个同步器。这样就可以避免在内部时钟状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。其缺点是引入了延迟。AVR&IO具备多种IO模式:&&&1&高阻态&,多用于高阻模拟信号输入,例如ADC数模转换器输入,模拟比较器输入&&&2&弱上拉状态(Rup=20K~50K),输入用。为低电平信号输入作了优化,省去外部上拉电阻,例如按键输入,低电平中断触发信号输入&&&3&推挽强输出状态,驱动能力特强(&20mA),可直接推动LED,而且高低驱动能力对称.使用注意事项:&&&&&&写用PORTx,读取用PINx&&&&&&&实验时,尽量不要把管脚直接接到GND/VCC,当设定不当,IO口将会输出/灌入&80mA(Vcc=5V)的大电流,导致器件损坏。&&&作输入时:&&&&&&&&1、通常要使能内部上拉电阻,悬空(高阻态)将会很容易受干扰。(表面看好像是51的抗干扰能力强,是因为51永远有内部电阻上拉,)&&&&&&&&2、尽量不要让输入悬空或模拟输入电平接近VCC/2,将会消耗太多的电流,特别是低功耗应用场合------CMOS电路的特点&&&&&&&&3、如果先前I/O口为输出状态,设置为输入状态后,必须等待1个时钟周期后才能正确的读到外部引脚PINx的值。&&&&&&&&4、功能模块(中断,定时器)的输入可以是低电平触发,也可以是上升沿触发或下降沿触发。&&&&&&&&5、用于高阻模拟信号输入,切记不要使能内部上拉电阻,影响精确度。例如ADC数模转换器输入,模拟比较器输入&&&&&&&&&&作输出时:&&&&&&&&采用必要的限流措施,例如驱动LED要串入限流电阻&&&复位时:&&&&&&&&复位时内部上拉电阻将被禁用。如果应用中(例如电机控制)需要严格的电平控制,请使用外接电阻固定电平&&&休眠时:&&&&&&&&作输出的,依然维持状态不变&&&&&&&&作输入的,一般无效,但如果使能了第二功能(中断使能),其输入功能有效。例如&外部中断的唤醒功能。AVR的C语言IO操作:&&&&&&&&&AVR的C语言基于ANSI&C,没有像51那样扩展了位操作(布尔操作),虽然汇编指令里面有SBI/CBI/SBIC/SBIS指令,&&&&&&&&&所以需要采用&位逻辑运算来实现,这是必须要掌握的。&&&&&&&&&IO口和功能寄存器的操作方法一样,但对于部分功能寄存器的读写有特殊要求,请参看手册。&&&&&&&&&不必考虑代码效率的问题,如果可能,GCCAVR会自动优化为SBI/CBI/SBIC/SBIS指令,跟汇编的效率是一样的。&&&&&&&&&&&&例如&iom16.h&里面定义了&#define&PA7&7&&&&&&&&&&&(这标准头文件定义了MCU的所有官方定义(包括寄存器,位,中断入口等),但管脚的第二功能没有定义)&&&&&&&&&想PA7为1&&&&&&&&&&&&PORTA|=(1&&PA7);&&&&&&&&&&&&&&&&&&&&想PA7为0&&&&&&&&&&&&PORTA&=~(1&&PA7);&&&&&&&&&想PA7取反&&&&&&&&&&&PORTA^=(1&&PA7);&&&&&&&&&想检测PA7是否为1&&&&if&(PINA&(1&&PA7))&{&};&&&&&&&&&想检测PA7是否为0&&&&if&!(PINA&(1&&PA7))&{&};&&&&&&&&*&&&&&&为左移运算符,不懂的就要好好复习C语言基础了。注意IO操作的顺序:&&&&&&&//上电默认DDRx=0x00,PORTx=0x00&输入,无上拉电阻&&&&&&&假设PA口驱动LED的负极,低电平灯亮初始化方法1:&&&&&&PORTA=0xFF;&&&&//内部上拉,高电平&&&&&&DDRA=0xFF;&&&&&//输出高电平---------灯一直是灭的初始化方法2:&&&&&&DDRA=0xFF;&&&&&//输出低电平--------灯被错误点亮了&&&&&&PORTA=0xFF;&&&&//输出高电平--------马上被熄灭了,时间很短(1个指令不到uS时间),灯闪了一下,眼睛无法察觉&&&&&&但要是这个IO口是控制炸药包的点火信号呢?工控场合要考虑可靠性的问题&&&&& 模拟OC结构的IIC总线的技巧:&&&&&&&&&&虽然AVR大多带有硬件IIC接口,但也有需要使用软件模拟IIC的情况&&&&&&&&&&可以通过使用外部上拉电阻+控制DDRx的方法来实现OC结构的IIC总线。&&&&&&&&&&IIC的速度跟上拉电阻有关,内部的上拉电阻阻值较大(Rup=20K~50K),只能用于低速的场合&&&&&&&&&&#define&SDA&&&&&0&&&&//PC0&&&&&&&&&&#define&SCL&&&&&1&&&&//PC1&&&&&&&&&&(程序初始化设定&SDA和SCL都是&PORT=0,DDR=0)&&&&&&&&&&#define&SDA_0()&&&DDRA|=(1&&SDA)&&&&//输出低电平&&&&&&&&&&#define&SDA_1()&&&DDRA&=~(1&&SDA)&&&//输入,外部电阻上拉为高电平&&&&&&&&&&#define&SCL_0()&&&DDRA|=(1&&SCL)&&&&//输出低电平&&&&&&&&&&#define&SCL_1()&&&DDRA&=~(1&&SCL)&&&//输入,外部电阻上拉为高电平&&&&&&&&&&使用上面的SDA_0()/SDA_1()/SCL_0()/SCL_1()宏即可,直观,而且效率跟汇编是一样的&3.PIC单片机端口的概述PIC单片机的IO口,特别是第二功能的AD口,当端口被配置为AD模拟输入时,误以为端口用作普通的IO口时,去读取相应的端口,然而读进来的数据不确定。(例如:用万用表测量该管脚的电压为4.0V,但是读进来的数据始终为低电平),这是由于PIC单片机的IO口有一个弱上拉(用MOS&管的开关代替),当端口被配置为AD模拟输入时,弱上拉disable,则单片机的IO口呈现为高阻状态。(可参照PIC单片机的DATASHEET)&在数字电路中不用的输入脚都要接固定电平,通过1k电阻接高电平或接地。&1.&电阻作用:&l&接电组就是为了防止输入端悬空&l&减弱外部电流对芯片产生的干扰&l&保护cmos内的保护二极管,一般电流不大于10ma&l&上拉和下拉、限流&l&1.&改变电平的电位,常用在ttl-cmos匹配&2.&在引脚悬空时有确定的状态&3.增加高电平输出时的驱动能力。&4、为oc门提供电流&l&那要看输出口驱动的是什么器件,如果该器件需要高电压的话,而输出口的输出电压又不够,就需要加上拉电阻。&l&如果有上拉电阻那它的端口在默认值为高电平你要控制它必须用低电平才能控制如三态门电路三极管的集电极,或二极管正极去控制把上拉电阻的电流拉下来成为低电平。反之,&l&尤其用在接口电路中,为了得到确定的电平,一般采用这种方法,以保证正确的电路状态,以免发生意外,比如,在电机控制中,逆变桥上下桥臂不能直通,如果它们都用同一个单片机来驱动,必须设置初始状态.防止直通!&2、定义:&l&上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!下拉同理!&l&上拉是对器件注入电流,下拉是输出电流&l&弱强只是上拉电阻的阻值不同,没有什么严格区分&l&对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。&3、为什么要使用拉电阻:&l&一般作单键触发使用时,如果ic本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在ic外部另接一电阻。&l&数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定!&l&一般说的是i/o端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,i/o端口的输出类似与一个三极管的c,当c接通过一个电阻和电源连接在一起的时候,该电阻成为上c拉电阻,也就是说,如果该端口正常时为高电平,c通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻,使该端口平时为低电平,作用吗:&比如:当一个接有上拉电阻的端口设为输如状态时,他的常态就为高电平,用于检测低电平的输入。&l&上拉电阻是用来解决总线驱动能力不足时提供电流的。一般说法是拉电流,下拉电阻是用来吸收电流的,也就是你同学说的灌电流&线驱动(差动输出)线驱动器是一个源电流输出器件。在导通状态时,线驱动器输出为电源(vcc);在关断状态时,输出悬空。因此,线驱动器需要一个灌电流输入接口。下面表格中给出了一个简单的线驱动器的原理图。差动输出(欧姆龙称为线性驱动输出)线性驱动输出就是根据rs-422a的数据输送回路。可通过双股搅合线电缆进行长距离输送&集电极开路集电极开路电路是灌电流输出器件。在关断状态时,集电极开路输出连到地;在导通状态时,集电极开路输出悬空。因此,集电极开路输出需要一个源电流输入接口。下面表格中给出了一个简单的集电极开路输出电路的原理图。&推挽式推挽式输出结合了线驱动与集电极开路输出,在关断状态时,推挽式输出接地;在导通状态时,推挽式输出连到电源(vcc)。推挽输出(欧姆龙称为互补输出)输出回路有2种,即npn与pnp2种晶体管输出。根据输出信号h或l,2种晶体管输出互相交叉进行on或off动作,使用时,正电源,0v分别为吸合,拉下互补输出是输出电流流出或流入2种动作,特征是信号的上升、下降速度快,可进行导线的长距离延长。可与开路集电极输入机器(npn/pnp)连接,另外还可以连接到电压输入机器上。但是为了能更好的发挥未来的性能,一般推荐在电压输入机器上使用电压输入的编码器。
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢对S3C2410A输入/输出端口(I/O口)的调查
一、S3C2410A简介
&&S3C2410A处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用AMBA新型总线结构及0.18um制造工艺的16/32位微控制器。
该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU虚拟存储器管理,支持TFT和STN的LCD控制器,NAND闪存控制器,系统管理器(片选逻辑和SDRAM控制器),3路UART,4路DMA,4路带PWM的Timer
,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS
接口,IIS-BUS
接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI以及内部PLL时钟倍频器。S3C2410A处理器提供一组完整的系统外围设备接口,最高可运行在203MHz,内核电压为1.8V/2.0V,存储器电压3.3V,外部I/O电压3.3V,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。
&接口综述:
&1、CPU:采用SAMSUNG
S3C2410AL的
ARM920T CPU & &
&2、存储器:①64M SDRAM
②64M Nand Flash(用于存放应用程序)&
③SD卡
&3、一个TFT输出接口(可以选购配套的TFT真彩色LCD)
&4、CS8900以太网控制器
&&5、一个USB
主机接口 & & &
& &6、一个USB
设备接口(可以切换成第二主机,需要更改驱动 & &
&7、一个总线扩展接口。&&8、2个串口输出
&&9、一个MIC输入接口&&&&&&&&&
10、一个LINE音频输入接口
&&11、一个耳机输出接口。&12、2个CPU可控LED等。&13、AD转换输入接口&&14、SPI和IIC接口
&&15、JTAG调试接口&&16、5个按键
&硬件接口详解:
用于连接耳机或者音箱等设备播放音频。
连接外部音频来录音。比如随身听的耳机输出连接到这里来录音。
连接普通的mic来录音。
用于连接SD(我们正式测试:64M/128M/512/1G这几种SD卡)。
通用的LCD插座,可以支持STN,TFT等各类的LCD和触摸屏。
用于产生正板的复位信号。
复位按键,按下后再松开,硬件既复位。
连接cpu中断EINT4的按键,没有特定的定义其意义。不同的试验可以实现不同的功能任务。
连接cpu中断EINT19的按键,没有特定的定义其意义。不同的试验可以实现不同的功能任务。
连接cpu中断EINT11的按键,没有特定的定义其意义。不同的试验可以实现不同的功能任务。
连接cpu中断EINT2的按键,没有特定的定义其意义。不同的试验可以实现不同的功能任务。
连接cpu中断EINT0的按键,没有特定的定义其意义。不同的试验可以实现不同的功能任务。
为CPU的内部时钟提供电源,充电电池,随时可以充电。
用于把CPU的数字信号转化为音频信号,并且可以把mic输入的音频信号转化为cpu需要的数字信号。
32M的SDRAM,和16共同组成系统64M的SDRAM。
32M的SDRAM,和15共同组成系统64M的SDRAM。
K9F1208UOB
64M的nand flash,用于存放程序。
开发板的核心CPU芯片。AL是无铅版
为系统提供时钟,经过内部分频等处理,产生各种时钟信号。
总线扩展接口
用于扩展外围功能模块。
1.8V稳压芯片
为CPU提供核心电源。
脉冲变压器
网络隔离作用,保障带宽性能和安全。
用于连接jtag调试器或者仿真器。
用于SPI等设备的扩展。
AD电压选择
用于AD输入参考电压的选择。内部3.3V还是外部输入。
AD信号输入
8通道10位AD信号输入,如果使用触摸屏占据2个通道。
串口1电平信号转化,把TTL电平转化为RS232电平。
串口1输入,用于连接串口设备。
串口0电平信号转化,把TTL电平转化为RS232电平。
串口0输入,用于连接串口设备或者调试信息输出。
10M的以太网接口输出。
Usb跳线设置
设备口通过跳线可以设备为主口(驱动需要相应的变化)。
USB主机接口
连接USB的设备。请连接靠近板子的接口(主机接口0)
Usb设备接口
连接usb的主机,比如连接pc用来同步或者下载文件。
连接5V输入的稳压电源(内正外负)
开发板的总电源开关,使用开发板需要打开电源开关。
主稳压芯片
为开发板提供稳定可靠的3.3V电源。
二、S3C2410A输入/输出接口简介
通用输入/输出接口原理与结构
通用输入/输出接口(GPIO)也称为并行I/O,是最基本的I/O形式,由一组输入引脚、输出引脚或输入/输出引脚组成,CPU对它们能够进行存取操作,有些GPIO引脚能够通过软件编程改变输入/输出方向。
接口的功能主要有:控制、缓冲、状态、转换、整理、程序中断。
& 一个双向GPIO端口(D0)的简化功能逻辑图如下所示:
其中PORT为数据寄存器,DDR为数据方向寄存器。
S3C2410A的输入/输出接口分类 & &
&&在S3C2410A中,共有117个多功能复用输入输出端口(I/O口),分为8组,也就是端口A~端口H
共8个端口。分别是:
&&A组(23位的输出端口)&&&&
B组(11位的输入输出端口)
& &&C组(16位的输入输出端口)
D组(16位的输入输出端口)
&&E组(16位的输入输出端口)
F组(8位的输入输出端口)
& &&G组(16位的输入输出端口)
H组(11位的输入输出端口)
&&所有的这些引脚中,大多数都是复用的(注:端口A作为功能口外,只能够作为输出口使用),也就是每个引脚既可以作为通用引脚,也可以作为专用的,用于特定功能的引脚。而且有的引脚既可以作为输入,也可以作为输出,如何将这些引脚配置成通用输入输出引脚,和将这些引脚配置特定的输入输出方式,需要通过程序进行设置。所以在使用I/O口之前,首先要定义引脚的功能,每个引脚端的功能通过端口控制寄存器来定义。其中,与I/O口配置相关的寄存器包括:端口控制寄存器、端口数据寄存器、端口上拉寄存器、杂项控制寄存器以及外部中断控制寄存器等。
&S3C2410的I/O配置情况详见《ARM9嵌入式系统设计基础教程》黄智伟&&北京航空航天大学出版社
(3)S32410A输入/输出接口编程实例&&
&&该程序的作用是:有四个发光二极管(LED1、LED2、LED3、LED4),让它们从左到右轮流发光。LED1连到了F口的第4引脚,LED2连到了F口的第5引脚,LED3连到了F口的第6引脚,LED4连到了F口的第7引脚。当对应引脚为低电平时,发光二极管发光,高电平时就熄灭。&&
编程原理:先让LED1亮,隔一段时间后LED2亮、LED1灭,再一段时间后LED3亮、LED2灭,再一段时间后LED4亮、LED3灭,一段时间后LED1亮、LED4熄灭,不断重复这个过程。
&&在程序中,时间间隔采用循环语句完成,程序代码如下:
& &①启动汇编代码:
& ResetEntry & &
sp,#0x&&&&&&&&&&&&&&&&
;定义堆栈指针&&
&IMPORT &Main&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;声明主函数Main &
&BL&&&Main&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&
;调用主函数
②延时代码 &
& &&EXPORT
delay & & &
& & sub r0,r0,#1&&&&&&&&&&&&&
;r0=r0-1&&
&&cmp r0,#0x0&&&&&&&&&&&&&&
;将r0的值与0相比较
delay&;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
pc,lr&&&&&&&&&&&&&&&&
③端口寄存器的表示。
& &#define
(*(volatile unsigned *)0x) &
&rGPFCON=0x5500&&
&&&&;将F口4,5,6,7脚置为输出脚。
&rGPFUP=0xffff&&&&&&&&&
;禁止GPF端口的上拉
& &delay(0x2ffff)。
&&④主函数 & &
Main(void) & & &
&&Target Init();
& &while (1) &
&{& &if(flag==0)
rGPDCON= rGPDCON &0x0ff|0x5500
& &rGPDGAT= rGPDGAT
&0xef|0xe0 & &
&&&delay(200);
& &flag=1; &
& &&if(flag==1)
rGPDCON= rGPDCON &0x0ff|0x5500
& &rGPDGAT= rGPDGAT
&0xdf|0xd0 & &
&delay(200); & &
& & &flag=2;
if(flag==2)&{&&&
rGPDCON= rGPDCON &0x0ff|0x5500
& &rGPDGAT= rGPDGAT
&0xcf|0xc0 & &
&delay(200); & &
& & &flag=3;
&if(flag==3)&{&&&
rGPDCON= rGPDCON &0x0ff|0x5500
&&rGPDGAT= rGPDGAT
&0xbf|0xb0 & &
&&delay(200); &
&&flag=0; &
&&利用上述程序既可实现4个LED灯的循环亮灭。
结束语 & & &
&从不同的角度看,I/O系统有不同的定义。从系统软件开发者角度看,I/O操作意味着与设备的通信、对设备编程初始化和请示执行设备与系统之间的实际数据传输以及操作完成后通知请求者。从RTOS的角度看,I/O操作意味着对I/O请求定位正确的设备,对设备定位正确的设备驱动程序,并解决对设备驱动程序的请求。从应用程序员角度看,目标是找到一个简单、统一和精练的方法与系统中出现的所有类型的设备通信。作为一名电子专业的学生,我们接触到许多不同的系统,如:单片机,嵌入式等。这就要求我们不仅要会用I/O设备,更要对其内部原理及工作过程等有所了解。
参考书 & & &
&ARM9嵌入式系统设计基础教程&
北京航空航天大学出版社
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 rc复位电路时间计算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信