linux arm 嵌入式驱动开发

hzy0 发布于 2011/12/09 20:21
阅读 883
收藏 0

【DevOps必读】产品经理与程序员之间如何破局?>>>

S3C2440的AD转换器有八个通道,现在我要用到4个通道进行数据采样,想要用中断的方式实现这个驱动,可是这样的话,如果有一个通道发生发生采集数据并转换完成时,中断响应函数读取了该数据返回给应用程序,那应用程序如何知道这是那个通道的数据呢??困扰了我许久了,想不到有什么办法解决,各位帮帮忙啊??
加载中
0
周翼翼
周翼翼
可以通过中断偏移寄存器(0x4a000014)得到得到中断源号的.而且,你每个通道应该对应不同的中断源才是.
0
six
six

input_report_abs 提交位置, input_report_key提交按键动作(这两个函数定义在input.h)

上面两个函数都是inline函数,其实是封装了input_event()函数(定义在input.c)

input_event()调用input_handle_event()函数(也是定义在input.c)

input_handle_event()调用dev->event(), 并将触摸的数据传给事件驱动

在触摸屏驱动中的dev->event()其实就是调用evdev_event()函数(在evdev.c定义)

到此事件驱动得到了数据,但是怎样提交给应用程序呢?

答案是:应用程序read /dev/XXX文件时,会进入等待队列,当触摸中断产生,会经过上面综述,

最后在evdev_event()中调用wake_up_interruptible()函数唤醒等待的read,应用程序就可得

到触摸的数据了

hzy0
hzy0
谢谢six指点!
0
crifan
crifan
“中断响应函数读取了该数据返回给应用程序”

返回给应用程序时,就已经确定了:

所抛出的时间,被哪个程序接受

或者是:

同一个程序接受,但是有对应的参数传递回来

可以判断相关的状态,包括获得对应的中断源(即哪个发生了中断)

1.之前写的,供参考:

详解ARM的AMBA设备中的DMA设备PL08X的Linux驱动

里面有很多DMA的概念的解释。

2.还有最近刚回复别人的:

【问题解答】linux中,中断注册和中断服务程序只能写在驱动层还是能写在应用层?

返回顶部
顶部