/** This function is a re-implementation of the Altera provided function. * The function is re-implemented to prevent it from enabling an interrupt * when it is registered. Interrupts should only be enabled after the FreeRTOS.org * kernel has its scheduler started so that contexts are saved and switched * correctly. */ int alt_irq_register( alt_u32 id, void* context, void (*handler)(void*, alt_u32) ) { int rc = -EINVAL; alt_irq_context status; if (id < ALT_NIRQ) { /* * interrupts are disabled while the handler tables are updated to ensure * that an interrupt doesn't occur while the tables are in an inconsistent * state. */ status = alt_irq_disable_all (); alt_irq[id].handler = handler; alt_irq[id].context = context; rc = (handler) ? alt_irq_enable (id): alt_irq_disable (id); /* alt_irq_enable_all(status); This line is removed to prevent the interrupt from being immediately enabled. */ } return rc; }
//Stops hardware timer void stop_timer() { printf("Stopping Timer\n"); alt_irq_disable(TIMER_0_IRQ); IOWR_16DIRECT(TIMER_0_BASE, 4, 11); IOWR_16DIRECT(TIMER_0_BASE, 0, 0); }