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