中断向量重定位

时间:2021-08-29 14:28:06

中断向量重定位

//重定位中断向量表到0x08003000

NVIC_SetVectorTableNVIC_VectTab_FLASH0x3000处);

/**

  *@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中的地址。



中断向量重定位