x_hzx 发表于 2022-10-12 15:13

CH32V307RCT6 IAP升级 中断偏移地址问题

CH32V307RCT6 IAP升级 看例程 APP程序基地址在Link.ld设为0x00005000。。APP例程没有中断程序,只是个ADC采样。想问下如果有中断程序,比如USB中断或其它中断。那么需要像做arm那样,设置中断偏移地址吗?

x_hzx 发表于 2022-10-12 15:22

本帖最后由 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 时,向量表处存放的是异常处理函数
的绝对地址

x_hzx 发表于 2023-12-30 18:07

串口工具下载
https://pan.baidu.com/s/1tRfjzWihhxpFXWwBCNrYBA   提取码:GJYH
页: [1]
查看完整版本: CH32V307RCT6 IAP升级 中断偏移地址问题