使用007配置看门狗中断时,发现进了中断没有翻转IO口,加了一个延迟之后就正常了。
void WDT_IRQHandler(void) interrupt WDT_IRQn
{
// 进入中断设置IP,不可删除
__IRQnIPnPush(WDT_IRQn);
// ---------------- 用户函数处理 -------------------
if(WDT_CON & WDT_OVER_FLAG(0x1)) {
WDT_KEY = WDT_KEY_VAL(0xAA); // feed wdt
P00 = ~P00;
delay(1); //加个延迟稳定
}
// 退出中断设置IP,不可删除
__IRQnIPnPop(WDT_IRQn);
}
void system_init(void)
{
u8 i;
CLK_ACON0 |= CLK_AIP_HRC_EN(0x1); // 使能 HIRC
__HIRC_DELAY; // 该延迟不可删除,等待HIRC稳定并能保证烧录稳定性
FLASH_TIMEREG0 = 0x55;
FLASH_TIMEREG1 = 0x58; // FLASH访问速度 = 系统时钟/3
CLK_CON2 = 0x50 | CLK_SYS_DIV(0x0); // 系统时钟不分频
CLK_CON0 = CLK_SYSCLK_SEL(0x3); // 系统时钟选择 HIRC48M
CLK_CON6 = CLK_FLASH_DIV(47); // FLASH烧写时钟48分频:1M
// 初始化寄存器
// FOUT_S00 ~ FOUT_SEL
for(i=0x18; i<=0x32; i++) {
*(unsigned char volatile xdata *)(IOFUNC_BASE + i) = 0x0;
}
__LOADER_CHIP_TRIM; // 装载芯片各个模块校准值
}
void main()
{
system_init();
__EnableIRQ(WDT_IRQn); // 使能WDT中断
IE_EA = 1; // 使能总中断
WDT_KEY = WDT_KEY_VAL(0x5A); // 使能中断
WDT_KEY = WDT_KEY_VAL(0x55); // 允许访问WDT
WDT_CON = WDT_PRESCALE_SEL(0x07); // 配置1s(设置128分频,看门狗时间=(1/32K)*256*分频系数)
WDT_KEY = WDT_KEY_VAL(0xCC); // 使能 WDT
}
|