|
发表于 2009-9-26 16:01:21
|
显示全部楼层
【3楼】 wuliwa
1楼的高手,请问,那个复位命令怎么写啊?复位时,是不是也要把熔丝位改变,即从bootloader启动,升级完成,又要把熔丝位改回来?谢谢拉
--------------------------------------------------------
哦,开始每看清楚你的问题,复位命令是自己协议定义的。任何的通信数据,或者事件,你都可以把它当着复位命令,一旦数据或事件发生,调用一段看门狗饿死程序,就可以复位进入BootLoader区了(前提:熔丝位以设置从BootLoader区启动)。下面给一个饿死看门狗复位系统的宏,芯片为Mega168,步骤如下:
1. 关中断
2. 设置看门狗益处时间最短
3. 死循环,知道看门狗益处复位
// 注意,WDTSCR 地址为 0x60,在插入的汇编指令中,直接使用其地址
#define SYSTEM_RESET() do { \
asm("NOP"); \
asm("CLI"); \
asm("WDR"); \
asm("LDI R16, 0x18"); \
asm("STS 0x60, R16"); \
asm("LDI R16, 0x08"); \
asm("STS 0x60, R16"); \
asm("WDR"); \
asm("system_reset_loop:"); \
asm("NOP"); \
asm("RJMP system_reset_loop"); \
}while(0) |
|