我一直在使用 Teensy 3.6 微控制器板(180 MHz ARM Cortex-M4 处理器)来尝试实现传感器驱动程序。传感器通过 SPI 进行控制,当它被命令进行测量时,它通过两条线(DOUT 和 PCLK)发送数据。PCLK 是一个 5 MHz 时钟信号,位通过 DOUT 发送,在 PCLK 信号的下降沿测量。数据帧本身由 1,024 个 16 位值组成。
我的第一次尝试是一种相对简单的方法:我在 PCLK 引脚上附加了一个中断,以寻找下降沿。当它检测到下降沿时,它会设置一个新位可用的布尔值,并将另一个布尔值设置为 DOUT 线的值。程序的主循环从这些位生成一个 uint_16 值,并为整个测量帧收集 1,024 个这些值。
然而,这个程序几乎立即锁定了青少年。从我的实验来看,它似乎在附加中断后立即锁定。我相信微处理器被中断淹没了。
我认为正确的做法是使用 Teensy 的 DMA 控制器。我一直在阅读 Paul Stoffregen 的 DMAChannel 库,但我无法理解。我需要从 PCLK 数字引脚触发 DMA 测量,并从 DOUT 数字引脚读取位。有人能告诉我我是否以正确的方式看待这个问题吗?我是否忽略了某些东西,我应该查看哪些资源来更好地了解 Teensy 上的 DMA?
谢谢!
我把它放在 Software Engineering Stack Exchange 上,因为我觉得这主要是一个编程问题,但如果是 EE 问题,请随时将其移至 EE SE。