`
dato0123
  • 浏览: 916591 次
文章分类
社区版块
存档分类
最新评论

简单说说NVIC

 
阅读更多

//=====================================================================
//TITLE:
// 简单说说NVIC
//AUTHOR:
// norains
//DATE:
// Tuesday 20-October-2010
//Environment:
// KEIL MDK 4.0
// STM32F103ZE
//=====================================================================

对于CORTEX-ME而言,NVIC的重要性不言而喻。只不过对于初学者,可能刚开始调试时会遇到一些问题,本篇就简单就几个问题说一说。

1.如何查看NVIC寄存器

如果使用的是MDK,那么查看向量表的地址很简单,只需要查看NVIC_VT0的数值即可。因为NVIC_VTO存储的是中断向量的内存地址,例如,CPU重启之后,其复位后的数值为0x00000000,如图:


当然,也可以重新定位向量表的地址,这个可以简单通过汇编代码实现,如:

LDR R0,= 0x20000000
LDR R1,= 0xE000ED08
STR R0,[R1]

执行完毕之后,NVIC_VT0就指向内存地址0x2000 0000了,如图:


2.如何确定向量表的地址

假如我们的向量表有48个向量,那么对于其所存放的地址有什么特殊要求么?答案自然是有的。我们就以这48个向量为例子。

因为现在向量是48个,和2的整次幂不符合,所以要向上圆整到64。而每一个向量,都是32bit,也就是4Byte,所以整个向量表的大小就是64 * 4 = 256Byte。而对于内存地址来说,地址数值每增加1,其实就是增加一个1Byte。所以,对于这个向量表的起始地址来说,除非是0x00000000,否则一定要能够被256整除。因此可以合法的起始地址可以是0x0000 0000,0x0000 0100,0x0000 0200等。

可能说明有点复杂,起始我们只要抓住一个原则,就是向量表的起始地址一定要能够被向量表的大小整除即可。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics