CH32V103 读取CSR寄存器的问题

在QingKeV4_Processor_Manual文件的第30页,有描述架构编号寄存器(marchid),读取值为:0xDC68D886.

于是在CH32V103上尝试读取,调用core_riscv.c文件中的如下函数:

uint32_t __get_MARCHID(void)

{

    uint32_t result;


    __ASM volatile("csrr %0,""marchid": "=r"(result));

    return (result);

}


__get_MARCHID(); 在程序中运行到这个函数时,似乎是卡死了。不知为何?


请问在CH32V103上如何正确操作,才能读取到架构编号寄存器 ( marchid )的值?


您好,我们的CH32V103是青稞V3A内核的处理器,marchid的值未进行设定,默认为0;

如果您想要读取的话,因为官方的EVT例程默认是工作在用户模式下运行的,当对内核的寄存器进行访问的时候,需要在中断或者机器模式下进行,否则会进hard fault

关于进入机器模式的方法,在内核手册中有相应的说明,在启动文件startup_ch32v10x.s文件的初始化中把mstatus寄存器的MPP设置为0x3即可;相关改动如下:

已修改好的打印MARCHIP的例程已放在附件中,可以自行下载调试。

QQ截图20220907150020.png

icon_rar.gifCH32V103_MARCHID.zip



感谢支持! 可以读取marchid的值啦,确实是全0.


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