打開該手冊的 32 章節“Chapter 32 IOMUX Controller (IOMUXC)”,我們看到 32 章節的目錄如下圖所示:
圖中的“IOMUXC_SW_MUC_CTL_PAD_GPIO1_IO00”就是 GPIO 的命名。其命名格式是
“IOMUXC_SW_MUC_CTL_PAD_XX_XX”,其中的 XX_XX 就是 GPIO 的命名。例如:JTAG_MOD,GPIO1_IO00,
UART4_TX_DATA 等。I.MX6ULL 的 GPIO 命名是根據 IO 所擁有的功能來命名的,比如我們看到 GPIO1_IO00,
就可以知道這個是 GPIO 功能,看到 UART4_TX_DATA 就知道這個是串口 4 的發送功能。在參考手冊的 32 章
節列出了 i.MX6 ULL 的所有 IO 引腳,我們可以看到具有 GPIO 功能的引腳只有“GPIO1_IO00~GPIO1_IO09”
這 10 路 GPIO,實際上 i.MX6 ULL 的 IO 口都是具有復用功能的(一個 IO 口可以配置成好幾種功能,如果不
做配置,會有一種默認的功能)。下面我們看看 i.MX6 ULL 的 IO 引腳復用功能。
我們以“IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00”這個 IO 為例,打開手冊的 32.6.7(1568 頁)如下圖所示
上圖可以看到該 IO 對應的配置寄存器“SW_MUX_CTL_PAD_GPIO1_IO00”,寄存器地址是 0X20E005C,
寄存器為 32 位,其中的 bit0-bit3(MUX_MODE)這四位是設置 IO 引腳復用功能的。從表中我們可以看到
GPIO1_IO00 有 9 種復用功能,分別對應 ALT0-ALT8,其中 ALT5 就是作為 GPIO1_IO00,如下圖所示:
從上圖中我們可以看到 GPIO1_IO00 這個引腳還可以配置成 ENET2_REF_CLK2,I2C2_SDA 等功能,這就是 IO
的復用功能。
下面我們再來看下“IOMUXC_SW_MUX_CTL_PAD_UART4_TX_DATA”這個 IO 引腳。這個引腳的描述在 32.6.29
章節(1590 頁),如下圖所示:
從上圖可以看到該引腳可以復用成 7 種不同的模式。其中 ALT5(0101)表示可以復用為 GPIO1_IO28。
所以我們可以看到 i.MX6 ULL 的 GPIO 不止 GPIO1_IO00-GPIO1_IO09 這 10 個,其它的 IO 也可以復用為 GPIO。
在第四章節我們可以看到 i.MX6 ULL 的 GPIO 一共有 5 組:GPIO1、GPIO2、GPIO3、GPIO4、GPIO5,其中 GPIO1
有 32 個 IO(IO0-IO31),GPIO2 有 22 個 IO(IO0-IO21),GPIO3 有 29 個 IO(IO0-IO28),GPIO4 有 29個 IO(IO0-IO28),GPIO5 有 12 個 IO(IO0-IO11),這樣 i.MX6 ULL 一共有 124 個 GPIO。如果我們想要
查看每個 IO 能復用成什么功能,可以查看第 4 章,如果我們要設置某個 IO 的功能,需要查看第 32 章。
9 92 .2 IO 引腳配置 引腳配置
IO 引腳的配置我們需要參考第 32 章節,在 9.1 章節我們看到每個 IO 都有一個“SW_MUX_CTL_PAD_XX_XX”
的寄存器,例如 SW_MUX_CTL_PAD_GPIO1_IO00。該寄存器在 6.1 章節我們介紹了,主要是用來配置 IO 引腳
的模式。然后我們在該章節看到還有一個“SW_PAD_CTL_PAD_XX_XX”的寄存器,例如
“SW_PAD_CTL_PAD_GPIO1_IO00”寄存器,如下圖所示:
從上圖可以看到 SW_PAD_CTL_PAD_GPIO1_IO00 寄存器的地址是 0X20E02E8,他也是一個 32 位的寄存器,我
們可以看到改寄存器按照位劃分成了幾種功能設置,如下:
HYS(bit16):用來使能遲滯
比較器,當 IO 作為輸入功能的時候有效,用于設置輸入接收器的施密特觸發
器是否使能。如果需要對輸入波形進行整形的話可以使能此位。此位為 0 的時候禁止遲滯比較器,為 1 的
時候使能遲滯比較器。PUS(bit15-bit14)用來設置上下拉
電阻的。
PUE(bit13)當 IO 作為輸入的時候,這個位用來設置 IO 使用上下拉還是狀態保持器。狀態保持器在 IO 作
為輸入的時候才有用,當外部
電路斷電以后此 IO 口可以保持住以前的狀態。
PKE(bit12)用來使能或者禁止上下拉/狀態保持器功能。
ODE(bit11)IO 作為輸出的時候,此位用來禁止或者使能開路輸出。
SPEED(bit7-bit6)當 IO 用作輸出的時候,此位用來設置 IO 速度。
DSE(bit5-bit3)當 IO 用作輸出的時候用來設置 IO 的驅動能力。
SRE(bit0)設置壓擺率。
9 93 .3 GPIO 配置 配置
在 9.1 和 9.2 章節我們介紹了這兩個寄存器“SW_MUX_CTL_PAD_XX_XX”和“SW_PAD_CTL_PAD_XX_XX”
用來配置 IO 引腳,在本章我們來學習一下 GPIO 功能的配置(GPIO 屬于 IO 引腳中的一種復用功能)。比如
GPIO1_IO00 這個 IO 可以復用為 I2C2_SCL、ENET1_REF_CLK1、GPIO1_IO00、WDOG3_WDOG_B 等 9 種復用功能,
GPIO1_IO00 只是其中的一種,具體配置成哪種復用功能,需要看下我們的硬件設計中這個 IO 是作為哪種功
能來設計的。如果我們把該引腳用來控制
LED 發光二極管,那我們的程序就要把這個 IO 配置成 GPIO 模式,
然后我們還需要對 GPIO 的功能進行配置,我們可以參考手冊的第 28 章“General Purpose Input/Output
(GPIO)”。在該章節我們可以看到 GPIO 的結構如下圖所示所示:
在上圖中我們可以看到兩個地方用紅色方框標注了(1、2),其中 1 處里面有兩個寄存器,這就是我
們 6.2 章節介紹的配置 IO 復用和 IO 功能屬性的寄存器。2 處表示當 IO 作為 GPIO 使用的時候,需要配置的
寄存器(共有 8 個),分別是:GPIO.DR、GPIO.GDIR、GPIO.PSR、GPIO.ICR1、GPIO.ICR2、GPIO.EDGE_SEL、
GPIO.IMR、GPIO.ISR,前面 6.2 章節我們介紹了 i.MX6 ULL 一共有 5 組 GPIO,每組 GPIO 分別有這 8 個寄存
器,下面我們分別看下這些寄存器:
首先是 GPIOx_DR 寄存器,如下圖所示:
此寄存器是數據寄存器,32 位,每一位對應一個 GPIO,當 GPIO 配置成輸出以后,向對應的位寫 1,GPIO
就會輸出高電平,寫 0,GPIO 就會輸出低電平。如果 GPIO 設置成輸入,那讀取這個寄存器對應的位,就可
以獲取到對應 GPIO 的狀態(0 或 1)。
然后是 GPIOx_GDIR 寄存器,如下圖所示:
該寄存器也是 32 位的,每一位對應一個 GPIO,該寄存器是用來設置 GPIO 是輸入還是輸出的。(對應
的位設置成 0,對應的 GPIO 設置成輸入模式;對應的位設置成 1,對應的 GPIO 就配置成輸出模式了)。
然后是 GPIOx_PSR 寄存器,如圖 6.3.4 所示:
該寄存器也是 32 位的,每一位對應一個 GPIO,該寄存器是用來讀取對應 GPIO 的狀態(高低電平)。
然后是 GPIOx_ICR1 寄存器,如下圖所示:
該寄存器是中斷控制寄存器,每組 GPIO 最多有 32 個 GPIO,該寄存器用來配置低 16 個 GPIO,此寄存
器是 32 位的,每兩位表示一個 GPIO,這兩位用來配置中斷的觸發方式:
00 低電平出發
01 高電平觸發
10 上升沿觸發
11 下降沿觸發
以 GPIO1_IO3 為例,如果設置成高電平觸發,GPIO1.ICR1=1<<6。
然后是 GPIOx_ICR2 寄存器,如下圖所示:
該寄存器也是中斷控制寄存器,每組 GPIO 最多有 32 個 GPIO,該寄存器用來配置高 16 個 GPIO,此寄
存器是 32 位的,每兩位表示一個 GPIO,這兩位用來配置中斷的觸發方式:
00 低電平出發
01 高電平觸發
10 上升沿觸發
11 下降沿觸發
以 GPIO1_IO7 為例,如果設置成高電平觸發,GPIO1.ICR1=1<<2。
然后是 GPIOx_IMR 寄存器,如下圖所示:
該寄存器是中斷屏蔽寄存器,每一位對應一個 GPIO,如果使能某個 GPIO 的中斷,那么設置這個寄存器
對應的位為 1 即可。如果禁止某個 GPIO 的中斷,那么設置這個寄存器的對應位為 0。
然后是 GPIOx_ISR 寄存器,如下圖所示:
該寄存器是中斷狀態寄存器,共有 32 位,每位對應一個 gpio,只要某個 GPIO 的中斷產生,那么對應
的位就會被置 1,我們可以通過讀取該寄存器來判斷 GPIO 的中斷是否產生了。當我們處理完中斷后,必須
要清除對應的中斷標志位(像該寄存器相應的位寫 1,就是清除中斷標志位)。
然后是 GPIOx_EDGE_SEL,如下圖所示:
該寄存器用來設置邊沿中斷,這個寄存器會覆蓋 ICR1 和 ICR2 的設置,同樣一個 GPIO 對應一位。相應
的位被置 1,那么就相當于設置了對應的 GPIO 是上升沿和下降沿(雙邊沿)觸發。
至此關于 GPIO 的所有寄存器我們就介紹完了。
其他部分關注:使用迅為IMX6ULL開發板第一個匯編實驗(二)更多內容關注公眾號:迅為
電子