已回答假定已回答

请教关于ADuCM361内置看门狗中断服务函数调试问题!

xiahongmin 在 2015-12-14 詢問的問題
最後回覆由hpkamen於2015-12-17提供

问题描述:采用ADUCM361内置看门狗进入中断服务函数后就MCU就死了。采用内置看门狗产生中断复位CPU是正常的!

 

下面为中断服务函数:

void WDog_Tmr_Int_Handler(void)

{

  WdtClrInt(); // clear watchdog timer interrupt

  __DSB();

  printf("WDog-------------------------------INT!\r\n");

  delay(500000);

  //__DSB();

}

void Sys_Init(void)

{

   NVIC_EnableIRQ(WDT_IRQn);

   WdtCfg(T3CON_PRE_DIV16,T3CON_IRQ_EN,T3CON_PD_DIS);

   WdtLd(0x1000);

  WdtGo(T3CON_ENABLE_DIS);

ClkDis(CLKDIS_DISSPI0CLK|CLKDIS_DISSPI1CLK|CLKDIS_DISI2CCLK|CLKDIS_DISPWMCLK|CLKDIS_DIST0CLK|CLKDIS_DIST1CLK|CLKDIS_DISDMACLK); // Only enable clock to used blocks   

  ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN_DIS,CLK_UCLKCG);

  //ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN,CLK_UCLKCG);

   ClkSel(CLK_CD7,CLK_CD7,CLK_CD0,CLK_CD7);  

}

 

下面为主函数:

int main (void)   

  int i=1;

  Sys_Init();

  uart_init(9600);

  NVIC_EnableIRQ(UART_IRQn);

  printf("Star-------------------------!\r\n");

  delay(500000);

  while(1){

  //WdtClrInt();

  printf("/*ADUCM360*/----%d\r\n",i);

  delay(500000);

  printf("CPUID=%x\r\n",SCB->CPUID);

  delay(500000);

  printf("T3VAL=%x\r\n",pADI_WDT->T3VAL);

  printf("T3STA=%x\r\n",pADI_WDT->T3STA);

  delay(500000);

  i++;

 

   }

}

 

下面为延时函数:

void delay (long int length)

{

   while (length >0)

      length--;

}

 

下图为调试信息:打印了W说明已经进入了中断服务函数,后面的调试信息没打印,且MCU已死,不知是否有人碰到此问题?

QQ图片20151214161913.png

結果