您好!
我已经在一个 EMV430-FR6043 (从器件)和另外一个 MCU (主器件)之间建立了一个 SPI 链路。 (参见图)
程序流的工作方式如下:
首先、两个 MCU 都处于空闲状态
然后、MSP430从器件中的定时器中断意味着从器件有一些数据要发送到主器件。 通过将"数据就绪信号"拉为高电平、可将该信号发送给主 MCU。
-一旦数据就绪信号为高电平、主器件开始 SPI 传输、其中传输了255个字节。 (到目前为止、它只是一些垃圾数据、整数从 0开始)
-传输完成后、两个 MCU 都将再次空闲、直到 MSP430有更多数据可发送。 (定时器中断)
传输几乎完美、但 DMA_CHANNEL 0仍存在一个问题、该问题会将 数据从发送缓冲区移动到 UCA1TXBUF 寄存器:
从 MSP430从器件发送到主器件的前两个字节要么为零(当这是第一次传输时)、要么是上一次传输中仍然在发送寄存器中的任何字节。 DMA_CHANNEL 0由 UCA1RXIFG 触发。
我怀疑 DMA 的启动"太晚":在 SPI 传输开始的同时触发 DMA。 此时 、UCA1TXBUF 尚未由 DMA 填充。
1) 这会直接引导我回答我的问题、"最佳实践"是什么? 我是否可以告诉 DMA 已经在较早的时间点移动前两个字节? 或者、我是否必须在 TX 寄存器中手动填充前两个字节?
2) 2)我在下面附上了我的代码、请告诉我是否有任何问题或应该进行优化。 (中断中的延迟调用 只是临时的、我将在稍后的时间点将其删除)。
此致、
Sebastiane2e.ti.com/.../eusci_5F00_a_5F00_spi_5F00_ex1_5F00_slave.c