中断的基本概念
中断具体定义:操作系统课程里有清晰的阐述。
STM32中断:中断来了,主程序都得立即暂停,程序由硬件电路自动跳转到中断程序中。中断执行前,进行现场保护;中断执行后,会再还原现场。保证主程序即使被中断了,回来后也能继续运行。用C语言编程,保护现场和还原现场并不需要我们操作(操作系统里面有中断的概念),由编译器做好。C语言程序中中断的执行流程:一般中断程序都是在一个子函数里面,这个函数不需要我们调用,当中断来临时,由硬件自动调用这个函数。
NVIC和中断向量表
中断通道就是中断源的意思,68个是F1系列最多的中断数量,对于一个具体的型号来说,可能没有这么多中断,所以具体以对应型号的数据手册为准。STM32的中断非常多,几乎所有模块都能申请中断,NVIC就是STM32中用来管理中断,分配优先级的
灰色的部分是系统内核的中断,不是灰色的部分属于STM32外设的中断。
中断的地址的作用:因为程序中的中断函数,它的地址由编译器分配的,是不固定的。但是中断的跳转,由于硬件限制,只能跳转到固定的地址执行程序,所以为了能让硬件跳转到一个不固定的中断函数里面,就需要在内存中定义一个地址的列表。这个列表地址固定,中断发生后,就跳到这个固定位置。然后有编译器再加上一条跳转到中断函数的代码,这样中断函数就可以跳转到任意位置了。
中断地址的列表:叫做中断向量表,相当于中断跳转的一个跳板。(不过C语言编程不需要管这个中断向量表,因为编译器帮我们做好了)
NVIC基本结构
在STM32中,NVIC用来统一分配中断优先级和管理中断的,NVIC是一个内核外设,是CPU的小助手。
STM32中断非常多,如果把中断都接到CPU上,那么CPU得引出很多线进行适配,设计上就很麻烦,并且很多中断同时申请,或者中断很多产生了拥堵,CPU就很难处理,毕竟CPU主要用来做运算的。所以中断分配的任务就放到别的地方。所以NVIC就出现了。
NVIC有很多输入口,有多少个中断线路,都可以接过来。(这里斜杠上写个n,意思是一个外设可能会同时占用多个中断通道,所以有n条线),NVIC只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序,通过一个出口告诉CPU该处理哪个中断,对于中断先后顺序分配的任务,CPU不需要知道
NVIC中断优先级控制:抢占优先级>相应优先级>中断号排队