日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将5350 i2c clk设置为gpio 中断模式的方法

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将5350 i2c clk设置为gpio 中断模式的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

5350和我之前用的三星和全志的芯片在中斷這塊有點差別,三星和全志的都是有專門的外部中斷管腳,并且每個中斷管腳對應一個中斷號,對管腳寄存器的配置即irq_desc里chip變量,都是bsp里自帶的,我們只需要用request_irq來注冊irqaction就可以了。

而5350所有的gpio共用一個中斷號6,所以想用哪個管腳都得自己配。有可能能用request_irq,但是驅動里已經有

setup_irq(SURFBOARDINT_GPIO,&ralink_gpio_irqaction);

所以我覺的還是在他這個基礎上改比較好

?

1.??在5350 中斷初始化的時候會調用ralink_gpio_init_irq函數

ralink_gpio_init_irq定義在driver/char/ralink_gpio.c

void __init ralink_gpio_init_irq(void)

{

??? setup_irq(SURFBOARDINT_GPIO,&ralink_gpio_irqaction);

}

這里已經調用了setup_irq函數來給irq_desc設置了irqaction,那么我們就不用再自己來用request_irq函數來設置irqaction了。

因為5350里所有的gpio中斷都共享了6號中斷,那么我們如果想讓哪個gpio產生中斷的話,需要自己來對相關的gpio進行配置。


2.?現在我們想讓i2c clk管腳配置為中斷模式的話,需要以下幾個步驟

1)?查看datasheet 第1.3節? pin sharing scheme

確定I2C_SCLK 為2號GPIO

?

?

2)?查看datasheet第3.4節 system control


將GPIOMODE寄存器的第0位設置為1,即將I2C設置為gpio模式。

代碼如下:

gpiotmp = le32_to_cpu(*(volatile u32 *)(RALINK_REG_GPIOMODE));

gpiotmp |= 0x1;

*(volatile u32 *)(RALINK_REG_GPIOMODE) = cpu_to_le32(gpiotmp);

3)?查看datasheet 第3.6節? interrupt controller


將INTENA寄存器的第6位設置為1,即使能PIO中斷。

代碼如下:

gpiotmp = le32_to_cpu(*(volatile u32*)(RALINK_REG_INTENA));

gpiotmp |= (0x01 << 6);

*(volatile u32 *)(RALINK_REG_INTENA) =cpu_to_le32(gpiotmp);

4)?查看datasheet 第3.10節? programmable I/O

將GPIO21_00_RENA和GPIO21_00_FENA這兩個寄存器的第2位設置為1,即2號GPIO的上升沿和下降沿的中斷使能。


代碼如下:

gpiotmp = le32_to_cpu(*(volatile u32*)(RALINK_REG_PIORENA));

gpiotmp |= (0x01 << 2);

*(volatile u32 *)(RALINK_REG_PIORENA) =cpu_to_le32(gpiotmp);

???

gpiotmp = le32_to_cpu(*(volatile u32*)(RALINK_REG_PIOFENA));

gpiotmp |= (0x01 << 2);

*(volatile u32 *)(RALINK_REG_PIOFENA) =cpu_to_le32(gpiotmp);

?

將GPIO21_00_DIR寄存器的第2位設置為0,即為輸入模式。


代碼如下

gpiotmp = le32_to_cpu(*(volatile u32*)(RALINK_REG_PIODIR));

gpiotmp &= ~cpu_to_le32(0x01<< 2);

*(volatile u32 *)(RALINK_REG_PIODIR) =cpu_to_le32(gpiotmp);

?

以上代碼都是放置在ralink_gpio_init函數中

3. 通過上面的設置,ralink_gpio_irq_handler這個中斷處理函數就可以被調用了。

總結

以上是生活随笔為你收集整理的将5350 i2c clk设置为gpio 中断模式的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。