打印

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

[复制链接]
1823|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 (58.32 KB )

Cortex-M3 Vector_Table_Offset_Register.GIF

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