主题中讨论的其他器件:MSP430FR5994
团队成员:
我目前正在进行两个芯片之间的 SPI 通信。 MSP430用作从器件。 我希望从器件通过 DMA 接收数据、然后对其进行解析并通过 DMA 发送数据。 但目前我遇到了一个问题。 由于主机发送的每个数据帧的长度不同、因此我想知道如何在该芯片上接收长度可变的数据。
void BMS_DMA_Rx_Init(void) { DMACTL1 |= DMA2TSEL__UCA0RXIFG ; DMACTL4 |= DMARMWDIS ; DMA2CTL |= DMADT_4 + DMADSTINCR_3 + DMASRCINCR_0 + DMADSTBYTE_1 + DMASRCBYTE_1 + DMALEVEL_0 + DMAEN + DMAREQ ; DMA2SA = (uintptr_t)EUSCI_A_UART_getReceiveBufferAddress(EUSCI_A0_BASE); DMA2DA = (uint8_t)(uintptr_t)RecV_ping ; DMA2SZ = 16 ; }
目前、我使用 MSP430FR5994开发板、并使用串行端口调试助手对主机将数据帧发送到 MSP430进行仿真。 我的 DMA 触发源是 DMA2TSEL__UCA0RXIFG。 也就是说、只要串行端口发送数据、DMA 就会开始转换并将数据移动到 recv_ping 阵列。
首先通过串行端口调试助手发送数据帧
MSP430接收如下:
当我发送第二个帧时、将相同的命令
MSP430的第一个字节从 recv_ping [15],开始、而不是从 recv_ping [0]开始
如果这继续、我的数组中的数据将会无序。 如果我每次传输的数据长度不相等、肯定会导致下一次数据传输填补上一次数据传输中的空白、然后重新覆盖当前数组的值。
在当前的代码中、我只初始化串行端口代码并初始化 DMA。 我既没有使用串行端口接收中断、也没有使用 DMA 中断。 那么、在这种情况下、我应该怎么做? 有什么好主意吗?
我希望一些专家能够耐心地读出来、能有更好的建议。
我期待您的回复,谢谢。
顺便说一下、我想实施 SPI+DMA 通信方法。 目前我只在使用 UART+DMA 在开发板上进行实验。 我想这两者几乎是相同的。