[ZLG-ARM] 关于2138的T0的问题,求教于各位

[复制链接]
 楼主| northerns 发表于 2007-8-7 19:27 | 显示全部楼层 |阅读模式
用中断方式和查询方式如下:<br />在中断方式出现了问题:程序返回main的开头从新执行,可能和“T0MR0=Fpclk/2;//1uS”和“VICIntEnable=(1&lt&lt0x04);//使能定时器0”这两<br /><br />句有关,可是百思不得其解<br /><br />中断方式:<br /><br /><br />/*********定时器中断函数***************************************************/<br />void&nbsp;__irq&nbsp;interrupt_timer0(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T0IR=0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除中断标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr=0x00;&nbsp;&nbsp;&nbsp;//通知VIC中断处理结束<br />}<br /><br /><br />void&nbsp;initialize_t0(void)<br />{<br />&nbsp;&nbsp;&nbsp;T0TC=0;<br />&nbsp;&nbsp;&nbsp;T0PR=0;<br />&nbsp;&nbsp;&nbsp;T0MCR=0x0003;<br />&nbsp;&nbsp;&nbsp;T0MR0=Fpclk/2;//1uS<br />&nbsp;&nbsp;&nbsp;T0TCR=0x00;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;//IRQEnable();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//IRQ中断使能&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;/*设定定时器0中断*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect=0x00;//所有中断通道设置为IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl0=0x20|0x40;//设置定时器0中断通道分配最高优先级<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr0=(uint32)interrupt_timer0;//设置中断服务程序地址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable=(1&lt&lt0x04);//使能定时器0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />int&nbsp;main(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEER&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialize_t0();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T0TCR=0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(time&gt1000)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />return(0);<br />}<br /><br />×××××××××××××××××××××××××××××××××××××××××××××××××××8<br />查询方式:<br />int&nbsp;main(void)<br />{<br /><br />&nbsp;&nbsp;&nbsp;IO0CLR=BEEP;<br />&nbsp;&nbsp;&nbsp;PINSEL0=0x00000000;<br />&nbsp;&nbsp;&nbsp;IO0DIR=BEEP;<br />&nbsp;&nbsp;&nbsp;T0TC=0;<br />&nbsp;&nbsp;&nbsp;T0PR=0;<br />&nbsp;&nbsp;&nbsp;T0MCR=0x03;<br />&nbsp;&nbsp;&nbsp;T0MR0=3333;//1uS<br />&nbsp;&nbsp;&nbsp;T0TCR=0x01;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((T0IR&0x01)==0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T0IR=0x01;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((i%2)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{IO1SET=BEEP;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=BEEP;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br /><br /><br />return(0);<br /><br /><br /><br /><br />}
 楼主| northerns 发表于 2007-8-7 20:15 | 显示全部楼层

各位给点意见啊,在线等,急啊!!!!

各位给点意见啊,在线等,急啊!!!!
wzj4392234 发表于 2007-8-8 14:51 | 显示全部楼层

怎么没有开总中断开关

&nbsp;//IRQEnable();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//IRQ中断使能<br />不是没有开总中断开关了吗?
 楼主| northerns 发表于 2007-8-9 15:04 | 显示全部楼层

查到原因了,呵呵,粗心害死人啊!!!

VICVectCntl0=0x20|0x40;//设置定时器0中断通道分配最高优先级<br />应该是<br />VICVectCntl0=0x20|0x04;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

33

帖子

0

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