本帖最后由 芯圣电子官方QQ 于 2023-7-20 14:53 编辑
WDT模块使用说明
打开工程“SYD8821_SDK\Source Code\SYD8821\wdt\Keil”可以看到wdt的主函数如下:
void wdt_callback(void)
{
dbg_printf("wdt_callback\r\n");
}
int main()
{
__disable_irq();
//GPO
pad_mux_write(LED4, 0);
pad_mux_write(LED5, 0);
pad_mux_write(LED6, 0);
pad_mux_write(LED7, 0);
gpo_config(LED4,1);
gpo_config(LED5,1);
gpo_config(LED6,1);
gpo_config(LED7,1);
//GPI
pad_mux_write(KEY1, 0);
pad_mux_write(KEY2, 0);
pad_mux_write(KEY3, 0);
gpi_config(KEY1, PULL_UP);
gpi_config(KEY2, PULL_UP);
gpi_config(KEY3, PULL_UP);
//uart 0
pad_mux_write(20, 7);
pad_mux_write(21, 7);
dbg_init();
dbg_printf("SYD8821 WDT TEST\r\n");
// Select External XO
sys_32k_clock_set(SYSTEM_32K_CLOCK_XO);
wdt_set_crv(32768); //1S
wdt_set_RR_enable(WDT_RR_ALL); //使能RR喂狗机制
//wdt_set_reset_type(0);
wdt_set_reset_type(WDT_RESET_ALL); //设置看门狗定时器到来的行为是复位所有模块
wdt_start(0); //使能WDT,这里在使能的时候不喂狗
// wdt_set_interrupt_callback(wdt_callback); //开启WDT中断,注意:这里WDT的中断模式和复位模式只能够二选一,
// wdt_int_enable(); //也就是说要产生中断必须设置复位类型为0wdt_set_reset_type(0);
delay_ms(100); //因为进入while(1)后就会立即喂狗,但是要求开启wdt后要延迟一段时间才能够喂狗 所以这里延时一段时间(100us以上)
__enable_irq();
while(1)
{
gpo_toggle(LED4);
if(gpi_get_val(KEY1)){
wdt_reset_counter(); //喂狗
gpo_toggle(LED5);
}
if(!gpi_get_val(KEY2)){
wdt_stop(); //关掉看门狗
gpo_toggle(LED6);
}
delay_ms(100);
}
}
|