#[cfg(not(test))]
use core::intrinsics::volatile_load;
#[cfg(not(test))]
use core::intrinsics::volatile_store;
pub fn write_mmap_device(address: u32, value: u32)
{
unsafe {
volatile_store(address as *mut u32, value);
}
}
pub fn read_mmap_device(address: u32) -> u32
{
unsafe {
return volatile_load(address as *mut u32);
}
}
#[cfg(test)]
pub unsafe fn volatile_load(address: *mut u32) -> u32 {
return 0x12345678;
}
#[cfg(test)]
pub unsafe fn volatile_store(address: *mut u32, value: u32)
{
assert_eq!(value, 0x12345678);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_mmap_device() {
let address = 0x1000;
let value = 0x12345678;
write_mmap_device(address, value);
assert_eq!(read_mmap_device(address), value);
}
}