//设置向量表偏移地址 //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); }