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.
您好!
我面临一个问题、即在添加一行代码时 SPI 写入失败。
硬件设置是一个连接到 DRV8304S 并控制 BLDC 电机的 F280023微控制器。 IC 中的寄存器通过 SPI 进行配置。
不幸的是、我无法分享完整代码、但我可以对其进行描述、并且可能可以分享一些代码段。 int main()代码结构如下:
当我在 main 中添加一行代码时、SPI 通信会失败。 以下是一些观察结果:
我理解这可能是对问题的模糊描述、即使我正在尝试寻找其他有用的线索。 如果我可以获得一些关于我可以查看以便对其进行调试的其他事项的指导、我将不胜感激。
此致、
Vishnu
编辑:代码中的某些改变偶尔会产生一个不同类型的错误-代码在引导 ROM 的以下区域冻结、这显然是在有一个非法指令尝试执行时发生的。 目前仍不清楚具体导致出现这种情况的原因、因为即使出现错误、代码编译也没有问题。
作者:Vishnu、
当您遇到非法指令错误(ITRAP)错误时、需要找到导致该错误的指令。 根据我的经验、一般是由于堆栈溢出(或)导致的内存损坏、因此其他代码无意中更改了内存的一部分。 我建议您加载 F28002x bootrom 的引导 ROM 符号。
1) 1)加载引导 ROM 符号
路径:C:\ti\c2000\C2000Ware_4_03_00_00\libraries\boot_rom\f28002x\rev0\rom_sources\CCS_files\CPU\Release
文件: F28002x_ROM.out (BootROM COFF 文件)
2)然后您需要找到文件并选择
路径:C:\ti\c2000\C2000Ware_4_03_00_00\libraries\boot_rom\f28002x\rev0\rom_sources\F28002x_rom\bootROM\source
3)上述两步加载引导 ROM 符号和相关的 bootrom 文件。 然后在"Expressions"窗口中 您可以检查变量 CPU1BROM_itrapAddress 获取触发非法指令陷阱条件的地址位置。
此致、
Manoj
尊敬的 Manoj:
感谢您的建议。 但是、 我未能在我的系统中始终如一地重现 ITRAP 问题。 它只发生一次,当我对用于调试的代码进行随机更改时,我提到它是因为我认为它可能是相关的。
对于给定版本的代码、唯一一致发生的情况是 SPI 故障。 当然、未发现 SPI 问题的代码版本以后也不会出现问题。 但奇怪的一点是、导致这些 SPI 写入失败的更改非常随机-替换一行、注释一个不重要的部分... 从我到目前为止看到的情况来看、这些代码更改 与 SPI 无关、而这个 SPI 故障是我发现唯一似乎一直失败的问题。
如果 是堆栈溢出问题、不应该增加堆栈大小来解决它? 我曾尝试这么做(Properties -> C2000 Linker -> Basic Options、并将堆栈大小从0x200更改为0x300)、但问题仍然存在。
此致、
Vishnu
作者:Vishnu、
我不认为我们有所有的难题来理解正在发生什么。 您需要进一步调试和缩小问题范围、以便我了解此问题。 了解代码流程的变化情况、并查看您的器件在哪些条件下停止工作。
此致、
Manoj