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.

[参考译文] RTOS/MSP-EXP430FR5994:CAN#39;t 传输 SPI 数据

Guru**** 2589275 points
Other Parts Discussed in Thread: MSP-EXP430FR5994, MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/624436/rtos-msp-exp430fr5994-can-t-transfer-spi-data

器件型号:MSP-EXP430FR5994
主题中讨论的其他器件: MSP430FR5994

工具/软件:TI-RTOS

我已经能够成功地将一些 SPI 低级驱动程序示例(例如、使用不带 DMA 的 SPI)用于 MSP-EXP430FR5994开发板、现在我正在尝试让 SPI 与我的 TI-RTOS 项目协同工作、但我没有成功。  我正在尝试弄清楚在 TI-RTOS 项目上没有正确设置 SPI 的内容。


重现步骤:

在 Code Composer Studio 中、创建一个新的 CCS 项目并在 MSP430FR5994的 TI-RTOS 示例下选择"空(最小)"项目。

2.将 empty_min.cfg 和 empty_min.c 替换为两个附加文件。

3、将跳线 P6.0和 P6.1连在一起、以便将 EUSCIA1设置为环回模式。

4.生成并运行项目。

当我这么做时、SPI 传输会被设置、但 DMA 中断永远不会触发。  我猜 DMA 的设置不正确、但我不能弄清楚自己缺少的内容。  是否有人看到我需要更改什么才能使 SPI 事务与 TI-RTOS 配合使用?

e2e.ti.com/.../8611.empty_5F00_min.ce2e.ti.com/.../2335.empty_5F00_min.cfg

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

    我不熟悉 TI-RTOS、但我会检查您的 DMA 寄存器设置、以确保它在正确的 SPI 模块/中断上触发。 DMA 触发器分配可在数据表的第6.12.8节中找到、表6-11。 您要查看的寄存器是 DMACTLx、其中 x 为0-4。 每个寄存器保存两个不同 DMA 通道的触发。 DMACTL0用于 DMA 通道0和1。 DMACTL1用于 DMA 通道2和3、依此类推。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jace、


    感谢您的建议。  我检查并看到 DMACTL2设置为0x1110、这会将通道4设置为在 UCA3RXIFG 上触发、并将通道5设置为在 UCA3TXIFG 上触发。  DMA 通道4和5正在设置数据的正确源地址和目标地址、因此它们应该准备好在命令时执行事务。  我假设这意味着需要启用 UCA3RXIFG 和 UCA3TXIFG 中断来触发 DMA 启动。  UCA3IE_SPI 设置为0、因此 UCA3不会触发任何中断来启动传输。  我认为这可能是问题的原因。


    在浏览代码时、我认为需要在 TI-RTOS 中 SPIEUSCIADA.c 中的 SPIEUSCIADA_CONFIGDMA 结束时启用 UCA3中断。  这是正确的、还是应该有其他机制来触发 DMA 传输开始?  同时、我将研究如何重建 TI-RTOS、希望尝试一下这种改变。


    谢谢、

    Bryan

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

    在 TI-RTOS 中使用 SPI 驱动程序时、我仍然没有任何幸运。  配置 DMA 后、我修改了 TI-RTOS 以启用 SPI 中断、但 UCA3IFG 保持为0x0。  到目前为止、我还没有能够获得与 DMA 或 SPI 端口相关的任何中断来触发、我不确定还有什么可以尝试。


    如果能深入了解可能发生的问题、我们将不胜感激。

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

    Bryan、

    如果未触发 UCA3IFG、则看不到 SPI 事务。 我会在这里检查几件事:

    • *是否正在设置任何其他 USCI IFG? (UCA0IFG、UCA2IFG、UCB0IFG 等)
    • * USCI A3 SPI 引脚的引脚配置是否设置正确? (设置为 SPI 功能)
    • *您的物理 SPI 引脚是否连接到正确的 USCI?
    • *您能否使用逻辑分析器进行检查,以确保事务通过 SPI 引脚进行?

    以下应用手册也会有所帮助。  MSP430 MCU 上常见 eUSCI 和 USCI 串行通信问题的解决方案

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

    Jace、


    感谢您的建议。  回答您的问题:

    *我已验证在调用 SPI_transfer ()后没有设置其他 USCI IFG。

    *我修改了"msp430fr5994_euscia0_SPI_09"演示以在 USCIU3上运行。  我使用此寄存器级示例验证了我可以在评估板上发送和接收、因此我确认我的外部接线设置正确。  我将此示例中的寄存器设置与 TI-RTOS 中 SPI 驱动程序的设置进行了比较。  在时钟和波特率生成方面、SPI 寄存器略有不同。  我尝试设置 UCA3寄存器以匹配在 msp430fr5994_euscia_SPI_09演示中设置的值、但我仍然没有收到任何要触发的中断。

    *我已经使用示波器进行了检查、并确认没有数据在 SPI 总线上传输。

    是否有人可以在第一个帖子中查看我的 empty_min.cfg 并告诉我是否正确设置了 HWI?  通过阅读 TI-RTOS 用户指南、我无法判断 HWI 应该调用哪个函数、或者应该监控哪个中断(SPI 中断或 DMA 中断)。  TI 的某个人是否有一个使用 TI-RTOS SPI 驱动程序的工作示例、我可以将其用作起点?

    谢谢、

    Bryan

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

    我一直在对寄存器级示例进行更多测试、希望至少能使其与 TI-RTOS 配合使用。  与单个消息相比、我开始获得发送消息的设置、这意味着在消息完成时停止传输。  我发现了奇怪的东西。  如果当发送缓冲寄存器 UCA3TXBUF 为空时、我禁用 TX 中断(UCA3IE &=~UCTXIE)、那么稍后当 TX 中断再次启用时、它不会触发。  但是、如果 TX 中断只在填满发送缓冲寄存器后立即被禁用、那么如果 TX 中断被重新启用、那么它将再次触发。  这可以解释为什么在 TI-RTOS 中使用 SPI 驱动程序时从未看到 TX 中断触发。

    重新启用 TX 中断时是否需要设置其他设置、以便在所有情况下都能触发?

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

    请记住、TX 标志在 TX 缓存被清空时被置位。 发生这种情况时、通过转动中断、您将不会获得中断。 一旦您将其重新打开、只要标志未被清除、您就应该再次获得一个中断、如果您有一个 RX 中断并且这取决于中断的优先级、这有可能发生。 这样做的原因是当访问 IV 时、最高优先级标志被清除。