This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EVM430-FR6043:作为 SPI 从器件的 MSP430启动太晚

Guru**** 2553450 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1049644/evm430-fr6043-msp430-as-spi-slave-starts-too-late

器件型号:EVM430-FR6043

您好!

我已经在一个 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