最近编写调试了关于PIO中断和TIMER中断的程序:4个PIO中断(优先级为0-3)、1个TIMER中断(优先级为4)。调试中出现的问题是4个PIO中断注册成功,ienable寄存器中相应的BIT 位成功置1,但是TIMER中断在注册后ienable寄存器中相应的BIT位却仍然是0,现在百思不得其解。现在把源程序贴出来,希望大家能给点意见。谢谢了 #include "system.h" #include "altera_avalon_timer_regs.h" #include "altera_avalon_apio_regs.h" #include "alt_types.h" #include "sys/alt_irq.h" void int0_isr(void *context,alt_u32 id) { } void int1_isr(void *context,alt_u32 id) { } void int2_isr(void *context,alt_u32 id) { } void int3_isr(void *context,alt_u32 id) { } void timer_isr(void *context,alt_u32 id) { } int main(void) { alt_irq_register(PIO_0_IRQ,(void *)0,int0_isr); alt_irq_register(PIO_1_IRQ,(void *)0,int1_isr); alt_irq_register(PIO_2_IRQ,(void *)0,int2_isr); alt_irq_register(PIO_3_IRQ,(void *)0,int3_isr); /* 执行上面三条语句后ienable寄存器的值为0x0f, 四个中断都被使能*/ alt_irq_register(TIMER_IRQ,(void *)0,timer_isr); /*执行这条语句却没有将寄存器修改为0x1f ,它的值仍然是0x0f,所以定时器中断被禁止*/ /* 大伙儿想想这是什么原因造成的呢?*/ ........ while(1); return 0; } |