以下操作是什么意思?

时间:2018-01-11 15:29:13

标签: c embedded microcontroller nxp-microcontroller

我无法理解嵌入式C中的以下操作是什么意思?

NVIC_ICPR |= 1 << (vector_number%32);

从参考手册中,我发现了

  • 向量编号 - 服务中断时存储在堆栈中的值。
  • IRQ编号 - 非核心中断源计数,即向量编号减去 16。

但为什么模块划分为32?

1 个答案:

答案 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指出这一点)。