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位?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>