use rigless::soc::{Access, FieldSpec, Layout, ReadAction, RegisterSpec, Width, WriteModify};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Register {
Cr = 0,
Sr = 1,
Ris = 2,
Ier = 3,
Mis = 4,
Icr = 5,
Escr = 6,
Esur = 7,
Cwstrt = 8,
Cwsize = 9,
Dr = 10,
}
impl Register {
pub const ALL: [Self; 11] = [Self::Cr, Self::Sr, Self::Ris, Self::Ier, Self::Mis, Self::Icr, Self::Escr, Self::Esur, Self::Cwstrt, Self::Cwsize, Self::Dr];
}
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 CAPTURE: &FieldSpec = &super::REGISTERS[0].fields[0];
pub const CM: &FieldSpec = &super::REGISTERS[0].fields[1];
pub const CROP: &FieldSpec = &super::REGISTERS[0].fields[2];
pub const JPEG: &FieldSpec = &super::REGISTERS[0].fields[3];
pub const ESS: &FieldSpec = &super::REGISTERS[0].fields[4];
pub const PCKPOL: &FieldSpec = &super::REGISTERS[0].fields[5];
pub const HSPOL: &FieldSpec = &super::REGISTERS[0].fields[6];
pub const VSPOL: &FieldSpec = &super::REGISTERS[0].fields[7];
pub const FCRC: &FieldSpec = &super::REGISTERS[0].fields[8];
pub const EDM: &FieldSpec = &super::REGISTERS[0].fields[9];
pub const ENABLE: &FieldSpec = &super::REGISTERS[0].fields[10];
}
pub mod sr {
use super::FieldSpec;
pub const HSYNC: &FieldSpec = &super::REGISTERS[1].fields[0];
pub const VSYNC: &FieldSpec = &super::REGISTERS[1].fields[1];
pub const FNE: &FieldSpec = &super::REGISTERS[1].fields[2];
}
pub mod ris {
use super::FieldSpec;
pub const FRAME_RIS: &FieldSpec = &super::REGISTERS[2].fields[0];
pub const OVR_RIS: &FieldSpec = &super::REGISTERS[2].fields[1];
pub const ERR_RIS: &FieldSpec = &super::REGISTERS[2].fields[2];
pub const VSYNC_RIS: &FieldSpec = &super::REGISTERS[2].fields[3];
pub const LINE_RIS: &FieldSpec = &super::REGISTERS[2].fields[4];
}
pub mod ier {
use super::FieldSpec;
pub const FRAME_IE: &FieldSpec = &super::REGISTERS[3].fields[0];
pub const OVR_IE: &FieldSpec = &super::REGISTERS[3].fields[1];
pub const ERR_IE: &FieldSpec = &super::REGISTERS[3].fields[2];
pub const VSYNC_IE: &FieldSpec = &super::REGISTERS[3].fields[3];
pub const LINE_IE: &FieldSpec = &super::REGISTERS[3].fields[4];
}
pub mod mis {
use super::FieldSpec;
pub const FRAME_MIS: &FieldSpec = &super::REGISTERS[4].fields[0];
pub const OVR_MIS: &FieldSpec = &super::REGISTERS[4].fields[1];
pub const ERR_MIS: &FieldSpec = &super::REGISTERS[4].fields[2];
pub const VSYNC_MIS: &FieldSpec = &super::REGISTERS[4].fields[3];
pub const LINE_MIS: &FieldSpec = &super::REGISTERS[4].fields[4];
}
pub mod icr {
use super::FieldSpec;
pub const FRAME_ISC: &FieldSpec = &super::REGISTERS[5].fields[0];
pub const OVR_ISC: &FieldSpec = &super::REGISTERS[5].fields[1];
pub const ERR_ISC: &FieldSpec = &super::REGISTERS[5].fields[2];
pub const VSYNC_ISC: &FieldSpec = &super::REGISTERS[5].fields[3];
pub const LINE_ISC: &FieldSpec = &super::REGISTERS[5].fields[4];
}
pub mod escr {
use super::FieldSpec;
pub const FSC: &FieldSpec = &super::REGISTERS[6].fields[0];
pub const LSC: &FieldSpec = &super::REGISTERS[6].fields[1];
pub const LEC: &FieldSpec = &super::REGISTERS[6].fields[2];
pub const FEC: &FieldSpec = &super::REGISTERS[6].fields[3];
}
pub mod esur {
use super::FieldSpec;
pub const FSU: &FieldSpec = &super::REGISTERS[7].fields[0];
pub const LSU: &FieldSpec = &super::REGISTERS[7].fields[1];
pub const LEU: &FieldSpec = &super::REGISTERS[7].fields[2];
pub const FEU: &FieldSpec = &super::REGISTERS[7].fields[3];
}
pub mod cwstrt {
use super::FieldSpec;
pub const HOFFCNT: &FieldSpec = &super::REGISTERS[8].fields[0];
pub const VST: &FieldSpec = &super::REGISTERS[8].fields[1];
}
pub mod cwsize {
use super::FieldSpec;
pub const CAPCNT: &FieldSpec = &super::REGISTERS[9].fields[0];
pub const VLINE: &FieldSpec = &super::REGISTERS[9].fields[1];
}
pub mod dr {
use super::FieldSpec;
pub const BYTE0: &FieldSpec = &super::REGISTERS[10].fields[0];
pub const BYTE1: &FieldSpec = &super::REGISTERS[10].fields[1];
pub const BYTE2: &FieldSpec = &super::REGISTERS[10].fields[2];
pub const BYTE3: &FieldSpec = &super::REGISTERS[10].fields[3];
}
pub static REGISTERS: [RegisterSpec; 11] = [
RegisterSpec { name: "CR", offset: 0x0, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "CAPTURE", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CM", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CROP", bit: 2, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "JPEG", bit: 3, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ESS", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PCKPOL", bit: 5, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "HSPOL", bit: 6, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VSPOL", bit: 7, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FCRC", bit: 8, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "EDM", bit: 10, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ENABLE", bit: 14, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "SR", offset: 0x4, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "HSYNC", bit: 0, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VSYNC", bit: 1, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FNE", bit: 2, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "RIS", offset: 0x8, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "FRAME_RIS", bit: 0, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVR_RIS", bit: 1, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ERR_RIS", bit: 2, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VSYNC_RIS", bit: 3, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LINE_RIS", bit: 4, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "IER", offset: 0xC, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "FRAME_IE", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVR_IE", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ERR_IE", bit: 2, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VSYNC_IE", bit: 3, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LINE_IE", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "MIS", offset: 0x10, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "FRAME_MIS", bit: 0, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVR_MIS", bit: 1, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ERR_MIS", bit: 2, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VSYNC_MIS", bit: 3, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LINE_MIS", bit: 4, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "ICR", offset: 0x14, width: Width::W32, reset: 0x0000_0000, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "FRAME_ISC", bit: 0, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVR_ISC", bit: 1, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "ERR_ISC", bit: 2, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VSYNC_ISC", bit: 3, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LINE_ISC", bit: 4, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "ESCR", offset: 0x18, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "FSC", bit: 0, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LSC", bit: 8, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LEC", bit: 16, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FEC", bit: 24, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "ESUR", offset: 0x1C, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "FSU", bit: 0, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LSU", bit: 8, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "LEU", bit: 16, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FEU", bit: 24, width: 8, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "CWSTRT", offset: 0x20, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "HOFFCNT", bit: 0, width: 14, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VST", bit: 16, width: 13, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "CWSIZE", offset: 0x24, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "CAPCNT", bit: 0, width: 14, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VLINE", bit: 16, width: 14, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "DR", offset: 0x28, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "Byte0", bit: 0, width: 8, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "Byte1", bit: 8, width: 8, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "Byte2", bit: 16, width: 8, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "Byte3", bit: 24, width: 8, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
];