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

问题描述

我的开发板正在运行ARM Linux。它将具有一个GPIO连接到输入信号,该输入信号以不同的脉冲宽度但周期相同的方式编码信息。假设周期为10毫秒,则2毫秒(高)脉冲将出现0,而5毫秒脉冲将出现1。

在Linux,用户空间或内核空间中,如何采样这种连续的脉宽移位信号?如果它是裸露的MCU,我知道我可以在脉宽测量模式下使用硬件时钟。但是我没有在Linux上找到相关信息。

请给我一些建议。

解决方法

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