将5350 i2c clk设置为gpio 中断模式的方法
来源:互联网 发布:java之父现在在做什么 编辑:程序博客网 时间:2024/06/06 04:59
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 中断模式的方法
- imx6系列--将一个gpio设置为可唤醒系统的外部中断流程
- Omap3530 的GPIO中断设置
- Omap3530 的GPIO中断设置
- i2c设置中断的原因?
- imx6q平台将gpio口设置成高阻的方法
- 设置AM3715 GPIO的方法
- 【I2C设备驱动】必须将id_table[]数组的最后一个元素设置为空的原因
- omapl138上BIOS的CLK设置问题
- at91sam926X的GPIO中断
- GPIO模拟的I2C操作
- 设置oracle为共享模式的方法
- ESP8266 RTOS SDK使用GPIO中断的方法
- GPIO引脚模式设置
- i2c - gpio
- i2c - gpio
- WIFI热点(将笔记本设置为WIFI热点的方法
- 将ubuntu设置为root用户自动登陆的方法
- Java开发中的23种设计模式详解(转)
- android-ndk-r8e/build/gmsl/__gmsl:512: *** non-numeric second argument to `wordlist' function问题
- acm-字典重排
- js 导出table并保存为excel文件
- Java EE7和Maven工程入门---- 一个简单Maven工程的结构
- 将5350 i2c clk设置为gpio 中断模式的方法
- (五)ROS主题理解
- HDU-4568-Hunter
- (六)ROS服务和参数理解
- “4K”时代将来临!标准/技术一网打尽
- 20140717
- 获取事件对象
- 关于MAVEN找不到JDK的那点事
- 关于什么样的用户权限可以把计算机加入windows domain的辩论