use super::register::{Readable, Register, Writable, R as GenR, W as GenW};
pub type ExtReg = Register<u16, _ExtReg>;
impl Readable for ExtReg {}
impl Writable for ExtReg {}
pub type R = GenR<u16, ExtReg>;
pub type W = GenW<u16, ExtReg>;
pub struct _ExtReg;
impl R {
pub fn variable(&self) -> VariableR {
let bits = {
const POS: u8 = 4;
const MASK: u16 = 0x7ff;
(self.bits >> POS) & MASK
};
VariableR(bits)
}
pub fn subpid(&self) -> SubPIDR {
let bits = {
const POS: u8 = 0;
const MASK: u16 = 0xf;
((self.bits >> POS) & MASK) as u8
};
SubPIDR(bits)
}
}
pub struct VariableR(u16);
impl VariableR {
pub fn bits(&self) -> u16 {
self.0
}
}
pub struct SubPIDR(u8);
impl SubPIDR {
pub fn bits(&self) -> u8 {
self.0
}
}
impl W {
pub fn variable(&mut self) -> VariableW {
VariableW { w: self }
}
pub fn subpid(&mut self) -> SubPIDW {
SubPIDW { w: self }
}
}
pub struct VariableW<'a> {
w: &'a mut W,
}
impl<'a> VariableW<'a> {
pub unsafe fn bits(self, v: u16) -> &'a mut W {
const POS: u8 = 4;
const MASK: u16 = 0x7ff;
self.w.bits &= !((MASK as u16) << POS);
self.w.bits |= ((v & MASK) as u16) << POS;
self.w
}
}
pub struct SubPIDW<'a> {
w: &'a mut W,
}
impl<'a> SubPIDW<'a> {
pub unsafe fn bits(self, v: u16) -> &'a mut W {
const POS: u8 = 0;
const MASK: u16 = 0xf;
self.w.bits &= !((MASK as u16) << POS);
self.w.bits |= ((v & MASK) as u16) << POS;
self.w
}
}