LPC800 前生今世-第七章 输入输出控制器(GPIO)

描述

一款MCU,最重要的是要有输入输出引脚,引脚的数量要够丰富,功能要够齐全,还要有灵活的输入输出控制方式。

 

 

LPC800系列中提供了很多封装和输入输出引脚数量的选项:

mcu表1 LPC800各系列引脚数

没有单独的模拟比较器供电引脚,其它封装都有单独的模拟比较器供电引脚。

从表1可以看出,所有LPC800产品的引脚利用率是非常高的,除了供电引脚外,所有其它引脚,包含调试引脚、外接晶振的引脚和所有具有模拟功能的引脚,都可以作为普通的数字输入输出使用。甚至芯片的复位引脚,也可以在芯片启动后被配置为数字输入输出引脚。这大大增加了产品的可用性和配置的灵活性。

 

这里要强调一个重要的概念,引脚通常被称为GPIO引脚,但引脚不等同于GPIO控制器。在LPC800中,引脚的配置由IOCON模块实现,而GPIO模块只实现软件对引脚输入电平的直接读取,和对输出引脚的电平高低的控制。

 

 

所有需要用到输入输出引脚的模块,例如UARTI2CSPIADC、定时器等,都需要使用IOCON配置外部引脚。使用GPIO模块之前,也都需要使用IOCON配置外部引脚。

一、LPC800的引脚配置功能

LPC800的引脚具有下述功能:

 

 

内部上拉或下拉电阻

 

 

漏极开路模式

 

输入迟滞(Hysteresis)

 

可配置的数字式毛刺滤波

 

模拟模式

 

下图是一个标准引脚的功能示意图:mcu                          图1.引脚功能图

 

 

这个示意图可以分为三个部分,上面是输出部分,下面是输入部分,中间是一个维持输入信号的维持电路。下面几个小节分别关注不同的功能部分。

 

 

 

1.1 标准推拉输出

 

 

 

这是最常用的输出模式,图1中绿色框中的两个MOS管的导通和截止,决定了输出电平的高低。采用这种模式时,芯片直接推动对应的引脚信号,并具有一定的信号驱动能力。具体驱动能力的大小,每个产品系列会不尽相同,用户需要查看数据手册中的参数说明。

 

 

 

下图是LPC82x数据手册中Electrical pin characteristics列表中的相关参数:mcu

 

 

 

VOH表示当引脚输出高时的情况,即输出电流为4mA3mA时,引脚的电压值最多可以达到VDD-0.4V。例如,某个引脚有一个825Ω对地电阻,当VDD=3.3V时,电阻上的电流为4mA,达到手册规定的最大允许电流,此时引脚端的电压将不会低于2.9V,这远高于TTLCMOS高电平的电压。

 

 

 

在实际应用中,通常可以用一个串联了几百Ω小电阻LED,通过输出高电平点亮LED。小电阻的具体阻值可以按照LED的压降计算得出,或按照经验测试出来。

 

 

 

VOL表示当引脚输出低时,允许外部输入电流的大小。作为例子,可以用一个串联了小电阻的LED,跨接在VDD和引脚之间,通过输出低点亮LED

 

 

 

IOHIOL表示当引脚输出高或低时,能够输出或输入的电流大小。

 

 

 

为了一些需要大电流驱动的应用,在LPC800系列中,还有一些引脚能够输出较大的电流,当输出高时,输出电流可以达到20mA。下表是LPC82x数据手册中,关于PIO0_2PIO0_3PIO0_12PIO0_16的输出参数表。利用这一特性,用户可以使用这些引脚,控制片外大电流的电路,例如直接驱动电流环的通信电路。

 

 

 

mcu

 

 

 

1.2 开漏输出

 

开漏模式通常用于I2C通信和其它需要双向通信的场合。控制图中“开漏输出”控制信号有效,不管输出还是输入信号,也不管输出是高还是低,绿色框中上方的那个MOS管始终处于截止状态。

 

 

