看门狗对应的中断向量表地址是哪个?

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

ClearPending里面做了什么动作?

ClearPending里面做了什么动作?<br />看下INTMSK和INTSUBMSK清了吗?
 楼主| gavin_li 发表于 2009-7-6 10:28 | 显示全部楼层

没有跳到中断服务程序

其实我的问题是为什么用BIT_WDT_AC97和BIT_SUB_WDT做为watch_dog中断位使用?<br /><br />
fe_arm 发表于 2009-7-6 16:28 | 显示全部楼层

要看寄存器

BIT_WDT_AC97和BIT_SUB_WDT做为watch_dog中断位使用:你可以看一下寄存器中定义,再看这两个位的数值,应该能想明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

150

帖子

0

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