volatile int edge_capture; static void handle_button_interrupts(void*context,alt_u32 id) { volatile int*edge_capture_ptr=(volatile int*)context; *edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0); } static void init_button_pio() { void*edge_capture_ptr=(void*)&edge_capture; IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0xf); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0x0); alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts); } int main(void) { while(1) { init_button_pio(); switch(edge_capture) {case 0x08: while(1) {IOWR(SEG7_DISPLAY_BASE,0,0x12345678);} break; case 0x04: IOWR(SEG7_DISPLAY_BASE,0,0X00001234); break; } } } 我只想用这个例子来验证按键中断,为什么当中断程序里有一个while(1)的循环,中断就跳不出来了呢?难道DE2板上的按键中断就只有这样? 还有就是一旦我在SOPC builder中改变原来中断的IRQ(原来的IRQ只是自动排列而已)时,程序就不能显示先前的效果了,为什么?我不明白 请各位高手多多帮忙啊,因为交稿时期快到了 如果按键中断没搞定,我先前做的很多东西都白做了,希望各位高手帮忙一下
[此贴子已经被作者于2008-6-1 9:57:57编辑过] |