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.

[参考译文] CC2340R5:CC2340R5 SPI

Guru**** 2331900 points
Other Parts Discussed in Thread: CC2340R5, CC2541
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1471329/cc2340r5-cc2340r5-spi

器件型号:CC2340R5
Thread 中讨论的其他器件: CC2541

工具与软件:

CC2340R5上的 SPI 模块存在细微问题。

基本上、我放弃了 TI 驱动程序、因为它们的运行速度对于我们的应用程序来说太慢、交易之间有82多人。

但是、在技术参考手册 SWCU193中的 SPI 信息中、SPI 包含一个状态寄存器(STA)、该寄存器中包含一个状态寄存器
是 TXDONE 位。   

理想情况下、我需要对该位进行轮询以确保总线上的移出操作已完成、但即使通过 IAR 调试器也无法看到相关设置。 我可以存储8个数据位
电压和电流。

有人碰巧知道此位是否实际完全实现并且可以正常工作吗? 我可以正常地轮询繁忙位、但这不能确保移位寄存器已清空。

以下是非常简单的代码(设置后)。 这里可能缺少一些真的很愚蠢的东西。 也使状态变为易失性。

HWREG( SPI0_BASE + SPI_O_TXDATA )= txdata ;
应执行的操作

STATUS = HWREG( SPI0_BASE + SPI_O_STA );
} while (! (STATUS & SPI_STA_TXDONE_TX_DONE);

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

    尊敬的 Robert:

    我在终端上观察到类似的行为、关于此位的文档很少甚至没有。  您是否正在使用 DMA 传输 SPI 字节?  我现在建议投票占线。  您还可以考虑使用 driverlib API

    spi.h driverlib 参考
    hw_spi.h 文件中找到
    SPI0 CPU 寄存器说明

    此致、
    Ryan

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

    您好、Ryan、

    感谢您的答复。 我目前正忙于轮询、以便执行此操作。 目前没有使用任何 DMA、但不确定是否会有所帮助、因为我无法向我的特定目标发送 hug 数据块、大量的命令+数据实现。  最大的块是五个字节、我认为设置 DMA 的开销可能比仅仅尝试快速激发它更多的指令。

    我本来希望轮询 TX 数据、但如果忙是目前我将坚持使用的唯一方法、我可以压缩事务之间的时间。  

    文件仍然需要改进。 对于提及 SPI 的处理器、有一些勘误表、但我找不到有关该 TX DONE 标志的任何特定信息、可能仍然存在器件错误。

    与 TI 驱动程序相比、我在传输块之间节省了大约80us、低至<2us、但仍然与旧 CC2541的速度不匹配、目前这一点有点令人失望。

    我将在这里不停切屑。

    Rob