瑞萨 看门狗
/*****************************************主函数main.c**************************/
//#include "globle.h"
#include "watchdog.h"
#include "main.h"
//设CPU时钟为40MHz,预分频选择128,下溢周期3FFFH,刷新接收周期为100%,则计算出看门狗溢出时间为5.24ms
//蜂鸣器响,延时一段时间后不想,系统进入死循环
//看门狗定时器每隔3ms喂狗一次,判断程序是否正常工作(如蜂鸣器一直不响,则正常;如蜂鸣器断断续续的响,说明看门狗复位了)
void main(void);
void delay(void);
void main(void)
{
WatchDog_Init(Watchdog_Count_Mode_Disable,
Watchdog_Prescaler_128,
Watchdog_Work_Mode_Reset); /*无效,128,复位*/
WatchDog_StartCount();
SOUND=BEEP_OFF;
delay();
SOUND=BEEP_ON;
while(1)
{
if(1==m_TskTiming.Tasks3ms) //3ms定时消息,喂狗
{
m_TskTiming.Tasks3ms=0;
Watchdog_Reset();
}
}
}
void delay(void)
{
if(m_u16BeepTimeCnt<1000)
m_u16BeepTimeCnt++;
}
/************************************main.h**********************************/
#define BEEP_ON 1 //蜂鸣器响
#define BEEP_OFF 0 //蜂鸣器不响
#define SOUND p0_6 //蜂鸣器声音
struct
{
u8 Tasks3ms:1;
u8 :1;
u8 :1;
u8 :1;
u8 :1;
u8 :1;
u8 :1;
u8 :1;
}m_TskTiming;
u16 m_u16BeepTimeCnt;
/**********************配置看门狗 watchdog.h**********************************/
#include "globle.h"
#define OFS *(u8 *)0xffff //内存地址
#define OFS2 *(u8 *)0xffdb
//计数源保护模式无效/有效
typedef enum
{
Watchdog_Count_Mode_Disable, //无效
Watchdog_Count_Mode_Enable //有效
}Watchdog_Count_Mode;
//看门狗定时器预分频器选择
typedef enum
{
Watchdog_Prescaler_16, //16分频
Watchdog_Prescaler_128 //128分频
}Watchdog_Prescaler;
//看门狗工作模式复位还是中断
typedef enum
{
Watchdog_Work_Mode_Interupt, //中断
Watchdog_Work_Mode_Reset //复位
}Watchdog_Work_Mode;
void Init_WatchDog(void);//默认看门狗初始化
void Watchdog_Reset(void);//喂狗
void WatchDog_Init(Watchdog_Count_Mode mode,Watchdog_Prescaler pre,Watchdog_Work_Mode sp);
void WatchDog_StartCount(void);//启动
/**********************************watchdog.c*********************************/
#include "globle.h"
#include "Watchdog.h"
void Init_WatchDog(void)
{
prc1 = 1;//Protect bit 1 保护寄存器 ,允许寄存器PM1写入
/* 复位模式Set watchdog timer RESET enable mode, not interrupt*/
pm1 = 0; //复位
pm12 = 1; //看门狗定时器复位
prc1 = 0;//Protect bit 1 禁止写入
/* Set prescaler to f/128 */
wdtc7 = 1; //预分频选择
/* Set external oscilator as clock source */
cspro = 0; //计数源保护模式无效
/* 初始化 Reset to initial value watch dog timer */
wdtr = 0;
wdtr = 0xFF;
/* 启动 start the watch dog timer */
wdts = 0;
}
void Watchdog_Reset(void)//喂狗,清看门狗
{
wdtr=0;
wdtr=0xFF;
}
void WatchDog_StartCount(void)
{
wdts = 0; //启动
}
void WatchDog_Init(Watchdog_Count_Mode mode,
Watchdog_Prescaler pre,
Watchdog_Work_Mode sp
)
{
OFS = 0xff; //复位后,看门狗处于停止状态
OFS2 = 0xff; //下溢期
prc1 = 1;//Protect disable
pm1 = 0;
pm12 = mode;
prc1 = 0;//Protect enalbe
wdtc7 = pre;
cspro = sp;
//WatchDog_StartCount();
Watchdog_Reset();
}
程序编译没有错误,但是工具栏上的connect不能点击连接,不知道哪出问题了?有程序中用delay函数延时时间怎么计算?上面的延时是随便写的 不知道延时精确时间
相关推荐
瑞萨e2studio(20)-独立看门狗IWDT
瑞萨e2studio(20)----独立看门狗IWDT CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/121424573 B站教学视频:https://www.bilibili.com/video/BV1Sh411L7YS/
瑞萨RX系列IWDT看门狗FIT驱动配置与嵌入式系统可靠性设计
在嵌入式系统开发中,看门狗定时器是保障系统可靠性的核心机制之一,它通过监控主程序运行状态,在系统“跑飞”或陷入死循环时执行复位或触发中断,从而恢复系统正常运行。其原理基于独立的硬件计时器,需要软件定期“喂狗”以重置计时,若超时未刷新则触发预设动作。这一机制对于工业控制、汽车电子等高可靠性场景具有重要技术价值,能有效防止因软件故障导致的系统宕机。FIT驱动作为硬件抽象层,封装了复杂的寄存器操作,提供了标准化的API接口,简化了开发流程并增强了代码可移植性。通过合理配置超时周期、刷新窗口和启动模式,开发者可以构
【瑞萨MCU经典应用】资料&例程_renesas_瑞萨_瑞萨中断_
瑞萨MCU经典的应用案例解析文档,包括8位定时器16位定时器的间隔定时器及PWM输出等各个功能使用的详细文档解析。还包括串口、AD、看门狗、中断的解析文档。
瑞萨e2studio(21)-看门狗WDT
瑞萨e2studio(21)----看门狗WDT CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/121492603 B站教学视频:https://www.bilibili.com/video/BV1fg4y1L75m/
用瑞萨R510Y47 开发的充电板程序
用瑞萨R510Y47 开发的充电板程序,带AD,带清狗,带按键


