<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 科伟奇电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=160 </link><title>nios&amp;nbsp;ii&amp;nbsp;定时器的问题</title><author>john</author><pubDate>2009/11/30 18:10:26</pubDate><description><![CDATA[<p>我用sopc builder 搭建了一个跑马灯的硬件系统，里边添加了定时器，可定时器的定时方面有点问题，哪位大哥帮忙分析一下，这是怎么回事?我在nios下的变成如下：</p>
<p>#include &quot;system.h&quot;<br />
#include &quot;sys/alt_irq.h&quot;<br />
#include &quot;alt_types.h&quot;<br />
#include &quot;altera_avalon_pio_regs.h&quot;<br />
#include &quot;altera_avalon_timer_regs.h&quot;</p>
<p>#define TIMER_0_BASE 0x00005000<br />
#define LED_BASE&nbsp; 0x00005020</p>
<p>&nbsp;alt_u8 n=0;<br />
&nbsp;<br />
static void timer_overflow(void* context, alt_u32 id)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IOWR(TIMER_0_BASE,0,0);//清to标志<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (*(alt_u8 *)context &amp; 0x80)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(alt_u8 *)context = 0x01;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(alt_u8 *)context = *(alt_u8 *)context &lt;&lt; 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IOWR(LED_BASE,0,*(alt_u8 *)context);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; return; <br />
}<br />
int main(void)<br />
{<br />
&nbsp;&nbsp; alt_u8 led = 0x01;<br />
&nbsp;&nbsp; IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE,0xFFFF);<br />
&nbsp;&nbsp; IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,0x0FFF);<br />
&nbsp;&nbsp; IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE, 0x07);//启动定时器<br />
&nbsp;&nbsp; alt_irq_register( TIMER_0_IRQ, (void*)&amp;led, timer_overflow);//注册定时器<br />
&nbsp;&nbsp; while(1);<br />
}</p>
<p>我添加的定时器默认是100ms中断一次，可我在这个程序里设置了定时器的初始值，差不多是5s多一点，可我下到板子上它还是按照100ms中断一次，请问这是怎么回事？</p>]]></description></item></channel></rss>