Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3433534
  • 博文数量: 754
  • 博客积分: 10132
  • 博客等级: 上将
  • 技术积分: 7780
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-14 23:36
文章分类

全部博文(754)

文章存档

2012年(3)

2011年(39)

2010年(66)

2009年(167)

2008年(479)

我的朋友

分类: LINUX

2008-04-21 01:20:09

设计流程如下:
l         设置看门狗中断操作,包括全局中断和看门狗中断的使能,看门狗中断向量的定义。
l         对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子、分频器的分频值、中断使能和复位使能等。
l         对看门狗数据寄存器(WTDAT)和看门狗技术寄存器(WTCNT)的设置。
l         启动看门狗定时器。
int Main(void)
{    
       SetClockDivider(1, 1);//FLCK:HCLK:PCLK=1:2:4
       SetSysFclk(DFT_FCLK_VAL);//Fout=200MHZ
       Port_Init();
             
       Uart_Select(0);
       Uart_Init(0, UART_BAUD);
       Uart_Printf("watchdog test is beginning\n");
       watchdog_test();
}
 
/***看门狗测试函数***/
void watchdog_test(void)
{
  //initialize interrupt registers
  ClearPending(BIT_WDT);
 
  //建立WatchDog中断
  pISR_WDT=(unsigned)watchdog_int;
 
  //Prescaler value=100/clock division factor=128
  //t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856
  rWTCON=((100<<8)|(3<<3));//disable watchdog
  //看门狗时钟周期T=WTCNT*t_watchdog=4S
  //看门狗喂狗
  rWTDAT=15000;
  rWTCNT=15000;
  rWTCON|=((1<<5)|(1<<2));//enable Watchdog timer ang watchdog interrupt
  //清除watchdog中断屏蔽位
  rINTMOD&=0xFFFFFDFF;
  while(f_ucSencondNo<11);
 }
/***看门狗中断处理函数***/
void watchdog_int(void)
{
  //清除中断
  ClearPending(BIT_WDT);
  f_ucSencondNo++;
  if(f_ucSencondNo<<11)
  Uart_Printf("%ds",f_ucSencondNo);
  else
  {
    rINTMSK|=0x200;//mask watchdog timer interrupt
    Uart_Printf("\nOK");
  }
 
}
 
阅读(880) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~