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 和 原理圖找到對應的 ...