使用开漏输出模式时,通常用户需要在该引脚的芯片外部设置一个上拉电阻,此电阻的大小由外部输入电路的输入阻抗决定。

 

 

 

当引脚输出低时,绿色框中下方的MOS管导通,引脚被拉低;此时外部上拉电阻上流过的电流,会通过引脚注入下方的MOS管,因此上拉电阻不能太小,要保证注入电流不能超出芯片能够承受的范围。从上一节的引脚参数表中可以看到,一般引脚的灌入电流为4mA,即当VDD3.3V时,外部的等效上拉电阻不能小于825Ω

 

 

 

当引脚输出高时,绿色框中下方的MOS管截止,引脚的电平由外部电路决定。此时片外的上拉电阻将把信号线拉至高电平。

 

 

 

实际上,当在开漏输出引脚输出高时,两个MOS管都是处于截止状态,该引脚对外呈现高阻状态。利用这一特性,允许多个器件的开漏输出引脚相互连接在一起,通过“线与”实现双向通信。

 

为了实现I2C的高速模式+,或其它大电流驱动的需要,LPC800系列中,还有几个引脚允许灌入较大的电流。在适当的配置下,不管是推拉输出还是开漏输出模式下,当引脚输出低时,可以有多达20mA的灌入电流。

下图摘录于LPC82x的数据手册,可以看出PIO0_10PIO0_11具有灌入大电流的能力。读者可以自行查看其它型号的数据手册,找出相应的引脚。

 

 

mcu

1.3 数字输入

 

 

1中橙色框里的电路就是数字输入部分。当引脚处于输入模式时,绿色框中的两个MOS管均处于截止状态,不对引脚的外部电平产生影响。

 

 

当引脚配置为数字输出时,这部分输入电路仍然连接在引脚的回路中,并没有断开,即用户可以在配置为数字输出的引脚上读回信号线的状态。当引脚配置为开漏输出时,I2C就是利用这一特性实现了在同一个信号线上的双向通信,用户也可以利用这一特性,自行实现双向通信。

 

 

LPC800的输入模式还有几个特殊的特性,可以方便地辅助用户实现相应的功能,随后几节会一一介绍。

 

 

1.4 输入反向

 

 

使能这个模式后,当输入引脚为低电平时,软件会在寄存器读到’1’,反之当输入引脚为高电平时,软件会在寄存器读到’0’。用户可以按照应用的要求,自主配置是否需要“输入反向”。

 

 

一般情况下,基本用不到该功能。只有在片外使用负逻辑电路时,为了软件逻辑的方便,可以启用此功能。

 

 

1.5 输入的数字滤波

 

 

用户可以使能这个功能,自动地过滤掉输入信号中可能出现的毛刺。例如,用户可以利用它,实现按键的自动去抖动。
如果输入信号的频率较高,则需要关闭此功能。

 

 

经过适当配置,数字滤波功能能够滤除的最窄脉冲,是小于一个主时钟周期的脉冲,即当系统主时钟为30MHz时,宽度小于33ns的信号会被滤除。数字滤波功能可以滤除的最宽的脉冲,则是小于3 x 255个主时钟周期的脉冲,即当系统主时钟为30MHz时,可以滤除宽度小于25.5us的脉冲,这已经足够实现一般按键去抖动的要求。

 

 

1.6 输入信号迟滞(Hysteresis)

 

 

这个功能是指,当一个外部输入信号由低变高,或由高变低时,芯片内部会推迟输入状态的翻转。

 

 

下面是LPC82x数据手册中引脚静态特性的参数表截图:mcu

当外部输入电平为0.7VDD时,芯片会识别为’(VIH),即当VDD=3.3V时,VIH=2.3V;当外部输入电平为0.3VDD时,芯片会识别为’(VIL),即当VDD=3.3V时,VIL=1.0V

 

 

