|
免責(zé)說明: 本人才疏學(xué)淺,翻譯不保證正確,僅供參考
20 GPIO 通用輸入輸出
通用輸入/輸出(GPIO)被指定到一個端口,最多具有32個I/O(取決于封裝),從而可以通過一個端口訪問和控制多達32個引腳。 每個GPIO均可單獨訪問。
GPIO具有以下用戶可配置的功能:
- 多達32個GPIO
- 8個帶模擬通道的GPIO,用于SAADC,COMP或LPCOMP輸入
- 驅(qū)動的輸出強度可配置
- 內(nèi)部上拉和下拉電阻
- 從所有引腳上的高電平或低電平觸發(fā)中喚醒
- 任何引腳上的狀態(tài)變化都可以觸發(fā)中斷
- PPI任務(wù)/事件系統(tǒng)可以使用所有引腳
- 可以通過PPI和GPIOTE通道控制一個或多個GPIO輸出
- 所有引腳都可以單獨映射到接口塊,以實現(xiàn)布局靈活性
- SENSE上捕獲的GPIO狀態(tài)更改的信號可以存儲在LATCH寄存器
GPIO端口外設(shè)最多可實現(xiàn)32個引腳,即PIN0至PIN31。這些引腳中的每一個都可以用PIN_CNF[n]寄存器單獨配置(n = 0…31)。可以通過這些寄存器配置以下參數(shù):
- 方向
- 驅(qū)動強度
- 使能/禁用上下拉
- 引腳感應(yīng)
- 輸入緩沖器斷開
- 模擬輸入(用于選定的引腳)
PIN_CNF寄存器為保留寄存器。有關(guān)保留寄存器的更多信息,請參見第78頁的電源—電源。
20.1 引腳配置
可以通過PIN_CNF [n]寄存器中的SENSE字段對引腳進行單獨配置,以檢測其輸入的高電平或低電平。
當(dāng)在任何這樣配置的引腳上檢測到正確的電平時,檢測機制會將DETECT信號設(shè)置為高電平。每個引腳都有一個單獨的DETECT信號,DETECTMODE寄存器定義的默認(rèn)行為是,來自GPIO端口所有引腳的DETECT信號被組合成一個公共的DETECT信號,該信號在整個系統(tǒng)中路由,然后可以由其他外圍設(shè)備使用??磮D21.該機制在ON和OFF模式下均起作用。
 GPIO端口包含32個單獨的引腳,其中PIN0更詳細(xì)地用作參考。插圖左側(cè)的所有信號都被系統(tǒng)中的其他外圍設(shè)備使用,因此,CPU無法直接使用。
