在 NVIC_PR 寄存器中设置中断优先级

Setting priority of interrupt in NVIC_PR register

我相信我已经理解了中断的概念以及如何初始化它,但我在不同的地方看到他们首先 AND (select) NVIC_PR 寄存器针对 F (ORing) 优先级位之前的位。例如,在 TM4C123 GPIO Port Interrupt Programming 中,末尾有这一行:

NVIC_PRI7_R = (NVIC_PRI7_R & 0xFF00FFFF) | 0x00A00000

目的是将端口 F 中断的优先级设置为 5(通过将前 3 位 [23:21] 设置为值;因此 .1010。或 0xA 表示值 5)。那么,为什么我不能这样做呢?

NVIC_PRI7_R |= 0x00A00000

& 0xFF00FFFF 在这里做什么?为什么我要在 OR-ing 优先级位 [23:21] 之前清除位 [23:16]? [20:16] 之间的位无论如何都没有使用。

如果位 [23:21] 都已经设置为 1,那么 NVIC_PRI7_R |= 0x00A00000 什么都不做,它不会将它们设置为你想要的值,它们都保持为 1,这就是你清除的原因在敷面膜之前。 &0xFF00FFFF 确保只有位 [23:16] 被修改,其余保持原样。