Linux kernel 在Linux中,如何测量/采样GPIO脉冲宽度

Linux kernel 在Linux中,如何测量/采样GPIO脉冲宽度,linux-kernel,linux-device-driver,gpio,pwm,Linux Kernel,Linux Device Driver,Gpio,Pwm,我的董事会运行的是ARM Linux。它将有一个GPIO连接到一个输入信号,该信号以不同的脉冲宽度但相同的周期对信息进行编码。假设周期为10ms,2ms(高)脉冲表示0,5ms脉冲表示1 在Linux、用户空间或内核空间中,如何对这种连续脉冲宽度偏移信号进行采样?如果它是一个裸MCU,我知道我可以使用带有脉冲宽度测量模式的硬件时钟。但是我没有找到关于Linux的相关信息 请给我一些建议。没有人能给你一个具体答案的原因是因为你所要求的是特定于所讨论的CPU的。如果硬件支持它,它可以完成。。。例如,

我的董事会运行的是ARM Linux。它将有一个GPIO连接到一个输入信号,该信号以不同的脉冲宽度但相同的周期对信息进行编码。假设周期为10ms,2ms(高)脉冲表示0,5ms脉冲表示1

在Linux、用户空间或内核空间中,如何对这种连续脉冲宽度偏移信号进行采样?如果它是一个裸MCU,我知道我可以使用带有脉冲宽度测量模式的硬件时钟。但是我没有找到关于Linux的相关信息


请给我一些建议。

没有人能给你一个具体答案的原因是因为你所要求的是特定于所讨论的CPU的。如果硬件支持它,它可以完成。。。例如,我使用的Texas Instruments Jacinot6处理器有M4核,可以像微控制器一样运行代码,其中一个M4核可以配置为在映射的GPIO上处理IRQ。然后,当检测到不同的脉冲宽度时,您可以将信息发送到运行同一芯片A15内核的Linux。NXP iMX系列处理器也有硬件支持,但它不像Ti芯片那样位于专用核心上。对于iMX6,您可以设置一个GPIO来生成IRQ,将增量时间(来自时钟树)推入内存映射寄存器。在这种情况下,由于硬件的差异,读取内存映射寄存器需要与基于Ti的解决方案不同的Linux驱动程序。希望这有助于阐明为什么您不能简单地在Linux内核/驱动程序中找到已有的功能……

无法可靠地获得它。缓解的第一步是将进程固定到一个单独的CPU上,并将其从其他任务中卸载(基本上是浪费整个内核来做一些应该由MCU完成的事情)。第二步,切换到RT Linux。正确的解决方案是将MCU与RTOS(如Zephyr)结合使用。当然,您可以尝试。您需要的是一个专用定时器和GPIO引脚,由两个边缘设置为中断。每当中断时,驱动程序必须启动或停止计时器,并将编码数据转换为您想要的任何数据。如果您的硬件支持该模式,即PWM解码,您只需要一个驱动程序即可。@0安德烈,我想您所指的PWM解码与我所说的PW测量是一样的。我看到Linux有PW调制,但没有PW测量。这看起来难以置信。我的MCU有硬件时钟,支持在脉冲测量模式下工作。那么你的意思是我必须编写自己的PW测量驱动程序吗?为什么很难相信?到目前为止,似乎没有人需要它。甚至没有这样的框架。(看起来IIO子系统是最近的一个,但我没有看到任何传感器支持PWM解码/读取)。