我看到有些资料上<br />用pISR_WDT_AC97这个地址作为看门狗的中断服务地址。<br /> pISR_WDT_AC97=(unsigned)WatchDog_ISR;<br />但是我自己写的程序却没有产生中断,什么回事?<br />#define GLOBAL_CLK 1<br /><br />#include "def.h"<br />#include "2440addr.h"<br />#include "mmu.h"<br />#include "option.h"<br /><br />#define LED1 (1<<5) // rGPB[5] =1 ;<br />#define LED2 (1<<6) // rGPB[6] =1 ;<br />#define LED3 (1<<7) // rGPB[7] =1 ;<br />#define LED4 (1<<8) // rGPB[8] =1 ;<br /><br />static int index=0;<br /><br />void Delay1(int time)<br />{<br /> unsigned int i,j;<br /> for(i=1;i<100;i++)<br /> for(j=1;j<time;j++)<br /> ;<br />}<br /><br />void LightLED(void){<br /> <br /> if ( index==1 )<br /> rGPBDAT=rGPBDAT & ~LED1;<br /> <br /> if ( index==2 )<br /> rGPBDAT=rGPBDAT & ~LED2;<br /> <br /> if ( index==3)<br /> rGPBDAT=rGPBDAT & ~LED3;<br /> <br /> if ( index==4 )<br /> rGPBDAT=rGPBDAT & ~LED4;<br /> <br /> Delay1( 20000 ) ;<br /> <br /> rGPBDAT = 0xfff;<br />}<br />void __irq WatchDog_ISR(void){<br /> <br /> //清除中断<br /> ClearPending(BIT_WDT_AC97);<br /> ClearPending(BIT_SUB_WDT);<br /> if (index >4 ){<br /> index=1;<br /> }<br /> else{<br /> rINTMSK|=0x200;//mask watchdog timer interrupt<br /> index++; <br /> }<br /> <br /> LightLED(); <br />}<br /><br /><br />void EINT_Init(void){<br /> <br /> ClearPending(BIT_WDT_AC97);<br /> ClearPending(BIT_SUB_WDT);<br /> <br /> pISR_WDT_AC97=(unsigned)WatchDog_ISR;<br /> //Prescaler value=100; lock dividion factor=128;PCLK=67.5MHz<br /> //t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.0002<br /> //disable watchdog<br /> rWTCON=0x6418; //01100100 00 0 11 0 0 0<br /> //周期T=WTCNT*t_watchdog=3S<br /> rWTDAT=15000;<br /> rWTCNT=15000;<br /> <br /> rWTCON=0x643c; //01100100 00 1 11 1 0 0<br /> EnableIrq(BIT_WDT_AC97);<br /> EnableIrq(BIT_SUB_WDT);<br /> //清除watchdog中断屏蔽位<br /> rINTMOD&=0xFFFFFDFF;<br /> }<br /> <br />void Main(void){ <br /><br /> ChangeClockDivider(3,1);<br /> ChangeMPllValue(127,2,1);<br /> <br /> MMU_Init();<br /> <br /> EINT_Init();<br /> while (1); <br /> <br /> } |
|