IMX51---GPIO
?GPIO(General Purpose Input/Output)指通用輸入/輸出,IMX51的GPIO模塊提供32位雙向的、通用輸入和輸出的信號,下圖是GPIO的框圖:
圖1
1.??????GPIO概述
GPIO模塊提供專用的且可以配置為輸入或是輸出的通用pin。當GPIO配置為輸出,用戶可以通過向內部寄存器(DR)寫數據來控制輸出引腳的狀態。當GPIO配置為輸入,用戶可以通過讀取內部寄存器(PSR)來檢測輸入引腳的狀態。
圖2
GPIO模塊提供8個寄存器、邊沿檢測電路和中斷產生邏輯。
2.??????GPIO寄存器描述
GPIO的8個寄存器用下面的結構體描述:
typedef struct
{
???UINT32 DR;
???UINT32 GDIR;
???UINT32 PSR;
???UINT32 ICR1;
???UINT32 ICR2;
???UINT32 IMR;
???UINT32 ISR;
???UINT32 EDGE_SEL;
} CSP_GPIO_REGS, *PCSP_GPIO_REGS;
2.1??DR數據寄存器
如果IOMUX把對應的PIN設置為GPIO模式,且設置為輸出,寫到DR中的數據驅動PIN的狀態。如果配置為輸入,可通過讀取DR寄存器來獲取響應PIN的狀態。為確保同步讀取此寄存器,需要兩個等待狀態。
?
讀取DR寄存器的得到的值取決于IOMUX輸入模式設置和相應GDIR位,如下圖:
圖3
?
2.2??GDIR數據方向寄存器
GDIR寄存器每一位可以指定每個具體PAD的方向,設置為0表示輸入,設置為1表示輸出。
圖4
?
2.3??PSR引腳采樣寄存器
PSR是只讀寄存器,每一位存儲了相應PAD的值。此寄存器的值只有在訪問的時候才能讀取到。
圖5
?
2.4??ICR(ICR1,ICR2)中斷控制寄存器
ICR寄存器每2位指定每個相應中斷引腳的中斷配置,比如低電平觸發、高電平觸發、上升沿觸發和下降沿觸發,其中ICR1和ICR2寄存器都支持16個中斷,分別對應中斷引腳15到0和31到16。
圖6
圖7
2.5??IMR中斷屏蔽寄存器
?
每一位用于屏蔽中斷引腳,當設置為0表示禁用此中斷,設置為1表示使能此中斷。
圖8
2.6??ISR中斷狀態寄存器
每一位指示中斷是否發生,當一個中斷產生,也就是ICR寄存器設置的中斷條件滿足的時候,此寄存器對應位被設置為1。當此中斷被處理后,可以通過軟件對此位寫1來清零。
圖9
2.7??EDGE_SEL邊沿選擇寄存器
支持32個中斷的設置,當設置為1,此寄存器的值覆蓋ICR寄存器的配置,也就是當設置為1后,GPIO忽略ICR功能及其配置的中斷條件,只要有跳變沿,就產生中斷。
圖10
?
3.??????GPIO編程說明
3.1??讀取PAD的值
讀取PAD值的編程順序如下:
⑴配置IOMUX選擇GPIO模式。
⑵配置GPIO的GDIR寄存器,使對應的PAD作為輸入。
⑶通過讀DR寄存器或是PSR寄存器來獲取PAD的值。
在GPIO配置為輸入時,讀取DR寄存器返回的不是DR數據,相反,而是返回PSR數據,對應相應PAD的值。
?
3.2??向PAD寫值
設置PAD值的編程順序如下:
⑴配置IOMUX選擇GPIO模式。
⑵配置GPIO的GDIR寄存器,使對應的PAD作為輸出。
⑶向DR寄存器對應位寫入需要控制的值。
在GPIO設置為輸出時,只能通過讀取PSR寄存器來驗證PAD的值。
?
3.3??中斷控制單元
除了通用輸入/輸出功能,GPIO模塊中的邊沿檢測邏輯能夠反映出輸入GPIO引腳電平的跳變。中斷控制單元有32個子中斷控制單元,每個子單元處理一個單獨的中斷引腳。
?
總結
以上是生活随笔為你收集整理的IMX51---GPIO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我这些年的项目管理心得...
- 下一篇: WINCE补丁包下载地址