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}