您好!
我目前正在实施 CAN 引导加载程序、数据接收和写入阶段工作正常、最后数据的校验和应答一切正常、因此系统在新应用中跳转。 当我加载此应用程序的符号时、一切看起来都很好、我可以单步执行、初始化函数被正确调用、所有数据似乎都初始化良好。 但是、当我查看 PWM 和 ADC 的中断时、没有发生任何变化、我永远不会进入中断函数。 在初始化阶段、我尝试比较从闪存写入到 RAM 的代码、一切看起来都很好。
然后我尝试使用 CCS 重新启动应用程序、一切都运行良好... 我具有正确的 PWM 和 ADC。
我注意到,即使我没有为 PWM 和 ADC 使用它,计时器和 CAN 的工作正常(注意:我一开始在声明时初始化 CAN 邮箱时遇到了一些问题, 数据位于 Cinit 中、跳转后未初始化、因此我将邮箱设置为 const 并在 init 函数中初始化它们)、并且它们已在引导加载程序代码中初始化、因此我尝试 在引导加载程序初始化中初始化 PWM 和 ADC。 在应用中,一切都正常工作(但我并不是这个解决方案的大粉丝!)
我在2011年6月9日下午2:35看到另一位似乎在这个帖子上有相同问题的人:
但我没有说他是否能解决这个问题。
问题似乎是在跳转后的初始化阶段、但我看不到我做了什么错误。 在跳转 I 使用 INTM 位关闭中断之前、禁用 PIECTRL 寄存器中的 PIE:
提示 IER = 0x0000; IFR = 0x0000;
asm (" ZAPA"); asm (" MOV @SP、#0"); asm (" PUSH AL"); asm (" POP DBGIER "); asm (" lb 0x88004");
在0x88004的跳转地址处,我定义了 一个 BEGINAPP :origin = 0x088004,length = 0x000004 在 bootloader 的 cmd 文件中
在 应用程序 cmd 的.sect "AppStart"内、我的 BEGINAPP 在应用程序中具有相同的地址
当我执行跳转时、系统会在主代码的开头执行、因此看起来不错。
但我猜在缺少主代码之前还有另一个初始化阶段、此初始化阶段是在我重新启动 C2000时完成的、这就是应用程序在重新启动后应该正常工作的原因。
您是否知道如何解决这个问题,或者解释如何执行这个初始化阶段,以便可以初始化中断?
谢谢、
Clement