use rigless::soc::{Access, FieldSpec, Layout, ReadAction, RegisterSpec, Width, WriteModify};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Register {
Acr = 0,
Keyr = 1,
Optkeyr = 2,
Sr = 3,
Cr = 4,
Optcr = 5,
Optcr1 = 6,
}
impl Register {
pub const ALL: [Self; 7] = [Self::Acr, Self::Keyr, Self::Optkeyr, Self::Sr, Self::Cr, Self::Optcr, Self::Optcr1];
}
impl Layout for Register {
const REGISTERS: &'static [RegisterSpec] = ®ISTERS;
fn from_index(index: usize) -> Option<Self> {
Self::ALL.get(index).copied()
}
fn index(self) -> usize {
self as usize
}
}
pub mod acr {
use super::FieldSpec;
pub const LATENCY: &FieldSpec = &super::REGISTERS[0].fields[0];
pub const PRFTEN: &FieldSpec = &super::REGISTERS[0].fields[1];
pub const ICEN: &FieldSpec = &super::REGISTERS[0].fields[2];
pub const DCEN: &FieldSpec = &super::REGISTERS[0].fields[3];
pub const ICRST: &FieldSpec = &super::REGISTERS[0].fields[4];
pub const DCRST: &FieldSpec = &super::REGISTERS[0].fields[5];
}
pub mod keyr {
use super::FieldSpec;
pub const KEY: &FieldSpec = &super::REGISTERS[1].fields[0];
}
pub mod optkeyr {
use super::FieldSpec;
pub const OPTKEY: &FieldSpec = &super::REGISTERS[2].fields[0];
}
pub mod sr {
use super::FieldSpec;
pub const EOP: &FieldSpec = &super::REGISTERS[3].fields[0];
pub const OPERR: &FieldSpec = &super::REGISTERS[3].fields[1];
pub const WRPERR: &FieldSpec = &super::REGISTERS[3].fields[2];
pub const PGAERR: &FieldSpec = &super::REGISTERS[3].fields[3];
pub const PGPERR: &FieldSpec = &super::REGISTERS[3].fields[4];
pub const PGSERR: &FieldSpec = &super::REGISTERS[3].fields[5];
pub const BSY: &FieldSpec = &super::REGISTERS[3].fields[6];
}
pub mod cr {
use super::FieldSpec;
pub const PG: &FieldSpec = &super::REGISTERS[4].fields[0];
pub const SER: &FieldSpec = &super::REGISTERS[4].fields[1];
pub const MER: &FieldSpec = &super::REGISTERS[4].fields[2];
pub const SNB: &FieldSpec = &super::REGISTERS[4].fields[3];
pub const PSIZE: &FieldSpec = &super::REGISTERS[4].fields[4];
pub const MER1: &FieldSpec = &super::REGISTERS[4].fields[5];
pub const STRT: &FieldSpec = &super::REGISTERS[4].fields[6];
pub const EOPIE: &FieldSpec = &super::REGISTERS[4].fields[7];
pub const ERRIE: &FieldSpec = &super::REGISTERS[4].fields[8];
pub const LOCK: &FieldSpec = &super::REGISTERS[4].fields[9];
}
pub mod optcr {
use super::FieldSpec;
pub const OPTLOCK: &FieldSpec = &super::REGISTERS[5].fields[0];
pub const OPTSTRT: &FieldSpec = &super::REGISTERS[5].fields[1];
pub const BOR_LEV: &FieldSpec = &super::REGISTERS[5].fields[2];
pub const BFB2: &FieldSpec = &super::REGISTERS[5].fields[3];
pub const WDG_SW: &FieldSpec = &super::REGISTERS[5].fields[4];
pub const NRST_STOP: &FieldSpec = &super::REGISTERS[5].fields[5];
pub const NRST_STDBY: &FieldSpec = &super::REGISTERS[5].fields[6];
pub const RDP: &FieldSpec = &super::REGISTERS[5].fields[7];
pub const NWRP: &FieldSpec = &super::REGISTERS[5].fields[8];
pub const DB1M: &FieldSpec = &super::REGISTERS[5].fields[9];
pub const SPRMOD: &FieldSpec = &super::REGISTERS[5].fields[10];
}
pub mod optcr1 {
use super::FieldSpec;
pub const NWRP: &FieldSpec = &super::REGISTERS[6].fields[0];
}
pub static REGISTERS: [RegisterSpec; 7] = [
RegisterSpec { name: "ACR", offset: 0x0, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "LATENCY", bit: 0, width: 3, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PRFTEN", bit: 8, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ICEN", bit: 9, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DCEN", bit: 10, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ICRST", bit: 11, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DCRST", bit: 12, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "KEYR", offset: 0x4, width: Width::W32, reset: 0x0000_0000, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "KEY", bit: 0, width: 32, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "OPTKEYR", offset: 0x8, width: Width::W32, reset: 0x0000_0000, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "OPTKEY", bit: 0, width: 32, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "SR", offset: 0xC, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "EOP", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OPERR", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "WRPERR", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PGAERR", bit: 5, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PGPERR", bit: 6, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PGSERR", bit: 7, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "BSY", bit: 16, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "CR", offset: 0x10, width: Width::W32, reset: 0x8000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "PG", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SER", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "MER", bit: 2, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SNB", bit: 3, width: 5, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PSIZE", bit: 8, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "MER1", bit: 15, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "STRT", bit: 16, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "EOPIE", bit: 24, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ERRIE", bit: 25, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LOCK", bit: 31, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "OPTCR", offset: 0x14, width: Width::W32, reset: 0x0FFF_AAED, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "OPTLOCK", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OPTSTRT", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "BOR_LEV", bit: 2, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "BFB2", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "WDG_SW", bit: 5, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "nRST_STOP", bit: 6, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "nRST_STDBY", bit: 7, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "RDP", bit: 8, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "nWRP", bit: 16, width: 12, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DB1M", bit: 30, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SPRMOD", bit: 31, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "OPTCR1", offset: 0x18, width: Width::W32, reset: 0x0FFF_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "nWRP", bit: 16, width: 12, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
];