什么是中断向量表?作用是什么?为什么需要偏移?
一、定义与特点
定义:中断向量表(interrupt vector table)包含中断服务程序地址的特定内存区域,这些服务程序是处理外部硬件中断请求的代码。
特点:这些中断服务程序(函数)在中断向量表中的位置是由半导体厂商定好的,当某个中断被触发以后就会自动跳转到中断向量表中对应的中断服务程序(函数)入口地址处。
对于IMX6ULL,中断向量表中包含了256个中断向量项,每个向量项包含4个字节,分别存放中断处理程序的地址。当系统发生中断时,CPU会根据中断号找到对应的中断向量项,并读取其中存放的中断处理程序地址,然后跳转到该地址执行中断处理操作。
对于i.MX6ULL处理器,中断向量表的地址和大小是固定的,并且不允许被修改。
二、中断向量表的作用
在 CPU 接收到外部中断请求时,它会先查询中断向量表,以查找到相应的中断服务程序地址。首先会保护现场,然后,CPU 会将控制转移到该地址,以执行相应的中断服务。完成中断服务程序后,控制会恢复到中断发生前的程序流程。
三、中断向量表为什么需要偏移
I.MX6ULL处理器的内存地址空间被分为那几个部分:
简单来讲:如果我们直接将中断向量表放到0x0000 0000处肯定是不行的,会占用其他部分的内容,因此施加一个偏移。
在i.MX6ULL中,中断向量表需要偏移的主要原因是为了避免与系统中其他部分的地址空间冲突。i.MX6ULL处理器的内存地址空间被分为多个部分,其中一部分被保留用于系统引导、硬件寄存器、设备映射等用途。如果中断向量表被放置在这个保留的地址空间中,就有可能会发生地址冲突,导致中断向量表无法正常工作。
为了避免这种冲突,i.MX6ULL处理器的中断控制器可以配置中断向量表的偏移地址。在启动时,操作系统会初始化中断控制器,并将中断向量表放置在一个没有被保留的地址空间中。中断控制器会将中断向量表的偏移地址与实际存储中断向量表的地址相加,得到中断向量表的真正地址,从而确保处理器在发生中断时可以正确地定位到中断服务程序的入口地址。
因此,i.MX6ULL需要中断向量表偏移的主要原因是为了避免与系统中其他部分的地址空间冲突,保证中断向量表可以正常工作。
更多推荐
所有评论(0)