Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20703 Discussions

Nios II timer triggered interrupt

Altera_Forum
Honored Contributor II
4,022 Views

Hello I am trying to implement a timer triggered interrupt and I can not seem to get it to work and I don't really know what I am doing wrong.  

 

Here is how it looks in Qsys where I have the interval timer component and it is connected to the IRQ. 

 

http://www.alteraforum.com/forum/attachment.php?attachmentid=12520&stc=1  

 

#include "system.h" # include "sys/alt_stdio.h" # include "sys/alt_irq.h" # include "altera_avalon_pio_regs.h" # include "altera_avalon_timer_regs.h" const unsigned char sevenSegData = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78,0x00, 0x10, 0x08, 0x03,0x46, 0x21, 0x06, 0x0E, 0x3F}; unsigned short switches; unsigned char keys; void timer_0_ISR(void *context) { // clear irq status in order to prevent retriggering IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE, 0); alt_putstr("ISR TEST!\n"); } int main() { // Timer initialization IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE, ALTERA_AVALON_TIMER_CONTROL_CONT_MSK | ALTERA_AVALON_TIMER_CONTROL_ITO_MSK); IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE, 0); // Clear IRQ status just in case.. IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE, ALTERA_AVALON_TIMER_PERIODL_MSK); IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE, ALTERA_AVALON_TIMER_PERIODH_MSK); // Register the ISR for timer event alt_ic_isr_register(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ, timer_0_ISR, 0, 0x0); // Start timer IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE, 0x0007); /* Event loop never exits. */ while (1) { switches = IORD_ALTERA_AVALON_PIO_DATA(SWITCH_BASE); keys = IORD_ALTERA_AVALON_PIO_DATA(KEY_BASE); IOWR_ALTERA_AVALON_PIO_DATA(LED_RED_BASE, switches); IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE, sevenSegData); } return 0; }
0 Kudos
1 Reply
Altera_Forum
Honored Contributor II
2,734 Views

It actually works... I thought that the ALTERA_AVALON_TIMER_PERIODL_MSK & ALTERA_AVALON_TIMER_PERIODH_MSK would've been configured according to the Qsys setting but apparently they didn't so I had an 90 sec overflow and I didn't notice it until I actually went up and left my workstation and came back to see multiple messages from the ISR.

0 Kudos
Reply