基于i.MX28x的工作函数:按键消抖与中断下半部处理

需积分: 30 115 下载量 191 浏览量 更新于2024-08-09 收藏 7.57MB PDF 举报
"这篇文档是关于嵌入式Linux系统中基于i.MX28系列处理器的按键驱动开发,特别是如何实现工作函数以进行沙尘监测的。文档涉及到按键的消抖处理、中断处理以及工作队列的应用。" 在嵌入式系统中,按键输入是常见的用户交互方式。在标题提到的沙尘监测应用中,按键可能用于启动或停止监测过程。图5.8未提供,但从描述中可以理解,按键在操作时会产生锯齿状信号,这种信号可能导致误触。为了防止这种情况,需要进行消抖处理。 消抖处理主要目的是过滤掉因机械抖动产生的瞬间噪声。软件消抖通常采用延时策略,即在检测到按键中断后等待一定时间(比如20微秒),再次检查按键状态,如果电平保持不变,确认为有效按键动作。在此过程中,中断处理函数会报告按键按下事件。 由于i.MX28系列处理器的GPIO中断触发方式限制,按键提起事件不能直接通过中断检测。因此,一旦按键被按下,系统会通过轮询方式持续检查GPIO输入电平,直到检测到高电平(按键释放)为止。由于等待时间较长,不适合在中断处理函数中执行,所以采用中断处理的下半部,即工作队列来处理。 程序清单5.11展示了工作函数`imx28x_scankeypad`的实现。当工作队列被调度执行时,该函数会被调用,通过`container_of`宏从工作队列指针获取所属的`imx28x_key_struct`对象。在工作函数内部,每隔10毫秒检查一次按键是否已提起,如果未提起,则继续等待。 这个过程涉及到的知识点包括: 1. **嵌入式Linux驱动开发**:在嵌入式设备中,驱动程序是连接硬件和操作系统的关键部分,负责处理底层硬件交互。 2. **按键消抖**:消除机械开关在按下或释放时的抖动,提高系统稳定性。 3. **中断处理**:中断是硬件向CPU发送的信号,表示需要立即处理某个事件。中断处理函数快速响应并处理事件,然后返回正常执行流程。 4. **中断处理的下半部**:对于长时间运行的任务,不适合在中断服务例程中完成,而是放到中断处理的下半部,如工作队列,以避免阻塞中断服务。 5. **工作队列**:在Linux内核中,工作队列是一种异步执行任务的机制,允许将任务从中断上下文移到进程上下文执行。 6. **container_of宏**:内核宏,用于从结构体成员的指针反推出整个结构体的地址。 文档还提到了一些Linux内核开发相关的工具和资源,如SourceInsight、Eclipse、vim+ctags+cscope、LXR等,这些都是用于阅读、理解和调试Linux内核源码的常用工具。Linux内核裁剪和定制是嵌入式系统开发的重要环节,涉及到内核配置、编译以及特定功能的添加或去除。 这篇文档详细介绍了在嵌入式Linux系统中如何处理按键输入,特别是利用工作队列进行消抖处理和检测按键抬起事件,确保了系统的稳定性和响应性。同时,也揭示了内核驱动开发的一些基础概念和技术。