简单说说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,如图:

简单说说NVIC_第1张图片
 

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

 

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

 

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

简单说说NVIC_第2张图片
 

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

 

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

 

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

 

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

 

你可能感兴趣的:(汇编,存储,byte,2010)