NVIC的向量表偏移寄存器设置问题(已解决)

2019-07-20 23:51发布

void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset) 
{
   //检查参数合法性
 assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
 assert_param(IS_NVIC_OFFSET(Offset));   
 SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器
 //用于标识向量表是在CODE区还是在RAM区
}

问个问题,为什么(Offset & (u32)0x1FFFFF80)  为什么使用0x1FFFFF80,0x1FFFFF80是怎样得来的呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
38条回答
kenluo
2019-07-22 10:33
按上面的算法,好像也挺对的,Offset&0X1FFF FF80

Offset:是偏移量的计算

也就是说STM32自己有60个中断,加上CM3的16个,总共有76个中断,扩大到2的整次幂,那就是128,然后再乘以4,得到512,也就是0X200.根据这样计算,合法的偏移地址应该是0X0,0X200,0X400,0X600,0x800......


29 TBLBASE R/W 0 Table base in Code (0) or RAM (1) 
28:7 TBLOFF R/W 0 Table offset value from Code region or RAM region 

屏蔽前七位0x1FFFFF80和后三位+Offset + VECTTOR就是开始地址

不知道我的理解对不对?

一周热门 更多>