打印
[单片机芯片]

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

[复制链接]
1173|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
x_hzx|  楼主 | 2022-10-12 15:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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[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 时,向量表处存放的是异常处理函数
的绝对地址

使用特权

评论回复
板凳
x_hzx|  楼主 | 2023-12-30 18:07 | 只看该作者
串口工具下载
https://pan.baidu.com/s/1tRfjzWihhxpFXWwBCNrYBA     提取码:GJYH

串口2.png (568.86 KB )

串口2.png

使用特权

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

本版积分规则

6

主题

133

帖子

3

粉丝