所谓中断向量,就是某个中断源产生一个中断时,CPU会根据该中断源到固定的一个地址去将存储在该地址上的地址信息加载到PC寄存器,然后再执行PC寄存器所指向的程序,这个固定的地址就是中断向量,存储在中断向量的地址信息就是中断处理函数的入口地址。中断向量表就是所有中断向量的集合。为了方便计算,NXP每个中断向量存储4个字节的中断处理函数的地址,理论上NXP中断向量表的偏移地址为0x0000x1FF,共0x200(128*4)个字节的长度范围,但事实上0x0000x00F这个16个字节的地址空间并没有用作中断向量,见下图: NXP每个可配置中断源的优先级或者说开关,根据中断向量的基地址和中断源的偏移地址,可以通过设置三个相关的寄存器(其中一个寄存器属于寄存器组,根据中断偏移地址选择其中一个寄存器)进行配置,这三个寄存器分别为: ? Interrupt Vector Base Register (IVBR) ? INT_CFADDR ? INT_CFDATA0 - INT_CFDATA7 IVBR:中断向量基地址寄存器,高15位有效,最后一位为保留位,值一般为0,所以NXP中断向量的基地址一般都为0xXXXE。特别注意的是复位向量固定为0xFFFFFC到0xFFFFFF,并不会因为设置IVBR而改变,所以复位后运行的第一个程序的中断向量基地址一般为0xFFFE。 INT_CFADDR:NXP的地址长度为24个bit,中断向量减掉基地址15个bit,剩下9个bit为偏移地址,偏移地址的高4位即放在INT_CFADDR寄存器的bit3到bit6,数据手册提到的乘以4倍的关系,是因为中断向量地址是4字节对齐,所以9个bit的低2位恒为0,左移两位(除以4)后,剩7个bit,7个bit的值刚好可以赋值给INT_CFADDR(bit3到bit6的bit位刚好匹配)。 INT_CFDATA0 - INT_CFDATA7:9个bit的偏移地址中,bit2-bit4三个bit的值就决定了使用寄存器中的哪一个寄存器。
|