CSR 位字段

RISC-V dcsr CSR 寄存器详解

地址 0x7B0特权级 仅 Debug 模式访问 读写 / XLENDebug、Trace 与 trigger CSR

dcsr(地址 0x7B0)是仅 Debug 模式可见的 Debug Control and Status CSR。

位作用速览
bit 3 = 只有第 3 位;bits 12..11 = 第 12 到第 11 位
高位 MSB低位 LSB
保留63:32prv1:0读写
字段映射

按 bit 字段理解 dcsr

10 个关键字段
31:28

xdebugver

只读

外部调试规范版本编码。

这个字段控制什么

  • - 外部调试规范版本编码。

常见取值

dcsr.xdebugver
0无调试支持

没有外部调试支持。

1-3保留

RISC-V Debug Specification 1.0 未定义这些编码的当前可移植含义。

4Debug 1.0

存在符合 RISC-V Debug Specification 1.0 的调试支持。

5-14保留

保留编码;可移植软件不应写入或依赖。

15自定义

存在调试支持,但不符合任何可用版本的 RISC-V Debug Specification。

打开官方手册
15

ebreakm

读写

M 模式执行 EBREAK 时进入 Debug Mode。

这个字段控制什么

  • - M 模式执行 EBREAK 时进入 Debug Mode。

常见取值

dcsr.ebreakm
0异常路径

M 模式 执行 EBREAK 时按特权架构的断点异常路径处理。

1进入 Debug Mode

M 模式 执行 EBREAK 时进入 Debug Mode。

打开官方手册
13

ebreaks

读写

S 模式执行 EBREAK 时进入 Debug Mode。

这个字段控制什么

  • - S 模式执行 EBREAK 时进入 Debug Mode。

常见取值

dcsr.ebreaks
0异常路径

S 模式 执行 EBREAK 时按特权架构的断点异常路径处理。

1进入 Debug Mode

S 模式 执行 EBREAK 时进入 Debug Mode。

打开官方手册
12

ebreaku

读写

U 模式执行 EBREAK 时进入 Debug Mode。

这个字段控制什么

  • - U 模式执行 EBREAK 时进入 Debug Mode。

常见取值

dcsr.ebreaku
0异常路径

U 模式 执行 EBREAK 时按特权架构的断点异常路径处理。

1进入 Debug Mode

U 模式 执行 EBREAK 时进入 Debug Mode。

打开官方手册
11

stepie

读写

单步执行期间是否允许中断。

这个字段控制什么

  • - 单步执行期间是否允许中断。

常见取值

dcsr.stepie
0单步时屏蔽中断

单步执行期间中断被屏蔽。

1单步时允许中断

单步执行期间允许中断。

打开官方手册
10

stopcount

读写

Debug Mode 下是否停止计数器。

这个字段控制什么

  • - Debug Mode 下是否停止计数器。

常见取值

dcsr.stopcount
0计数器继续

Debug Mode 中 hart-local 计数器照常递增。

1冻结计数器

Debug Mode 中以及导致进入 Debug Mode 的 EBREAK 上,hart-local 计数器不递增。

打开官方手册
9

stoptime

读写

Debug Mode 下是否停止计时器。

这个字段控制什么

  • - Debug Mode 下是否停止计时器。

常见取值

dcsr.stoptime
0计时继续

Debug Mode 中计时器照常递增。

1冻结计时

Debug Mode 中计时器不递增;实现可能将该位硬连为 0。

打开官方手册
8:6

cause

只读

进入 Debug Mode 的原因编码。

这个字段控制什么

  • - 进入 Debug Mode 的原因编码。

常见取值

dcsr.cause
0保留

保留编码;可移植软件不应依赖其含义。

1EBREAK

由于 EBREAK 指令进入 Debug Mode。

2Trigger

由于 trigger 模块进入 Debug Mode。

3Halt request

由于 debugger halt request 进入 Debug Mode。

4Step

由于单步执行进入 Debug Mode。

5Reset halt request

由于 reset halt request 直接从 reset 后进入 Debug Mode。

6Halt group

由于 halt group 请求进入 Debug Mode。

7其他/扩展原因

Debug Mode 由其他原因进入;若实现 extcause,可由 extcause 给出更具体原因。

打开官方手册
2

step

读写

单步执行控制位。

这个字段控制什么

  • - 单步执行控制位。

常见取值

dcsr.step
0不单步

恢复后不请求单步执行。

1单步

恢复后 hart 执行一条指令后重新进入 Debug Mode。

打开官方手册
1:0

prv

读写

恢复执行时的特权级。

这个字段控制什么

  • - 恢复执行时的特权级。

常见取值

dcsr.prv
0User

恢复执行时使用 User 特权级。

1Supervisor

恢复执行时使用 Supervisor 特权级。

2保留

保留特权级编码;可移植软件不应写入或依赖。

3Machine

恢复执行时使用 Machine 特权级。

打开官方手册

读这个 CSR 时先看什么

  • - 先确认当前 hart 和调试实现是否提供 dcsr。
  • - dcsr 位于 0x7B0-0x7BF Debug-mode-only CSR 区间;普通 M 模式软件不能把它当作 Machine CSR 直接访问。
  • - 在 Debug 模式或调试规范定义的上下文中访问,并按 Debug Specification 和实现规则解释字段。

写入前的风险检查

  • - 写入前保留未修改的位,避免把保留位或实现定义位写成非规范值。
  • - 优先使用 CSRRS/CSRRC 做局部置位或清位,避免 CSRRW 覆盖并发更新的状态位。

放回真实流程里理解

1

进入 Debug 模式后按 Debug Specification 读取 dcsr。

2

只修改目标调试字段,保留未修改位和实现定义字段。

3

通过 resume、单步或调试模块行为验证设置是否生效。