程序没有加入iap前,各项功能都很正常,加入iap写flash后iap功能正常,但串口就不能正常执行.<br />具体表现:在串口的通讯数据出错,好象频率错误,把pll去掉后也不对.<br /><br />请指教! <br /><br /><br />uint8 iap(uint32 dst, uint32 src, uint32 no, uint8 sec1, uint8 sec2)<br />{ <br /> MAMCR = 0; // 关闭MAM<br /> // PLLCON = 0; // 关闭PLL<br /> // PLLFEED = 0xaa;<br /> // PLLFEED = 0x55;<br /><br /> if(ReadParID() !=0){<br /> return FALSE;<br /> } <br /> if(BootCodeID() != 0){<br /> <br /> return FALSE;<br /> } <br /> <br /> if(SelSector(sec1, sec2) != 0){ // 选择扇区<br /> return FALSE;<br /> } <br /> if(EraseSector(sec1, sec2) != 0){ // 擦除扇区<br /> return FALSE;<br /> } <br /> if(BlankCHK(sec1, sec2) != 0){ // 查空扇区<br /> return FALSE;<br /> } <br /> <br /> if(SelSector(sec1, sec2) != 0){ <br /> return FALSE;<br /> } <br /> if(RamToFlash(dst, src, no) != 0){<br /> return FALSE;<br /> } <br /> if(BlankCHK(sec1, sec2) == 0){ <br /> return FALSE;<br /> } <br /> if(Compare(dst, src, no) != 0){ // 比较数据<br /> return FALSE;<br /> } <br /><br /> return TRUE;<br />}<br /><br />uint8 iapTask(uint32 dst, uint32 src, uint32 no, uint8 sec1, uint8 sec2)<br />{ <br /> <br /> uint32 temp1;<br /> //防止狗复位,喂数<br /> <br /> <br /> //关中断<br /> temp1 =VICIntEnable; <br /> VICIntEnClr =temp1;<br /><br /> if (iap(dst, src, no, sec1, sec2)==0){<br /><br /> VICIntEnable =temp1;<br /><br /> /* PLLCON = 1; // 使能PLL<br /> PLLFEED = 0xaa;<br /> PLLFEED = 0x55;<br /> while((PLLSTAT & (1 << 10)) == 0); //判断pll锁定<br /> PLLCON = 3;<br /> PLLFEED = 0xaa;<br /> PLLFEED = 0x55;<br /> */<br /> return FALSE;<br /> }<br /><br /> VICIntEnable =temp1;<br /><br />/*<br /> PLLCON = 1; // 使能PLL<br /> PLLFEED = 0xaa;<br /> PLLFEED = 0x55;<br /> while((PLLSTAT & (1 << 10)) == 0); //判断pll锁定<br /> PLLCON = 3;<br /> PLLFEED = 0xaa;<br /> PLLFEED = 0x55;<br /> */ <br /><br /> return TRUE;<br />} <br /><br /> <br /><br /><br /> |
|