我们将优先级5分配给端口F ,然后我们编写以下代码
int main() {
NVIC_PRI7_R |=0☓00A00000;
NVIC_EN0_R= 0☓40000000;
我的问题是这段代码0☓00A00000
来自哪里?
答案 0 :(得分:1)
嵌套向量中断控制器(NVIC)寄存器存在于ARM Cortex M architecture中,因此我假设您正在为这种目标编程。
根据ARM Cortex M手册:
NVIC最多支持240个中断,每个中断最多256个 可以动态改变的优先级。处理器和NVIC可以 进入一个非常低功耗的睡眠模式,离开唤醒控制器 (WIC)识别中断并确定其优先级。
NVIC_PRI7_R
变量用于通过特定的寄存器操作在给定模式下触发CPU。将其设置为给定值将使CPU以特定的优先级模式进入(请阅读文档以获取更多信息)。
关于0☓00a00000
,它充当掩码,在NVIC_PRI7_R
中将几位设置为“1”。确切地说,0x00a00000 == 0b101000000000000000000000
,因此操作|=
将两位设置为1并将优先级模式触发为5(注意0b101 == 5
)。阅读ARM Cortex M手册,了解这些非常精确的位会触发CPU的优先级模式。
希望它能帮助你更好地理解这种做法。