我无法理解嵌入式C中的以下操作是什么意思?
NVIC_ICPR |= 1 << (vector_number%32);
从参考手册中,我发现了
但为什么模块划分为32?
答案 0 :(得分:3)
它基本上是一个32
位的寄存器。
这将删除32
组中的一个或多个中断的暂挂状态。每个位代表IRQ0 - IRQ31
(Vector number from 16 - 47)
的中断号。
写入1将删除暂挂状态。写0无效。
重要的一点是你应该像这样使用它
NVIC_ICPR |= 1U << (vector_number%32);
这确保了这将是无符号的int算术 - 它可以使你免于在vector_number=31
时出现的UB。 (chux指出这一点)。