完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现在在做CH32F103到CH32V103的移植,原先程序有做IAP。但是切换到RISC-V之后指令不知如何转换:
1、跳转:RISC-V没有__set_MSP指令,如何处理?跳转地址要+4吗? Jump_To_Application = (pFunction)(*(vu32*)(APP_BASE + 4)); __set_MSP(*(vu32*)APP_BASE); Jump_To_Application(); 2、中断向量重新映射:RISC-V没有这条指令,如何处理呢? NVIC_SetVectorTable(。。。) 3、ld文件中ROM起始地址0x00000000,改成0x08000000是否也可以,我看规格书说两个程序的启动地址一样? |
|
相关推荐
7个回答
|
|
你好,CH32V103 IAPdemo可见附件,LD文件中FLASH起始地址需设置成0,编译器会自动加0x08000000.
|
|
|
|
好的感谢。不过关于LD中起始地址设置为0问题,那么我在程序中要擦除FLASH地址20K后的删除。程序中的地址指针我是要设置成0x08005000还是x00005000?
另外CH32V的没有USBD,只有USBHD,但是我发现USB唤醒中断USBWakeUp_IRQHandler仍然保留,USBHD唤醒时也能响应此中断吗? |
|
|
|
你好,如果在程序中要擦除FLASH地址20K后的数据,地址应该设置为0x08005000,关于USBWakeUp_IRQHandler函数,USBHD唤醒能响应该中断
|
|
|
|
我碰到到同样的问题:中断向量重新映射?
2、中断向量重新映射:RISC-V没有这条指令,如何处理呢? NVIC_SetVectorTable(。。。) //RISC-V没有这条指令 CH32V103 IAPdemo附件中, USERCODE部分没有处理中断的实例代码, 如果加入中断,中断入口基地址如何设定?? 不设定是不是跳到 BOOT的中断入口? 我实际使用的芯片是CH32V307VCT6 ,在数据手册中找一个异常入口基地址寄存器(MTVEC) 专用CSR 寄存器 但在CH32V307VCT6 EVT中找不到它的定义,也不知如何使用,提示需要系统在机器模式下才能访问。 手册中也没有解答,何为机器模式,如何进入,如何退出? 是不是 在LD文件中设定好 0x00005000开始地址后,编译器在初始化程序中自动设定好中断向量基地址,IAP不用管它? |
|
|
|
您好,CH32V307的IAP升级基本和CH32V103类似,在LD文件里设置FLASH起始地址后中断向量会自动偏移,IAP不用管它,具体例程可参考2楼附件,关于所问机器模式,属于RISC-V架构定义的3种工作模式之一,为必选模式,其具体介绍可参考RISC-V特权架构文档
|
|
|
|
说明中,最好讲一讲向量表的切换原理,不知原理用着不放心。
找了很久,最后在初始化代码startup_CH32v30x.s中找到,编译后自动设置中断向量偏移地址 /* Enable floating point and interrupt */ li t0, 0x6088 csrs mstatus, t0 la t0, _vector_base ori t0, t0, 3 csrw mtvec, t0 |
|
|
|
官方EVT里面自带的ld文件设置FLASH地址在0x00000000是不科学的,FLASH实际地址在0x08000000,ld文件也应该设置到0x08000000
虽然编译生成的bin文件没有地址,但是hex文件是有地址的,显然起始地址0x00000000和0x08000000完全不同。 正确做法是ld文件中设置FLASH起始地址为0x08000000,然后在startup文件中增加以下代码: .section.init,"ax",@progbits .global_start .align1 _start: lui a0,0x8000 /* a0 = 0x8000<<12 if APP at 0x08005000 set 0x8005*/ jalr 8(a0) /* jump to 0x08000008*/ jhandle_reset .word 0x00000013 .word 0x00000013 虽然默认MCU会把0x08000000处的FLASH映射到0x00000000,用户所有的操作仍然应该按照0x08000000这个地址来,不能够用映射以后的0地址来操作,这也是STM32代表的ARM芯片的统一做法。 |
|
|
|
只有小组成员才能发言,加入小组>>
435 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2847 浏览 2 评论
2340 浏览 1 评论
788浏览 2评论
CH565W以太网,是必须有SKCKET中断才能发送数据吗?
415浏览 1评论
322浏览 1评论
用DVP采集图像,用UDP传给PC端,采集两帧后图像报错是什么原因?
457浏览 1评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
607浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-9 00:31 , Processed in 1.272690 second(s), Total 60, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号