|
用的片子是lpc2365,在做掉电唤醒的工作,用外部中断2(只唤醒,不产生中断),按照zlg的模板,重新使能配置pll。但是总是在唤醒后复位,查了好多资料,还是不明白。下面是我的代码,请大家指教:<br /> Delay(10000);<br /> AD0CR = 0x00;<br /> PCONP = 0x00;<br /> PCON = 0x02;<br /><br /> OS_ENTER_CRITICAL(); <br /> Delay(10000);<br /> EXTINT = BIT(1) | BIT(2) |BIT(3);<br /> PLLinit(); <br /> OS_EXIT_CRITICAL();<br /><br /> while(1)<br /> {<br /> UART0Write((uint8*)"step2",5);<br /> OSTimeDly(OS_TICKS_PER_SEC); //???<br /> } <br /><br /><br /><br />其中PLLinit()函数是直接从周立功的程序上找的。<br /><br /> void PLLinit(void)<br />{<br /> SCS = (SCS & 0x04) | 0x20; // 使能主振荡器,1MHz~20MHz <br /> while ((SCS & 0x40) == 0 ); // 等待主振荡器可用<br /> <br /> if (PLLSTAT & (1 << 25)) // 如果PLL连接<br /> {<br /> PLLCON = 0x01; <br /> PLLFEED = 0xAA; // 断开连接<br /> PLLFEED = 0x55; <br /> PLLCON = 0x00; <br /> PLLFEED = 0xAA; // 不使能PLL<br /> PLLFEED = 0x55; <br /> } <br /> else if (PLLSTAT & (1 << 24)) // 如果PLL使能 <br /> // 如果PLL已被使能,则先禁止PLL<br /> {<br /> PLLCON = 0x00; <br /> PLLFEED = 0xAA; // 不使能PLL<br /> PLLFEED = 0x55;<br /> }<br /> <br /> CLKSRCSEL = 0x01; // 选择主振荡器作为PLL输入时钟源 <br /> PLLCON = 1; // 使能但不连接PLL<br /> <br /> PLLCFG = (((PLL_NValue - 1) << 16) <br /> | (PLL_MValue - 1) ); // 设置N、M值 <br /> <br /> PLLFEED = 0xAA; // 使能PLL<br /> PLLFEED = 0x55; <br /> while (((PLLSTAT & (1 << 24)) == 0));// 等待PLL可用<br /> <br /> CCLKCFG = (Fcco / Fcclk - 1); // 用于防止CPU工作频率过大<br /> PLLCON = 3; // 连接PLL <br /> PLLFEED = 0xAA;<br /> PLLFEED = 0x55; <br /> while (((PLLSTAT & (3 << 25)) != (3 << 25)));// 等待PLL连接好<br />} |
|