zynq-rs/src/zynq/flash/spi_flash_register.rs

60 lines
1.1 KiB
Rust
Raw Normal View History

2019-12-14 08:55:17 +08:00
use bit_field::BitField;
pub trait SpiFlashRegister {
fn inst_code() -> u8;
2019-12-16 06:52:47 +08:00
fn new(src: u8) -> Self;
2019-12-14 08:55:17 +08:00
}
macro_rules! u8_register {
($name: ident, $inst_code: expr) => {
#[derive(Clone)]
pub struct $name {
pub inner: u8,
}
impl SpiFlashRegister for $name {
fn inst_code() -> u8 {
$inst_code
}
2019-12-16 06:52:47 +08:00
fn new(src: u8) -> Self {
2019-12-14 08:55:17 +08:00
$name {
2019-12-16 06:52:47 +08:00
inner: src,
2019-12-14 08:55:17 +08:00
}
}
}
2019-12-16 06:52:47 +08:00
impl $name {
pub fn is_zeroed(&self) -> bool {
self.inner == 0
}
}
2019-12-14 08:55:17 +08:00
};
}
u8_register!(CR, 0x35);
u8_register!(SR1, 0x05);
impl SR1 {
/// Write In Progress
pub fn wip(&self) -> bool {
self.inner.get_bit(0)
}
/// Write Enable Latch
pub fn wel(&self) -> bool {
self.inner.get_bit(1)
}
/// Erase Error Occurred
pub fn e_err(&self) -> bool {
self.inner.get_bit(5)
}
/// Programming Error Occurred
pub fn p_err(&self) -> bool {
self.inner.get_bit(6)
}
}
u8_register!(SR2, 0x07);