#![allow(non_snake_case, non_upper_case_globals, clippy::module_inception)]
use super::RWRegister;
#[repr(C, align(32))]
pub struct RegisterBlock {
pub SADDR: RWRegister<u32>,
pub SOFF: RWRegister<i16>,
pub DATTR: RWRegister<u8>,
pub SATTR: RWRegister<u8>,
pub NBYTES: RWRegister<u32>,
pub SLAST: RWRegister<i32>,
pub DADDR: RWRegister<u32>,
pub DOFF: RWRegister<i16>,
pub CITER: RWRegister<u16>,
pub DLAST_SGA: RWRegister<i32>,
pub CSR: RWRegister<u16>,
pub BITER: RWRegister<u16>,
}
const _STATIC_ASSERT_TCD_32_BYTES: [u32; 1] =
[0; (32 == core::mem::size_of::<RegisterBlock>()) as usize];
impl RegisterBlock {
pub fn reset(&self) {
self.SADDR.write(0);
self.SOFF.write(0);
self.DATTR.write(0);
self.SATTR.write(0);
self.NBYTES.write(0);
self.SLAST.write(0);
self.DADDR.write(0);
self.DOFF.write(0);
self.CITER.write(0);
self.DLAST_SGA.write(0);
self.CSR.write(0);
self.BITER.write(0);
}
}
mod ATTR {
pub mod SIZE {
pub const offset: u8 = 0;
pub const mask: u8 = 0b111 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod MOD {
pub const offset: u8 = 3;
pub const mask: u8 = 0b11111 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod DATTR {
pub use super::ATTR::*;
}
pub mod SATTR {
pub use super::ATTR::*;
}
pub mod CSR {
pub mod INTMAJOR {
pub const offset: u16 = 1;
pub const mask: u16 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod DREQ {
pub const offset: u16 = 3;
pub const mask: u16 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod DONE {
pub const offset: u16 = 7;
pub const mask: u16 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
pub mod BWC {
pub const offset: u16 = 14;
pub const mask: u16 = 0b11 << offset;
pub mod R {}
pub mod W {}
pub mod RW {
pub const BWC_0: u16 = 0b00;
pub const BWC_2: u16 = 0b10;
pub const BWC_3: u16 = 0b11;
}
}
pub mod ACTIVE {
pub const offset: u16 = 6;
pub const mask: u16 = 1 << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod CITER {
pub mod CITER {
pub const offset: u16 = 0;
pub const mask: u16 = 0x7fff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
pub mod BITER {
pub mod BITER {
pub const offset: u16 = 0;
pub const mask: u16 = 0x7fff << offset;
pub mod R {}
pub mod W {}
pub mod RW {}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u16)]
pub enum BandwidthControl {
Stall4Cycles = CSR::BWC::RW::BWC_2,
Stall8Cycles = CSR::BWC::RW::BWC_3,
}
impl BandwidthControl {
pub(crate) fn raw(bwc: Option<Self>) -> u16 {
match bwc {
None => CSR::BWC::RW::BWC_0,
Some(bwc) => bwc as u16,
}
}
}