主题中讨论的其他器件:C2000WARE
您好!
我面临一个问题、即在添加一行代码时 SPI 写入失败。
硬件设置是一个连接到 DRV8304S 并控制 BLDC 电机的 F280023微控制器。 IC 中的寄存器通过 SPI 进行配置。
不幸的是、我无法分享完整代码、但我可以对其进行描述、并且可能可以分享一些代码段。 int main()代码结构如下:
- 首先是一些初始化函数。 使用的外设为:Timer0、Timer1、ADC-A、ADC-C、SPI、 SCI 和 ePWM1/2/3。
- 然后还有一个主循环、此循环在本质上以几个不同的"模式"(速度控制、转矩控制、PWM 控制等)运行电机。 它本质上是主循环中控制执行流程的一个大开关情况。
- 定期运行的中断包括:
- 用于与另一个板通信的 SCI 中断。
- 用于根据电机发出的霍尔值进行换向的 GPIO 中断。
- ADC 中断由 ePWM 模块触发(PWM 高电平的中点)、用于检测相电流。
当我在 main 中添加一行代码时、SPI 通信会失败。 以下是一些观察结果:
- 启动时、代码行不在代码的执行路径中。 这是一段代码、只有在我更改开箱变量以在调试窗口中输入不同的执行路径时才能访问。 不过、在设置阶段-在进入开关用例之前-发生的 SPI 通信似乎仍然失败。
- 在示波器上、MOSI 行看似随机电平变化。 照片附在下面。 此波形不停地重复。
- 什么是代码行似乎无关紧要。 任何添加的额外代码都可能导致此问题。 具体来说,我试图写入阵列的每个循环,以监测特定变量的值,但即使当我交换了一个正常的附加语句与虚变量,甚至重复,相同的故障情况出现。
- 我认为这可能与堆栈/堆大小有关、因此我增加了为 CCS 链接器选项中的这些功能分配的内存。 没有解决这个问题。
我理解这可能是对问题的模糊描述、即使我正在尝试寻找其他有用的线索。 如果我可以获得一些关于我可以查看以便对其进行调试的其他事项的指导、我将不胜感激。
此致、
Vishnu
编辑:代码中的某些改变偶尔会产生一个不同类型的错误-代码在引导 ROM 的以下区域冻结、这显然是在有一个非法指令尝试执行时发生的。 目前仍不清楚具体导致出现这种情况的原因、因为即使出现错误、代码编译也没有问题。