从I/O口的特性上看,规范80C51的P0口在作为I/O口运用时,是开漏结构,在实践运用中一般要增加上拉电阻;P1、P2、P3都是准双向I /O,内部有上拉电阻,既可作为输入又可以作为输出。而LPC900系列单片机的I/O口特性有必定的不同,它们可以被装备成4种不同的作业方式:准双向 I/O、推挽输出、高阻输入、开漏。
准双向I/O方式与规范80C51比较,尽管在内部结构上是不同的,但在用法上类同,比方要作为输入时都必须先写“1”置成高电平,然后才能去读引脚的电平状况。
推挽输出的特点是不管输出高电平仍是低电平都能驱动较大的电流,比方输出高电平时可以直接点亮LED(要串联几百欧限流电阻),而在准双向I/O方式下很难办到。
高阻输入方式的特点是只能作为输入运用,可是可以获得比较高的输入阻抗,这在模仿比较器和ADC运用中是必需的。
开漏方式与准双向方式类似,可是没有内部上拉电阻。开漏方式的长处是电气兼容性好,外部上拉电阻接3V电源,就能和3V逻辑器材接口,假如上拉电阻接5V电源,又可以与5V逻辑器材接口。此外,开漏方式还可以方便地完成“线与”逻辑功用
1. 高阻输入(Input)
为削减信息传输线的数目,大多数计算机中的信息传输线选用总线方式,即凡要传输的同类信息都在同一组传输线,且信息是分时传送的。在计算机中一般有三组总线,即数据总线、地址总线和操控总线。为避免信息彼此搅扰,要求凡挂到总线上的寄存器或存储器等,它的输入输出端不仅能出现0、1两个信息状况,并且还应能出现第三个状况—-高阻抗状况,即此刻如同它们的输出被开关断开,对总线状况不起作用,此刻总线可由其他器材占用。三态缓冲器即可完成上述功用,它除具有输入输出端之外,还有一操控端。
如图1.1所示,为GPIO管脚在高阻输入方式下的等效结构示意图。这是一个管脚的状况,其它管脚的结构也是相同的。输入方式的结构比较简略,便是一个带有施密特触发输入(Schmitt-triggered input)的三态缓冲器(U1),并具有很高的输入等效阻抗。施密特触发输入的作用是能将缓慢改变的或许是畸变的输入脉冲信号整构成比较抱负的矩形脉冲信号。碑文GPIO管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin)的当时电平状况读到内部总线上(Internal Bus)。在不碑文读操作时,外部管脚与内部总线之间是阻隔的
2. 推挽输出(Output)
推挽输出原理:在功率扩大器电路中很多选用推挽扩大器电路,这种电路顶用两只三极管构成一级扩大器电路,两只三极管别离扩大输入信号的正半周和负半周,即用一只三极管扩大信号的正半周,用另一只三极管扩大信号的负半周,两只三极管输出的半周信号在扩大器负载上兼并后得到一个完好周期的输出信号。
推挽扩大器电路中,一只三极管作业在导通、扩大状况时,另一只三极管处于截止状况,当输入信号改变到另一个半周后,原先导通、扩大的三极管进入截止,而原先截止的三极管进入导通、扩大状况,两只三极管在不断地替换导通扩大和截止改变,所以称为推挽扩大器(armjishu.com)。
如图1.2所示,为GPIO管脚在推挽输出方式下的等效结构示意图。U1是输出锁存器,碑文GPIO管脚写操作时,在写脉冲(Write Pulse)的作用下,数据被锁存到Q和/Q。T1和T2构成CMOS反相器,T1导通或T2导通时都表现出较低的阻抗,但T1和T2不会一同导通或一同封闭,最终构成的是推挽输出。在推挽输出方式下,GPIO还具有回读功用,完成回读功用的是一个简略的三态门U2。留意:碑文回读功用时,读到的是管脚的输出锁存状况,而不是外部管脚Pin的状况。
3. 开漏输出(OutputOD)
如图1.3所示,为GPIO管脚在开漏输出方式下的等效结构示意图。开漏输出和推挽输出比较结构根本相同,但只要下拉晶体管T1而没有上拉晶体管。相同,T1实践上也是多组可编程挑选的晶体管。开漏输出的实践作用便是一个开关,输出“1”时断开、输出“0”时衔接到GND(有必定内阻)。回读功用:读到的仍是输出锁存器的状况,而不是外部管脚Pin的状况。因而开漏输出方式是不能用来输入的。
开漏输出结构没有内部上拉,因而在实践运用时一般都要外接适宜的上拉电阻(一般选用4.7~10kΩ)。开漏输出可以方便地完成“线与”逻辑功用,即多个开漏的管脚可以直接并在一同(不需要缓冲阻隔)运用,并一致外接一个适宜的上拉电阻,就天然构成“逻辑与”联系。开漏输出的另一种用处是可以方便地完成不同逻辑电平之间的转化(如3.3V到5V之间),只需外接一个上拉电阻,而不需要额定的转化电路。典型的运用比如便是根据开漏电气衔接的I2C总线。
4. 钳位二极管
GPIO内部具有钳位维护二极管,如图1.4所示。其作用是避免从外部管脚Pin输入的电压过高或许过低。VDD正常供电是3.3V,假如从Pin输入的信号(假定任何输入信号都有必定的内阻)电压超越VDD加上二极管D1的导通压降(假定在0.6V左右),则二极管D1导通,会把多于的电流引到 VDD,而真实输入到内部的信号电压不会超越3.9V。同理,假如从Pin输入的信号电压比GND还低,则咱们二极管D2的作用,会把实践输入内部的信号电压胁迫在-0.6V左右。
假定VDD=3.3V,GPIO设置在开漏方式下,外接10kΩ上拉电阻衔接到5V电源,在输出“1”时,咱们经过丈量发现:GPIO管脚上的电压并不会到达5V,而是在4V上下,这正是内部钳位二极管在起作用。尽管输出电压达不到满幅的5V,但关于实践的数字逻辑一般3.5V以上就算是高电平了 (armjishu.com)。
假如的确想进一步进步输出电压,一种简略的做法是先在GPIO管脚上串联一只二极管(如1N4148),然后再接上拉电阻。参见图1.5,框内是芯片内部电路。向管脚写“1”时,T1封闭,在Pin处得到的电压是3.3+VD1+VD3=4.5V,电压提高作用显着;向管脚写“0”时,T1导通,在 Pin处得到的电压是VD3=0.6V,仍属低电平。