use rigless::soc::{Access, FieldSpec, Layout, ReadAction, RegisterSpec, Width, WriteModify};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Register {
Cr = 0,
Dcr = 1,
Sr = 2,
Fcr = 3,
Dlr = 4,
Ccr = 5,
Ar = 6,
Abr = 7,
Dr = 8,
Psmkr = 9,
Psmar = 10,
Pir = 11,
Lptr = 12,
}
impl Register {
pub const ALL: [Self; 13] = [Self::Cr, Self::Dcr, Self::Sr, Self::Fcr, Self::Dlr, Self::Ccr, Self::Ar, Self::Abr, Self::Dr, Self::Psmkr, Self::Psmar, Self::Pir, Self::Lptr];
}
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 cr {
use super::FieldSpec;
pub const EN: &FieldSpec = &super::REGISTERS[0].fields[0];
pub const ABORT: &FieldSpec = &super::REGISTERS[0].fields[1];
pub const DMAEN: &FieldSpec = &super::REGISTERS[0].fields[2];
pub const TCEN: &FieldSpec = &super::REGISTERS[0].fields[3];
pub const SSHIFT: &FieldSpec = &super::REGISTERS[0].fields[4];
pub const DFM: &FieldSpec = &super::REGISTERS[0].fields[5];
pub const FSEL: &FieldSpec = &super::REGISTERS[0].fields[6];
pub const FTHRES: &FieldSpec = &super::REGISTERS[0].fields[7];
pub const TEIE: &FieldSpec = &super::REGISTERS[0].fields[8];
pub const TCIE: &FieldSpec = &super::REGISTERS[0].fields[9];
pub const FTIE: &FieldSpec = &super::REGISTERS[0].fields[10];
pub const SMIE: &FieldSpec = &super::REGISTERS[0].fields[11];
pub const TOIE: &FieldSpec = &super::REGISTERS[0].fields[12];
pub const APMS: &FieldSpec = &super::REGISTERS[0].fields[13];
pub const PMM: &FieldSpec = &super::REGISTERS[0].fields[14];
pub const PRESCALER: &FieldSpec = &super::REGISTERS[0].fields[15];
}
pub mod dcr {
use super::FieldSpec;
pub const CKMODE: &FieldSpec = &super::REGISTERS[1].fields[0];
pub const CSHT: &FieldSpec = &super::REGISTERS[1].fields[1];
pub const FSIZE: &FieldSpec = &super::REGISTERS[1].fields[2];
}
pub mod sr {
use super::FieldSpec;
pub const TEF: &FieldSpec = &super::REGISTERS[2].fields[0];
pub const TCF: &FieldSpec = &super::REGISTERS[2].fields[1];
pub const FTF: &FieldSpec = &super::REGISTERS[2].fields[2];
pub const SMF: &FieldSpec = &super::REGISTERS[2].fields[3];
pub const TOF: &FieldSpec = &super::REGISTERS[2].fields[4];
pub const BUSY: &FieldSpec = &super::REGISTERS[2].fields[5];
pub const FLEVEL: &FieldSpec = &super::REGISTERS[2].fields[6];
}
pub mod fcr {
use super::FieldSpec;
pub const CTEF: &FieldSpec = &super::REGISTERS[3].fields[0];
pub const CTCF: &FieldSpec = &super::REGISTERS[3].fields[1];
pub const CSMF: &FieldSpec = &super::REGISTERS[3].fields[2];
pub const CTOF: &FieldSpec = &super::REGISTERS[3].fields[3];
}
pub mod dlr {
use super::FieldSpec;
pub const DL: &FieldSpec = &super::REGISTERS[4].fields[0];
}
pub mod ccr {
use super::FieldSpec;
pub const INSTRUCTION: &FieldSpec = &super::REGISTERS[5].fields[0];
pub const IMODE: &FieldSpec = &super::REGISTERS[5].fields[1];
pub const ADMODE: &FieldSpec = &super::REGISTERS[5].fields[2];
pub const ADSIZE: &FieldSpec = &super::REGISTERS[5].fields[3];
pub const ABMODE: &FieldSpec = &super::REGISTERS[5].fields[4];
pub const ABSIZE: &FieldSpec = &super::REGISTERS[5].fields[5];
pub const DCYC: &FieldSpec = &super::REGISTERS[5].fields[6];
pub const DMODE: &FieldSpec = &super::REGISTERS[5].fields[7];
pub const FMODE: &FieldSpec = &super::REGISTERS[5].fields[8];
pub const SIOO: &FieldSpec = &super::REGISTERS[5].fields[9];
pub const DHHC: &FieldSpec = &super::REGISTERS[5].fields[10];
pub const DDRM: &FieldSpec = &super::REGISTERS[5].fields[11];
}
pub mod ar {
use super::FieldSpec;
pub const ADDRESS: &FieldSpec = &super::REGISTERS[6].fields[0];
}
pub mod abr {
use super::FieldSpec;
pub const ALTERNATE: &FieldSpec = &super::REGISTERS[7].fields[0];
}
pub mod dr {
use super::FieldSpec;
pub const DATA: &FieldSpec = &super::REGISTERS[8].fields[0];
}
pub mod psmkr {
use super::FieldSpec;
pub const MASK: &FieldSpec = &super::REGISTERS[9].fields[0];
}
pub mod psmar {
use super::FieldSpec;
pub const MATCH: &FieldSpec = &super::REGISTERS[10].fields[0];
}
pub mod pir {
use super::FieldSpec;
pub const INTERVAL: &FieldSpec = &super::REGISTERS[11].fields[0];
}
pub mod lptr {
use super::FieldSpec;
pub const TIMEOUT: &FieldSpec = &super::REGISTERS[12].fields[0];
}
pub static REGISTERS: [RegisterSpec; 13] = [
RegisterSpec { name: "CR", offset: 0x0, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "EN", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ABORT", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DMAEN", bit: 2, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TCEN", bit: 3, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SSHIFT", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DFM", bit: 6, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FSEL", bit: 7, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FTHRES", bit: 8, width: 5, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TEIE", bit: 16, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TCIE", bit: 17, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FTIE", bit: 18, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SMIE", bit: 19, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TOIE", bit: 20, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "APMS", bit: 22, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PMM", bit: 23, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PRESCALER", bit: 24, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "DCR", offset: 0x4, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "CKMODE", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CSHT", bit: 8, width: 3, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FSIZE", bit: 16, width: 5, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "SR", offset: 0x8, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "TEF", bit: 0, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TCF", bit: 1, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FTF", bit: 2, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SMF", bit: 3, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TOF", bit: 4, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "BUSY", bit: 5, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FLEVEL", bit: 8, width: 6, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "FCR", offset: 0xC, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "CTEF", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CTCF", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CSMF", bit: 3, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CTOF", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "DLR", offset: 0x10, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "DL", bit: 0, width: 32, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "CCR", offset: 0x14, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "INSTRUCTION", bit: 0, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "IMODE", bit: 8, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ADMODE", bit: 10, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ADSIZE", bit: 12, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ABMODE", bit: 14, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ABSIZE", bit: 16, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DCYC", bit: 18, width: 5, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DMODE", bit: 24, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FMODE", bit: 26, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SIOO", bit: 28, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DHHC", bit: 30, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DDRM", bit: 31, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "AR", offset: 0x18, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "ADDRESS", bit: 0, width: 32, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "ABR", offset: 0x1C, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "ALTERNATE", bit: 0, width: 32, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "DR", offset: 0x20, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "DATA", bit: 0, width: 32, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "PSMKR", offset: 0x24, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "MASK", bit: 0, width: 32, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "PSMAR", offset: 0x28, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "MATCH", bit: 0, width: 32, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "PIR", offset: 0x2C, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "INTERVAL", bit: 0, width: 16, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "LPTR", offset: 0x30, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "TIMEOUT", bit: 0, width: 16, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
];