什么是中断向量表?

什么是中断优先级?什么是中断向量表?

·首先,什么是中断?中断是指在主程序执行过程中出现了特定的触发条件,也就是中断源。当发生中断时,CPU会暂停当前正在运行的程序,转而去处理中断程序。处理完成后,再返回原来被暂停的位置继续运行。

·其次,什么是中断优先级?中断优先级是指当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先处理更加紧急的中断源。

·最后,什么是中断嵌套?当一个中断程序正在运行时,又有新的更高优先级中断源申请中断,CPU就会再次暂停当前中断程序,然后去处理新的中断程序,处理完成后依次进行返回。

接下来,我们来了解STM32的中断。Cortex-M3内核支持256个中断,其中包括16个内核中断和240个外部中断,具有256级的可以编程设置的中断优先级。但是STM32F1只是用了M3内核的一部分,它只含有84个中断源,其中包括16个内核中断和68个外部可屏蔽中断,而这68个外部可屏蔽中断,F103系列芯片又只有60个,所以具体到每个芯片型号可用的中断还是以数据手册为准。

这是我截取的数据手册部分中断表,可以看到每个中断都是有一个固定的地址,由于硬件的缘故,中断源产生中断时,都是到相应中断源固定的地址去执行中断程序。

为什么中断函数可以写在任意位置?这是因为在固定地址这里,由编译器自动加上了跳转到中断函数的代码,这样就实现了由固定地址到任意位置执行程序了。这些中断的固定地址列表就是说的中断向量表了。我们编程中基本不需要管这个中断向量表,编译器已经帮我们做好了。STM32有这么多中断,是怎么管理它们的呢?这里就要提到NVIC了,NVIC全名叫做嵌套中断向量控制器,NVIC是一个内核外设,是内核专门用来管理中断的。当外部有很多中断同时进来,NVIC就按照程序配置好的优先级,给这些中断排好队,依次送入CPU执行。

我们现在来看看NVIC具体是怎么管理中断的。NVIC将优先级分为抢占优先级和响应优先级,当一个中断设置了抢占优先级,那么它可以打断其他正在执行的中断,也就是刚才说的中断嵌套,抢占优先级控制着中断嵌套,而响应优先级控制排队顺序。NVIC用优先级寄存器的4位来将抢占优先级和响应优先级进行组合。如下图所示,我们可以使用程序选择使用哪种中断分组模式,例如选择第二组,可以将零到三级的抢占优先级和响应优先级任意组合。同时,我们还可以配置中断的响应优先级为0到3级的任意级别。对于具有高抢占优先级的中断,我们可以进行嵌套处理;而对于具有高响应优先级的中断,我们可以优先执行。当多个中断同时发生时,具有高抢占优先级的中断可以优先处理,而具有高响应优先级的中断则可以按照数据手册中的中断号进行排序。

发布于 2024-11-22
33
目录

    推荐阅读