环境是win7 64bit,quartus ii 11.0.
用到两个pio的边沿中断。注册中断时发现总是有一个中断无法注册成功。
中断部分代码如下:
volatile int flag_dvalid = 0; volatile int flag_ready = 0;
// dvalid信号,上升沿中断 void dvalid_isr_handle( void* context ) { flag_dvalid = 1; IOWR_ALTERA_AVALON_PIO_EDGE_CAP( PIO_DVALID_BASE, 0x0 ); }
void dvalid_init( void ) { IOWR_ALTERA_AVALON_PIO_IRQ_MASK( PIO_DVALID_BASE, 0x1 ); // 使能按钮中断 IOWR_ALTERA_AVALON_PIO_EDGE_CAP( PIO_DVALID_BASE, 0x0 ); // 清边沿捕获寄存器
alt_irq_register( PIO_DVALID_IRQ, NULL, dvalid_isr_handle );
alt_ic_isr_register( PIO_DVALID_IRQ_INTERRUPT_CONTROLLER_ID, PIO_DVALID_IRQ, dvalid_isr_handle, NULL, 0x0 ); }
// ready信号,上升沿中断 void ready_isr_handle( void* context ) { flag_ready = 1; IOWR_ALTERA_AVALON_PIO_EDGE_CAP( PIO_READY_BASE, 0x0 ); }
void ready_init( void ) { IOWR_ALTERA_AVALON_PIO_IRQ_MASK( PIO_READY_BASE, 0x1 ); // 使能按钮中断 IOWR_ALTERA_AVALON_PIO_EDGE_CAP( PIO_READY_BASE, 0x0 ); // 清边沿捕获寄存器
alt_ic_isr_register( PIO_READY_IRQ_INTERRUPT_CONTROLLER_ID, PIO_READY_IRQ, ready_isr_handle, NULL, 0x0 ); }
主函数中对两个init函数进行初始化,总是只注册成功一个。
后来改为老版本的中断注册方式,即:
alt_irq_register( PIO_DVALID_IRQ, NULL, dvalid_isr_handle );
alt_irq_register( PIO_READY_IRQ, NULL, ready_isr_handle );
这样以后就可以两个都注册成功。
请问,这是什么情况造成的?为什么9.1以后的中断注册方式出现了这个问题?
新人,急求高人指点。
|