回到开始的问题gpio_to_irq为什么不能静态使用?就是因为很多平台代码都将gpio_to_irq实现成为了函数,而非宏定义,这样就只能进行动态引用。但是,这在驱动编写中也不是什么问题,在上面已经说过,只要在设备资源生效前(设备注册前)将其irq动态赋值好就可以了,现有的很多成熟平台也是这样做的,并没有问题。这里我探究这个...
在Linux中,GPIO是一种通用的输入输出接口,可以用来连接各种外设,如LED灯、按键、传感器等等,而IRQ中断线则是用来处理硬件中断的。因此,将GPIO引脚映射成IRQ中断线,可以使Linux内核更加高效地处理外设的输入输出。 在本文中,我们将详细介绍gpio_to_irq函数的原理、实现方法以及使用场景。 一、gpio_to_irq函数的原理 ...
intsamsung_gpiolib_to_irq(structgpio_chip *chip, unsignedintoffset) { //获得gpio_chip结构体所在的父结构体s3c_gpio_chip的指针 structs3c_gpio_chip *s3c_chip =container_of(chip,structs3c_gpio_chip, chip); //获取虚拟映射机制中定义的终端号returns3c_chip->irq_base +offset; IRQ_EINT(16) } ...
【转】 之前在调试传感器模块的时候发现,在结构体声明的时候irq成员使用gpio_to_irq会报错,而动态使用的话就没有问题。就对gpio_to_irq为什么不能静态使用产生了疑问。恰巧最近又有朋友遇到了同样的问题,也就提醒了我,去找出原因。 开始测试 我写了一个简单的linux执行程序进行测试,因为在内核源码中发现不同...
使用函数enable_irq()使能中断,参数是中断号,gpio对应的中断号可以使用gpio_to_irq()获取。 调用request_irq()配置中断的回调函数、触发方式、名称和传入参数。 在exit函数中,对应的我们需要释放中断和对应的gpio。 编写中断回调函数。中断回调函数的格式定义如下: ...
使用函数enable_irq()使能中断,参数是中断号,gpio对应的中断号可以使用gpio_to_irq()获取。 调用request_irq()配置中断的回调函数、触发方式、名称和传入参数。 在exit函数中,对应的我们需要释放中断和对应的gpio。 编写中断回调函数。中断回调函数的格式定义如下: ...
unsigned int irq_num; unsigned int irqflags = 0; //初始化自旋锁lock spin_lock_init(&lock); gpio_num = gpio_chip_num * 32 + gpio_offset_num; //注册要操作的GPIO编号 /* 一般gpio_request封装了mem_request(),起保护作用,最后要调用mem_free之类的。主要是告诉内核这地址被占用了。当其它地方...
三、ADC:A to D模数转换,单片机感知模拟信号 例子:摇杆,电位器 代码构成:头文件,初始化,设置adc模式,用变量存储读取结果。 (参考原理图,以查询引脚可实现功能的方法)(注意AGND专用性,以避免数据不准) 四、IRQ:触发事件引发中断,避免无意义循环 例子:使用循环和使用中断函数的对比 ...
int gpio_to_irq(unsigned gpio); gpio: gpio编号 返回值:中断编号可以传给request_irq()和free_irq() 举个例子:单个GPIO 申请gpio4,输出模式,输出高(从设备树配置) 设备树设置 gpio_test{ status="ok"; gpio_req=<&tlmn 4 0>; 代码实现 struct device dev; ...
Int gpio_to_irq(unsigned int irq); 参数: irq,要使能的中断对应的编号 2. 外部IO中断驱动编写 2.1 IO原理图 图2.1 GPIO0_D6 GPIO0_D6=0*32+(4-1)-8+6=30 2.2 驱动示例代码 #include<linux/init.h> #include<linux/module.h> #include<linux/gpio.h> ...