文章目錄
- 1、原理圖找對應引腳
- 2、IO復用
- 3、IO配置
- 4、GPIO配置
- 5、GPIO時鐘使能
- 6、總結
1、原理圖找對應引腳
從上圖 可以看出, 蜂鳴器 接到了 BEEP 上, BEEP 就是 GPIO5_IO05
2、IO復用
查找IMX6UL參考手冊
和 STM32一樣,如果某個 IO 要作為某個外設引腳使用的話, 是需要配置復用寄存器的。
3、IO配置
4、GPIO配置
此寄存器是 32 位的,一個 GPIO 組最大只有 32 個 IO,因此 DR 寄存器中的每個位都對應
一個 GPIO。當 GPIO 被配置為輸出功能以后,向指定的位寫入數據那么相應的 IO 就會輸出相
應的高低電平,比如要設置 GPIO1_IO00 輸出高電平,那么就應該設置 GPIO1.DR=1。
GDIR 寄存器也是 32 位的,此寄存器用來設置某個 IO 的工作方向,是輸入還是輸出。同
樣的,每個 IO 對應一個位,如果要設置 GPIO 為輸入的話就設置相應的位為 0,如果要設置為
輸出的話就設置為 1。比如要設置 GPIO1_IO00 為輸入,那么 GPIO1.GDIR=0;
同樣的 PSR 寄存器也是一個 GPIO 對應一個位,讀取相應的位即可獲取對應的 GPIO 的狀
態,也就是 GPIO 的高低電平值。功能和輸入狀態下的 DR 寄存器一樣
IMR 寄存器也是一個 GPIO 對應一個位, IMR 寄存器用來控制 GPIO 的中斷禁止和使能,
如果使能某個 GPIO 的中斷,那么設置相應的位為 1 即可,反之,如果要禁止中斷,那么就設
置相應的位為 0 即可。例如,要使能 GPIO1_IO00 的中斷,那么就可以設置 GPIO1.MIR=1 即
可
ISR 寄存器也是 32 位寄存器,一個 GPIO 對應一個位,只要某個 GPIO 的中斷發生,那么
ISR 中相應的位就會被置 1。所以,我們可以通過讀取 ISR 寄存器來判斷 GPIO 中斷是否發生,
相當于 ISR 中的這些位就是中斷標志位。當我們處理完中斷以后,必須清除中斷標志位,清除
方法就是向 ISR 中相應的位寫 1,也就是寫 1 清零。
EDGE_SEL 寄存器用來設置邊沿中斷,這個寄存器會覆蓋 ICR1 和 ICR2 的設置,同樣是一
個 GPIO 對應一個位。如果相應的位被置 1,那么就相當與設置了對應的 GPIO 是上升沿和下降
沿(雙邊沿)觸發。例如,我們設置 GPIO1.EDGE_SEL=1,那么就表示 GPIO1_IO01 是雙邊沿觸
發中斷,無論 GFPIO1_CR1 的設置為多少,都是雙邊沿觸發。
5、GPIO時鐘使能
6、總結
總結一下,要將 I.MX6UL的 IO 作為 GPIO 使用,我們需要一下
幾步:
①、使能 GPIO 對應的時鐘。
②、設置寄存器 IOMUXC_SW_MUX_CTL_PAD_XX_XX,設置 IO 的復用功能,使其復用
為 GPIO 功能。
③、設置寄存器 IOMUXC_SW_PAD_CTL_PAD_XX_XX,設置 IO 的上下拉、速度等等。
④、第②步已經將 IO 復用為了 GPIO 功能,所以需要配置 GPIO,設置輸入/輸出、是否使
用中斷、默認輸出電平等。