i.MX6DQ -- GPIO配置應(yīng)用詳解
系統(tǒng)平臺(tái):珠海鼎芯D328 -- 基于i.MX6Q
系統(tǒng)版本:Linux3.0.35
一、GPIO使用函數(shù)
#include <linux/gpio.h>
1. 申請GPIO,并占用:
int gpio_request(unsigned gpio, const char *label);
int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
flags -- GPIO屬性,例如:GPIOF_OUT_INIT_HIGH
*label -- GPIO名稱
2. 釋放GPIO的占用:
void gpio_free(unsigned gpio);
3. 設(shè)定GPIO傳輸方向:
輸入:int gpio_direction_input(unsigned gpio);
輸出:int gpio_direction_output(unsigned gpio, int value);
4. 獲取GPIO的值:
int gpio_get_value(unsigned gpio);
5. 設(shè)置GPIO的值:
int gpio_set_value(unsigned gpio, int value);
6. 配置GPIO上拉下拉:( 關(guān)于IMx6中g(shù)pio的上拉,并未用到此類函數(shù),需要配置相關(guān)寄存器,其中系統(tǒng)本身已經(jīng)配置好部分IO,如需再配置其他IO需要手動(dòng) )
int gpio_pull_updown(unsigned gpio, unsigned value);
value = 0, normal
value = 1, pull up
value = 2, pull down
二、GPIO中斷使用
1. GPIO轉(zhuǎn)中斷:
static inline int gpio_to_irq(unsigned gpio);
這個(gè)函數(shù)將GPIO的PIN值轉(zhuǎn)換為相應(yīng)的IRQ值(中斷號(hào)),可以傳給set_irq_type()、request_irq()和free_irq()使用;
2. 中斷轉(zhuǎn)GPIO:
irq_to_gpio()
這個(gè)函數(shù)返回的GPIO編號(hào)通常用來調(diào)用gpio_get_value(),比如在沿觸發(fā)的中斷中獲取引腳的狀態(tài)
3. GPIO中斷申請:
static inline int__must_check request_irq(unsigned intirq, irq_handler_t handler, unsigned long flags, const char *name, void *dev);
irq 要申請的硬件中斷號(hào);
handler 向系統(tǒng)登記的中斷處理函數(shù),是一個(gè)回調(diào)函數(shù),中斷發(fā)生時(shí),系統(tǒng)調(diào)用這個(gè)函數(shù),dev參數(shù)將被傳遞;
flags 是中斷處理的屬性,
*name 設(shè)備名稱
*dev 將被傳遞的參數(shù),在中斷共享時(shí)會(huì)用到,一般設(shè)置為這個(gè)設(shè)備的device結(jié)構(gòu)本身或者NULL。
當(dāng)flags發(fā)生時(shí),觸發(fā)中斷。
4. 設(shè)置中斷觸發(fā)方式:
set_irq_type( gpio_to_irq(unsigned gpio),IRQF_TRIGGER_FALLING )
三、GPIO在基于i.MX6的Linux3.0.35內(nèi)核中的配置(這里均已GPIO_6_11為例)
1. GPIO管腳特定模式的相關(guān)配置在arch/arm/mach-mx6/iomux_mx6q.h文件中。



2. GPIO的宏定義配置參數(shù)在iomux-v3.h文件中

3. GPIO板級(jí)初始化管腳在board-mx6q_sabresd.h文件中

4. GPIO在內(nèi)核的中使用名稱定義

四、針對i.MX6DQ手冊查看GPIO的配置與寄存器
1. 一個(gè)IC上的引腳,通過一個(gè)n選1的多路開關(guān),把需要的外設(shè)連接到該引腳上。具體額配置通過IOMUXC_SW_MUX_CTL_PAD寄存器來實(shí)現(xiàn)。
如下圖所示,是IOMUXC_SW_MUX_CTL_PAD_NAND_CS0_B的IO復(fù)用配置,主要分2部分,SION和IO復(fù)用;
SION:是軟件強(qiáng)行配置模式,配置了該模式后,該IO的具體電平不由所連接的模塊決定,而是可以由軟件寫入決定,該功能估計(jì)是在調(diào)試設(shè)備時(shí)使用;
IO復(fù)用:寫入不同的配置,IO引腳所連接到對應(yīng)的模塊;
還有一個(gè)配套的寄存器是IOMUXC_SW_PAD_CTL_PAD,主要是用于配置管腳的上下拉、開漏、驅(qū)動(dòng)強(qiáng)度、信號(hào)變化率等功能!

2. 配套的寄存器IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B,主要是用于配置管腳的上下拉、開漏、驅(qū)動(dòng)強(qiáng)度、信號(hào)變化率等功能!



3. GPIO管腳模式、信號(hào)、配置和寄存器的對應(yīng)關(guān)系等


|