在啟用前,請確保引腳處于無法觸發(fā)檢測機制的電平。啟用檢測機制后,如果滿足PIN_CNF寄存器中配置的檢測條件,檢測將立即變高。如果在啟用檢測機制之前,DETECT信號為低電平,則將觸發(fā)PORT事件。
有關(guān)如何使用DETECT信號的更多信息,請參見以下外圍設(shè)備:
- POWER: 使用DETECT是系統(tǒng)關(guān)機
- GPIOTE: 使用DETECT信號生成PORT事件
當(dāng)引腳的PINx.DETECT信號變?yōu)楦唠娖綍r,將在LATCH寄存器中設(shè)置一個標(biāo)志,例如 當(dāng)PIN0.DETECT信號變?yōu)楦唠娖綍r,LATCH寄存器中的位0將被設(shè)置為’1’
僅當(dāng)CPU通過將1寫入要清除的位來顯式清除LATCH寄存器時,即PINx.DETECT信號設(shè)置為低,才不會影響LATCH寄存器。
如果在關(guān)聯(lián)的PINx.DETECT信號為高電平時,CPU對LATCH寄存器中的某位執(zhí)行清除操作,則不會清除LATCH寄存器中的該位。
當(dāng)LATCH寄存器中的一個或多個位為1時,LDETECT信號將被設(shè)置為高電平。 當(dāng)LATCH寄存器中的所有位成功清零時,LDETECT信號將被設(shè)置為低電平。
如果在CPU對LATCH寄存器執(zhí)行清除操作后,如果LATCH寄存器中的一個或多個位為1,則會在LDETECT信號上產(chǎn)生一個上升沿,如圖22所示:第113頁的DETECT信號行為
重要提示: CPU可以隨時讀取LATCH寄存器,以檢查一個或多個GPIO引腳上是否滿足SENSE條件,即使在CPU查詢LATCH寄存器時不再滿足該條件。 即使未將LDETECT信號用作DETECT信號,此機制也將起作用。
默認(rèn)情況下,LDETECT信號未連接到GPIO端口的DETECT信號,但可以通過DETECTMODE寄存器從GPIO端口更改GPIO端口的DETECT信號的行為??梢詫⑸鲜瞿J(rèn)行為直接從LDETECT信號獲取,請參見第121頁上的圖21:GPIO端口和GPIO引腳詳細(xì)信息。第122頁上的圖22:DETECT信號行為說明了這兩種選擇的DETECT信號行為。 
當(dāng)不將GPIO引腳的輸入緩沖器用作輸入時,可以將其斷開連接,以節(jié)省功耗,請參見第112頁上的圖21:GPIO端口和GPIO引腳詳細(xì)信息。必須連接輸入,以便在IN寄存器中獲得有效的輸入值,并使檢測機制能夠訪問該引腳。
系統(tǒng)中的其他外圍設(shè)備可以將自身連接至GPIO引腳,并覆蓋其輸出值和配置,或者讀取其模擬或數(shù)字輸入值,請參閱第21頁上的圖21:GPIO端口和GPIO引腳詳細(xì)信息。
選定的引腳還支持模擬輸入信號,請參見第112頁上的圖21:GPIO端口和GPIO引腳詳細(xì)信息。模擬引腳的分配可以在第113頁的引腳分配中找到。
重要提示 當(dāng)引腳配置為數(shù)字輸入時,在nRF52832設(shè)計中要注意的是,當(dāng)輸入電壓介于VIL和VIH之間時,要最大程度地減小電流消耗。 但是,優(yōu)良作法是確保外部電路長時間不將其引腳驅(qū)動至VIL和VIH之間的電平。
20.2 位于RADIO附近的GPIO
射頻性能參數(shù)(例如,靈敏度)可能會受到高頻數(shù)字I / O的影響,而高頻數(shù)字I / O的吸收/源電流較大,靠近無線電電源和天線引腳。
有關(guān)建議的使用指南,請參閱第13頁的引腳分配,以最大程度地提高應(yīng)用中的無線電性能。
21 GPIOTE (GPIO任務(wù)和GPIO事件)
可以通過GPIOTE使用任務(wù)和事件的方法來訪問GPIO。每個GPIOTE通道可以分配給一個引腳。
GPIOTE模塊使GPIO可以在引腳狀態(tài)變化時生成事件,這些事件可用于通過PPI系統(tǒng)執(zhí)行任務(wù)。也可以使用PPI系統(tǒng)驅(qū)動GPIO以更改系統(tǒng)事件的狀態(tài)。在系統(tǒng)開啟或系統(tǒng)關(guān)閉時,可以通過低功率檢測引腳狀態(tài)變化。  每個GPIOTE通道中最多可以使用三個任務(wù)來執(zhí)行對引腳的寫操作。固定有兩項任務(wù)(SET和CLR),并且一項任務(wù)(OUT)可配置為執(zhí)行以下操作:
- 設(shè)置(Set)
- 清除(Clear)
- 翻轉(zhuǎn)(Toggle)
可以從以下輸入條件之一在每個GPIOTE通道中生成一個事件:
21.1 引腳的事件和任務(wù)
GPIOTE模塊具有許多任務(wù)和事件,可以將其配置為在單個GPIO引腳上運行。
任務(wù)(SET [n],CLR [n]和OUT [n])可用于寫入各個引腳,事件(IN [n])可根據(jù)各個引腳輸入發(fā)生的變化生成。
SET任務(wù)會將CONFIG [n] .PSEL中選擇的引腳設(shè)置為高電平。
CLR任務(wù)會將引腳設(shè)置為低電平。
OUT任務(wù)對引腳的影響可在CONFIG [n] .POLARITY中進行配置,并且可以將引腳設(shè)置為高電平,將其設(shè)置為低電平或進行切換。
使用CONFIG [n]寄存器配置任務(wù)和事件。 每組SET,CLR和OUT [n]任務(wù)以及IN [n]事件都有一個與之關(guān)聯(lián)的CONFIG [n]寄存器。
只要將SET [n],CLR [n]和OUT [n]任務(wù)或IN [n]事件配置為控制引腳n,該引腳的輸出值將僅由GPIOTE模塊更新。因此,只要該引腳由GPIOTE控制,該引腳在GPIO中指定的輸出值就會被忽略。嘗試將一個引腳寫為普通GPIO引腳將無效。當(dāng)GPIOTE與引腳斷開連接時,請參見CONFIG [n]寄存器中的MODE字段,相關(guān)的引腳將獲得GPIO模塊中指定的輸出和配置值。
當(dāng)在一個通道中同時(即在同一時鐘周期內(nèi))觸發(fā)沖突任務(wù)時,任務(wù)的優(yōu)先級將如第157頁上的表32:任務(wù)優(yōu)先級中所述。  設(shè)置CONFIG [n]寄存器時,MODE = Disabled與MODE = Task和POLARITY = None效果不同。在后一種情況下,根據(jù)上表中所述的優(yōu)先級,與OUT完全同時發(fā)生的CLR或SET任務(wù)將最終在引腳上保持不變。
當(dāng)將GPIOTE通道配置為作為任務(wù)在引腳上進行操作時,該引腳的初始值將在CONFIG [n]的OUTINIT字段中進行配置。
21.2 (Port event)端口事件
PORT是一個事件,可以使用GPIO DETECT信號從多個輸入引腳生成。該事件將在DETECT信號的上升沿產(chǎn)生。有關(guān)DETECT信號的更多信息,請參見GPIO —通用輸入/輸出在第111頁。
當(dāng)DETECT處于高電平時將系統(tǒng)置于“空閑”狀態(tài)下不會導(dǎo)致DETECT再次喚醒系統(tǒng)。在進入睡眠狀態(tài)之前,請確保清除所有“檢測”源。如果將LATCH寄存器用作源,如果清除了全部或部分寄存器后LATCH中的任何位仍然為高(例如,由于PINx.DETECT信號之一仍為高),則將在 檢測,請參閱第111頁的引腳配置。
嘗試在DETECT為高電平時將系統(tǒng)置于系統(tǒng)關(guān)閉狀態(tài)將導(dǎo)致系統(tǒng)關(guān)閉復(fù)位喚醒。
盡管外圍設(shè)備本身似乎是空閑的,但始終啟用此功能,也就是說,無需請求時鐘或其他耗電的基礎(chǔ)設(shè)施即可保持此功能。因此,在所有外圍設(shè)備和CPU空閑的情況下,可以使用此功能將CPU從WFI或WFE類型的睡眠狀態(tài)喚醒,即系統(tǒng)打開模式下的最低功耗。
為了防止在配置源時來自PORT事件的虛假中斷,用戶應(yīng)首先禁用PORT事件上的中斷(通過INTENCLR.PORT),然后配置源(PIN_CNF [n] .SENSE),清除配置期間可能發(fā)生的任何潛在事件(將1寫入EVENTS_PORT),最后使能中斷(通過INTENSET.PORT)。
21.3 任務(wù)和事件引腳配置
每個GPIOTE通道通過CONFIG.PSEL字段與一個物理GPIO引腳關(guān)聯(lián)。在CONFIG.MODE中選擇事件模式時,由CONFIG.PSEL指定的引腳將配置為輸入,覆蓋GPIO中的DIR設(shè)置。同樣,當(dāng)在CONFIG.MODE中選擇任務(wù)模式時,由CONFIG.PSEL指定的引腳將被配置為覆蓋GPIO中DIR設(shè)置和OUT值的輸出。在CONFIG.MODE中選擇Disabled時,CONFIG.PSEL指定的引腳將使用GPIO中PIN [n] .CNF寄存器的配置。
只能將一個GPIOTE通道分配給一個物理引腳。 否則可能會導(dǎo)致無法預(yù)測的行為。
|