|
#define prescaler_value 249 //预分频值
#define clock_select 0 //1/16, 50M/250/16=12.5K
void WATCHDOG_Init(void)
{
pISR_WDT_AC97 = (unsigned)watchdog_isr; //建立WatchDog中断服务程序句柄
ClearPending(BIT_WDT_AC97); //初始化中断寄存器
ClearSubPending(BIT_SUB_WDT);
rWTCON=((prescaler_value<<8)|(clock_select<<3)); //设置预分频数和除数因数
//启动看门狗
//预分频值=249,时钟系数=1/16、PCLK=50M
//t_watchdog=1/[PCLK/(预分频值+1)/时钟系数]= 80us =0.08ms
rWTDAT=125; //125*80us=10ms中断一次
rWTCNT=125;
rWTCON|=(1<<5)|(1<<2); //使能WDT定时器和中断
rWTCON&=(~(1<<0)); //禁止看门狗定时器的复位功能,做定时器用
EnableIrq(BIT_WDT_AC97); //开中断
EnableSubIrq(BIT_SUB_WDT);
}
这里计算有错吗?为什么WTDAT设置成125,计算出来是10ms,但实际测量有12ms,操作一个IO口用示波器测量的
rWTCON=((prescaler_value<<8)|(clock_select<<3)); //设置预分频数和除数因数
//启动看门狗
//预分频值=249,时钟系数=1/16、PCLK=50M
//t_watchdog=1/[PCLK/(预分频值+1)/时钟系数]= 80us =0.08ms
rWTDAT=125; //125*80us=10ms中断一次
rWTCNT=125;
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|