今天研究nu-bricks的程序时发现,这个函数用法好奇怪:
NVIC_SetPriority (TMR2_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
我没有用过这个函数,但对这个函数还是有所了解的:这是我保存的资料:CortexM4 内核中定义256个中断优先级,8 bit;通过设置PRIGROUP位将这8bit分成Grouppriority 及 Subpriority, 低于或等于Group priority的中断不能嵌套;同一Group priority中断同时被触发时,由Subpriority决定优先权;M451的优先级只有16个,也就是4bit;你可以将64个中断通过寄存器NVIC_IPRx设置在这16个级别中;下级或同级的中断不能嵌套,同一级中断同时被触发时,由中断编号决定优先级;
问题:__NVIC_PRIO_BITS值为4,优先级范围是0-15的话,这个就是7,不明白为什么要这样写?点进去,查看定义,就更看不懂了。因为在手册上没有看到具体的寄存器。
把问题再简单化,按照正常的思维,设置的数值就是对应的优先级,这是合理的,对吧???我也不想细究这东西
|