从 GPIO 读取噪声数据

Read noisy data from GPIO

在 FreeRTOS/ARM 的嵌入式编程项目中,我试图读取噪声 GPIO 信号上的 24 位数据。空闲时,信号有很多随机噪声;在实际数据期间,噪声被抑制并且仅读取信号数据。数据信号由 300us 高电平 (1) 和 31x300us 低电平 (0) 的前导码组成,然后每个位 1 是 900us 高电平和 300us 低电平,位 0 是 300us 低电平,然后是 900us 高电平。

我使用简单的紧凑型 GPIO 读取循环进行了测量,结果显示在 300 微秒内平均读取 388 次。

因此,我尝试计算我的读取次数,读取次数为 +/- 15 次,读取次数为 HIGH 和 LOW,并确定我是否使用状态机读取了序言或之后的位。但我无法检测到任何序言或数据。我怀疑实际读取代码中的附加代码,即使不是太复杂,也会导致与简单测量回路相比不同的读取频率。读取此类数据的正确方法是什么?

我想通了。该方法是正确的。问题是

  1. 即使它是一个 RTOS,尝试在 I/O 循环期间在控制台上打印调试信息也是不行的,即使打印的数据很少;它会很快打乱时间。一旦我删除了循环中的调试输出,它就可以正常工作了。
  2. 短信号和长信号之间的相对时序是正确的,但准确的时序仍然可能有很大差异(即使在删除调试输出之后)。在我的例子中,短时间跨度可以从 180 到 288 次读取。