问题描述:采用ADUCM361内置看门狗进入中断服务函数后就MCU就死了。采用内置看门狗产生中断复位CPU是正常的!
下面为中断服务函数:
void WDog_Tmr_Int_Handler(void)
{
WdtClrInt(); // clear watchdog
timer interrupt
__DSB();
printf("WDog-------------------------------INT!rn");
[size=13.3333px]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-------------------------!rn");
delay(500000);
while(1){
//WdtClrInt();
printf("/*ADUCM360*/----%drn",i);
delay(500000);
printf("CPUID=%xrn",SCB->CPUID);
delay(500000);
printf("T3VAL=%xrn",pADI_WDT->T3VAL);
printf("T3STA=%xrn",pADI_WDT->T3STA);
delay(500000);
i++;
}
}
下面为延时函数:
void delay (long int length)
{
while (length >0)
length--;
}
下图为调试信息:打印了W说明已经进入了中断服务函数,后面的调试信息没打印,且MCU已死,不知是否有人碰到此问题?