打印
[RISC-V MCU 应用开发]

GD32VF103的中断向量表

[复制链接]
3436|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
asmine|  楼主 | 2021-10-9 15:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
中断向量表vector_base被放置在.init段的首部,从flash地址0x08000000开始。和STM32不一样的地方在于,GD32VF103的中断向量表实际是由ECLIC控制器CSR寄存器中的mtvec、mtvt、mtvt2寄存器指定。

GD32VF103的中断控制器具有两种模式:默认模式和ECLIC模式。模式的设置由mtvec[5:0]指定,当mtvec[5:0]==6’b000011时为ECLIC模式。处理函数入口由mtvec[31:6]指定(处理函数入口地址必须为64字节对齐)。

默认模式:所有中断,异常,NMI都由mtvec[31:6]指定的处理函数进行处理;
ECLIC模式:异常,NMI由mtvec[31:6]指定的处理函数进行处理,中断由mtvt2寄存器指定的处理函数进行处理,并由mtvt寄存器指定中断向量表地址
GD32VF103 ECLIC的中断向量寄存器



RISC-V处理器的中断系统和NVIC的中断系统不同,RISC-V的中断系统分为NMI,异常,外部中断三个概念。因此也分由不同的向量寄存器设置入口地址。由于risc-v的中断和异常都不进行自动现场保护,所以需要软件手动进行现场保护处理,因此无法直接使用C函数响应中断,需要一个基于汇编的入口函数进行处理,在汇编入口函数中再对C函数进行调用。

GD32VF103在ECLIC中断模式中,mtvec用于保存nmi和异常入口函数地址,不会进行自动的向量表调用。需要由入口函数进行转发处理。在官方代码中,响应函数为entry.S中的trap_entry函数。

mtvt2用于保存中断响应入口函数地址,处理函数位于entry.S中的irq_entry,函数mtvt保存向量表地址,mtvt2寄存器的irq_entry函数和mtvt寄存器中的向量表共同组成一个two-stage的中断向量表系统,irq_entry中对现场进行保护,并触发ECLIC调用中断向量表。

start.S中定义vector_base,vector_base的第一个字放置了一条跳转指令直接跳转到_start,程序从这里开始执行,和stm32不同的是,GD32VF103默认的中断向量表并不在vector_base,需要之后_start进行设置




使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

124

主题

720

帖子

2

粉丝