瑞萨 看门狗

baichenbo83 2013-01-12 10:53:46
现有R8C/L36C些列的单片机,引脚p0_6连接蜂鸣器电路
/*****************************************主函数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函数延时时间怎么计算?上面的延时是随便写的 不知道延时精确时间
...全文
810 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
JackyRao 2013-01-15
  • 打赏
  • 举报
回复
检查电脑和芯片的连接,必要时候重新安装环境
AnYidan 2013-01-15
  • 打赏
  • 举报
回复
看看 manual
漫步者、 2013-01-15
  • 打赏
  • 举报
回复
SKATE11 2013-01-12
  • 打赏
  • 举报
回复
还以为是位足球迷呢

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