CH571跳转位置运行如何操作

CH571跳转位置运行如何操作

根据例程参考需要调用jumpApp,jumpApp中设定的地址为需要转到运行的地址

#define IMAGE_A_START_ADD    0x1000
#define jumpApp              ((void (*)(void))((uint32_t *)IMAGE_A_START_ADD))

需要请教的第一个问题是:IAP中跳转到APP之前是否需要关各种外设或者中断什么的?

APP程序中ld文件修改FLASH初地址和长度

FLASH (rx) : ORIGIN = 0x00001000, LENGTH = 44K

对比启动文件也有不同

li t0, 0x88
csrs mstatus, t0
la t0, _vector_base
ori t0, t0, 1
csrw mtvec, t0
la t0, main
csrw mepc, t0

j 0x10000

需要请教的第二个问题是:0x88,0x10000这两个地址是什么含义,修改APP位置是否需要修改此数值?

另外,如果不通过变量标志ImageFlag,ld文件中是否不需要以下变量保持?

KEEP(*(.ImageFlag))
KEEP(*(.ImageFlag.*))


  1. 一般IAP会写的简单,不开启额外的功能,跳转到app之前最好是要关闭中断这些操作的。

  2. 0x88是用户模式,不用修改,j 0x10000指向固定库位置,对于571而言,flash是192k,库只能放在这边,所以不用修改,

  3. 不用标志ImageFlag可以不保持。


mstatus.png


可以看一下mstatus寄存器描述,0x88代表开启机器模式中断,同时把MPIE置1(MPIE 更新为进入异常和中断前的 MIE 值,异常和中断结束后,MPIE 用于恢复 MIE)


手册在哪下载的


您好,请参考青稞微处理器手册:

QingKeV4_Processor_Manual.PDF - k1体育 - 十年品牌 值得信赖 (wch.cn)



只有登录才能回复,可以选择微信账号登录