/*********************************************************************************************************//** * @brief Set the vector table location and Offset. * @param NVIC_VectTable: Specify if the vector table is in FLASH or RAM. * This parameter can be one of the following values: * @arg NVIC_VECTTABLE_RAM * @arg NVIC_VECTTABLE_FLASH * @param NVIC_Offset: Vector Table base offset field. * This value must be a multiple of 0x100. * @retval None ***********************************************************************************************************/ void NVIC_SetVectorTable(u32 NVIC_VectTable, u32 NVIC_Offset) { /* Check the parameters */ Assert_Param(IS_NVIC_VECTTABLE(NVIC_VectTable)); Assert_Param(IS_NVIC_OFFSET(NVIC_Offset)); SCB->VTOR = NVIC_VectTable | (NVIC_Offset & (u32)0x1FFFFF80); }
//设置向量表偏移地址 //NVIC_VectTab:基址 //Offset:偏移量 void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset) { //检查参数合法性 assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); assert_param(IS_NVIC_OFFSET(Offset)); SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器 //用于标识向量表是在CODE区还是在RAM区 }
/***************************************************************************//** * @brief * Set the allocation and offset of the vector table * * @details * * @note * * @param[in] NVIC_VectTab * Indicate the vector table is allocated in RAM or ROM * * @param[in] Offset * The vector table offset ******************************************************************************/ static void NVIC_SetVectorTable( rt_uint32_t NVIC_VectTab, rt_uint32_t Offset) { /* Check the parameters */ RT_ASSERT(IS_NVIC_VECTTAB(NVIC_VectTab)); RT_ASSERT(IS_NVIC_OFFSET(Offset)); SCB->VTOR = NVIC_VectTab | (Offset & (rt_uint32_t)0x1FFFFF80); }