一文教你流暢修改OK335xD的GPIO功能引腳
發(fā)布時間:2021-8-25 14:49
發(fā)布者:
哦哈喲
1. 如何配置GPIO功能?答:修改內(nèi)核板級文件kernel-3.2/arch/arm/mach-omap2/board-am335xevm-xd.c
例如將uart配置成gpio,mode7是根據(jù)芯片手冊或者硬件手冊確定的,如下
![]()
將
static struct pinmux_config uart1_pin_mux[] = {
{"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL},
{NULL, 0},
};
修改成:
static struct pinmux_config uart1_pin_mux[] = {
{"uart1_rxd.gpio0_14",OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
{"uart1_txd.gpio0_15", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
{NULL, 0},
};
2. 按照上面的方法配置完成發(fā)現(xiàn)無法使用GPIO,為什么配置不生效?
原因:沒有將該引腳的其他功能注釋掉
例如我使用的是uart1_rxd引腳的gpio功能,因為這個是一個復(fù)用引腳,可以查看硬件手冊,搜索對應(yīng)引腳名字查看都有什么功能,然后除了gpio,將這個引腳其他復(fù)用全部注釋掉。
如下:
注意:一個引腳只能同時用作一個功能!!!要么是uart_rxd功能,要么是gpio功能
3. 配置好,復(fù)用功能都注釋掉,為什么 GPIO 無法配置引腳拉高拉低?
如果是自己新建/添加 xxx _pin_mux [],那么需要 setup_pin_mux (xxx _pin_mux ); 這一步很關(guān)鍵,如果配置好卻不設(shè)置pinmux,再怎么配置都是徒勞,也就無法拉高拉低 然后初始化編寫xxx_init{}函數(shù),初始化pinmux,如下: static void xxx_init(int evm_id, int profile) { setup_pin_mux(xxx_mux); } 最后將xxx_init放入 ok335x_dev_cfg[] 這些都是在板級配置文件完成,可以參考 LED,KEYS等功能的配置和初始化過程。
4.配置好,復(fù)用功能都注釋掉,為什么GPIO無法在用戶空間echo導(dǎo)出?
看一個簡單的LED的例子
![]()
如果想在用戶空間使用echo導(dǎo)出gpio,那么只需要setup_pin_mux()即可
使用platform_device_register();這個函數(shù)會將gpio通過內(nèi)核注冊,就無法再通過用戶空間導(dǎo)出了。
另外,使用gpio_set_value() gpio_request() pio_direction_output()函數(shù)也會導(dǎo)致無法在用戶空間echo導(dǎo)出。
5. 怎么echo導(dǎo)出引腳,對應(yīng)的GPIO編號的多少?
公式:編號=32 * gpio組+gpio號
例如gpio1_16編號就是32 *1+16=48
導(dǎo)出:echo 48 > /sys/class/gpio/export
6. 我新加的一個功能,比如uart,pwm等等,發(fā)現(xiàn)不起作用?Why?
例如335xd添加pwm,通過查看硬件手冊,查看有四個引腳可以輸出pwm,分別是gpmc_a2,gpmc_a3,gpmc_ad8,gpmc_ad9,但只有g(shù)pmc_a2一路能輸出信號,
原因是Ti的引腳定義不全,導(dǎo)致配置不起作用
通過查看硬件手冊,gpmc_a2,gpmc_a3的mode6為pwm功能,如圖:
![]()
![]()
但ti引腳定義如下:
![]()
這個配置文件意思:將gpmc_a2引腳可以復(fù)用的功能按順序配置
可以看到,當(dāng)使用gpmc_a3的mode6 "ehrpwm1a" 功能的時候,該配置為NULL
解決方法:需要在mux33xx.c修改,該文件和板級配置文件在相同目錄,將NULL修改成為ehrpwm1b即可,其他引腳同理
7. 為什么啟動時,我的GPIO引腳電平狀態(tài)會跳變,內(nèi)核完全啟動才能穩(wěn)定?
原因是芯片在上電時,每個引腳會有默認(rèn)一個狀態(tài),這個是無法控制的。當(dāng)你初始化這個引腳的狀態(tài)和默認(rèn)狀態(tài)不一致,就會瞬間導(dǎo)致跳變,如果對上電電平有嚴(yán)格要求,就需要查看原廠資料里面的芯片手冊,查看對應(yīng)引腳的默認(rèn)上電狀態(tài),選擇滿足需求的引腳使用。
原文鏈接:https://www.forlinx.com/article_view_449.html |
|