TI中文支持网
TI专业的中文技术问题搜集分享网站

Linux如何进行实时输入信号采集?

我们使用AM335x,运行TI SDK6.0的Linux系统,没有进行实时扩展。

项目中需要对端口输入信号进行实时接收处理,该信号是随机产生的控制信号,对实时性处理要求较高。
信号一般为高电平有效。如图所示,需要进行去抖滤波处理:1、高电平持续时间大于X后,才认为输入信号有效,否则认为输入信号无效;2、高电平持续时,低电平持续时间若小于Y,则认为输入信号仍然有效,低电平时间大于Y,才认为输入信号无效。

因为这个信号时随时都可能出现,并且要求能实时处理,我们以前用前后台系统时直接用1ms定时器轮询做的,这个轮询时间可以放大到5ms。

现在切换到Linux系统下了,不知道该如何处理,我们考虑了以下几种方案,不知有哪位大侠有过这方面经验,能够指点一下。

方案一:轮询的方案,用xenomai进行实时扩展,和前后台系统一样,轮询IO实现,使用2ms的轮询周期,用1ms担心影响Linux运行;

方案二:中断的方案,RT-Preempt补丁进行实时扩展,重新编写输入口驱动,检测到边沿后计时,根据计时时间是否超过X和Y,切换输入信号是否有效;

方案三:使用AM335x的eCAP模块或者PRU单元进行输入信号处理,处理完后直接中断通知MCU?

不清楚这个问题在Linux中是否普遍,对Linux的输入驱动不是很了解,是否在Linux中已经有了对该问题成熟的解决方案?或者AM335x有这方面的应用?

luo qi:

这个需求感觉直接用fpga就搞定了,延迟可以做到很小,用操作系统直接做有点不太合适。

kai zong:

回复 luo qi:

我们做的是个便宜货,成本是不能增加了,而且我们还需要这个X、Y的去抖时间可以根据不同项目配置,所以用FPGA可能也不太方便。

kai zong:

经了解,Linux系统下的触摸屏驱动和通用GPIO按键输入驱动drivers\input\keyboard\gpio_keys.c、gpio_keys_polled.c,所面对处理的问题是和我们类似的。

计划参考这类驱动来写驱动,通用GPIO驱动gpio_keys.c看上去不太合适,不能处理高电平时小于Y的无效判断抖动,而且使用input机制也有点太复杂了。

如果哪位有更好的方法,还请劳驾一下,多多指教。

Jian Zhou:

回复 kai zong:

如果是要求对GPIO口的低延时访问,可以考虑用PRU控制GPIO来实现。

kai zong:

回复 Jian Zhou:

多谢回复,如果使用PRU单元,是否就是轮询IO的方式,但轮询周期如何控制、去抖时间是否可以配置、如何与MCU交互呢?

请问TI是否此类应用的参考代码,非常感谢。

kai zong:

回复 Jian Zhou:

谢谢,use bbk pru as high speed data acquision这个工程很不错。

赞(0)
未经允许不得转载:TI中文支持网 » Linux如何进行实时输入信号采集?
分享到: 更多 (0)