将5350 i2c clk设置为gpio 中断模式的方法
2014-07-17 17:39
211 查看
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所有的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这个中断处理函数就可以被调用了。
相关文章推荐
- At91SAMXX系列设置GPIO口中断端口方法
- "此页当前禁用指定的显示模式。请确保为当前用户启用了个性化设置"的解决方法
- [转]WebLogic生产模式下启动时设置自动登录方法
- 虚拟主机的三种模式设置方法
- SVN设置为串行开发模式的方法
- (转)看到网上有很多关于这个的帖子,但在执行“设置test数据库为紧急修复模式”时,SQL Server 2008总是失败。哪位大侠给个SQLServer 2008的有效方法。
- 在游戏全屏模式下,使用远程调试的设置方法
- 在FlashFXP中设置数据传输模式为PORT(主动模式)的两种方法
- IIS7.0 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法
- ARM 7 用户模式下禁止/使能中断的一种方法--使用软中断 for Keil MDK
- linux下设置vga显示模式方法
- [转]WebLogic生产模式下启动时设置自动登录方法
- 开启电脑的离开模式的设置方法
- window 7 运行asp.net程序出错-IIS7.0 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法
- WebLogic生产模式下启动时设置自动登录方法
- linux下设置vga显示模式方法
- IIS7.0 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法
- 不同宽带模式下的TP-LINK路由器设置方法
- Apache中中断以目录方法拜候的设置
- 在FlashFXP中设置数据传输模式为PORT(主动模式)的两种方法