1. 外部IO中断介绍
本篇文章以万象奥科HD-RK3568-IOT评估板中GPIO30为例,介绍Linux内核中断的注册方法,使用中断的方式检测GPIO30是否出现上升沿信号。中断在linux、设备驱动开发里使用的都非常多,可以更加实时的检测GPIO30的状态。
Linux内核提供了中断的注册接口:
1) 注册中断
函数功能: 向内核注册一个中断服务函数;
当发生中断号为irq的中断时,会执行handler指针函数。
函数参数:
2) 注销中断
注意:为防止在注销时同时发生中断,调用时候,先禁掉中断。
3) 中断开启与关闭
禁止中断:
参数: irq,要禁止的中断对应的编号。
注意:在中断服务程序中不能使用disable_irq这个函数,否则内核崩溃,可以使用disable_irq_nosync,
disable_irq: 函数调用后,函数不会马上返回,而等待中断程序执行完成才返回,在中断调用会导致死锁。
使能中断:
参数: irq, 要使能的中断对应的编号。
4) 获取irq中断号
参数: irq,要使能的中断对应的编号
2. 外部IO中断驱动编写
2.1 IO原理图
图 2.1 GPIO0_D6
2.2 驱动示例代码
3. 外部IO中断验证
将驱动编译成模块,insmod加载模块后。 由于驱动检测GPIO0_D6上升沿有效,当给该引脚提供高电平时,会触发中断执行中断处理函数。
图3.1 触发IO中断
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.