在 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 到下一个作为供应商特定源。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)