[RISC-V MCU 应用开发]

如何使用J-Link和Embedded Studio读写RISC-V处理器的CSR?

[复制链接]
293|4
手机看帖
扫描二维码
随时随地手机跟帖
麻花油条|  楼主 | 2022-9-14 14:25 | 显示全部楼层 |阅读模式
CSR简介
RISC-V 架构的控制和状态寄存器(Control and Status Register, CSR),用于配置或记录一些处理器核的运行状态。CSR寄存器是处理器核内部的寄存器,使用其专有的12位地址编码空间,数量最多有4096个。所以访问CSR寄存器需要使用特殊的指令
RISC-V定义了以下几种CSR访问指令:
pYYBAGMHKaWASMwKAAHl8_7_L2U480.png CSR除了RSC-V标准的CSR之外,芯片厂商可能还会添加自定义的CSR,用于实现一些特别功能。例如芯来科技的Bumblebee内核就扩展了数个CSR用于处理中断嵌套,记录处理器当前的异常类型等。
RISC-V的可扩展特性给了厂商比较大的灵活性,可扩展特性也引起了碎片化的问题。这个问题确实是存在的,只有当软硬件工具都提供了一种机制能够灵活的来适应不同的厂商,才能消除这个因素带来的影响。



使用特权

评论回复

相关帖子

麻花油条|  楼主 | 2022-9-14 14:27 | 显示全部楼层
J-Link访问CSR寄存器
J-Link从6.48 r1开始,支持了读写CSR。于是在对RISC-V处理器进行调试时,就很方便了。不论是标准的CSR,还是厂商自定义的CSR,只需要给出它的地址即可实现读或写操作。在此之前只能通过IDE的调试系统查看标准的CSR,而自定义CSR则无法在IDE调试窗口中查看。
poYBAGMHKa-AJ43sAAB3jZ_gdV4834.png 下面以gd32VF103这颗MCU为例,使用J-Link调试器以及J-Link Commander软件工具来读写标准和自定义CSR。GD32VF103使用的是芯来科技的Bumblebee内核,下面先在代码中触发一个EXti线0中断,然后通过J-Link读取标准CSR中的mcause寄存器:
pYYBAGMHKbiASn-iAABqOKcSCTU936.png 从mcause寄存器可以看到,当EXTI线0中断触发,bit31应该是1,bit11:0应该是其中断编号,从GD32VF103的手册中确认是25,也就是0x19。

poYBAGMHKbmAWvXYAAAXh1F7X_M725.png 在EXTI0的中断服务程序中加一个断点,让CPU在此暂停执行。

pYYBAGMHKbmAatUYAAA7ymzDHBQ376.png 然后通过J-Link Commander连上MCU,通过ReadCSR命令读取macuse(地址0x342):

poYBAGMHKbqAGTpVAAA217Ziaro621.png 可以确认读取CSR成功。










使用特权

评论回复
麻花油条|  楼主 | 2022-9-14 14:37 | 显示全部楼层
下面通过J-Link来写厂商自定义CSR。mcountinhibit(地址0x320)是Bumblebee内核提供的一个自定义CSR,用于开启和关闭RISC-V核内定时器和CPU计数器
pYYBAGMHKbqALshLAADB2z-wnrI504.png 通过WriteCSR命令,对mcountinhibit的CY位置位,关闭mcycle:
pYYBAGMHKbuAMmMCAAAmwESaFVA081.png 在IDE中可以,再次运行代码可以发现mcycle定时器的值不再变化,说明关闭成功。再次置零,mcycle的值又会变化。




使用特权

评论回复
麻花油条|  楼主 | 2022-9-14 14:38 | 显示全部楼层

poYBAGMHKbyAZHbUAAAhXfh9vyg259.png Segger Embedded Studio中查看自定义CSRSegger Embedded Studio是一个支持ARM和RISC-V架构的IDE,具有功能强,运行速度快等优点。从Embedded Studio for RISC-V v6.12a版本开始,用户可以添加厂商自定义的CSR。其中,针对RISC-V内核CSR,在安装路径的targets目录下的cpu_registers_riscv.xml文件描述了当前处理器支持的CSR。 pYYBAGMHKbyAeHPjAAAtYNIrRAU485.png 通过修改这个文件可以添加厂商自定义CSR。将这个文件复制到工程路径下面,进行修改。这里添加Bumblebee内核的msubm寄存器,其指示当异常发生时异常的类型。
poYBAGMHKb2AH_mCAAEQAfauWmA607.png 在cpu_registers_riscv.xml文件的最后面添加上对msubm寄存器的描述,并将Group命名为Customized CSRs:BumbleBee。
poYBAGMHKb2AMj_fAACId9s9VZo371.png 然后在Embedded Studio进入调试后,在寄存器窗口可以看到添加的自定义Group,将其使能。

pYYBAGMHKb6ACkODAAA3nS2yf1U858.png








使用特权

评论回复
麻花油条|  楼主 | 2022-9-14 14:40 | 显示全部楼层
当中断发生时,可从寄存器窗口看到msubm寄存器的TYP域的值变成了1,指示当前发生的是中断。

poYBAGMHKb-AIze3AACZvOf3q1Q140.png 当异常触发时,TYP域的值变成了2,指示当前发生的是系统异常。
poYBAGMHKb-AHwWdAADJ0shnu7g573.png
SEGGER的J-Link和Embedded Studio工具都针对RISC-V的CSR寄存器提供了读写功能,方便用户在使用不同厂家的MCU时提高调试的效率。如果你在使用RISC-V架构的处理器,并且有J-Link的话,不妨一试。




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则