hebeijiang 发表于 2013-6-5 18:19

LPC1225的启动、复位异常问题

因电路用到多个MCU,使用的是LPC1225,发现在上电时经常有MCU没有启动,板上的几个MCU的电路是相同的,程序也相同,如下。

在每次上电时,有个别MCU不工作,测量晶振已经起振,用仿真器可以进入(怀疑是先复位进入的),用串口不能进入内部的bootload.
做了电路没隔5秒复位一次,发现有时复位后也会不启动。
不知是否有朋友遇到相同问题。

hebeijiang 发表于 2013-6-5 18:47

补充一点,在LPC1225的程序中启用看门狗,启动问题依旧。

hebeijiang 发表于 2013-6-6 01:08

问题解决,是pll切换造成的问题。
切换太快了。

jlass 发表于 2013-6-6 08:38

搞到凌晨1点啊,楼主太牛了

hebeijiang 发表于 2013-6-6 13:44

回楼上,做个小**就是这样的了。
补全一下问题的解决:
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,或许更短都可以。
增加延时后实际测试没有出现启动异常的问题。
因小**是业余的,详细的理论需要高手们来补全。

huangxz 发表于 2013-6-6 14:10

学习了,用了许多nxp的器件还没有发现还有这个问题,如果是我早就骂nxp了;P
页: [1]
查看完整版本: LPC1225的启动、复位异常问题