nios2 无法进入中断

[复制链接]
2448|2
 楼主| cloud21 发表于 2008-11-4 17:19 | 显示全部楼层 |阅读模式
数码管的加减计数都是正常的<br />alt_irq_register的返回值为0,正常。并且在alt_irq全局变量中发现timer0已经被分配了中断向量irq1。<br />现在的问题是中断服务#include&nbsp;&quot;time.h&quot;<br />#include&nbsp;&quot;unistd.h&quot;<br />#include&nbsp;&quot;altera_avalon_timer_regs.h&quot;<br />#include&nbsp;&quot;sys/alt_irq.h&quot;<br />#include&nbsp;&quot;stdio.h&quot;<br />#include&nbsp;&quot;stddef.h&quot;<br />#include&nbsp;&quot;system.h&quot;<br />#include&nbsp;&quot;altera_avalon_pio_regs.h&quot;<br />#include&nbsp;&quot;alt_types.h&quot;<br />static&nbsp;unsigned&nbsp;int&nbsp;TH1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_TH1=0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_TL1=0xea;<br />static&nbsp;unsigned&nbsp;char&nbsp;PIN_MSC=1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;isr(void&nbsp;*&nbsp;context,&nbsp;alt_u32&nbsp;id)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(1);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PIN_MSC=~PIN_MSC;<br />&nbsp;&nbsp;&nbsp;&nbsp;*(unsigned&nbsp;int&nbsp;*)BEEP_BASE&nbsp;=PIN_MSC;<br />&nbsp;&nbsp;&nbsp;&nbsp;TH1=temp_TH1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TH1=(TH1&lt&lt8&nbsp;|&nbsp;temp_TL1)*8;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE,TH1);<br />&nbsp;&nbsp;&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,&nbsp;ALTERA_AVALON_TIMER_CONTROL_ITO_MSK|ALTERA_AVALON_TIMER_CONTROL_START_MSK&nbsp;&nbsp;<br />);&nbsp;<br />}&nbsp;&nbsp;&nbsp;<br />#define&nbsp;data&nbsp;*(unsigned&nbsp;int&nbsp;*)SEGDATA_BASE<br />#define&nbsp;com&nbsp;*(unsigned&nbsp;int&nbsp;*)SEGCOM_BASE<br />unsigned&nbsp;char&nbsp;chcode(unsigned&nbsp;char&nbsp;x)<br />{<br />unsigned&nbsp;char&nbsp;da=&quot;0&quot;;<br />switch(x)<br />{<br />case&nbsp;0x00:&nbsp;da=&quot;0x40&quot;;break;//0<br />case&nbsp;0x01:&nbsp;da=&quot;0x79&quot;;break;//1<br />case&nbsp;0x02:&nbsp;da=&quot;0x24&quot;;break;//2<br />case&nbsp;0x03:&nbsp;da=&quot;0x30&quot;;break;//3<br />case&nbsp;0x04:&nbsp;da=&quot;0x19&quot;;break;//4<br />case&nbsp;0x05:&nbsp;da=&quot;0x12&quot;;break;//5<br />case&nbsp;0x06:&nbsp;da=&quot;0x03&quot;;break;//6<br />case&nbsp;0x07:&nbsp;da=&quot;0x78&quot;;break;//7<br />case&nbsp;0x08:&nbsp;da=&quot;0x00&quot;;break;//8<br />case&nbsp;0x09:&nbsp;da=&quot;0x10&quot;;break;//9<br />case&nbsp;0x0a:&nbsp;da=&quot;0x08&quot;;break;//a<br />case&nbsp;0x0b:&nbsp;da=&quot;0x03&quot;;break;//b<br />case&nbsp;0x0c:&nbsp;da=&quot;0x27&quot;;break;//c<br />case&nbsp;0x0d:&nbsp;da=&quot;0x21&quot;;break;//d<br />case&nbsp;0x0e:&nbsp;da=&quot;0x06&quot;;break;//e<br />case&nbsp;0x0f:&nbsp;da=&quot;0x0e&quot;;break;//f<br />}<br />return&nbsp;da;<br />}<br /><br />int&nbsp;main&nbsp;(void)&nbsp;__attribute__&nbsp;((weak,&nbsp;alias&nbsp;(&quot;alt_main&quot;)));<br /><br />int&nbsp;alt_main&nbsp;(void)<br />{<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;alt_u8&nbsp;led&nbsp;=&nbsp;0x2;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;k;<br />unsigned&nbsp;char&nbsp;a=&quot;0&quot;,b=0xff,c,d,e,f;<br />unsigned&nbsp;int&nbsp;i,j;<br /><br />&nbsp;&nbsp;//设置定时器为自由运行模式<br />&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALTERA_AVALON_TIMER_CONTROL_ITO_MSK&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALTERA_AVALON_TIMER_CONTROL_CONT_MSK&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALTERA_AVALON_TIMER_CONTROL_START_MSK);<br />&nbsp;&nbsp;//开始中断注册操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;k=alt_irq_register(TIMER_0_IRQ,&nbsp;TIMER_0_BASE,&nbsp;isr);<br />IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE,&nbsp;0xffff);<br />IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,&nbsp;0xff);<br />IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALTERA_AVALON_TIMER_CONTROL_ITO_MSK|ALTERA_AVALON_TIMER_CONTROL_START_MSK&nbsp;&nbsp;&nbsp;);&nbsp;<br />IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,&nbsp;1);<br />*(unsigned&nbsp;int&nbsp;*)TIMER_0_BASE=1;<br />//IOWR_ALTERA_AVALON_TIMER_IENABLE(TIMER_0_BASE,&nbsp;1);<br />//*(unsigned&nbsp;int&nbsp;*)TIMER_0_BASE=1;<br />&nbsp;&nbsp;if(k!=0)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;while(1);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />while(1)<br />{<br />e=chcode((a&0xf0)&gt&gt4);<br />f=chcode(a&0xf);<br />a=a+1;<br />c=chcode((b&0xf0)&gt&gt4);<br />d=chcode(b&0xf);<br />b=b-1;<br />for(i=0;i&lt6000;i++)<br />{<br /><br />&nbsp;&nbsp;if(i%500==0)<br />&nbsp;&nbsp;{<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led=0x2&nbsp;|&nbsp;(0x1&nbsp;&&nbsp;PIN_MSC);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led=0x1&nbsp;&&nbsp;PIN_MSC;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(unsigned&nbsp;int&nbsp;*)LED_BASE&nbsp;=&nbsp;led;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else&nbsp;if(i%500==250)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led=0x1&nbsp;&&nbsp;PIN_MSC;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(unsigned&nbsp;int&nbsp;*)LED_BASE&nbsp;=&nbsp;led;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;if(PIN_MSC==0)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;while(1);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />/*&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i%50==0)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(unsigned&nbsp;int&nbsp;*)BEEP_BASE&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(i%50==25)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(unsigned&nbsp;int&nbsp;*)BEEP_BASE&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;*/&nbsp;<br />&nbsp;&nbsp;<br />com=0;<br />data=e;<br />com=0x08;<br />for(j=0;j&lt3000;j++)<br />&nbsp;&nbsp;{<br />//&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,&nbsp;1);&nbsp;<br />&nbsp;&nbsp;}<br />com=0;<br />data=f;<br />com=0x04;<br />for(j=0;j&lt3000;j++)<br />&nbsp;&nbsp;{<br />//&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,&nbsp;1);&nbsp;<br />&nbsp;&nbsp;}<br />com=0;<br />data=c;<br />com=0x02;<br />for(j=0;j&lt3000;j++)<br />&nbsp;&nbsp;{<br />//&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,&nbsp;1);&nbsp;<br />&nbsp;&nbsp;}<br />com=0;<br />data=d;<br />com=0x01;<br />for(j=0;j&lt3000;j++)<br />&nbsp;&nbsp;{<br />//&nbsp;&nbsp;IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,&nbsp;1);&nbsp;<br />&nbsp;&nbsp;}<br />}<br /><br />}<br />&nbsp;&nbsp;return&nbsp;0;<br />}<br />
g19860529 发表于 2008-11-6 14:11 | 显示全部楼层

你是写的C程序吧?!

  
zsq427 发表于 2008-12-2 15:52 | 显示全部楼层

缺少初始化语句

缺少初始化语句
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

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