Example #1
0
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);
	}
}
Example #2
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);
	}
}