CH32V307RCT6 IAP升级 中断偏移地址问题
CH32V307RCT6 IAP升级 看例程 APP程序基地址在Link.ld设为0x00005000。。APP例程没有中断程序,只是个ADC采样。想问下如果有中断程序,比如USB中断或其它中断。那么需要像做arm那样,设置中断偏移地址吗? 本帖最后由 x_hzx 于 2022-10-12 15:55 编辑现在个人理解:机器模式异常基地址寄存器(mtvec)然后选 BASEADDR bit0->MODE0 = 1 根据中断编号*4 进行地址偏移 。在BASEADDR向量表基地址。在IAP程序里已有
void SW_Handler(void) {
__asm("lia6, 0x5000");
__asm("jra6");
while(1);
}从USB或UART下载程序写到以08005000开始的Flash,验证完后,软件中断触发__asm("lia6, 0x5000");
__asm("jra6");跳转到 APP应用程序
异常或中断函数的入口基地址及寻址方式由异常入口基地址寄存器 mtvec 定义,mtvec定
义了异常或中断函数的基地址。mtvec定义了处理函数的寻址方式,其中 mtvec定义异常和QingKeV4
中断的入口模式,当 mtvec=0,所有异常和中断使用统一入口,即发生异常或中断时,转向
mtvec定义的基地址处执行。具体属于哪种类型或某个中断,需要通过 mcause 寄存器查询,并
且分别处理;当 mtvec=1,异常和中断使用向量表模式,即对每个异常和中断进行编号,根据中
断编号*4 进行地址偏移,发生异常或中断时,转向 mtvec定义的基地址+中断编号*4 处执行。
向量模式下 mtvec定义了向量表的识别模式,mtvec=0 时,向量表处存放的是一条跳转至异常
或中断处理函数的指令,也可以是一条其他指令;mtvec=1 时,向量表处存放的是异常处理函数
的绝对地址
串口工具下载
https://pan.baidu.com/s/1tRfjzWihhxpFXWwBCNrYBA 提取码:GJYH
页:
[1]