环境是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以后的中断注册方式出现了这个问题?
新人,急求高人指点。
此帖出自
小平头技术问答
顶!
一周热门 更多>