134
1358
4106
中级工程师
992665c470d713c532.png (18.99 KB )
下载附件
2019-1-22 20:32 上传
使用特权
/************************* Copyright (c) 2014 SmartMcu Team ***************************** *项目名称:窗看门狗超时复位 *产生比较匹配中断时,进入喂狗10次 *超过10次后,就不喂狗,直接复位 *开发平台:SmartM-M4系列开发板 ****************************************************************************************/ #include "SmartM_M4.h" /*-------------------------------------------------------*/ /* 全局变量 */ /*-------------------------------------------------------*/ EXTERN_C INT32 IsDebugFifoEmpty(VOID); STATIC VOLATILE UINT8 g_unWWDTINTCounts; /*-------------------------------------------------------*/ /* 函数 */ /*-------------------------------------------------------*/ /**************************************** *函数名称:main *输 入:无 *输 出:无 *功 能:函数主体 ******************************************/ INT32 main(VOID) { PROTECT_REG ( /* 系统时钟初始化 */ SYS_Init(PLL_CLOCK); /* 使能窗口看门狗时钟 */ CLK_EnableModuleClock(WWDT_MODULE); /* 窗口看门狗时钟源为10KHz内部低速RC振荡器 */ CLK_SetModuleClock(WWDT_MODULE, CLK_CLKSEL1_WWDTSEL_LIRC, 0); /* 串口0波特率设置为115200bps */ UART0_Init(115200); ) printf("+------------------------------------------------+\n"); printf("| WWDT Compare March Interrupt Sample Code |\n"); printf("+------------------------------------------------+\n\n"); /* 检查芯片复位是否窗口看门狗复位 */ if(WWDT_GET_RESET_FLAG() == 1) { WWDT_CLEAR_RESET_FLAG(); printf("当前复位是窗口看门狗超时复位触发\r\n"); } /* 使能窗口看门狗嵌套向量中断控制位 */ NVIC_EnableIRQ(WWDT_IRQn); g_unWWDTINTCounts = 0; /* 设置窗口看门狗超时时间为3.2768 s,当计数值从0x3F计数到0时,则超时时间为3.2768s, 当前设置比较匹配时间为超时时间的一半,则比较匹配值=0x3F/2=32,并使能窗口看门狗中断 */ WWDT_Open(WWDT_PRESCALER_512, 32, TRUE); while(1); } /*-------------------------------------------------------*/ /* 中断服务函数 */ /*-------------------------------------------------------*/ /**************************************** *函数名称:WWDT_IRQHandler *输 入:无 *输 出:无 *功 能:窗口看门狗中断服务函数 ******************************************/ VOID WWDT_IRQHandler(VOID) { if(WWDT_GET_INT_FLAG() == 1) { /* 清除窗口看门狗比较匹配中断标志位 */ WWDT_CLEAR_INT_FLAG(); g_unWWDTINTCounts++; /* 若窗口看门狗比较匹配超过3次时,则不进行喂狗 */ if(g_unWWDTINTCounts < 3) { /* 重载看门狗计数值为0x3F */ WWDT_RELOAD_COUNTER(); } printf("WWDT compare match interrupt occurred. (%d)\n", g_unWWDTINTCounts); } }
296
4894
1万
资深工程师
131
2604
7930
高级工程师
113
1483
4459
195
3117
9410
技术达人
142
1290
3888
175
3382
发表回复 本版积分规则 回帖后跳转到最后一页
人才类勋章
发帖类勋章
等级类勋章
时间类勋章
2
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号