Skip to content

Commit 9e6a4d0

Browse files
Implement DPC CSR for RISC-V
1 parent fe2f55f commit 9e6a4d0

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

riscv/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
99

1010
### Added
1111

12+
- Add `dpc` CSR support for RISC-V
1213
- Add Mtopi
1314
- Added DCSR (Debug Control and Status Register) CSR support for the RISC-V
1415
- Add `miselect` CSR

riscv/src/register.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,4 @@ mod tests;
131131

132132
// TODO: Debug Mode Registers
133133
pub mod dcsr;
134+
pub mod dpc;

riscv/src/register/dpc.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//! dpc register — Debug PC (0x7b1)
2+
3+
read_write_csr! {
4+
/// Debug PC Register
5+
Dpc: 0x7b1,
6+
mask: !1usize,
7+
}
8+
9+
#[cfg(test)]
10+
mod tests {
11+
use super::*;
12+
13+
#[test]
14+
fn test_dpc_alignment_mask() {
15+
let dpc = Dpc::from_bits(0x1);
16+
assert_eq!(dpc.bits() & 1, 0);
17+
}
18+
19+
#[test]
20+
fn test_dpc_bits_roundtrip() {
21+
let dpc = Dpc::from_bits(0x12345);
22+
assert_eq!(dpc.bits(), 0x12344);
23+
assert_eq!(Dpc::from_bits(dpc.bits()).bits(), dpc.bits());
24+
}
25+
}

0 commit comments

Comments
 (0)