高级会员

- 积分
- 925
- 金钱
- 925
- 注册时间
- 2014-9-29
- 在线时间
- 276 小时
|
5金钱
在寄存器版本的窗口看门狗初始化函数中,是先设置好窗口值和计数值,然后再启用看门狗的。
在这里可否理解为设置好窗口值和计数值时一开始就进行了比较,导致比较结果=1,然后启用看门狗的语句 WWDG->CR |= 1<<7; //启用看门狗 理解为写入了WWDG_CR ,再有此时 WWGA 也为 1 ,从而产生了复位。
然而实验实际上并不是这样的,是我理解错误了还是怎样的?
初始化函数如下:
//保存WWDG计数器的设置值,默认为最大.
u8 WWDG_CNT=0x7f;
//初始化窗口看门狗
//tr:T[6:0],计数器值
//wr:W[6:0],窗口值
//fprer:分频系数(WDGTB),仅最低2位有效
//Fwwdg=PCLK1/(4096*2^fprer).
void WWDG_Init(u8 tr,u8 wr,u8 fprer)
{
RCC->APB1ENR|=1<<11; //使能wwdg时钟
WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT.
WWDG->CFR|=fprer<<7; //PCLK1/4096再除2^fprer
WWDG->CFR&=0XFF80;
WWDG->CFR|=wr; //设定窗口值
WWDG->CR|=WWDG_CNT; //设定计数器值
WWDG->CR|=1<<7; //开启看门狗
MY_NVIC_Init(2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2
WWDG->SR=0X00; //清除提前唤醒中断标志位
WWDG->CFR|=1<<9; //使能提前唤醒中断
}
|
|