团队成员:
在 MSP430FR5994芯片中、如果我想使用 DMA 模块接收采样芯片发回的数据、应如何正确配置 DMA 底层?
问题背景:
我想收集8个电路板的数据。 当我请求数据时、我会一次申请一个电路板。 目前、MSP430与采样芯片之间的通信是 SPI 通信。 当 MSP430中的 SPI 接收到数据时、UCB2RXIFG 被建立。 使用此标志作为 DMA 的触发源、DMA 开始将数据从 SPI 接收缓冲区传输到 voltdest_buff 数组 I set、然后我将在数组中提取有效数据以进行后续处理。
问题说明:
根据上述说明、整个过程由主机发送第1板的数据请求帧。 1号采集芯片响应后、建立 SPI 接收标志、DMA 开始移动数据。 等待一段时间后、主机开始发送2号电路板的数据请求帧、等待2号芯片应答后 DMA 开始移动数据、等待一段时间 主机开始发送第3个... 这个循环持续到所有电路板数据被读取。 我现在发现、如果 voltdest_buff 阵列大小设置为 一个板返回的数据的大小。 数组的大小将导致数组中的数据出现故障(数据正确、但顺序错误)。 如果 voltdest_buff 数组的大小设置为6个电路板返回的数据的总大小、则该数组将具有数据覆盖。 数组的初始数据很杂乱、但如果您往下看、可以找到完整的数据有效帧。
值得怀疑的要点:
(1)使用 UCB2RXIFG 作为 DMA 传输的触发源将导致 DMA 传输的时序是不可控的。 我仍然不知道如何解决。 应如何控制时序?
(2)使用 DMAREQ 作为 DMA 传输的触发源、传输没有成功。 我不知道如何正确修改我的配置。 我知道、使用 DMAREQ 作为触发源将使整个传输过程可控。
我的配置如下:
您是否有更好的建议或常规参考?
我期待您的回复,谢谢。