我们使用 SPI0从具有4个通道的 A/D 中获取数据。 我们设置6个缓冲器、每个缓冲器都有其自己的参数 RAM 块。
在示波器上、我们可以看到数据按照我们的预期飞出。
对于所有块、我们都启用了"传输完成中断"和"中间传输完成中断"。
ISR Simple 会发送一个与刚刚填充的缓冲区相对应的事件。 然后、有一个任务在事件上挂起以处理数据。
处理事件时、ISR 中有 LOG_INFO、任务中有 system_printf。
ISR 看起来运行速度太快、迭代次数太多。 当我们预期为6时、我们将获得数百个。 每个缓冲区的填充时间大约为2秒、但 Log_info 上的时间戳看起来更像是3uSec。
任务仅打印1个项目、这是最后一个缓冲区。
问题: 应如何设置链路寄存器? RX SPI0和15 TX SPI0都有14个。 TX 端只是虚拟的、以便为模数(A/D)提供时钟 我们设置了15、以连接到它、从而实现前所未有的运行。 (我们最终希望将它们作为循环缓冲系统运行)。 14与其他6个参数中的第一个链接、所有这些参数都相互链接。 最后一个端点当前已终止(我们最终希望它指向第一个端点)。
从任务的角度来看、我们只会收到最后一个事件?
从 ISR 的角度来看、我们几乎不会清除暂挂中断、但我本来希望日志信息比3uSec 快得多。
我们在 SPI 端是否需要做些什么? 我假设 EDMA 引擎正在处理 SPI ISR 项目。
我们确实会在缓冲区中获取数据、这些数据看起来是合理的。 波形从4个通道跳转。 我们可能缺少一个样本 、这会导致所有内容发生移位。
感谢你能抽出时间