Am335x GPio 按鍵函式 管腳配置

2021-08-15 01:06:43 字數 1624 閱讀 9705

gpio 引腳號轉換為中斷號: irq_num = gpio_to_irq(gpio_pin);

設定中斷出發方式為下降沿觸發 irq_set_irq_type(irq_num, irqf_trigger_falling);

申請中斷: request_irq(irq_num, irq_proc, irqf_disabled, gpio_device_name, null);

linux/arch/arm/mach-omap2/board-am335xevm.c 檔案中有計算公式:

先獲得gpio的pin number:

/* convert gpio signal to gpio pin number */

#define gpio_to_pin(bank, gpio) (32 * (bank) + (gpio))

然後獲得irq中斷號:

irq = omap_gpio_irq(pin_num)

其中pin_num=gpio_to_pin(bank,gpio),比如gpio1_7,pin_num=32*1+7=39, irq=160+39=199

am335x 的gpio驅動在 drivers/misc目錄下

配置核心,使核心變為搶占式,將開發板帶的按鍵驅動從配置中去掉(新寫的驅動,在request_irq()中失敗,開啟proc/interrupts 發現按鍵驅動已被註冊)

#define gpio_to_pin(bank, gpio) (32 * (bank) + (gpio))

int pin_val=gpio_to_pin(2, 0);

ret=gpio_request(pin_val, 「gpio_key」);

ret = gpio_direction_input(pin_val);

irq = gpio_to_irq( pin_val);

request_irq(irq, gpio_interupt, irqf_trigger_falling | irqf_trigger_rising, 「gpio_2_0」, 0);

tatic struct pinmux_config d_can0_pin_mux = ,

, ,};

setup_pin_mux(d_can0_pin_mux);

用管腳配置工具得到如下配置:

0x90 ( pin_input | mux_mode7 ) /* (r7) gpmc_advn_ale.gpio2[2] */

0xa8 ( pin_input | mux_mode7 ) /* (r3) lcd_data2.gpio2[8] */

0xac ( pin_input | mux_mode7 ) /* (r4) lcd_data3.gpio2[9] */

0xe4 ( pin_input | mux_mode7 ) /* (r5) lcd_hsync.gpio2[23] */

0xec ( pin_input | mux_mode7 ) /* (r6) lcd_ac_bias_en.gpio2[25] */

在board-am335xevm.c 中,配置應該成

, ,

, ,

,

AM335x GPIO的三種呼叫方式

參考 1.核心空間中呼叫gpio 請求gpio err gpio request 30,sample name 設定gpio方向 gpio direction input 30 gpio30為輸出並且置高 gpio direction output 30,1 匯出gpio30到sysfs使用者空間 ...

am335x nand驅動移植

使用ok335xd核心板上的nand flash,無論是速度還是穩定性,都比sd卡好,所以接下來的任務是使用sd中的u boot操作nand flash,把需要的映象燒錄進去之後,就可以從nand flash啟動了!第一步 按照 u boot for am335x 的步驟準備好 ok335x開發板 ...

AM335X Nand Flash 啟動除錯

nand 除錯成功了。具體修改下面描述 硬體修改 根據原理圖發現 am335x 目前預設是 sd 卡啟動,所以需要配置一下 sysboot 從nand啟動,官方文件 這裡對 sysboot 的配置有詳細的介紹,結合 am335x technical reference.pdf 和 原理圖找到對應的 ...