学习笔记 什么是中断向量以及配置中断服务函数的原理

来源:互联网 发布:qt tcp 端口监听 编辑:程序博客网 时间:2024/05/18 06:22

中断向量
中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址。

运行过程
在中断响应过程中,CPU通过从接口电路获取的中断类型号(中断向量号)计算对应中断向量在表中的位置,并从中断向量表中获取中断向量,将程序流程转向中断服务程序的入口地址。

这里写图片描述
图一 中断函数声明
这里写图片描述
图二 配置中断服务函数
这里写图片描述
图三 设置中断服务函数的底层库函数

举例
上图是利用山外K60库配置PORTC和DMA0的中断服务函数实例
图二中PORTC_IRQHandler是需要设置的中断服务程序(用户自己设置),PORTC_VECT0Rn是中断向量表中的中断向量(K60底层已设置)。set_vector_handler函数的意义是将PORTC_IRQHandler的地址(PORTC_IRQHandler在图一中是定义的函数名,在图二中代表该函数在内存中的首地址)“赋值”给中断向量PORTC_VECT0Rn。
简单来说,set_vector_handler(PORTC_VECT0Rn, PORTC_IRQHandler);的作用是把PORTC_IRQHandler添加到中断向量表中。
K60在获取中断类型号(码)后,经计算(中断类型码*4)得到该中断类型服务子程序入口地址在中断向量表的位置(即中断向量PORTC_VECT0Rn),然后从中取出这个地址(PORTC_IRQHandler),转到相应的子程序(void PORTC_IRQHandle())。

简单来说,中断向量指向地址,该地址下存放的是用户需要在中断时执行的函数。
先获取中断类型号,再在中断向量表中找中断向量,指向一个地址,执行其中的中断服务程序。

下图为山外K60平台部分中断号类型声明和中断向量表编号声明
这里写图片描述

如有错误,欢迎指正!

原创粉丝点击