[ZLG-ARM] time1定时器中断调试问题

[复制链接]
2481|2
 楼主| houn 发表于 2008-8-7 20:08 | 显示全部楼层 |阅读模式
我用的周立功的ARM&nbsp;Executable&nbsp;Image&nbsp;for&nbsp;plc2200工程模板,开发板是zlg2210<br />#include&nbsp;&quot;config.h&quot;<br /><br />#define&nbsp;BEEPCON&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//控制喇叭发音<br />uint8&nbsp;flag&nbsp;=&nbsp;0;<br />//初始化定时器1<br />void&nbsp;Time1_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;T1TC&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;T1TCR&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//禁止定时器1使能<br />&nbsp;&nbsp;&nbsp;&nbsp;T1PR&nbsp;=&nbsp;Fpclk&nbsp;/&nbsp;1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;T1MCR&nbsp;=&nbsp;0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;T1MR0&nbsp;=&nbsp;5000;<br />&nbsp;&nbsp;&nbsp;&nbsp;T1TCR&nbsp;=&nbsp;0x01;<br />}<br />//初始化GPIO<br />void&nbsp;GPIO_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;0x0A000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;=&nbsp;BEEPCON;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;BEEPCON;<br />}<br />//定时器1中断程序<br />void&nbsp;__irq&nbsp;Time1_IRQ(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;T1TCR&nbsp;=&nbsp;0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(flag&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;BEEPCON;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;BEEPCON;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;<br />}<br />//设置定时器1中断处理初始化<br />void&nbsp;Int_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;5;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl0&nbsp;=&nbsp;(uint32)Time1_IRQ;<br />}<br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;add&nbsp;user&nbsp;source&nbsp;code&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIO_Init();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Time1_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;Int_Init();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />调试时候<br />调试老是在<br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;add&nbsp;user&nbsp;source&nbsp;code&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIO_Init();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Time1_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;Int_Init();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />中<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIO_Init();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Time1_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;Int_Init();<br />之间反复运行,while()走不到,我不知道问题出在那里,请周工看看<br />文件在附件里,请帮忙看看是怎么回事<br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20079/2007922202325731.rar'>https://bbs.21ic.com/upfiles/img/20079/2007922202325731.rar</a>
zlgarm 发表于 2008-8-8 19:06 | 显示全部楼层

楼主

您好!<br />&nbsp;&nbsp;建议在main函数里逐一将<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIO_Init();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Time1_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;Int_Init();<br />&nbsp;&nbsp;函数注释掉,观察是否能跑到while(1)。此为排除法。<br />&nbsp;&nbsp;若是排除法也不行,请检查代码是否确实下载到了开发板上,以及代码优化是否关闭了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;ltt&nbsp;
 楼主| houn 发表于 2008-8-11 08:32 | 显示全部楼层

问题的解决

问题如下:<br />1.在Int_Init()函数中,缺少VICVectCntl0&nbsp;=&nbsp;0x25;没有为中断控制器设置中断源通道号.<br />2.在中断处理程序中,中断程序处理完毕后没有中断复位即T1IR&nbsp;=&nbsp;1;,导致定时器中断处理结束后不能继续响应中断,主要问题就是这两条.反映平时基础不牢固,不扎实.<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

21

帖子

0

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