[电路设计] WDT复位不能启动

[复制链接]
 楼主| ltbytyn 发表于 2011-11-8 12:57 | 显示全部楼层 |阅读模式
助学板NUC120看门狗中断正常,但是复位启动怎么复位不了。使能WTCR.WTRE,主程序不喂狗,计数器溢出后按说应该重新启动,可是结果芯片没有复位过来,停止工作了没有我说不准,至少没有执行我的程序。我试了好几天没进展。同时我试了交流群里面的几个WDT例程试过了也不行,结果一样。
      附上试验例程求解,是硬件问题,还是我试验方法不对,还是程序问题(这种可能性比较小)。
 楼主| ltbytyn 发表于 2011-11-8 13:00 | 显示全部楼层
本帖最后由 ltbytyn 于 2011-11-8 13:02 编辑

#include <stdio.h>
#include "NUC1xx.h"
static uint32_t WDTCOUN=0;

void Delay(uint32_t delayCnt)
{
    while(delayCnt--)
    {
        __NOP();
        __NOP();
    }
}
int32_t main (void)
{
        
        UNLOCKREG();
        SYSCLK->;PWRCON.OSC10K_EN = 1;//Enable 32Khz for RTC clock source
        SYSCLK->;PWRCON.XTL12M_EN = 1;
        SYSCLK->CLKSEL0.HCLK_S = 0;        //HCLK_S   选外部4——24MHz
        
        LOCKREG();

        GPIOA->;PMD.PMD2=1;
        GPIOA->;PMD.PMD3=1;
        Delay(1000);
        GPIOA->DOUT=0x04;  
        Delay(1000000);        
        GPIOA->DOUT=0x08;
        Delay(1000000);         
        GPIOA->DOUT=0x04;  
        Delay(1000000);        
        GPIOA->DOUT=0x08;
        Delay(1000000);        
        GPIOA->DOUT=0x04;  
        Delay(1000000);        
        GPIOA->DOUT=0x08;                        
        outpw(&WDT->WTCR ,0 );                //Disable WDT
                                             
        UNLOCKREG();               
        /* Step 1. Enable and Select WDT clock source */         
        SYSCLK->CLKSEL1.WDT_S =3;  //Select 10Khz for WDT clock source
        SYSCLK->APBCLK.WDT_EN =1;   //Enable WDT clock source
        /* Step 2. Select Timeout Interval */
        WDT->WTCR.WTIS=2;                                   
        /* Step 3. Enable Watchdog Timer Reset function */
        WDT->WTCR.WTRE = 1;
        /* Step 4. Enable WDT interrupt */
        WDT->WTCR.WTR = 1;
        /* Step 5. Enable WDT module */
        WDT->WTCR.WTE = 1;                //Enable WDT
        LOCKREG();
        while(1);
}
hotpower 发表于 2011-11-8 13:17 | 显示全部楼层
内置看门狗一般应该和板子无关,新唐有例程看看。看门狗一般有中断和复位两种。
weshiluwei6 发表于 2011-11-8 14:46 | 显示全部楼层
大叔说的对啊
 楼主| ltbytyn 发表于 2011-11-8 17:12 | 显示全部楼层
例程看了,没有涉及WDT复位的例程。确实不能复位,无解
hotpower 发表于 2011-11-8 18:59 | 显示全部楼层
到牛卧堂问问酒鬼,我记得自己做看门狗试验时也不能复位,后来搞别的就没注意,估计是设置的问题。
plc_avr 发表于 2011-11-9 06:24 | 显示全部楼层
我今天有空时看一下,我前两天试了一下,好象可以的啊。
plc_avr 发表于 2011-11-9 08:15 | 显示全部楼层
你试下这个

  1. DrvGPIO_Open(E_GPA, 2, E_IO_OUTPUT);         //  设置GPA2端口为输出模式
  2. DrvGPIO_Open(E_GPA, 3, E_IO_OUTPUT);         //  设置GPA3端口为输出模式
  3. DrvGPIO_Open(E_GPA, 4, E_IO_OUTPUT);         //  设置GPA4端口为输出模式
  4. DrvGPIO_Open(E_GPA, 5, E_IO_OUTPUT);         //  设置GPA5端口为输出模式
  5.     DrvSYS_Delay(500000);

  6. //看门狗初始化
  7. UNLOCKREG();
  8.     DrvSYS_SelectIPClockSource(E_SYS_WDT_CLKSRC, 0);  
  9.     DrvWDT_Open (E_WDT_LEVEL7);
  10.     DrvWDT_Ioctl (E_WDT_IOC_START_TIMER, 0);  
  11.     DrvWDT_Ioctl (E_WDT_IOC_ENABLE_RESET_FUNC, 0);  
  12.     LOCKREG();

  13.     while(1){
  14. DrvGPIO_ClrBit(E_GPA, 2);         //  LED1点亮
  15.        DrvSYS_Delay(50000);
  16.      DrvGPIO_SetBit(E_GPA, 2);
  17.     DrvGPIO_ClrBit(E_GPA, 3);         //  LED2点亮
  18.        DrvSYS_Delay(50000);
  19.     DrvGPIO_SetBit(E_GPA, 3);
  20.     DrvGPIO_ClrBit(E_GPA, 4);         //  LED3点亮
  21.        DrvSYS_Delay(50000);
  22.     DrvGPIO_SetBit(E_GPA, 4);
  23.     DrvGPIO_ClrBit(E_GPA, 5);         //  LED4点亮
  24.        DrvSYS_Delay(50000);
  25.     DrvGPIO_SetBit(E_GPA, 5);
  26. }
plc_avr 发表于 2011-11-9 08:17 | 显示全部楼层
如果注销掉看门狗初始化部分,将会看到助学板上面的4个LED实现流水效果,开了看门狗,不喂狗,则只有第一个灯闪,因为在第一个灯亮过后,延时的时候,看门狗已经实现复位了。
plc_avr 发表于 2011-11-9 08:19 | 显示全部楼层
你是开了看门狗中断,没见你看门狗中断部分的代码啊。
hotpower 发表于 2011-11-9 08:34 | 显示全部楼层
感觉不应该打开看门狗中断,使能看门狗。由于库函数有回调,不加就什么也不操作
plc_avr 发表于 2011-11-9 09:48 | 显示全部楼层
是的,开了中断,但是没有入口,程序不知运行到哪了。
plc_avr 发表于 2011-11-9 09:50 | 显示全部楼层
一般不应怀疑硬件,而是先要怀疑自已的软件对不对。软件部分可能占99.99%的可能出错。
 楼主| ltbytyn 发表于 2011-11-9 12:38 | 显示全部楼层
谢谢大叔、烈火,我回去试试,不过在家试的时候没有开WDT中断也不行
 楼主| ltbytyn 发表于 2011-11-9 12:40 | 显示全部楼层
在家试的时候,我几乎把能考虑到的都试了
marksu09 发表于 2012-5-30 10:56 | 显示全部楼层
额。。。。我也碰到这问题了,不知道为什么。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

154

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部