void NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)这个函数是否有问题?

2019-10-11 16:30发布

void NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)
{
  /* Check the parameters */
  assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
  assert_param(IS_NVIC_OFFSET(Offset)); 
  
  SCB->VTOR = NVIC_VectTab | (Offset & (u32)0x1FFF FF80);
}

上面的Offset&(u32)0x1FFFFF80)是否有错啊?因为,NVIC_VTOR寄存器的Offset的位置是bit28-9。也就是说&后面的常数应该是0x1FFF FE00。是不是库函数错了,还是手册上的编辑有错?
另外,我们设定u32 Offset的时候,是否要考虑其在VTOR中的位置?假如,我想在Code寄存器中,从开始偏移3个位置,那么我的u32 Offset的值直接输入3。还是要把3的值左移8位(第8-0位(共9位)为保留位啊~!)再值写入VTOR?
请鲸鱼指点一下上面的两个问题:
1.Offset & (u32)0x1FFF FF80)是否有错?因为Offset在VTOR中的有效空间为bit28-9。
2.函数的第二个参数在输入时是否要事先左移8位?



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
moline
2019-10-12 21:19
本帖最后由 pxkbrsy 于 2017-3-15 09:25 编辑

楼主贴的那份文档,我也有,而且是在st官网下载的
(PM0056
Programming manual
STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual),
不应该出问题的啊。它跟原子大神贴出的英文原版上的描述确实有所出入啊!!(英文原版我也查看了,也是白纸黑字,如原子大神说的)
求大神解答。

一周热门 更多>