请教中断向量表的位置计算

[复制链接]
2492|1
 楼主| addsup 发表于 2012-1-30 20:53 | 显示全部楼层 |阅读模式
stm32f10x_nvic.c中有这个函数:

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)0x1FFFFF80);
}

这里的0x1FFFFF80是不是不正确呢?不是应该0x1FFFFE00吗?
参照 Cortex-M3权威指南Cn P113 如果一共有68个中断,则共有68+16(系统异常)=84 个向量,向上增大到2 的整次幂后值为128,因此地址地址必须能被128*4=512 整除,从而合法的起始地址可以是:0x0, 0x200, 0x400 等。那么不是应该0x1FFFFE00吗?


谢谢。




香水城 发表于 2012-1-31 11:13 | 显示全部楼层
这是摘自ARM的Cortex-M3 Technical Reference Manual: 
Cortex-M3 Vector_Table_Offset_Register.GIF
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部