各位仁兄,偶设置了四个LED和四个KEY,用EP1C6Q240C8 UP3开发板,四位KEY[3..0]分别对应48、49、57、62脚,用板上的开关SW4 、SW5、SW6、SW7,LED测试过没有问题。用下面这个简单的程序,在按钮引入中断的时候,没有相应响应。不知道为什么?急啊。不是板上有问题吧?
#include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h"
#include <stdio.h> #include <unistd.h> #include "sys/alt_irq.h"
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(PIO_KEY_BASE); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE, 0x0f); }
void int_ini() { void* edge_capture_ptr = (void*) &edge_capture; IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY_BASE, 0x0f); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY_BASE, 0x00); alt_irq_register(PIO_KEY_IRQ, edge_capture_ptr,handle_button_interrupts); edge_capture = 0; }
int main (void) __attribute__ ((weak, alias ("alt_main")));
int alt_main (void) { int_ini(); alt_u8 led = 0x00; volatile int i=0; edge_capture=0; while(edge_capture==0) { led=0x0f; IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led); i = 0; while (i<200000) i++; } while (1) { led=0x00; IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led); i = 0; while (i<200000) i++; }
return 0; }
[此贴子已经被作者于2006-3-2 11:15:07编辑过] |