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.

[参考译文] TMS320F28388D:从编码器读取角度时、SPI 时钟停止

Guru**** 2538955 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1403284/tms320f28388d-spi-clock-stops-while-reading-the-angle-from-an-encoder

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARESysConfig

工具与软件:

我想在28388D 上使用 SPI 通信功能、以便从绝对编码器 RM44SC (11位版本)获取角度。 它使用 SSI 通信协议、并弄清楚我实现了 SPI 的功能。 我按照这里给出的指导原则- https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/981032/tms320f28379d-reading-the-angle-from-a-ssi-encoder-using-spi 、生成时钟信号。 我能够生成时钟信号、并且传感器会使用相应的位置数据进行响应。 但是、一旦我启用 READ 语句、时钟信号就会停止传输任何内容、并锁存到高电平信号。 这在输出中不提供任何数据。 下面给出了我的 SPI 设置以及我写入传感器的虚拟字。 现在、当我注释掉第335行(检查第二个屏幕截图) 时、SPICLK 会生成所需的一连串时钟脉冲、但是当我取消注释时、SPICLK 会停止并变为一个高值。

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

    您好!

    这会等待接收数据、然后再从缓冲区读取数据。 如果器件之间没有持续通信的数据、SPICLK 将暂停。 SPICLK 只有在通信期间是有效的。

    此外、您使用的是 FIFO 还是非 FIFO 模式? 启用 FIFO 模式时、不应使用该功能。

    此致、

    Allison

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

    您好、Allison:  

    感谢您的指导。 我意识到了这一错误,并能够纠正它。 我尝试了以下步骤

    1)我在 SPI_setconfig ()函数中启用了 FIFO 传输模式、并相应地更改了 SPI 读取和写入函数(请查看下面的屏幕截图)。  

    2) 2)当我运行这段代码时、我可以从示波器上看到(我已经在收发器的差分输出端探测到)、有连续的时钟黑色被发送到传感器、并且有符合预期的传感器差分数据(蓝色)。 我在示波器上使用串行通信功能来解码来自传感器的信息、这是有道理的。 但是我没有收到任何数据 我看到收发器连接到 DSP 的单端侧(0-3.3V)输出正常工作、并与我的差分数据一致。 我知道设置接收/读取寄存器的方式可能存在问题? 我还添加了运行时 SPI 寄存器的屏幕截图供您参考。 您可以看到、读取缓冲区位于0xAFFF 完全不同的位置、完全不会改变。 TXBUF 具有我提供给传感器的虚拟字。  

    3) 3)这里是我的 GPIO 设置的屏幕截图、我已经确保硬件上到 GPIO 编号的物理引脚映射是正确的。  

    另一个要注意的地方是、出于一些奇怪的原因、我将时钟保持在500kHz、将传输延迟保持在9 、然后我才在时钟周期之间得到20us 的延迟。  

    谢谢!

    Pranav

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

    Pranav、您好!

    非常感谢您提供这些信息。 请允许我再花一天时间查看此内容并与您联系。

    此致、

    Allison

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

    Pranav、您好!

    只是想让你知道,我将尝试回到你本周,但请注意,我在未来几天不在办公室。

    此致、

    Allison

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

    您好、Allison:

    没问题,感谢您对此进行研究。 非常感谢您的帮助。 与此同时、我正在尝试不同的方法、并将相应地更新。  

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

    您好!

    Allison 在周二9月3日之前不在办公室、因此请预计下周回复。 对此造成的不便、我深表歉意。

    此致、
    Delaney

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

    您好 Pranav、

    因为我在外面,所以我很喜欢你。" 您在同一时间内是否尝试过其他方法? 如果您仍然遇到问题或有其他更新、请告诉我。

    此致、

    Allison

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

    您好、Allison:

    不用担心。 我没有为您提供其他更新。 不幸的是,我陷入了死胡同

    我想我所面临的核心问题是、对于具有 SPI 功能的28388D 微控制器、似乎没有基本代码、特别是 Driverlib 格式。 因此、我尝试了解现有位域示例中的寄存器设置、并以 driverlib 格式自行重新创建、但很少成功。 我能否先获得28388D 的 driverlib 格式的 SPI 代码示例? 我在 Resource Explorer 中没有看到要使用的特定示例。

    谢谢!

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

    Pranav、您好!

    完全不用担心。 我们在 C2000Ware SDK 中提供了很多示例。 基于 F2838x DriverLib 的 SPI 示例具体可在目录 C:\ti\c2000\C2000Ware_5_02_00_00\driverlib\f2838x\examples\c28x\spi 中找到。

    请看一下这些-有一些简单的内部环回示例(其中 RX 和 TX 以"环回模式"在内部连接在一起)可帮助测试您的 SPI 模块是否设置正确、还有一些外部环回示例、您可能会觉得有用。  

    另请注意、这些示例还使用我们的 CCS 图形用户界面 SysConfig。 因此、您可能会注意到、当您将示例导入到 CCS 时、这些示例包含一个.syscfg 文件。 在示例中、当调用"board_init ()"时、将实现 SysConfig 生成的 C 代码(您始终可以在 SysConfig 窗口中查看生成的 driverlib C 代码)。 有一些视频系列和文档、介绍如何在需要时使用 SysConfig、请告诉我!

    如果您对它们有任何疑问或认为它们有用、请告诉我!

    此致、

    Allison

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

    您好、Allison:  

    我曾经介绍过您建议的示例文件、尤其是28388D_SPI_EXTERNAL_LOOPBACK。 由于一些奇怪的原因、我最后甚至无法运行示例代码 不过、我能够进入源代码、并了解如何修改寄存器。 除了需要在 FIFO 模式下运行代码外、我的代码在大多数情况下都是相同的、这样才能设置时钟周期之间的自定义延迟并读取传入数据。 这里是我的代码片段、供您参考。

    当我运行这段代码时、我有两个问题。 首先、我在代码中设置的 TX 延迟不会反映在硬件上。 这适用于我在 TxFifoTransmitDelay fcn 中键入的任何数量。 其次、变量"传感器"的读数仅为45055、尽管我可以看到 我的传感器输出了一些其他值并在我物理旋转电机时发生变化。 不知何故、我的读取缓冲器、因此变量传感器未捕捉到?  

    谢谢!

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

    Pranav、您好!

    很高兴这些示例至少可以作为参考提供帮助。

    该示例并非 开箱即用、这一点很重要、因此我想确保我们将其作为基础。 您能否确保您使用的是最新的 C2000Ware 5.02? 有一些从以前的版本更新的 driverlib 函数。

    下一个建议是、对硬件进行三次检查始终是不错的-您是否能够检查引脚范围并查看活动? 您是否在编译项目时遇到任何问题或看到特定的软件问题?  

    在发送延迟上-您是否使用 CCS 中的"Registers"窗口仔细检查 SPI 寄存器中是否存在/配置了发送延迟? 如果存在、则应在字之间实施延迟。

    如果您确认传感器已向 C2000发送预期值、但读取到 C2000上的 Sensor 变量中的值不正确、则可能存在某些配置设置问题-您是否已再次检查时钟模式是否与两个器件均一致?  

    此致、

    Allison