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.

[参考译文] TMS320F280025:SPI 代码卡滞问题

Guru**** 2553450 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1113456/tms320f280025-spi-code-stuck-issue

器件型号:TMS320F280025
主题中讨论的其他器件:C2000WARE

您好 Champ、

我正在向我的客户提出要求。 他们正在将 我们的示例代码 SPI_ex6_EEPROM 复制到自己的项目中。

实际上、它们所做的是与我们在 main 中的代码完全相同的过程、只需等待 EEPROM 准备好写入数据并检查接收到的数据是否正确。

在 enableWrite()之后,它们使用以下代码直接从 EEPROM 写入和读取数据,然后转到 while 循环。

enableWrite();  

writeData (EEPROM_ADDR、&TXbuff [0]、64、no_delay); //将数据写入 EEPROM

ReadData (EEPROM_ADDR、&RXbuff [0]、64、NO_DELAY); // 从 EEPROM 读取

while (1)

 客户自己的应用程序代码

发现 在调试模式期间 、尝试在运行到 客户自己应用代码的第一行之前放置一个断点。  

当代码停留在断点之前、并在第977行停止 、而(((HWREGH (base + SPI_O_STS)& SPI_STS_INT_flag)= 0U)位于 SPI.h 中 SPI_readDataBlockingNonFIFO 的函数中、 它们必须暂停并再次恢复、以便能够运行到 while 循环中的第一行断点。  

是否有专家会澄清为什么代码在这里停止,以及如何 直接运行到 while 循环中的第一行?

谢谢、此致。

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

    您好!

    您能否提供一些有关为何 删除等待器件的详细信息。 该代码基本上会检查 EEPROM 状态寄存器并确认其已准备好写入

    此致、

    Veena

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

    您好、Veena、

    下面是更详细的信息、我确认了等待器件实际上在其代码中、客户将等待器件合并到  EEPROM 的写入/读取数据函数中。  

    我们发现、在执行暂停和恢复操作后、从表达式窗口刷新 RXbuff、RXbuff 实际上会接收数据。 在  我们的示例代码 SPI_ex6_EEPROM 上进行尝试时情况相同。

     客户想知道为什么它在等待接收数据时停止,需要再次恢复?

    请发表评论。

    感谢你的帮助。

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

    您好、Johnny、

    这可能是与延时相关的问题。

    您能否共享代码片段、让它们在执行读取/写入之前等待 EEPROM 准备就绪?

    此致、

    Veena

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

    您好、Veena、

    客户复制并粘贴 了我们的示例代码(SPI_ex6_EEPROM)、 问题仍然存在、并且可以肯定地消除了中断的延时时间。

    我想知道这是不是因为他们的硬件设计。 它们添加了上拉和下拉电阻器以及10欧姆连接、如下所示。  延时时间是否来自这种情况?

    谢谢、此致、

    Johnny

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

    您好、Johnny、

    让我邀请硬件专家来帮助您进一步。

    此致、

    Veena

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

    您好、Veena、

    感谢你的帮助。 期待进一步的帮助。

    此致、

    Johnny

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

    您好、Johnny、

    我认为这个问题不应该与硬件或外部上拉有关、原理图对我来说是可以的。 它们可以使用较慢的时钟速度尝试。 他们现在的测试速度是多少?

    [~用户名="488507" url="支持/微控制器/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1113456/tms320f280025-SPI-code-stad-issue/4129132#4129132"]

    我们发现、在执行暂停和恢复操作后、从表达式窗口刷新 RXbuff、RXbuff 实际上会接收数据。 在  我们的示例代码 SPI_ex6_EEPROM 上进行尝试时情况相同。

     客户想知道为什么它在等待接收数据时停止,需要再次恢复?

    [/报价]

    读取/写入 EEPROM 似乎需要一些延迟、这在与 EEPROM 连接时很常见(读取/写入周期时间)。 您能否提供他们对其有疑问的代码?

    最棒的

    Kevin

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

    您好、Veena 和 Kevin、

    我们确定了问题的位置。 我认为该函数判断 EEPROM 解锁状态位条件写入错误。

    SPI_ex6_EEPROM.c 中的第170行最初以"while (readStatusRegister (RDSR)& MSG_STATUS_WRITE_READY)= MSG_STATUS_WRITE_M){}"的形式写入、而我们更改为"while (readStatusRegister (RDSR)& MSG_STATUS_WRITE_READY (M)= 0)=}"。 然后 、它是固定的。

    感谢您在这方面的帮助。

    此致、

    Johnny

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

    感谢您的详细信息。 我们将检查 C2000ware 示例并进行相应更新。

    谢谢、此致、

    Veena