LPC1225的启动、复位异常问题
因电路用到多个MCU,使用的是LPC1225,发现在上电时经常有MCU没有启动,板上的几个MCU的电路是相同的,程序也相同,如下。在每次上电时,有个别MCU不工作,测量晶振已经起振,用仿真器可以进入(怀疑是先复位进入的),用串口不能进入内部的bootload.
做了电路没隔5秒复位一次,发现有时复位后也会不启动。
不知是否有朋友遇到相同问题。
补充一点,在LPC1225的程序中启用看门狗,启动问题依旧。 问题解决,是pll切换造成的问题。
切换太快了。 搞到凌晨1点啊,楼主太牛了 回楼上,做个小**就是这样的了。
补全一下问题的解决:
NXP提供的驱动中有该函数:
void SystemInit (void)
就是这函数导致有时启动异常,修改过的部分为:
#if (SYSPLL_SETUP)
LPC_SYSCON->SYSPLLCLKSEL= SYSPLLCLKSEL_Val; /* Select PLL Input */
LPC_SYSCON->SYSPLLCLKUEN= 0x01; /* Update Clock Source */
LPC_SYSCON->SYSPLLCLKUEN= 0x00; /* Toggle Update Register */
LPC_SYSCON->SYSPLLCLKUEN= 0x01;
while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01)); /* Wait Until Updated */
/* System PLL Setup */
LPC_SYSCON->SYSPLLCTRL = SYSPLLCTRL_Val;
LPC_SYSCON->PDRUNCFG &= ~(1 << 7); /* Power-up SYSPLL */
while (!(LPC_SYSCON->SYSPLLSTAT & 0x01)); /* Wait Until PLL Locked */
#endif // #if (SYSPLL_SETUP)
Delay_mS(100); //就增加这一句延迟。
LPC_SYSCON->MAINCLKSEL = MAINCLKSEL_Val; /* Select PLL Clock Output*/
LPC_SYSCON->MAINCLKUEN = 0x01; /* Update MCLK Clock Source */
LPC_SYSCON->MAINCLKUEN = 0x00; /* Toggle Update Register */
LPC_SYSCON->MAINCLKUEN = 0x01;
while (!(LPC_SYSCON->MAINCLKUEN & 0x01)); /* Wait Until Updated */
程序只加了句延时,因我的系统对切换时间没有要求,所以用的是100mS,或许更短都可以。
增加延时后实际测试没有出现启动异常的问题。
因小**是业余的,详细的理论需要高手们来补全。 学习了,用了许多nxp的器件还没有发现还有这个问题,如果是我早就骂nxp了;P
页:
[1]