Files
stair56e_uart/component/boot2/bsp/bsp_wdog.c
T
2026-08-05 19:07:52 +08:00

91 lines
3.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "Includes.h"
typedef unsigned int uint32_t;
#define __write_hw_reg32(reg,val) ((*reg) = (val))
#define CPR_CTLAPBCLKEN_GRCTL ((volatile unsigned *)(0x40000000 + 0x070))
#define CPR_RSTCTL_CTLAPB_SW ((volatile unsigned *)(0x40000000 + 0x100))
#define CPR_RSTCTL_WDTRST_MASK ((volatile unsigned *)(0x40000000 + 0x114))
#define WDT_CR ((volatile unsigned *)(0x40004000 + 0x00))
#define WDT_TORR ((volatile unsigned *)(0x40004000 + 0x04))
#define WDT_CRR ((volatile unsigned *)(0x40004000 + 0x0C))
/* ---------------------------------------------------------------------------------------------------
//看门狗计数器对应的初值
(0x0)00000x FFFF
(0x1)00010x 1FFFF
(0x2)00100x 3FFFF
(0x3)00110x 7FFFF
(0x4)01000x FFFFF
(0x5)01010x 1FFFFF
(0x6)01100x 3FFFFF
(0x7)01110x 7FFFFF
(0x8)10000x FFFFFF----约2S
(0x9)10010x 1FFFFFF----约5S
(0xA)10100x 3FFFFFF----约10S
(0xB)10110x 7FFFFFF----约20S
(0xC)11000x FFFFFFF
(0xD)11010x1FFFFFFF
(0xE)11100x3FFFFFFF
(0xF)11110x7FFFFFFF
----------------------------------------------------------------------------------------------------*/
/* ---------------------------------------------------------------------------------------------------
- 函数名称: xc_wdog_init
- 函数功能: 初始化看门狗
- 函数形参:看门狗计数器重装值
- 创建日期: 2019-04-22
----------------------------------------------------------------------------------------------------*/
void xc_wdog_init(uint32_t counter_value)
{
__write_hw_reg32(CPR_CTLAPBCLKEN_GRCTL,0x10001); //WDT_PCLK 时钟使能
__write_hw_reg32(CPR_RSTCTL_CTLAPB_SW,0x40000); //WDT 模块软复位
__write_hw_reg32(CPR_RSTCTL_CTLAPB_SW,0x40004);
__write_hw_reg32(CPR_RSTCTL_WDTRST_MASK,0x20);//屏蔽 WDT 引起的 M0 的软复位,不屏蔽 WDT 引起的系统的软复位
__write_hw_reg32(WDT_CR,0x7);// WDT 使能 ,M0 复位信号,维持4个 pclk 时钟周期,工作模式 0,直接产生复位信号送给 CPR
__write_hw_reg32(WDT_TORR,counter_value);
__write_hw_reg32(WDT_CRR,0x76); //重启计数器
}
/* ---------------------------------------------------------------------------------------------------
- 函数名称: xc_wdog_feed
- 函数功能: 喂看门狗
- 函数形参:无
- 创建日期: 2019-04-22
----------------------------------------------------------------------------------------------------*/
void xc_wdog_feed(void)
{
__write_hw_reg32(WDT_CRR,0x76); //重启计数器
}
extern void test_wdog(void)
{
uint8_t count=0;
xc_wdog_init(0xA);
//__write_hw_reg32(CPR_RSTCTL_WDTRST_MASK,0x3);//屏蔽看门狗复位
printf("wdog reset\n ");
while(1)
{
printf("WDT_CCVR=%d\n",*WDT_CCVR);
printf("WDT_STAT=%d\n",*WDT_STAT);
for(uint32_t i=0; i<0x120000; i++);
for(uint32_t i=0; i<0x120000; i++);
for(uint32_t i=0; i<0x120000; i++);
//不喂狗时可以测试几秒钟看门狗复位
if(5==count)
{
//xc_wdog_init(0xA);
//xc_wdog_feed();//此处不喂狗会引起系统复位
count=0;
}
else
{
count++;
}
}
}