这段代码编译能够通过,可运行之后,按键没有任何效果,不知道哪里出问题了,请各位高手指点,谢谢了! #include <stdio.h> #include "alt_types.h" #include "system.h" #include "altera_avalon_pio_regs.h" #include <unistd.h> #include "sys/alt_irq.h" #include "clock.h" volatile int edge_capture; static void init_led_pio(){ IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE, 0x00); //OWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE,0x00); //OWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE,0x00); //OWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE,0x00); }
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,0x00); } 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,0x1); alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts); } static void initial(){ // dout=0; edge_capture=0; }
static void handle_button_press(){ switch(edge_capture){ case 0x0: IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE, 0x07); break; case 0x1: IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE, 0x01);
break; case 0x2: IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE, 0x02);
break;
case 0x4: IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE, 0x04);
break;
case 0x8: IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE, 0x08);
break;
/* static void light(){ if(edge_capture==0x1){ IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE, 0x06);
} }*/
default: usleep(500000); break; } } int main(){ init_button_pio(); initial(); init_led_pio();
while(1){
handle_button_press();
} } |