|
楼主 |
发表于 2013-1-26 21:31:29
|
显示全部楼层
void EraseAP()
{//擦除AP区域
//这里比较危险,非常容易自宫
//流程,从0擦到bootloader的开始值(保存INT0和RESET的中断值)。然后调用prog写回去
unsigned int i;
wdt_disable();
cli();//关闭中断
for(i=0;i<8;i++)
{//把原来的中断向量表读入内存
cache[i]=pgm_read_byte(i);
}
PORTA=0x00;
for(i=0;i<((BOOT_START-1)/SECTOR_SIZE);i++)
{
EFLASH_erase(i);//擦除扇区
}
/*EFLASH_write(0,0x0c,0x94);
EFLASH_write(2,0x76,0x0b);
EFLASH_write(4,0x0c,0xae);
EFLASH_write(6,0x76,0x0b);*/
for(i=0;i<8;i+=2)
{
EFLASH_write(i,cache[i],cache[i+1]);
}
//sei();//开中断
}
这段代码在我的bootloaderHID里面仅仅用于擦除APP区。bootloader仍然控制INT0和RESET向量 |
|