No core_cm4.h, por que existe uma conversão como ((uint32_t) (int32_t) IRQn)?

No código a seguir de core_cm4.h, por que existe uma conversão dupla((uint32_t)(int32_t)IRQn)?

Por exemplo, na seguinte função:

__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
{
  NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
}

Qual é o propósito disso?

questionAnswers(1)

yourAnswerToTheQuestion