在 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]
被修改,其余保持原样。
我相信我已经理解了中断的概念以及如何初始化它,但我在不同的地方看到他们首先 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]
被修改,其余保持原样。