static void NVIC_SetPriority(int IRQn, uint32_t priority) { IRQn -= 16; /* PEx starts numbers with zero, while system interrupts would be negative */ #if configCPU_FAMILY_IS_ARM_M4_M7(configCPU_FAMILY) NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); /* set Priority for device specific Interrupts */ #else /* M0+ */ NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); /* set Priority for device specific Interrupts */ #endif }
void Io_Int_SetPriority(sint8 irq_number, uint8 priority) { if(irq_number < 0) { SCB->SHP[_SHP_IDX(irq_number)] = (SCB->SHP[_SHP_IDX(irq_number)] & ~(0xFF << _BIT_SHIFT(irq_number))) | (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(irq_number)); } else { NVIC->IP[_IP_IDX(irq_number)] = (NVIC->IP[_IP_IDX(irq_number)] & ~(0xFF << _BIT_SHIFT(irq_number))) | (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(irq_number)); } }