Forum Discussion
Altera_Forum
Honored Contributor
21 years agoI use nios2 .And I build a system with a on-chip ram and a key . I want to servise an interrupt from the key.
the following is my code:# include "system.h"# include "altera_avalon_pio_regs.h"# include "alt_types.h"# include "altera_avalon_uart_regs.h"# include "sys/alt_irq.h" volatile int edge_capture; static void handle_key_interrupt(void* context,alt_u32 id) { // int* edge_capture_ptr=(int*)context; // IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE); IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, 0xf); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x55); } static void init_key_pio() { /* Recast the edge_capture pointer to match the alt_irq_register() function * prototype. */ void* edge_capture_ptr = (void*) &edge_capture; /* Enable all 4 button interrupts. */ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, 0x1); /* Reset the edge capture register. */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0x0); /* Register the interrupt handler. */ alt_irq_register( KEY_PIO_IRQ, edge_capture_ptr, handle_key_interrupt ); } int main (void) __attribute__ ((weak, alias ("alt_main"))); int alt_main (void) { volatile int i; i=0; // alt_u8 led=0x01; // alt_u8 key; # ifdef KEY_PIO_BASE init_key_pio();# endif i=alt_irq_enabled(); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xf0); while (1) { } return 0; }