请教CH32V305开发中的一些疑问

初次接触贵公司的RISC-V芯片,目前还在开发板的探索阶段。有几个粗浅的问题请教:

  1. 开发工具用的MRS-IDE,查看了一下携带的工具链和例程代码,发现了几乎所有的中断处理函数,在声明的时候都加上了“__attribute__((interrupt("WCH-Interrupt-fast")))”这样的属性,这个是沁恒自定义的属性吧?看论坛里面的一些帖子,意思是声明中断处理函数采用硬件压栈(这样应该会快一点)。但这样一来,是不是就只能使用来自MRS里面携带的工具链编译器啥的了,xpack官方的risc-v gcc工具链是不是就不能用了?

  2. 参看了EVT包里面,“USB/USBHS/DEVICE/SimulateCDC”的例子代码,有关USB Device的驱动程序是不是就是USB_Device里面的几个文件,整体挪移到其他项目中,还需要修改调整吗?哪几个文件是不建议用户动的?还是说看明白了之后,自己按照项目进行调整?感觉USB方面的代码,不像其他外设,在SRC目录里面有一组“库”啊,虽然SRC目录里面的“库”其实封装得也很薄。

  3. "ch32v30x_usbhs_device.c"文件中,USBHS_Endp_DataUp函数,根据寄存器“USBHSD->BUF_MODE”的模式,更新Tx分别采用了DMA和memcpy的方式,但在memcpy的时候,目标地址换算来自宏“USBHSD_UEP_TXBUF(endp)”,看了头文件的定义,这个USBHSD_UEP_TXBUF()宏就是把“USBHSD_UEP_TXDMA”的值+上了0x2000 0000,这个常数的出处在哪里?是指的SRAM起始地址“0x2000 0000”吗?

  4. 嗯,另外,CH32V305/7我看也是2线接口的,ARM上能用的CMSIS-DAP swd调试器能用吗?还是说只能使用wch-linke?

抱歉,由于第一次接触沁恒的MCU+SDK体系,比较懵圈,所以有些问题可能是很粗浅的,但还是希望可以得到一些点拨,谢谢。

您好,关于你的问题

1、关于MRS编译器中中断声明的作用主要如下:

(1)告诉编译器,这是个中断服务函数

(2)告诉编译器已进行硬件压栈,无需进行软件压栈

可以不用MRS里面携带的工具链编译器,可以使用其他RISC-V工具链,中断声明按照正常中断声明,无需加WCH-Interrupt-fast,保留双引号即可。但建议使用MRS或其工具链,因为其针对CH32V系列MCU硬件压栈和XW扩展指令集做了处理。关于中断及硬件压栈相关具体介绍,可参考QingKeV4微处理器手册第三章节,手册下载链接如下:

/downloads/QingKeV4_Processor_Manual_PDF.html

2、关于USB移植问题,可以将USB_Device文件夹下文件整体移植到其他工程中,若要修改,一般修改usb_desc.c文件和ch32v30x_usbhs_device.c文件即可,usb_desc.c文件主要涉及描述符的修改,ch32v30x_usbhs_device.c文件主要涉及枚举过程的修改。0x20000000是指SRAM起始地址。此外,使用USBD系统主频需要设置为48M、96M或144M。

3、CH32V系列MCU下载调试只能使用WCH-Link系列工具,ARM上的CMSIS-DAP工具不能用,关于WCH-Link工具,可联系销售进行申请购买。

后续若有问题,可通过邮箱(lzs@wch.cn)和我进行沟通



非常感谢如此细致的答复。后续的技术问题,我就直接发邮件向您请教。


使用USBHS的时候,也需要主频为48,96或144M吗?看手册里说USBD和OTG需要48M时钟,USBHS的时候应该不需要主频为48、96或144吧?


您好,使用USBD时需要设置主频为48、96或144M,使用USBHS不需要必须设置为48、96或144M,其他也可以



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