WCH沁恒单片机
直播中

胖子的逆袭

12年用户 1101经验值
私信 关注
[问答]

请问一下CH579 IAP时中断向量表如何重定向?

论坛里看到 RB_ROM_CODE_OFS置一使用32K作为BOOT,执行时跳转直接卡死
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
    R8_RESET_STATUS |= RB_ROM_CODE_OFS;
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG0;


如下代码可以跳转到0x8000,但是中断向量表未重定向
     pFunction Jump_To_Application;
     u32 JumpAddress;
     DisableAllIRQ();
     JumpAddress = *(u32 *)entry_add;
     Jump_To_Application = (pFunction)(JumpAddress);
     Jump_To_Application();


看了蓝牙的OTA例程,是拷贝APP FLASH的第一块拷到0x00000000地址中,这会对自己的BOOT造成影响?BOOT有以太网进行OTA的程序



回帖(2)

孙喆

2022-8-3 10:17:01
CH579不支持中断向量重映射,
可以在程序中直接跳到boot去升级,见EnterCodeUpgrade()函数;



也可以使用软件的方式中转一下中断向量跳转,具体可参考附件的代码,
IAP.zip
举报

赵羽

2022-8-3 10:17:07
解决了:
BOOT区 ,APP区


在BOOT区定义一个标志位在RAM中
__IO uint32_t CODE_FLAG __attribute__((at(0x20000000)));
CODE_FLAG  = 1;


将所用的APP所用到的中断函数定义好,
中断函数中判断标识跳转到APP中断函数的地址入口


跳转后到APP区将,标志位改变
CODE_FLAG  = 2;// *(uint32_t *)(0x20000000);
举报

更多回帖

发帖
×
20
完善资料,
赚取积分