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.

[参考译文] MSP430FR5962:SPI

Guru**** 2439710 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/970842/msp430fr5962-spi

器件型号:MSP430FR5962

你好,Forum

我对 SPI 有一些问题

我有一个应用、在该应用中、我们以8MHz 的频率运行 SPI、MCLK 为16MHz。 编译器是 CCS。

现在、我想连续发送和接收数据、但这似乎是一个问题。 我没有运行中断。

我有以下代码:

while (pu8TxData!= pu8End)

 if ((* pu16Stat & UCTXIFG)>0U)
 {
  *pu16TxData =*pu8TxData++;
 }
 if ((* pu16Stat & UCRXIFG)>0U)
 {
  *pu8RxData++=(uint8_t)*pu16RxData;
 }

所有指针都提前设置。

不同的编译器更新会产生巨大的影响、最佳情况甚至不是速度的最高设置?

是否无法以8MHz 的频率发送和接收数据? 或者、我不知道一些细节吗?

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

    1.我认为您可以降低 SPI 速度、看看它是否有用。

    2.实际上、我认为它不能以8MHz 的速度运行。  

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

    非常感谢您的快速回答:)

    正确的、降低 SPI 速度将解决该问题。

    另请注意、如果我仅发送数据、并选择正确的编译器配置(寄存器更新、设置1)、则可以在8MHz 下执行该操作。

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

    我们应该区分8MHz SPI 时钟和8MHz (1Mbyte/sec)吞吐量。

    据我所知、第一个是可实现的[参考数据表(SLASE54C)表5-19/20]。

    使用非常小的 BRW 除数可能无法实现第二个值(使用此代码)、并且在示波器上显示为字节之间的间隙。 当您读取代码序列时、估计每条语句可能需要10个 MCLK、并考虑每个字节需要2*8=16个 MCLK 来发送/接收。 这就是您可以在单向运行时获得任意小间隙的原因。

    我建议使用 DMA、它每字节仅需2*3个 MCLK (每个方向3个 MCLK)。 如果这样做、请确保为 Rx 侧提供更高的优先级、以避免溢出。

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

    您好、Bruce、

    感谢您的澄清!

    伊斯天

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

    后续问题。

    如果我使用的是 SPI B1、根据表6-11 (SLASE54C.pdf)、应使用 DMA 触发器18和19。 但这两个都放置在通道3上。

    这是否意味着我无法在 RX 和 TX 上运行 DMA、因为 DMA CHANNEL3将同时用于这两种情况?

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

    实际上、物理上不能同时对 RX 和 TX 使用 DMA。

    原因是只有一条总线可供使用。 您不能同时传输2 16位数据。

    由于它使用相同的 DMA 通道、因此不能让 MSP430来处理传输、而需要通过代码来处理。

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

    我毫不犹豫地不同意伊斯天、但(一般情况下)可以同时在两个方向上为 SPI 运行 DMA。 我已经多次这么做了。

    表6-11中描述的不幸的触发分配冲突特别防止了 UCB1-3的这种情况、但是 UCB0和 UCA0-2不存在这些冲突。

    另请参阅:

    https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/971225

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

    您好、Bruce、

    是的、你是对的。 我的意思是、您无法 使用 DMA 同步传输 TX 和 RX 数据。 但是 DMA 外设可以 根据优先级逐一处理传输、例如 UCB0。

    我看一下附加的链接、这真的是一个好主意。  

    伊斯天