一款MCU,最重要的是要有輸入輸出引腳,引腳的數(shù)量要夠豐富,功能要夠齊全,還要有靈活的輸入輸出控制方式。
在LPC800系列中提供了很多封裝和輸入輸出引腳數(shù)量的選項(xiàng):
表1 LPC800各系列引腳數(shù)
沒有單獨(dú)的模擬比較器供電引腳,其它封裝都有單獨(dú)的模擬比較器供電引腳。
從表1可以看出,所有LPC800產(chǎn)品的引腳利用率是非常高的,除了供電引腳外,所有其它引腳,包含調(diào)試引腳、外接晶振的引腳和所有具有模擬功能的引腳,都可以作為普通的數(shù)字輸入輸出使用。甚至芯片的復(fù)位引腳,也可以在芯片啟動(dòng)后被配置為數(shù)字輸入輸出引腳。這大大增加了產(chǎn)品的可用性和配置的靈活性。
這里要強(qiáng)調(diào)一個(gè)重要的概念,引腳通常被稱為GPIO引腳,但引腳不等同于GPIO控制器。在LPC800中,引腳的配置由IOCON模塊實(shí)現(xiàn),而GPIO模塊只實(shí)現(xiàn)軟件對(duì)引腳輸入電平的直接讀取,和對(duì)輸出引腳的電平高低的控制。
所有需要用到輸入輸出引腳的模塊,例如UART、I2C、SPI、ADC、定時(shí)器等,都需要使用IOCON配置外部引腳。使用GPIO模塊之前,也都需要使用IOCON配置外部引腳。
一、LPC800的引腳配置功能
LPC800的引腳具有下述功能:
■內(nèi)部上拉或下拉電阻
■漏極開路模式
■輸入遲滯(Hysteresis)
■可配置的數(shù)字式毛刺濾波
■模擬模式
下圖是一個(gè)標(biāo)準(zhǔn)引腳的功能示意圖: 圖1.引腳功能圖
這個(gè)示意圖可以分為三個(gè)部分,上面是輸出部分,下面是輸入部分,中間是一個(gè)維持輸入信號(hào)的維持電路。下面幾個(gè)小節(jié)分別關(guān)注不同的功能部分。
1.1標(biāo)準(zhǔn)推拉輸出
這是最常用的輸出模式,圖1中綠色框中的兩個(gè)MOS管的導(dǎo)通和截止,決定了輸出電平的高低。采用這種模式時(shí),芯片直接推動(dòng)對(duì)應(yīng)的引腳信號(hào),并具有一定的信號(hào)驅(qū)動(dòng)能力。具體驅(qū)動(dòng)能力的大小,每個(gè)產(chǎn)品系列會(huì)不盡相同,用戶需要查看數(shù)據(jù)手冊(cè)中的參數(shù)說明。
下圖是LPC82x數(shù)據(jù)手冊(cè)中Electrical pin characteristics列表中的相關(guān)參數(shù):
VOH表示當(dāng)引腳輸出高時(shí)的情況,即輸出電流為4mA或3mA時(shí),引腳的電壓值最多可以達(dá)到VDD-0.4V。例如,某個(gè)引腳有一個(gè)825Ω對(duì)地電阻,當(dāng)VDD=3.3V時(shí),電阻上的電流為4mA,達(dá)到手冊(cè)規(guī)定的最大允許電流,此時(shí)引腳端的電壓將不會(huì)低于2.9V,這遠(yuǎn)高于TTL或CMOS高電平的電壓。
在實(shí)際應(yīng)用中,通常可以用一個(gè)串聯(lián)了幾百Ω小電阻的LED,通過輸出高電平點(diǎn)亮LED。小電阻的具體阻值可以按照LED的壓降計(jì)算得出,或按照經(jīng)驗(yàn)測(cè)試出來。
VOL表示當(dāng)引腳輸出低時(shí),允許外部輸入電流的大小。作為例子,可以用一個(gè)串聯(lián)了小電阻的LED,跨接在VDD和引腳之間,通過輸出低點(diǎn)亮LED。
IOH和IOL表示當(dāng)引腳輸出高或低時(shí),能夠輸出或輸入的電流大小。
為了一些需要大電流驅(qū)動(dòng)的應(yīng)用,在LPC800系列中,還有一些引腳能夠輸出較大的電流,當(dāng)輸出高時(shí),輸出電流可以達(dá)到20mA。下表是LPC82x數(shù)據(jù)手冊(cè)中,關(guān)于PIO0_2、PIO0_3、PIO0_12和PIO0_16的輸出參數(shù)表。利用這一特性,用戶可以使用這些引腳,控制片外大電流的電路,例如直接驅(qū)動(dòng)電流環(huán)的通信電路。
1.2開漏輸出
開漏模式通常用于I2C通信和其它需要雙向通信的場(chǎng)合。控制圖中“開漏輸出”控制信號(hào)有效,不管輸出還是輸入信號(hào),也不管輸出是高還是低,綠色框中上方的那個(gè)MOS管始終處于截止?fàn)顟B(tài)。
使用開漏輸出模式時(shí),通常用戶需要在該引腳的芯片外部設(shè)置一個(gè)上拉電阻,此電阻的大小由外部輸入電路的輸入阻抗決定。
當(dāng)引腳輸出低時(shí),綠色框中下方的MOS管導(dǎo)通,引腳被拉低;此時(shí)外部上拉電阻上流過的電流,會(huì)通過引腳注入下方的MOS管,因此上拉電阻不能太小,要保證注入電流不能超出芯片能夠承受的范圍。從上一節(jié)的引腳參數(shù)表中可以看到,一般引腳的灌入電流為4mA,即當(dāng)VDD為3.3V時(shí),外部的等效上拉電阻不能小于825Ω。
當(dāng)引腳輸出高時(shí),綠色框中下方的MOS管截止,引腳的電平由外部電路決定。此時(shí)片外的上拉電阻將把信號(hào)線拉至高電平。
實(shí)際上,當(dāng)在開漏輸出引腳輸出高時(shí),兩個(gè)MOS管都是處于截止?fàn)顟B(tài),該引腳對(duì)外呈現(xiàn)高阻狀態(tài)。利用這一特性,允許多個(gè)器件的開漏輸出引腳相互連接在一起,通過“線與”實(shí)現(xiàn)雙向通信。
為了實(shí)現(xiàn)I2C的高速模式+,或其它大電流驅(qū)動(dòng)的需要,LPC800系列中,還有幾個(gè)引腳允許灌入較大的電流。在適當(dāng)?shù)呐渲孟拢还苁峭评敵鲞€是開漏輸出模式下,當(dāng)引腳輸出低時(shí),可以有多達(dá)20mA的灌入電流。
下圖摘錄于LPC82x的數(shù)據(jù)手冊(cè),可以看出PIO0_10和PIO0_11具有灌入大電流的能力。讀者可以自行查看其它型號(hào)的數(shù)據(jù)手冊(cè),找出相應(yīng)的引腳。
1.3數(shù)字輸入
圖1中橙色框里的電路就是數(shù)字輸入部分。當(dāng)引腳處于輸入模式時(shí),綠色框中的兩個(gè)MOS管均處于截止?fàn)顟B(tài),不對(duì)引腳的外部電平產(chǎn)生影響。
當(dāng)引腳配置為數(shù)字輸出時(shí),這部分輸入電路仍然連接在引腳的回路中,并沒有斷開,即用戶可以在配置為數(shù)字輸出的引腳上讀回信號(hào)線的狀態(tài)。當(dāng)引腳配置為開漏輸出時(shí),I2C就是利用這一特性實(shí)現(xiàn)了在同一個(gè)信號(hào)線上的雙向通信,用戶也可以利用這一特性,自行實(shí)現(xiàn)雙向通信。
LPC800的輸入模式還有幾個(gè)特殊的特性,可以方便地輔助用戶實(shí)現(xiàn)相應(yīng)的功能,隨后幾節(jié)會(huì)一一介紹。
1.4輸入反向
使能這個(gè)模式后,當(dāng)輸入引腳為低電平時(shí),軟件會(huì)在寄存器讀到’1’,反之當(dāng)輸入引腳為高電平時(shí),軟件會(huì)在寄存器讀到’0’。用戶可以按照應(yīng)用的要求,自主配置是否需要“輸入反向”。
一般情況下,基本用不到該功能。只有在片外使用負(fù)邏輯電路時(shí),為了軟件邏輯的方便,可以啟用此功能。
1.5輸入的數(shù)字濾波
用戶可以使能這個(gè)功能,自動(dòng)地過濾掉輸入信號(hào)中可能出現(xiàn)的毛刺。例如,用戶可以利用它,實(shí)現(xiàn)按鍵的自動(dòng)去抖動(dòng)。
如果輸入信號(hào)的頻率較高,則需要關(guān)閉此功能。
經(jīng)過適當(dāng)配置,數(shù)字濾波功能能夠?yàn)V除的最窄脈沖,是小于一個(gè)主時(shí)鐘周期的脈沖,即當(dāng)系統(tǒng)主時(shí)鐘為30MHz時(shí),寬度小于33ns的信號(hào)會(huì)被濾除。數(shù)字濾波功能可以濾除的最寬的脈沖,則是小于3 x 255個(gè)主時(shí)鐘周期的脈沖,即當(dāng)系統(tǒng)主時(shí)鐘為30MHz時(shí),可以濾除寬度小于25.5us的脈沖,這已經(jīng)足夠?qū)崿F(xiàn)一般按鍵去抖動(dòng)的要求。
1.6輸入信號(hào)遲滯(Hysteresis)
這個(gè)功能是指,當(dāng)一個(gè)外部輸入信號(hào)由低變高,或由高變低時(shí),芯片內(nèi)部會(huì)推遲輸入狀態(tài)的翻轉(zhuǎn)。
下面是LPC82x數(shù)據(jù)手冊(cè)中引腳靜態(tài)特性的參數(shù)表截圖:
當(dāng)外部輸入電平為0.7VDD時(shí),芯片會(huì)識(shí)別為’高’(VIH),即當(dāng)VDD=3.3V時(shí),VIH=2.3V;當(dāng)外部輸入電平為0.3VDD時(shí),芯片會(huì)識(shí)別為’低’(VIL),即當(dāng)VDD=3.3V時(shí),VIL=1.0V。
當(dāng)使能輸入遲滯功能時(shí),按照上面截圖的參數(shù),芯片會(huì)在外部信號(hào)變化過程中,推遲0.4V改變內(nèi)部寄存器的數(shù)值。這個(gè)遲滯電壓的數(shù)值會(huì)隨芯片的不同而不同,設(shè)計(jì)時(shí)請(qǐng)注意查看對(duì)應(yīng)型號(hào)的數(shù)據(jù)手冊(cè)。
舉個(gè)例子,當(dāng)外部信號(hào)從3.0V下降到0V的過程中,如果沒有遲滯功能,內(nèi)部寄存器的數(shù)值會(huì)在信號(hào)剛好降到低于1.0V時(shí),從’1’變?yōu)?/span>’0’;如果引入遲滯功能,只有信號(hào)降到低于0.6V時(shí),內(nèi)部寄存器的數(shù)值才會(huì)變化。同理,當(dāng)外部信號(hào)上升時(shí),沒有遲滯功能時(shí),內(nèi)部寄存器的數(shù)值會(huì)在外部電平剛好超過2.3V時(shí)變化,使能遲滯功能后,內(nèi)部寄存器的數(shù)值要在外部電平超過2.7V時(shí)才變化。
使用這個(gè)功能的好處是,當(dāng)外部輸入信號(hào)變化時(shí),可以濾除電平上的小幅抖動(dòng),內(nèi)部寄存器的數(shù)值不至于隨外部信號(hào)的抖動(dòng)而頻繁變化,減少軟件處理的負(fù)擔(dān)。
1.7輸入維持
在原文的用戶手冊(cè)中,該功能被稱為Repeater(重復(fù))模式。
圖1中紫色虛線框中的部分實(shí)現(xiàn)輸入維持模式。當(dāng)外部輸入為高電平時(shí),輸入維持電路在引腳內(nèi)部接入一個(gè)弱上拉電阻;當(dāng)外部輸入為低電平時(shí),則在引腳內(nèi)部接入一個(gè)弱下拉電阻。這樣所產(chǎn)生的效果就是,如果外部電路不再驅(qū)動(dòng)這個(gè)信號(hào)線,該信號(hào)線不至于處于浮空狀態(tài)。
我們知道,CMOS電路的輸入端,在處于浮空狀態(tài)時(shí),會(huì)導(dǎo)致較大的漏電流增加功耗,同時(shí)也非常容易受到外界信號(hào)的干擾。使能輸入維持模式,則可以避免這種浮空狀態(tài),減少了系統(tǒng)的無謂功耗,也提高了系統(tǒng)的可靠性。
1.8引腳的內(nèi)部上拉或下拉
上節(jié)介紹的“輸入維持”模式里的上拉電阻和下拉電阻,是由對(duì)應(yīng)電路自動(dòng)引入,用戶也可以按照自己的應(yīng)用邏輯,直接使能引腳內(nèi)部的上拉或下拉電阻,同樣可以達(dá)到避免信號(hào)線浮空的目的。
與輸入維持模式不同的是,應(yīng)用程序可以自行決定在外部電路浮空時(shí),需要保持信號(hào)線的高電平狀態(tài),還是低電平狀態(tài)。
另外使能引腳的內(nèi)部上拉或下拉,獨(dú)立于引腳的輸入或輸出模式。即不管引腳是輸入還是輸出,都可以配置有內(nèi)部上拉或下拉。
按照數(shù)據(jù)手冊(cè)中的參數(shù)推算,內(nèi)部上拉電阻或下拉電阻的等效阻值的典型值是100kΩ左右。讀者可自行查看手冊(cè)中的相應(yīng)部分。
1.9 I2C模式
在LPC800系列中,引腳PIO0_10和PIO0_11擁有特殊的I2C模式,除了支持標(biāo)準(zhǔn)和快速I2C模式,還可以支持I2C快速+模式。這兩個(gè)引腳是真開漏輸出,即在這兩個(gè)引腳的輸出電路中,沒有圖1綠色框中上邊的那個(gè)MOS管;而普通的“非” 真開漏引腳,是通過始終讓上邊那個(gè)MOS管處于截止?fàn)顟B(tài),實(shí)現(xiàn)開漏輸出的功能。
在LPC800中,只有I2C0可以配置為快速+模式。從SWM章節(jié)可以看到,LPC81x的I2C0引腳可以經(jīng)SWM配置到任意引腳,但只能在引腳PIO0_10和PIO0_11上使用快速+模式;其它LPC800系列產(chǎn)品中,I2C0的引腳是不能經(jīng)SWM移動(dòng)的。
當(dāng)I2C的輸出引腳使用PIO0_10和PIO0_11時(shí),需要配置這兩個(gè)引腳為I2C模式;當(dāng)I2C的輸出使用其它引腳時(shí),則需要配置對(duì)應(yīng)的引腳為開漏模式。
1.10模擬輸入/輸出
對(duì)于模擬輸入功能來說,不需要在IOCON中做任何配置,一旦在SWM模塊使能了某個(gè)模擬輸入功能后,該引腳對(duì)應(yīng)的數(shù)字輸入輸出功能就被屏蔽。即作為模擬引腳時(shí),圖1中綠色框和藍(lán)色框的輸出MOS全部截止,橙色的輸入線路也處于關(guān)閉狀態(tài),引腳上的數(shù)字輸入輸出電路均處于高阻狀態(tài)。
相比其它系列,在LPC84x中增加了兩個(gè)DAC模擬輸出,這兩個(gè)DAC對(duì)應(yīng)的配置寄存器相比其它引腳的配置寄存器,多了一個(gè)模擬輸出的控制位。和模擬輸入一樣,當(dāng)選擇了模擬輸出后,該引腳的數(shù)字輸入輸出電路即被屏蔽。
二、引腳的5V兼容
當(dāng)引腳配置為數(shù)字輸入模式時(shí),除了與VDDCMP共用的PIO0_6引腳外,其它的引腳都可以承受外部5V的電壓。PIO0_6只能承受與VDD相同的電壓。
當(dāng)引腳配置為模擬輸入時(shí),則不能承受外部5V的電壓,用戶需特別留意。
作為輸入時(shí),引腳能夠承受5V的輸入電壓,這個(gè)特性極大地方便了使用LPC800產(chǎn)品,與傳統(tǒng)的5V器件在同一個(gè)系統(tǒng)里的互聯(lián),即一個(gè)5V器件的數(shù)字輸出引腳可以直接連接到LPC800的數(shù)字輸入端。
反之,LPC800的數(shù)字輸出引腳可以直接與5V器件的輸入端相連,但5V器件是否能夠正確地識(shí)別LPC800輸出的高電平,用戶需自行查看這個(gè)5V器件的手冊(cè)來決定。
三、復(fù)位后引腳的默認(rèn)狀態(tài)
結(jié)合SWM章節(jié)和GPIO章節(jié)的描述,系統(tǒng)復(fù)位后除了與SWDIO、SWCLK和RESETN對(duì)應(yīng)的功能外,所有的可移動(dòng)功能都與引腳斷開,即引腳內(nèi)部與GPIO模塊相連;同時(shí)由于GPIO模塊中所有的端口復(fù)位后默認(rèn)為輸入,因此在復(fù)位后,除PIO0_2、PIO0_3和PIO0_5外,所有其它引腳都是數(shù)字輸入,并且使能了內(nèi)部弱上拉電阻。
在最新的LPC84x產(chǎn)品中,引入了一個(gè)新的模塊-FAIM(快速初始化存儲(chǔ)器),它可以在系統(tǒng)復(fù)位時(shí),按照事先安排好的邏輯,在軟件還未運(yùn)行時(shí)快速地配置好引腳的弱上拉、弱下拉或輸入維持模式。詳見FAIM對(duì)應(yīng)章節(jié)。
3.1未用引腳的配置
為了減少干擾和減小功耗,建議在軟件啟動(dòng)后,立即把不用的懸空引腳,配置為輸出并輸出低電平同時(shí)關(guān)閉內(nèi)部的上拉電阻。
四、引腳模式配置
在LPC800產(chǎn)品中,每個(gè)引腳都對(duì)應(yīng)一個(gè)32位寄存器,用于配置1.1中介紹的各項(xiàng)功能和模式。下面幾張表格列出了所有引腳的IOCON配置寄存器的每位功能。
表2.LPC81x、LPC82x、LPC83x和LPC84x引腳配置寄存器列表表3.LPC82x、LPC83x和LPC84x
引腳配置寄存器列表(不含LPC81x)
表4.LPC84x的引腳配置寄存器列表
上述表格中列出了每個(gè)寄存器的第0~16位,寄存器的第17~31位均為保留位。其它位的意義如下:
五、使用IOCON的數(shù)字濾波功能實(shí)現(xiàn)按鍵去抖動(dòng)的例程
使用數(shù)字濾波實(shí)現(xiàn)按鍵去抖,配置過程很簡(jiǎn)單,只需三步:
1、使能IOCON時(shí)鐘;
2、配置IOCONCLKDIVx的分頻系數(shù);
3、配置對(duì)應(yīng)引腳的配置寄存器。
以下是初始化LPC824-Lite開發(fā)板上的KEY_USER和KEY_ISP按鍵的例程。
在例程中使用了下列宏定義:
代碼片段1.配置KEY_USER和KEY_ISP按鍵數(shù)字濾波功能的函數(shù)代碼的第04和11行是對(duì)應(yīng)的,此例程使用了IOCONCLKDIV0作為濾波時(shí)鐘,并設(shè)置分頻系數(shù)為255,在主頻為30MHz時(shí),可以濾除最大255x3=765個(gè)周期,即25.5us的脈沖。
END
更多恩智浦AI-IoT市場(chǎng)和產(chǎn)品信息,邀您同時(shí)關(guān)注“NXP客棧”微信公眾號(hào)
? ? ?NXP客棧
恩智浦致力于打造安全的連接和基礎(chǔ)設(shè)施解決方案,為智慧生活保駕護(hù)航。
長按二維碼,關(guān)注我們
恩智浦MCU加油站
這是由恩智浦官方運(yùn)營的公眾號(hào),著重為您推薦恩智浦MCU的產(chǎn)品信息、開發(fā)技巧、教程文檔、培訓(xùn)課程等內(nèi)容。
長按二維碼,關(guān)注我們
原文標(biāo)題:LPC800 前生今世-第七章 輸入輸出控制器(GPIO)
文章出處:【微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
mcu
+關(guān)注
關(guān)注
146文章
17123瀏覽量
350992 -
恩智浦
+關(guān)注
關(guān)注
14文章
5857瀏覽量
107320
原文標(biāo)題:LPC800 前生今世-第七章 輸入輸出控制器(GPIO)
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論