- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Actually I am a beginner in using niosII. Currently I am having some trouble in trying the interrupt code. This is a simple interrupt code. I am using SW0 and SW1 as the buttons. But its not working. The output showing in nios2 console is just "none" no changes happening when I slide the switch. # include "alt_types.h"# include "altera_avalon_pio_regs.h"# include "sys/alt_irq.h"# include "system.h"# include <stdio.h># include <unistd.h> /* A variable to hold the value of the button pio edge capture register. */ volatile int edge_capture; int count = 0; int handle_interrupt(); # ifdef PIO_1_BASE 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_1_BASE); count += handle_interrupt(*edge_capture_ptr); printf ("Total count = %d\n", count); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_1_BASE, 0); } /* Initialize the button_pio. */ static void init_button_pio() { volatile void* edge_capture_ptr = (void *) &edge_capture; IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_1_BASE, 0xf); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_1_BASE, 0x0); alt_irq_register( PIO_1_IRQ, edge_capture_ptr, handle_button_interrupts ); } # endif static void initial_message() { printf("\n\n**************************\n"); printf("* Hello from Nios II! *\n"); printf("**************************\n"); } int main(void) { /* Initialize the button pio. */ # ifdef PIO_1_BASE init_button_pio();# endif alt_irq_enable_all(PIO_1_IRQ); /* Initial message to output. */ initial_message(); /* Continue counting loop. */ while( 1 ) { usleep(100000); if(edge_capture!=0) { handle_interrupt(edge_capture); } else { printf("none \n"); } } return 0; } int handle_interrupt(int button) { switch (button) { case 0x1: printf("Button 1"); return 1; break; case 0x2: printf( "Button 2 \n"); return 2; break; case 0x3: printf( "Both 3\n"); return 3; break; default: printf( "Button press 0x%x UNKNOWN!!\n", button); return 0; break; } } Can anyone help me out?? Thanks in advance.Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, maybe in you interrupt function, you should write
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_1_BASE, 1); Avoid printf() in interrupts Here, you could post your code within [ code] balises (Instead of printf(), you could light up some LEDs)- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page