首页 > 其他分享 >CH32V系列MCU IAP升级跳转方法

CH32V系列MCU IAP升级跳转方法

时间:2024-01-23 13:33:54浏览次数:26  
标签:__ 方式 寄存器 跳转 CH32V a6 MCU asm

目前CH32V系列MCU EVT提供的IAP升级方式都是在SW_Handler函数中进行APP地址的跳转,如下图1,该方式在程序中需要使能该软件中断,如下图2配置。

图1

图2

该方式无需配置工程在机器模式下,无需修改启动文件中mstatus寄存器的值。

但某些情况下,软件中断函数需用做他用,或用户不想通过中断进行跳转,可直接在IAP程序中需跳转位置直接进行跳转。当不通过中断直接进行跳转时,需要配置工程在机器模式下,需要修改mstatus寄存器的值。

mstatus寄存器为机器模式状态寄存器,通过该寄存器可配置MCU运行在机器模式或用户模式下。此外,对于支持浮点运算的MCU,通过该寄存器可开启或关闭浮点运算功能。关于该寄存器的具体介绍,可参考各MCU对应的青稞手册,具体可在沁恒官网搜索下载。

CH32V103机器模式下配置mstatus的值为:0x1888

CH32V307机器模式下配置mstatus的值为:0x7888

 

关于跳转方式:

当直接跳转到某一固定地址时,直接在程序中使用跳转指令进行跳转即可,如下图:

 

当需要写成函数形式通过传参形式进行跳转时,具有以下三种方式:

方式1:

跳转函数按照下方式编写,注意此处一定要使用a0,需要加__attribute__((noinline)),具体如下:

__attribute__((noinline))
void jump_APP(uint32_t  addr)
{
    __asm("jr  a0");
    while(1);
}

使用时,直接在函数进行调用该函数即可,如下图:

 

方式2:

跳转函数按照下方式写,如下:

void jump_APP(uint32_t  addr)
{
    __asm volatile("jr %0": :"r"(addr));

    while(1);
}

使用方法与方式1一致,直接在程序调用即可。

 

方式3:

该方式相对比较简单,当需要跳转多个地址,且跳转地址确定时,可以使用下列方式:

void jump_APP(uint8_t  value)
{
    if(value==1)
    {
        __asm("li  a6, 0x5000");
        __asm("jr  a6");
    }
    else if (value==2)
    {
        __asm("li  a6, 0x6000");
        __asm("jr  a6");
    }
    else if (value==3)
    {
        __asm("li  a6, 0x7000");
        __asm("jr  a6");
    }
    else
    {
        __asm("li  a6, 0x8000");
        __asm("jr  a6");
    }

    while(1);
}

程序中可以使用if_else语句或switch case,该方式相对比较简单,使用方式与上述两种方式一致。

 

 

 

标签:__,方式,寄存器,跳转,CH32V,a6,MCU,asm
From: https://www.cnblogs.com/liaigu/p/17982248

相关文章

  • 32位双核TMS320F28379DZWTQR(MCU),HITAG®读卡器芯片HTRC11001T(125kHz)
    1、TMS320F28379DZWTQR ICMCU32BIT1MBFLASH337NFBGATMS320F28379D-Q1的说明C2000™32位微控制器针对处理、感应和驱动进行了优化,以提高实时控制应用(如工业电机驱动器、光伏逆变器和数字电源、电动汽车和运输、电机控制以及感应和信号处理)的闭环性能。C2000系列包含高级性......
  • shopify URL如何实现301跳转以及验证方法
    需要APP:TinyIMG步骤:1、在shopify后台打开插件“TinyImg”2、点击“改善SEO”,然后再点击“停止因链接断开而失去销售”3、点击“创建URL”重定向在上图中,按照指示分别填写所对应的URL,即可实现URL的重定向了。如何验证301跳转成功当我们设置URL重定向之后,如何验证其是否成......
  • 公众号跳转小程序方法
    在微信浏览器环境下如何跳转小程序一、使用scheme加密码跳转这个经过测试是可行的,但不能是明文的需要ticket加密过的链接二、使用微信自带的标签跳转需要注意的是官方文档没写的openTagList标签使用也要在wx.config种引入`<wx-open-launch-weappclass="launch_app"id="lau......
  • 关于CH32V307 TCP例程的使用
    以TCPClient例程为例: 1、首先通过电脑命令提示符输入ipconfig获取所要连接电脑的以太网IP地址,如下图: 2、根据获取的IP地址修改程序中的目标IP地址,注意程序中IP地址、网关的IP地址要和连接电脑的IP地址在同一网段,如下图:程序中的端口号可根据自己需求进行修改。 3、修改......
  • Vue3.0 路由动画(页面跳转)
    前言vue3.0的页面组件之前切换的动画效果,在移动端H5页面,交互体验比较好,就是带Vue3的Transition组件 之前的写法是 Transition的组件要包在routerView外面,但是3.0的语法就是要在在里面了,不然会黄色警告<divclass="animation"><RouterViewv-slot="{Component,......
  • 记一个vue2中使用路由时,在同一个页面跳转,但是url参数不同,不会重新渲染页面的问题
    vue2中使用路由时,页面自己跳转自己,但是携带的参数不一样预期想要的结果是:感冒2会跟随着url的参数进行变化,但是并没用 解决方法: 在App.vue这个页面中的router-view添加  :key="$route.fullPath"结果在自己跳转自己之后会刷新页面 达成:参考:https://blog.csdn.ne......
  • vue-element-admin关闭标签跳转到前一个标签,而不是最近的标签
    vue-element-admin中关闭标签跳转到前一个标签,而不是最近的标签。场景:先后打开A和B标签,接着从A标签页面内部跳转到C标签(A和C存在紧密关系)。这时如果关闭C标签,默认跳转到最近的B标签而不是A标签。如果A和C中间隔着很多标签,这种场景很难在找回A标签的位置。期望跳转时从A跳转到C处......
  • harmonyos 02 app创建,页面跳转
        HDF             添加button导入 router  返回按钮   指定返回的页面      ......
  • 如何给shopify的URL做301跳转
    很多shopify的运营者或者推广者由于缺货或者货物变更,又或者自己更换了使用的主题,导致自己的URL结构发生了变化,由于不想浪费掉自己原有URL的流量,就想做个301跳转,让自己新的网址来承接原有的流量。接下来给大家介绍下如何给自己的URL做301跳转。首先你要在后台先访问你的所要修改......
  • GBD调试之跳转执行代码(十六)
    跳转执行即跳转到指定位置去执行代码,也就是不按照正常的执行顺序往下执行代码而是跳过某些代码或者重复的反复的执行某些代码。这是非常有用的,假如不小心错过了观察某个函数的执行或者错过了某个重要的代码,可以通过jump命令重新执行一遍相关的代码。jump命令语法如下所示:jumploc......