sifive_test_device/
lib.rs1#![no_std]
4#![deny(warnings, missing_docs)]
5
6use core::cell::UnsafeCell;
7
8#[repr(transparent)]
10pub struct SifiveTestDevice(UnsafeCell<u32>); const FAIL: u16 = 0x3333;
13const PASS: u16 = 0x5555;
14const RESET: u16 = 0x7777;
15
16impl SifiveTestDevice {
17 #[inline]
19 pub fn fail(&self, code: u16) -> ! {
20 self.write(FAIL as u32 | (code as u32) << 16)
21 }
22
23 #[inline]
25 pub fn pass(&self) -> ! {
26 self.write(PASS as _)
27 }
28
29 #[inline]
31 pub fn reset(&self) -> ! {
32 self.write(RESET as _)
33 }
34
35 #[inline]
36 fn write(&self, bits: u32) -> ! {
37 unsafe { self.0.get().write_volatile(bits) };
38 unreachable!()
39 }
40}