当使能输入迟滞功能时,按照上面截图的参数,芯片会在外部信号变化过程中,推迟0.4V改变内部寄存器的数值。这个迟滞电压的数值会随芯片的不同而不同,设计时请注意查看对应型号的数据手册。

 

 

举个例子,当外部信号从3.0V下降到0V的过程中,如果没有迟滞功能,内部寄存器的数值会在信号刚好降到低于1.0V时,从’1’变为’0’;如果引入迟滞功能,只有信号降到低于0.6V时,内部寄存器的数值才会变化。同理,当外部信号上升时,没有迟滞功能时,内部寄存器的数值会在外部电平刚好超过2.3V时变化,使能迟滞功能后,内部寄存器的数值要在外部电平超过2.7V时才变化。

 

 

使用这个功能的好处是,当外部输入信号变化时,可以滤除电平上的小幅抖动,内部寄存器的数值不至于随外部信号的抖动而频繁变化,减少软件处理的负担。

 

 

1.7 输入维持

 

 

在原文的用户手册中,该功能被称为Repeater(重复)模式。

 

 

1中紫色虚线框中的部分实现输入维持模式。当外部输入为高电平时,输入维持电路在引脚内部接入一个弱上拉电阻;当外部输入为低电平时,则在引脚内部接入一个弱下拉电阻。这样所产生的效果就是,如果外部电路不再驱动这个信号线,该信号线不至于处于浮空状态。

 

 

我们知道,CMOS电路的输入端,在处于浮空状态时,会导致较大的漏电流增加功耗,同时也非常容易受到外界信号的干扰。使能输入维持模式,则可以避免这种浮空状态,减少了系统的无谓功耗,也提高了系统的可靠性。

 

 

1.8 脚的内部上拉或下

 

 

上节介绍的“输入维持”模式里的上拉电阻和下拉电阻,是由对应电路自动引入,用户也可以按照自己的应用逻辑,直接使能引脚内部的上拉或下拉电阻,同样可以达到避免信号线浮空的目的。

 

 

与输入维持模式不同的是,应用程序可以自行决定在外部电路浮空时,需要保持信号线的高电平状态,还是低电平状态。

 

 

另外使能引脚的内部上拉或下拉,独立于引脚的输入或输出模式。即不管引脚是输入还是输出,都可以配置有内部上拉或下拉。

 

 

按照数据手册中的参数推算,内部上拉电阻或下拉电阻的等效阻值的典型值是100kΩ左右。读者可自行查看手册中的相应部分。

 

 

1.9 I2C模式

 

 

LPC800系列中,引脚PIO0_10PIO0_11拥有特殊的I2C模式,除了支持标准和快速I2C模式,还可以支持I2C快速+模式。这两个引脚是真开漏输出,即在这两个引脚的输出电路中,没有图1绿色框中上边的那个MOS管;而普通的“非” 真开漏引脚,是通过始终让上边那个MOS管处于截止状态,实现开漏输出的功能。

 

 

LPC800中,只有I2C0可以配置为快速+模式。从SWM章节可以看到,LPC81xI2C0引脚可以经SWM配置到任意引脚,但只能在引脚PIO0_10PIO0_11上使用快速+模式;其它LPC800系列产品中,I2C0的引脚是不能经SWM移动的。

 

 

I2C的输出引脚使用PIO0_10PIO0_11时,需要配置这两个引脚为I2C模式;当I2C的输出使用其它引脚时,则需要配置对应的引脚为开漏模式。

 

 

1.10 模拟输入/输出

 

 

对于模拟输入功能来说,不需要在IOCON中做任何配置,一旦在SWM模块使能了某个模拟输入功能后,该引脚对应的数字输入输出功能就被屏蔽。即作为模拟引脚时,图1中绿色框和蓝色框的输出MOS全部截止,橙色的输入线路也处于关闭状态,引脚上的数字输入输出电路均处于高阻状态。

 

 

