32单片机NVIC是ARM Cortex-M0系列高性能低功耗微控制器中的一种,是指通过一组可配置的中断管理器集成到单片机内核中的一种中断控制单元。NVIC全称是Nested Vectored Interrupt Controller,即嵌套向量中断控制器。该控制器被集成到了单片机内核中,能够提供低延迟、高响应的中断处理服务,具有多个优秀的特性,如可配置的抢占和响应优先级、低延迟响应、多个中断源、低功耗、实时性强,是目前应用较广泛的一种中断控制单元。
32单片机NVIC控制器提供了多种功能,其中包括:
1、配置NVIC优先级以及中断的响应方式;
2、嵌套中断的支持;
3、支持软件中断;
4、Systick定时器,提供基本中断定时功能;
5、外部中断控制,支持多种触发方式,如上升沿/下降沿触发;
6、错误检测,能够检测到中断嵌套、中断重入、越界异常等错误。
每个中断在进入时拥有一个响应优先级,不同的中断之间可以设置不同的响应优先级,优先级越高的中断优先响应。在中断处理的过程中,又可以根据中断的抢占优先级来判断是否允许此中断抢占其他正在执行的中断。优先级数值越小,抢占权越高。但需要注意的是,在中断处理的过程中,不允许发生同一优先级的中断抢占,此时需要等待当前中断处理完毕之后再响应下一个同一优先级中断。
32单片机NVIC的实现原理是在处理器内核中集成一个向量表,向量表中存放着一个个中断服务程序的入口地址。当一个中断请求产生时,中断控制器首先完成中断优先级的处理,然后根据中断编号到向量表中查找此中断对应的服务程序入口地址,并执行该入口地址处的服务程序。处理完该服务程序后,中断控制器会恢复上下文框架,并根据抢占许可和同级抢占规则决定是否切换中断。