发 帖  
原厂入驻New

[经验] 怎么理解中断向量?

2020-8-27 10:24:50  301 ARM 中断向量
分享
3
1、中断向量、中断地址和中断向量表:

中断向量是中断服务程序的入口地址,在计算机中中断向量的地址存放一条跳转到中断服务程序的跳转指令
中断地址是存储中断向量的内存单元。
中断向量表:用来存放中断向量(共256个),它的地址范围是0~3FFH
在arm处理器中中断向量的大小为4个字节。在中断向量里面不是存储的中断服务程序的入口地址,而是跳转到中断服务程序的可执行代码。

中断号:
微机通过中断号对应中断向量值,再通过中断向量的值跳转到中断服务程序。

中断向量表:
CPU要通过中断号来找到中断向量,所以要在内存中建立一张中断向量查询表。(在32位保护模式下该表称为中断描述符表),因为32位微机中有256个中断向量,每个中断向量大小为4Byte,所以整张表大小为1KB。因为中断向量按照中断号从0地址开始顺序排列,所以任意一个中断号为N的中断向量的地址为中断号N*4。
在BIOS执行初始化操作时,它设置了两个8259A芯片支持的16个硬件中断向量和BIOS提供的中断号为0x10~0x1f的中断调用功能向量等。对于实际没有使用的向量则填入临时的哑中断服务程序的地址。以后在系统引导加载操作系统时会根据实际需要修改某些中断向量的值。例如,对于DOS操作系统,它会重新设置中断0x20~0x2f的中断向量值。

对于LINUX系统,只有在内核加载时用到BIOS提供的显示和磁盘读写中断,在内核启动前会在setup.s程序中重新初始化8259A芯片,并在head.s中重新设置一张中断向量表。完全抛弃BIOS的中断向量表。

2、那么,简单来说,中断的本质是什么?
CPU是如何知道中断发生的,我们可以看下一个玩具级别的软核CPU是如何处理中断的:
知乎1.png

当中断产生时,将 exp_vector(异常向量地址)赋给new_pc。注意触发条件是always @(*) ,该动作的实现和时序无关。

在CPU时钟脉冲抵达时,PC寄存器被赋值为new_pc,即异常向量地址:
知乎2.png

所以,简单来说,中断向量就是一个地址黄页,上面记录着如果发生火灾去哪找消防队,如果遇到匪徒上哪去找警察局,如果病危上哪去找医院。这里面的“火警”、“匪警”、“病危”就是相当于你说的各种中断,上哪去找负责的单位,就是中断向量表里面的地址。专业一点说中断向量就是记录着每个不同中断发生后处理器跳转到中断服务程序的起始地址。

PS:想要进一步了解中断向量,可以看这里:一起简单分析中断向量表


ldliu 2020-8-27 11:01:39
最后一句话,算是真的简洁明了,哈哈哈
1 回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表