相比其它系列,在LPC84x中增加了两个DAC模拟输出,这两个DAC对应的配置寄存器相比其它引脚的配置寄存器,多了一个模拟输出的控制位。和模拟输入一样,当选择了模拟输出后,该引脚的数字输入输出电路即被屏蔽。

二、引脚的5V兼容

当引脚配置为数字输入模式时,除了与VDDCMP共用的PIO0_6引脚外,其它的引脚都可以承受外部5V的电压。PIO0_6只能承受与VDD相同的电压。

 

 

当引脚配置为模拟输入时,则不能承受外部5V的电压,用户需特别留意。

 

 

 

作为输入时,引脚能够承受5V的输入电压,这个特性极大地方便了使用LPC800产品,与传统的5V器件在同一个系统里的互联,即一个5V器件的数字输出引脚可以直接连接到LPC800的数字输入端。

 

 

 

反之,LPC800的数字输出引脚可以直接与5V器件的输入端相连,但5V器件是否能够正确地识别LPC800输出的高电平,用户需自行查看这个5V器件的手册来决定。

 

三、复位后引脚的默认状态

结合SWM章节和GPIO章节的描述,系统复位后除了与SWDIOSWCLKRESETN对应的功能外,所有的可移动功能都与引脚断开,即引脚内部与GPIO模块相连;同时由于GPIO模块中所有的端口复位后默认为输入,因此在复位后,除PIO0_2PIO0_3PIO0_5外,所有其它引脚都是数字输入,并且使能了内部弱上拉电阻。

在最新的LPC84x产品中,引入了一个新的模块-FAIM(快速初始化存储器),它可以在系统复位时,按照事先安排好的逻辑,在软件还未运行时快速地配置好引脚的弱上拉、弱下拉或输入维持模式。详见FAIM对应章节。

 

 

3.1未用引脚的配置

为了减少干扰和减小功耗,建议在软件启动后,立即把不用的悬空引脚,配置为输出并输出低电平同时关闭内部的上拉电阻。

四、引脚模式配置

LPC800产品中,每个引脚都对应一个32位寄存器,用于配置1.1中介绍的各项功能和模式。下面几张表格列出了所有引脚的IOCON配置寄存器的每位功能。

 mcu表2.LPC81xLPC82xLPC83xLPC84x引脚配置寄存器列表  

mcu                  表3.LPC82xLPC83xLPC84x

               引脚配置寄存器列表(不含LPC81x)

 

mcu表4.LPC84x的引脚配置寄存器列表

 

 

上述表格中列出了每个寄存器的第0~16位,寄存器的第17~31位均为保留位。其它位的意义如下:

 

mcu

五、使用IOCON的数字滤波功能实现按键去抖动的例程

使用数字滤波实现按键去抖,配置过程很简单,只需三步:

 

 

1、使能IOCON时钟;

 

 

2、配置IOCONCLKDIVx的分频系数;

 

 

3、配置对应引脚的配置寄存器。

 

 

以下是初始化LPC824-Lite开发板上的KEY_USERKEY_ISP按键的例程。

 

在例程中使用了下列宏定义:mcu

mcu代码片段1.配置KEY_USER和KEY_ISP按键数字滤波功能的函数

代码的第0411行是对应的,此例程使用了IOCONCLKDIV0作为滤波时钟,并设置分频系数为255,在主频为30MHz时,可以滤除最大255x3=765个周期,即25.5us的脉冲。

   

END

   

更多恩智浦AI-IoT市场和产品信息,邀您同时关注“NXP客栈”微信公众号

mcu      

NXP客栈


恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。

       

长按二维码,关注我们

恩智浦MCU加油站


这是由恩智浦官方运营的公众号,着重为您推荐恩智浦MCU的产品信息、开发技巧、教程文档、培训课程等内容。

mcu  

长按二维码,关注我们


原文标题:LPC800 前生今世-第七章 输入输出控制器(GPIO)

文章出处:【微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分