use super::{RORegister, RWRegister, WORegister, tcd};
use core::ops::Index;
#[repr(C)]
pub struct RegisterBlock {
pub CR: RWRegister<u32>,
pub ES: RORegister<u32>,
_reserved1: [u32; 1],
pub ERQ: RWRegister<u32>,
_reserved2: [u32; 1],
pub EEI: RWRegister<u32>,
pub CEEI: WORegister<u8>,
pub SEEI: WORegister<u8>,
pub CERQ: WORegister<u8>,
pub SERQ: WORegister<u8>,
pub CDNE: WORegister<u8>,
pub SSRT: WORegister<u8>,
pub CERR: WORegister<u8>,
pub CINT: WORegister<u8>,
_reserved3: [u32; 1],
pub INT: RWRegister<u32>,
_reserved4: [u32; 1],
pub ERR: RWRegister<u32>,
_reserved5: [u32; 1],
pub HRS: RORegister<u32>,
_reserved6: [u32; 3],
pub EARS: RWRegister<u32>,
_reserved7: [u32; 46],
pub DCHPRI: ChannelPriorityRegisters,
_reserved8: [u32; 952],
pub TCD: [tcd::RegisterBlock; 32],
}
#[repr(transparent)]
pub struct ChannelPriorityRegisters([RWRegister<u8>; 32]);
impl Index<usize> for ChannelPriorityRegisters {
type Output = RWRegister<u8>;
fn index(&self, channel: usize) -> &RWRegister<u8> {
let idx = 4 * (channel / 4) + (3 - (channel % 4));
&self.0[idx]
}
}