#![cfg_attr(not(test), no_std)]
use core::ptr::{addr_of, addr_of_mut};
#[repr(C, align(4))]
struct Registers {
dr: u32,
mr: u32,
lr: u32,
cr: u8,
_reserved0: [u8; 3],
imsc: u8,
_reserved1: [u8; 3],
ris: u8,
_reserved2: [u8; 3],
mis: u8,
_reserved3: [u8; 3],
icr: u8,
_reserved4: [u8; 3],
}
pub struct Rtc {
registers: *mut Registers,
}
impl Rtc {
pub unsafe fn new(base_address: *mut u32) -> Self {
Rtc {
registers: base_address as _,
}
}
pub fn get_unix_timestamp(&self) -> u32 {
unsafe { addr_of!((*self.registers).dr).read_volatile() }
}
pub fn set_unix_timestamp(&mut self, unix_time: u32) {
unsafe { addr_of_mut!((*self.registers).lr).write_volatile(unix_time) }
}
}
unsafe impl Send for Rtc {}
unsafe impl Sync for Rtc {}