CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

GR5515异步回调,不报错也不生效 GR551x

187***543

2021-11-19 15:44

GR5515设备,设备由APPA跳转到APPB工作,由于无法反初始化蓝牙协议,对中断向量表进行disable再enble,不停地切换蓝牙的发送接收进行设备通信,有极低的概率异步回调没产生回调中断也没报错,协议栈处于一种不工作状态,设备其他功能还在正常运行,只能重启设备解决,不知道贵公司是否有遇到过类似的情况,是否有解决方案

0收藏

0赞成

Justin

2021-11-23 09:49

不清楚您的SDK版本,请使用如下代码尝试,看能否解决问题呢?

#include "gr55xx.h"
#include "gr55xx_hal.h"
#include "gr55xx_sys.h"
#include "gr55xx_dfu.h"

extern void jump_app(uint32_t addr);
extern boot_info_t bl1_boot_info;
extern void rom_init(void);

void app_start_jump(uint32_t jump_addr)
{
__disable_irq();
SysTick->CTRL = 0;
for(uint8_t i = 0; i < MAX_NUMS_IRQn; i++)
{
NVIC_DisableIRQ((IRQn_Type)(i));
}
__enable_irq();
ll_pwr_enable_comm_core_reset();
ll_pwr_enable_comm_timer_reset();
ll_pwr_disable_comm_core_power();
ll_pwr_disable_comm_timer_power();
rom_init();
bl1_boot_info.load_addr = jump_addr;
bl1_boot_info.run_addr = jump_addr;
jump_app(jump_addr);
}
// 如遇到编译问题,请增加如下符号表项目到如下路径文件
// 路径:app\components\patch\symbol_table\rom_symbol.txt
0x00801f10 D bl1_boot_info


0条评论

0赞成

0收藏

您的评论

Justin

2021-11-23 09:52

在进入跳转之前,标准流程如下:

1)关闭所有NVIC中断,避免跳转之后相关模块未初始化就处理中断;

2)调用rom_init重新初始化rom变量,并关闭蓝牙供电;

3)修改rom中记录warm_boot的跳转地址变量,避免WARM BOOT跳回老固件;

4)使用jump_app配置正确的中断向量表再跳转。


对于任务里面跳转失败的解决方法,跳转前调用如下switch_2_main_context函数:

__asm void switch_2_main_context(void)
{
PRESERVE8
mov r0,#0
msr CONTROL,r0
ALIGN
}


0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注