本帖最后由 x_hzx 于 2022-10-12 15:55 编辑
现在个人理解:机器模式异常基地址寄存器(mtvec)然后选 BASEADDR bit0->MODE0 = 1 根据中断编号*4 进行地址偏移 。在BASEADDR[31:2]向量表基地址。在IAP程序里已有
void SW_Handler(void) {
__asm("li a6, 0x5000");
__asm("jr a6");
while(1);
}从USB或UART下载程序写到以08005000开始的Flash,验证完后,软件中断触发__asm("li a6, 0x5000");
__asm("jr a6");跳转到 APP应用程序
异常或中断函数的入口基地址及寻址方式由异常入口基地址寄存器 mtvec 定义,mtvec[31:2]定
义了异常或中断函数的基地址。mtvec[1:0]定义了处理函数的寻址方式,其中 mtvec[0]定义异常和QingKeV4
中断的入口模式,当 mtvec[0]=0,所有异常和中断使用统一入口,即发生异常或中断时,转向
mtvec[31:2]定义的基地址处执行。具体属于哪种类型或某个中断,需要通过 mcause 寄存器查询,并
且分别处理;当 mtvec[0]=1,异常和中断使用向量表模式,即对每个异常和中断进行编号,根据中
断编号*4 进行地址偏移,发生异常或中断时,转向 mtvec[31:2]定义的基地址+中断编号*4 处执行。
向量模式下 mtvec[1]定义了向量表的识别模式,mtvec[1]=0 时,向量表处存放的是一条跳转至异常
或中断处理函数的指令,也可以是一条其他指令;mtvec[1]=1 时,向量表处存放的是异常处理函数
的绝对地址
|