// Setup OS Tick. int32_t OS_Tick_Setup (uint32_t freq, IRQHandler_t handler) { uint32_t load; uint32_t prio; uint32_t bits; if (freq == 0U) { return (-1); } PTIM_PendIRQ = 0U; // Private Timer runs with the system frequency load = (SystemCoreClock / freq) - 1U; // Disable Private Timer and set load value PTIM_SetControl (0U); PTIM_SetLoadValue (load); // Disable corresponding IRQ IRQ_Disable (PrivTimer_IRQn); IRQ_ClearPending(PrivTimer_IRQn); // Determine number of implemented priority bits IRQ_SetPriority (PrivTimer_IRQn, 0xFFU); prio = IRQ_GetPriority (PrivTimer_IRQn); // At least bits [7:4] must be implemented if ((prio & 0xF0U) == 0U) { return (-1); } for (bits = 0; bits < 4; bits++) { if ((prio & 0x01) != 0) { break; } prio >>= 1; } // Adjust configured priority to the number of implemented priority bits prio = (PTIM_IRQ_PRIORITY << bits) & 0xFFUL; // Set Private Timer interrupt priority IRQ_SetPriority(PrivTimer_IRQn, prio-1U); // Set edge-triggered IRQ IRQ_SetMode(PrivTimer_IRQn, IRQ_MODE_TRIG_EDGE); // Register tick interrupt handler function IRQ_SetHandler(PrivTimer_IRQn, handler); // Enable corresponding interrupt IRQ_Enable (PrivTimer_IRQn); // Set bits: IRQ enable and Auto reload PTIM_SetControl (0x06U); return (0); }
/* * * Function Name: cslDsiEnaIntEvent * * Description: event bits set to "1" will be enabled, * rest of the events will be disabled * */ static void cslDsiEnaIntEvent(DSI_HANDLE dsiH, UInt32 intEventMask) { intEventMask |= XTRA_INT; chal_dsi_ena_int(dsiH->chalH, intEventMask); #ifdef UNDER_LINUX /* enable_irq(dsiH->interruptId); */ #else IRQ_Enable(dsiH->interruptId); #endif }