什么是中断向量偏移,为什么要做中断向量偏移?

描述

当MCU中有两段或以上程序的时候(第一个程序为用户BootLoader程序,其他的为APP程序,这个在前期视频《什么是ISP?什么是IAP》中有讲过),APP程序中都需要做中断向量偏移,那么什么是中断向量偏移,为什么要做中断向量偏移?

上一期常见问题《GD32 MCU是如何进入中断函数的》和大家讲过中断向量表的概念,当一个中断发生时,MCU会根据中断号去中断向量表中查找对应中断函数的入口。那如果APP程序中有中断发生,MCU还在0x08000000地址开始的地方去找中断函数入口显然是不行的,因为找到的中断函数入口对应的是BootLoader中断函数,跳转过去的话程序就运行异常了,这时候就需要做中断向量偏移:即让MCU从0x08000000偏移一段长度的地址开始去查找向量表。

比如一段APP程序保存在0x08008000(不会设置的小伙伴可以参考前期视频《keil中GD32 MCU IAP中APP的存储地址如何设置》),那么就需要MCU去这个地址开始的地方去查APP的向量表,也就是需要偏移0x8000。

中断向量

 

那么如何实现中断向量偏移呢?GD官方库中提供了一个函数:nvic_vector_table_set

中断向量

 

参数1为中断向量表基地址,一般选择NVIC_VECTTAB_FLASH,也就是flash的基地址0x08000000;

参数2为偏移量,比如这里我们用0x8000。

所以只要在main函数的第一句调用下这个函数就可以实现中断向量偏移啦:

中断向量

 

是不是特别简单呢?

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分