This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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有这方面的应用?