1. 程式人生 > >中斷向量偏移地址為什麼必須為0x200的倍數?——轉自正點原子的解答

中斷向量偏移地址為什麼必須為0x200的倍數?——轉自正點原子的解答

    在<<權威指南>>第一百零四頁,有這麼一段話:
    NVIC 中有一個暫存器,稱為“向量表偏移量暫存器”(在地址0xE000_ED08 處),通過修改它的值就能定位向量表。但必須注意的是:向量表的起始地址是有要求的:必須先求出系統中共有多少個向量,再把這個數字向上增大到是2 的整次冪,而起始地址必須對齊到後者的邊界上。例如,如果一共有32 箇中斷,則共有32+16(系統異常)=48 個向量,向上增大到2 的整次冪後值為64,因此地址地址必須能被64*4=256 整除,從而合法的起始地址可以是:0x0, 0x100, 0x200 等。
    向量表偏移量暫存器,也就是SCB->VTOR.它的第29位,用來標識向量表是在CODE區還是RAM區,從而0X1,就是最高3位不去動,這好理解.   但是低位,根據上面這段話的理解,STM32自己有60箇中斷,加上CM3的16個,總共有76箇中斷,擴大到2的整次冪,那就是128,然後再乘以4,得到512,也就是0X200.根據這樣計算,合法的偏移地址應該是0X0,0X200,0X400,0X600... 因此,在此處應該&0X1FFF FE00.才對.
    以上是我的理解.實際上確是&0X1FFF FF80;這點,我也有疑問.