进来讨论一下,NVIC寄存器组中的中断挂起SETPEND与消除CLRPEND,与外部中断挂起寄存器EXTI_PR有何关系?

2019-07-21 04:17发布

本帖最后由 warship 于 2018-7-27 19:32 编辑

如题,讨论一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
34条回答
warship
2019-07-23 19:01
本帖最后由 warship 于 2018-8-1 18:05 编辑
hougeqvjing 发表于 2018-7-31 23:05
NVIC里面不能设置SYSTICK的优先级,也不能开启systick的优先级,为什么说是systick绑定在NVIC中呢?中断 ...

1、NVIC功能强大,将“异常”的概念发挥到了极致,可以说,搞懂了NVIC,就基本掌握了CM3内核的90%以上,因此,它的寄存器数量庞大,你翻看一下权威指南的附录D,就是NVIC寄存器小结,列出了它的所有寄存器,而SYSTICK的区区几个寄存器严格来说也属于NVIC的寄存器,NVIC管理着全天下所有异常的优先级,当然也包括SYSTICK的优先级,系统内核的异常的优先级存放在NVIC的SCB->SHP[12]中(与外部中断IP[240]类似),因为有三个系统异常的优先级是固定的,加上一个保留位置无须设优先级,所以只须16-3-1=12个字节,下标从0到11,SYSTICK为最后一个,即NVIC的SCB->SHP[11]中就存放着SYSTICK的中断优先级(我上次曾让你查看过这个寄存器,系统复位时它的值为0,实际对应最高优先级),你可以通过指令:SCB->SHP[11]=0xF0;  就可以让它的优先级为最低。另有中断控制及状态寄存器ICSR、系统Handler控制及状态寄存器SHCSR可以控制和监视系统级的异常,SYSTICK当然逃不出如来的手心了。另外,我认为不能单纯通过字面如NVIC->IP[240] 及 SCB->AIRCR中的寄存器字冠来说SCB不属于NVIC的寄存器,事实上只有与外部中断相关的一组寄存器(主要是240个中断的中断优先级、使能/除能、挂起/解挂、活动状态等寄存器)冠以NVIC以外,大量NVIC的寄存器族都另起了其它的名称,如SCB、VTOR、SYSTICK等等,具体查看权威指南的附录D。因为NVIC的寄存器种类庞大,地址跨度很大,用单一的结构体来访问比较令人头大,且不如分开成多个意义更明确。

一周热门 更多>