1use kernel::utilities::registers::interfaces::Writeable;
8use kernel::utilities::registers::{register_bitfields, ReadWrite};
9use kernel::utilities::StaticRef;
10
11#[repr(C)]
12pub struct RtcRegisters {
13    rtccfg: ReadWrite<u32, rtccfg::Register>,
15    _reserved1: [u8; 4],
16    rtclo: ReadWrite<u32, rtclo::Register>,
18    rtchi: ReadWrite<u32>,
20    rtcs: ReadWrite<u32>,
22    _reserved2: [u8; 12],
23    rtccmp: ReadWrite<u32, rtccmp::Register>,
25}
26
27register_bitfields![u32,
28    rtccfg [
29        cmpip OFFSET(28) NUMBITS(1) [],
30        enalways OFFSET(12) NUMBITS(1) [],
31        scale OFFSET(0) NUMBITS(4) []
32    ],
33    rtclo [
34        rtclo OFFSET(0) NUMBITS(32) []
35    ],
36    rtchi [
37        rtchi OFFSET(0) NUMBITS(16) []
38    ],
39    rtccmp [
40        rtccmp OFFSET(0) NUMBITS(32) []
41    ]
42];
43
44pub struct Rtc {
45    registers: StaticRef<RtcRegisters>,
46}
47
48impl Rtc {
49    pub const fn new(base: StaticRef<RtcRegisters>) -> Rtc {
50        Rtc { registers: base }
51    }
52
53    pub fn disable(&self) {
55        let regs = self.registers;
56
57        regs.rtccfg.write(rtccfg::enalways::CLEAR);
59
60        regs.rtccmp.set(0xFFFF_FFFF);
62    }
63}