我正在调试一块数控电源,采用的TMS320F28035芯片在运行过程中时常出现宕机现象,采用仿真器跟踪发现,在芯片出错后,程序似乎从头开始执行,并停止在了InitSysCtrl()函数中的InitPLL()函数里,具体卡死的语句为
while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1){// Uncomment to service the watchdog// ServiceDog();}
我用示波器观察过复位引脚和电源的波形,没有发现明显毛刺,在走线上也采用了功率地和信号地分开走线、单点接地的方式,附上PCB图(PCB比较渣,各位轻拍)
功率地在顶层接地
信号地在底层接地
各电源引脚去耦电容采用的是10uF(1.8V)和2.2uF(3.3V),小弟愚笨,对于导致这个问题的原因百思不得其解,希望各位能够为我解答,先行谢过各位。
Young Hu:
你采用内部晶振试试看?
mangui zhang:
降频率试试。
Jun Zhang4:
DSP复位一定有原因的,楼上教你这样做那样试有什么用?解决不了你的问题。
1、检查你的程序,先排除所有可能会是软件的问题;
2、如果开启了看门狗,禁用后再测试是否仍然会复位;
3、示波器测3.3V电源,采用触发模式,看电源是否会瞬间跌落;
4、如果以上都确认了问题还是复现,那一定是芯片受干扰了。等到了这一步,我教你最后一招。
Seven Han:
或许不是您板子硬件的问题,关于c2000时钟锁相环的配置可以参考下帖子:
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/116252
检查下仿真器连接是否加载了gel文件,或者外部拉低xrsn引脚,看是否可以通过while()等待。
user4499737:
回复 Young Hu:
Young Hu
你采用内部晶振试试看?
user4499737:
回复 Jun Zhang4:
Jun Zhang10
DSP复位一定有原因的,楼上教你这样做那样试有什么用?解决不了你的问题。
1、检查你的程序,先排除所有可能会是软件的问题;
2、如果开启了看门狗,禁用后再测试是否仍然会复位;
3、示波器测3.3V电源,采用触发模式,看电源是否会瞬间跌落;
4、如果以上都确认了问题还是复现,那一定是芯片受干扰了。等到了这一步,我教你最后一招。
user4499737:
回复 mangui zhang:
mangui zhang
降频率试试。
user4499737:
回复 Seven Han:
Seven Han
或许不是您板子硬件的问题,关于c2000时钟锁相环的配置可以参考下帖子:
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/116252
检查下仿真器连接是否加载了gel文件,或者外部拉低xrsn引脚,看是否可以通过while()等待。
user4499737:
回复 Young Hu:
Young Hu
楼上各位,其实楼主给的测试结果以及PCB的layout其实是可以大概确定问题点的。如果卡死在下面这句话中,可能就是晶振部分的问题,或者起振不正常。
while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1)
{
// Uncomment to service the watchdog
// ServiceDog();
}
之所以让你改成内部晶振,目的是为了确定我的猜测。你的晶振部分的layout需要修改的。