项目要使用iMX257的一个GPIO管脚(GPIO2_8)作为用户中断输入。
在调用request_irq()函数时出现了问题,第一个参数irq应该如何赋值?直接赋irq = 51,驱动加载时提示:invalid module format
关于上述问题,解决思路可以参考以下2篇博文:
http://blog.youkuaiyun.com/yuhaibin168/article/details/8082090
http://blog.itpub.net/13771794/viewspace-722585/
在此基础上修改驱动,测试成功。以下进行一下小结:
1)头文件中有如下包含文件:
#include "mx25_pins.h"
#include "iomux.h"
2)GPIO管脚宏定义
#define GPIO2_8 MX25_PIN_A22
3)初始化函数中对GPIO2_8进行配置:
mxc_request_iomux(GPIO2_8, MUX_CONFIG_ALT5);//设置成GPIO工作模式,这点很重要
gpio_request(IOMUX_TO_GPIO(GPIO2_8), "gpio2_8");//获得GPIO的控制权,这点很重要
gpio_direction_input(IOMUX_TO_GPIO(GPIO2_8));//设置GPIO为输入方向
4)配置对应的中断寄存器:ICR1, IMR
5)调用request_irq()注册中断,第一个参数中断向量irq_gpio2_8 = gpio_to_irq(IOMUX_TO_GPIO(GPIO2_8))
6)调用enable_irq(irq_gpio2_8)使能中断。
7)读取ISR寄存器的值,确认中断,然后对应位写1清除标志位。
8)卸载驱动调用如下函数:
mxc_free_iomux(GPIO2_8, MUX_CONFIG_ALT5);
gpio_free(IOMUX_TO_GPIO(GPIO2_8));
free_irq(irq_gpio2_8, NULL);