void Irq_EnableVector( int16_t vector, int priority, int core ) { if (vector < NUMBER_OF_INTERRUPTS_AND_EXCEPTIONS) { Irq_SetPriority( core, vector, priority ); /* Forward to GIC, 1-bit */ ICD.ICDISER[vector/32] = (1 << (vector % 32)); /* Select Target CPU 8 bits vector.. IPTR[8] start with 32 */ { uint8_t shift = (vector % 4)*8; uint8_t reg = vector / 4; uint32_t mask = (0xffu<<shift); uint8_t cpu = 1; /* Write target register */ ICD.ICDIPTR[reg] = (( (cpu<<(shift)) & mask ) | ( ICD.ICDIPTR[reg] & ~mask )); } } else { /* Invalid vector! */ assert(0); } }
void Irq_EnableVector( int16_t vector, int priority, int core ) { if (vector < INTC_NUMBER_OF_INTERRUPTS) { Irq_SetPriority((Cpu_t)core, (IrqType)(vector + IRQ_INTERRUPT_OFFSET), osPrioToCpuPio(priority)); } else if ((vector >= CRITICAL_INPUT_EXCEPTION) && (vector<= DEBUG_EXCEPTION)) { } else { /* Invalid vector! */ assert(0); } }