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