Visible to Intel only — GUID: nrj1643026785417
Ixiasoft
Visible to Intel only — GUID: nrj1643026785417
Ixiasoft
9.3.1.5.1. Writing a Platform ISR to Service a Button PIO Interrupt
This example is based on a Nios® V processor system with a 4-bit PIO peripheral connected to push buttons. An IRQ is generated any time a button is pushed. The ISR code reads the PIO peripheral’s edge capture register and stores the value to a global variable. The address of the global variable is passed to the ISR in the context pointer.
Writing a Platform ISR to Service a Button PIO Interrupt
#include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" static void handle_button_interrupts(void * context) { /* Cast context to edge_capture's type. It is important that this be declared volatile to avoid unwanted compiler optimization. */ volatile int * edge_capture_ptr = (volatile int * ) context; /* Read the edge capture register on the button PIO. Store value.*/ * edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE); /* Write to the edge capture register to reset it. */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0); /* Read the PIO to delay ISR exit. This is done to prevent a spurious interrupt in systems with high processor -> pio latency and fast interrupts. */ IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE); }