新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2016-8-1
- 在线时间
- 1 小时
|
5金钱
void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)
{
SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);
}
原子哥,最近在看STM32的中断机制,看到这个函数的时候我有点不太明白,VTOR是向量表偏移量寄存器,按照CM3权威指南上讲的,这个寄存器的第28-7位表示的是向量表的起始地址,而第29位表示的是向量表是在Code区还是在RAM区,可是在调用该函数时要么是MY_NVIC_SetVectorTable(0x20000000, 0x0),要么是MY_NVIC_SetVectorTable(0x08000000, 0x0),很据传进去的参数来计算的话SCB->VTOR=0x08000000或者是0x20000000,这算到最后不是代表的向量表的起始地址了么,可这和VTOR的寄存器的定义有出入啊?如果VTOR可以直接写进向量表的基址的话,那它的定义又起什么作用呢?
|
最佳答案
查看完整内容[请看2#楼]
0X2000 0000刚好就是设置29位为1, 0X8000 0000则设置29位为0. 这就控制了RAM还是CODE
|