中断向量重定位
//重定位中断向量表到0x08003000
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x3000处);
/**
*@brief设置向量表的位置和偏移量。
*参数NVIC_VectTab:指定是否向量表在RAM或闪存。
*该参数可以是以下值之一:
*@arg NVIC_VectTab_RAM
*@arg NVIC_VectTab_FLASH
*参数偏移:矢量表基本偏移字段。此值必须是多
*的为0x200。
*@retval无
*/
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
{
/* Check the parameters */
assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
assert_param(IS_NVIC_OFFSET(Offset));
SCB->VTOR = NVIC_VectTab| (Offset & (uint32_t)0x1FFFFF80);
}
#define NVIC_VectTab_RAM ((uint32_t)0x20000000)
#define NVIC_VectTab_FLASH ((uint32_t)0x08000000)
#define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) ||\
((VECTTAB) == NVIC_VectTab_FLASH))
把内核烧录到nandflash里面。这部分代码记作A,准备拷贝到内存中。A的代码在内存中的地址和nandflash中A的代码地址是不一样的。开始启动时,A代码在nandflash中执行,但是A代码的地址是内存中的地址,这时是无法找到A代码的,所以要重新定位,计算出A在nandflash中的地址。