在来自 core_cm4.h 的以下代码中,为什么有双重转换 ((uint32_t)(int32_t)IRQn)
?
例如在下面的函数中:
__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));
}
这样做的目的是什么?
最佳答案
由于 CM4 软件为核心实现负中断源,您必须先将值转换为 32 位有符号整数,然后再转换为无符号 32 位,以便在数字左侧填充零进行正确的右移。
CM4 使用 -15 到 -1 作为 CM4-Core 源,从 0 到下一个作为供应商特定源。
关于c - 在 core_cm4.h 上,为什么会有类似 ((uint32_t)(int32_t)IRQn) 的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46468494/