这是WWdg代码:
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG时钟使能
WWDG_SetPrescaler(fprer);////设置IWDG预分频值
WWDG_SetWindowValue(wr);//设置窗口值
WWDG_Enable(tr); //使能看门狗 , 设置 counter .
WWDG_ClearFlag();
WWDG_NVIC_Init();//初始化窗口看门狗 NVIC
WWDG_EnableIT(); //开启窗口看门狗中断
}
//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt)
{
WWDG_Enable(cnt);
}
//窗口看门狗中断服务程序
void WWDG_NVIC_Init()
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占2,子优先级3,组2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //抢占2,子优先级3,组2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}
WWDG_Init(0x7f,0x5f,WWDG_Prescaler_8);//初始化时调用
//中断函数
void WWDG_IRQHandler(void)
{
u8 tr,wr;
OS_CPU_SR cpu_sr=0;
OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR */
OSIntNesting++;
OS_EXIT_CRITICAL();
wr=WWDG->CFR&0x7f;
tr=WWDG->CR&0x7f;
if(tr<wr)WWDG_SetCounter(0x7F);; //只有TR小于WR才能喂狗 在窗口内
WWDG_ClearFlag();
OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
}
在任务初始化后调用:WWDG_Init(0x7f,0x5f,WWDG_Prescaler_8);//初始化时调用
程序一上电就会不断复位,请问原子哥,在哪里更改一下,可以让ucos-ii 中加入 Wwdg不会复位?
|