use rigless::soc::{Access, FieldSpec, Layout, ReadAction, RegisterSpec, Width, WriteModify};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Register {
Cr1 = 0,
Cr2 = 1,
Oar1 = 2,
Oar2 = 3,
Timingr = 4,
Timeoutr = 5,
Isr = 6,
Icr = 7,
Pecr = 8,
Rxdr = 9,
Txdr = 10,
}
impl Register {
pub const ALL: [Self; 11] = [Self::Cr1, Self::Cr2, Self::Oar1, Self::Oar2, Self::Timingr, Self::Timeoutr, Self::Isr, Self::Icr, Self::Pecr, Self::Rxdr, Self::Txdr];
}
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 cr1 {
use super::FieldSpec;
pub const PE: &FieldSpec = &super::REGISTERS[0].fields[0];
pub const TXIE: &FieldSpec = &super::REGISTERS[0].fields[1];
pub const RXIE: &FieldSpec = &super::REGISTERS[0].fields[2];
pub const ADDRIE: &FieldSpec = &super::REGISTERS[0].fields[3];
pub const NACKIE: &FieldSpec = &super::REGISTERS[0].fields[4];
pub const STOPIE: &FieldSpec = &super::REGISTERS[0].fields[5];
pub const TCIE: &FieldSpec = &super::REGISTERS[0].fields[6];
pub const ERRIE: &FieldSpec = &super::REGISTERS[0].fields[7];
pub const DNF: &FieldSpec = &super::REGISTERS[0].fields[8];
pub const ANFOFF: &FieldSpec = &super::REGISTERS[0].fields[9];
pub const TXDMAEN: &FieldSpec = &super::REGISTERS[0].fields[10];
pub const RXDMAEN: &FieldSpec = &super::REGISTERS[0].fields[11];
pub const SBC: &FieldSpec = &super::REGISTERS[0].fields[12];
pub const NOSTRETCH: &FieldSpec = &super::REGISTERS[0].fields[13];
pub const WUPEN: &FieldSpec = &super::REGISTERS[0].fields[14];
pub const GCEN: &FieldSpec = &super::REGISTERS[0].fields[15];
pub const SMBHEN: &FieldSpec = &super::REGISTERS[0].fields[16];
pub const SMBDEN: &FieldSpec = &super::REGISTERS[0].fields[17];
pub const ALERTEN: &FieldSpec = &super::REGISTERS[0].fields[18];
pub const PECEN: &FieldSpec = &super::REGISTERS[0].fields[19];
}
pub mod cr2 {
use super::FieldSpec;
pub const SADD0: &FieldSpec = &super::REGISTERS[1].fields[0];
pub const SADD1: &FieldSpec = &super::REGISTERS[1].fields[1];
pub const SADD2: &FieldSpec = &super::REGISTERS[1].fields[2];
pub const SADD3: &FieldSpec = &super::REGISTERS[1].fields[3];
pub const SADD4: &FieldSpec = &super::REGISTERS[1].fields[4];
pub const SADD5: &FieldSpec = &super::REGISTERS[1].fields[5];
pub const SADD6: &FieldSpec = &super::REGISTERS[1].fields[6];
pub const SADD7: &FieldSpec = &super::REGISTERS[1].fields[7];
pub const SADD8: &FieldSpec = &super::REGISTERS[1].fields[8];
pub const SADD9: &FieldSpec = &super::REGISTERS[1].fields[9];
pub const RD_WRN: &FieldSpec = &super::REGISTERS[1].fields[10];
pub const ADD10: &FieldSpec = &super::REGISTERS[1].fields[11];
pub const HEAD10R: &FieldSpec = &super::REGISTERS[1].fields[12];
pub const START: &FieldSpec = &super::REGISTERS[1].fields[13];
pub const STOP: &FieldSpec = &super::REGISTERS[1].fields[14];
pub const NACK: &FieldSpec = &super::REGISTERS[1].fields[15];
pub const NBYTES: &FieldSpec = &super::REGISTERS[1].fields[16];
pub const RELOAD: &FieldSpec = &super::REGISTERS[1].fields[17];
pub const AUTOEND: &FieldSpec = &super::REGISTERS[1].fields[18];
pub const PECBYTE: &FieldSpec = &super::REGISTERS[1].fields[19];
}
pub mod oar1 {
use super::FieldSpec;
pub const OA1: &FieldSpec = &super::REGISTERS[2].fields[0];
pub const OA1MODE: &FieldSpec = &super::REGISTERS[2].fields[1];
pub const OA1EN: &FieldSpec = &super::REGISTERS[2].fields[2];
}
pub mod oar2 {
use super::FieldSpec;
pub const OA2: &FieldSpec = &super::REGISTERS[3].fields[0];
pub const OA2MSK: &FieldSpec = &super::REGISTERS[3].fields[1];
pub const OA2EN: &FieldSpec = &super::REGISTERS[3].fields[2];
}
pub mod timingr {
use super::FieldSpec;
pub const SCLL: &FieldSpec = &super::REGISTERS[4].fields[0];
pub const SCLH: &FieldSpec = &super::REGISTERS[4].fields[1];
pub const SDADEL: &FieldSpec = &super::REGISTERS[4].fields[2];
pub const SCLDEL: &FieldSpec = &super::REGISTERS[4].fields[3];
pub const PRESC: &FieldSpec = &super::REGISTERS[4].fields[4];
}
pub mod timeoutr {
use super::FieldSpec;
pub const TIMEOUTA: &FieldSpec = &super::REGISTERS[5].fields[0];
pub const TIDLE: &FieldSpec = &super::REGISTERS[5].fields[1];
pub const TIMOUTEN: &FieldSpec = &super::REGISTERS[5].fields[2];
pub const TIMEOUTB: &FieldSpec = &super::REGISTERS[5].fields[3];
pub const TEXTEN: &FieldSpec = &super::REGISTERS[5].fields[4];
}
pub mod isr {
use super::FieldSpec;
pub const TXE: &FieldSpec = &super::REGISTERS[6].fields[0];
pub const TXIS: &FieldSpec = &super::REGISTERS[6].fields[1];
pub const RXNE: &FieldSpec = &super::REGISTERS[6].fields[2];
pub const ADDR: &FieldSpec = &super::REGISTERS[6].fields[3];
pub const NACKF: &FieldSpec = &super::REGISTERS[6].fields[4];
pub const STOPF: &FieldSpec = &super::REGISTERS[6].fields[5];
pub const TC: &FieldSpec = &super::REGISTERS[6].fields[6];
pub const TCR: &FieldSpec = &super::REGISTERS[6].fields[7];
pub const BERR: &FieldSpec = &super::REGISTERS[6].fields[8];
pub const ARLO: &FieldSpec = &super::REGISTERS[6].fields[9];
pub const OVR: &FieldSpec = &super::REGISTERS[6].fields[10];
pub const PECERR: &FieldSpec = &super::REGISTERS[6].fields[11];
pub const TIMEOUT: &FieldSpec = &super::REGISTERS[6].fields[12];
pub const ALERT: &FieldSpec = &super::REGISTERS[6].fields[13];
pub const BUSY: &FieldSpec = &super::REGISTERS[6].fields[14];
pub const DIR: &FieldSpec = &super::REGISTERS[6].fields[15];
pub const ADDCODE: &FieldSpec = &super::REGISTERS[6].fields[16];
}
pub mod icr {
use super::FieldSpec;
pub const ADDRCF: &FieldSpec = &super::REGISTERS[7].fields[0];
pub const NACKCF: &FieldSpec = &super::REGISTERS[7].fields[1];
pub const STOPCF: &FieldSpec = &super::REGISTERS[7].fields[2];
pub const BERRCF: &FieldSpec = &super::REGISTERS[7].fields[3];
pub const ARLOCF: &FieldSpec = &super::REGISTERS[7].fields[4];
pub const OVRCF: &FieldSpec = &super::REGISTERS[7].fields[5];
pub const PECCF: &FieldSpec = &super::REGISTERS[7].fields[6];
pub const TIMOUTCF: &FieldSpec = &super::REGISTERS[7].fields[7];
pub const ALERTCF: &FieldSpec = &super::REGISTERS[7].fields[8];
}
pub mod pecr {
use super::FieldSpec;
pub const PEC: &FieldSpec = &super::REGISTERS[8].fields[0];
}
pub mod rxdr {
use super::FieldSpec;
pub const RXDATA: &FieldSpec = &super::REGISTERS[9].fields[0];
}
pub mod txdr {
use super::FieldSpec;
pub const TXDATA: &FieldSpec = &super::REGISTERS[10].fields[0];
}
pub static REGISTERS: [RegisterSpec; 11] = [
RegisterSpec { name: "CR1", offset: 0x0, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "PE", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TXIE", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "RXIE", bit: 2, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ADDRIE", bit: 3, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "NACKIE", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "STOPIE", bit: 5, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TCIE", bit: 6, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ERRIE", bit: 7, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DNF", bit: 8, width: 4, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ANFOFF", bit: 12, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TXDMAEN", bit: 14, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "RXDMAEN", bit: 15, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SBC", bit: 16, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "NOSTRETCH", bit: 17, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "WUPEN", bit: 18, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "GCEN", bit: 19, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SMBHEN", bit: 20, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SMBDEN", bit: 21, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ALERTEN", bit: 22, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PECEN", bit: 23, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "CR2", offset: 0x4, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "SADD0", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD1", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD2", bit: 2, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD3", bit: 3, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD4", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD5", bit: 5, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD6", bit: 6, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD7", bit: 7, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD8", bit: 8, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SADD9", bit: 9, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "RD_WRN", bit: 10, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ADD10", bit: 11, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "HEAD10R", bit: 12, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "START", bit: 13, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "STOP", bit: 14, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "NACK", bit: 15, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "NBYTES", bit: 16, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "RELOAD", bit: 24, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "AUTOEND", bit: 25, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PECBYTE", bit: 26, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "OAR1", offset: 0x8, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "OA1", bit: 0, width: 10, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OA1MODE", bit: 10, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OA1EN", bit: 15, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "OAR2", offset: 0xC, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "OA2", bit: 1, width: 7, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OA2MSK", bit: 8, width: 3, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OA2EN", bit: 15, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "TIMINGR", offset: 0x10, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "SCLL", bit: 0, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SCLH", bit: 8, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SDADEL", bit: 16, width: 4, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SCLDEL", bit: 20, width: 4, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PRESC", bit: 28, width: 4, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "TIMEOUTR", offset: 0x14, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "TIMEOUTA", bit: 0, width: 12, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TIDLE", bit: 12, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TIMOUTEN", bit: 15, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TIMEOUTB", bit: 16, width: 12, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TEXTEN", bit: 31, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "ISR", offset: 0x18, width: Width::W32, reset: 0x0000_0001, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "TXE", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TXIS", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "RXNE", bit: 2, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ADDR", bit: 3, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "NACKF", bit: 4, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "STOPF", bit: 5, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TC", bit: 6, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TCR", bit: 7, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "BERR", bit: 8, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ARLO", bit: 9, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVR", bit: 10, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PECERR", bit: 11, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TIMEOUT", bit: 12, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ALERT", bit: 13, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "BUSY", bit: 15, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DIR", bit: 16, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ADDCODE", bit: 17, width: 7, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "ICR", offset: 0x1C, width: Width::W32, reset: 0x0000_0000, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "ADDRCF", bit: 3, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "NACKCF", bit: 4, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "STOPCF", bit: 5, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "BERRCF", bit: 8, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ARLOCF", bit: 9, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVRCF", bit: 10, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PECCF", bit: 11, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TIMOUTCF", bit: 12, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ALERTCF", bit: 13, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "PECR", offset: 0x20, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "PEC", bit: 0, width: 8, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "RXDR", offset: 0x24, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "RXDATA", bit: 0, width: 8, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "TXDR", offset: 0x28, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "TXDATA", bit: 0, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
];