#[doc = "Reader of register GENCTRL[%s]"]
pub type R = crate::R<u32, super::GENCTRL>;
#[doc = "Writer for register GENCTRL[%s]"]
pub type W = crate::W<u32, super::GENCTRL>;
#[doc = "Register GENCTRL[%s]
`reset()`'s with value 0"]
impl crate::ResetValue for super::GENCTRL {
type Type = u32;
#[inline(always)]
fn reset_value() -> Self::Type {
0
}
}
#[doc = "Source Select\n\nValue on reset: 0"]
#[derive(Clone, Copy, Debug, PartialEq)]
#[repr(u8)]
pub enum SRC_A {
#[doc = "0: XOSC0 oscillator output"]
XOSC0 = 0,
#[doc = "1: XOSC1 oscillator output"]
XOSC1 = 1,
#[doc = "2: Generator input pad"]
GCLKIN = 2,
#[doc = "3: Generic clock generator 1 output"]
GCLKGEN1 = 3,
#[doc = "4: OSCULP32K oscillator output"]
OSCULP32K = 4,
#[doc = "5: XOSC32K oscillator output"]
XOSC32K = 5,
#[doc = "6: DFLL output"]
DFLL = 6,
#[doc = "7: DPLL0 output"]
DPLL0 = 7,
#[doc = "8: DPLL1 output"]
DPLL1 = 8,
}
impl From<SRC_A> for u8 {
#[inline(always)]
fn from(variant: SRC_A) -> Self {
variant as _
}
}
#[doc = "Reader of field `SRC`"]
pub type SRC_R = crate::R<u8, SRC_A>;
impl SRC_R {
#[doc = r"Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> crate::Variant<u8, SRC_A> {
use crate::Variant::*;
match self.bits {
0 => Val(SRC_A::XOSC0),
1 => Val(SRC_A::XOSC1),
2 => Val(SRC_A::GCLKIN),
3 => Val(SRC_A::GCLKGEN1),
4 => Val(SRC_A::OSCULP32K),
5 => Val(SRC_A::XOSC32K),
6 => Val(SRC_A::DFLL),
7 => Val(SRC_A::DPLL0),
8 => Val(SRC_A::DPLL1),
i => Res(i),
}
}
#[doc = "Checks if the value of the field is `XOSC0`"]
#[inline(always)]
pub fn is_xosc0(&self) -> bool {
*self == SRC_A::XOSC0
}
#[doc = "Checks if the value of the field is `XOSC1`"]
#[inline(always)]
pub fn is_xosc1(&self) -> bool {
*self == SRC_A::XOSC1
}
#[doc = "Checks if the value of the field is `GCLKIN`"]
#[inline(always)]
pub fn is_gclkin(&self) -> bool {
*self == SRC_A::GCLKIN
}
#[doc = "Checks if the value of the field is `GCLKGEN1`"]
#[inline(always)]
pub fn is_gclkgen1(&self) -> bool {
*self == SRC_A::GCLKGEN1
}
#[doc = "Checks if the value of the field is `OSCULP32K`"]
#[inline(always)]
pub fn is_osculp32k(&self) -> bool {
*self == SRC_A::OSCULP32K
}
#[doc = "Checks if the value of the field is `XOSC32K`"]
#[inline(always)]
pub fn is_xosc32k(&self) -> bool {
*self == SRC_A::XOSC32K
}
#[doc = "Checks if the value of the field is `DFLL`"]
#[inline(always)]
pub fn is_dfll(&self) -> bool {
*self == SRC_A::DFLL
}
#[doc = "Checks if the value of the field is `DPLL0`"]
#[inline(always)]
pub fn is_dpll0(&self) -> bool {
*self == SRC_A::DPLL0
}
#[doc = "Checks if the value of the field is `DPLL1`"]
#[inline(always)]
pub fn is_dpll1(&self) -> bool {
*self == SRC_A::DPLL1
}
}
#[doc = "Write proxy for field `SRC`"]
pub struct SRC_W<'a> {
w: &'a mut W,
}
impl<'a> SRC_W<'a> {
#[doc = r"Writes `variant` to the field"]
#[inline(always)]
pub fn variant(self, variant: SRC_A) -> &'a mut W {
unsafe { self.bits(variant.into()) }
}
#[doc = "XOSC0 oscillator output"]
#[inline(always)]
pub fn xosc0(self) -> &'a mut W {
self.variant(SRC_A::XOSC0)
}
#[doc = "XOSC1 oscillator output"]
#[inline(always)]
pub fn xosc1(self) -> &'a mut W {
self.variant(SRC_A::XOSC1)
}
#[doc = "Generator input pad"]
#[inline(always)]
pub fn gclkin(self) -> &'a mut W {
self.variant(SRC_A::GCLKIN)
}
#[doc = "Generic clock generator 1 output"]
#[inline(always)]
pub fn gclkgen1(self) -> &'a mut W {
self.variant(SRC_A::GCLKGEN1)
}
#[doc = "OSCULP32K oscillator output"]
#[inline(always)]
pub fn osculp32k(self) -> &'a mut W {
self.variant(SRC_A::OSCULP32K)
}
#[doc = "XOSC32K oscillator output"]
#[inline(always)]
pub fn xosc32k(self) -> &'a mut W {
self.variant(SRC_A::XOSC32K)
}
#[doc = "DFLL output"]
#[inline(always)]
pub fn dfll(self) -> &'a mut W {
self.variant(SRC_A::DFLL)
}
#[doc = "DPLL0 output"]
#[inline(always)]
pub fn dpll0(self) -> &'a mut W {
self.variant(SRC_A::DPLL0)
}
#[doc = "DPLL1 output"]
#[inline(always)]
pub fn dpll1(self) -> &'a mut W {
self.variant(SRC_A::DPLL1)
}
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub unsafe fn bits(self, value: u8) -> &'a mut W {
self.w.bits = (self.w.bits & !0x0f) | ((value as u32) & 0x0f);
self.w
}
}
#[doc = "Reader of field `GENEN`"]
pub type GENEN_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `GENEN`"]
pub struct GENEN_W<'a> {
w: &'a mut W,
}
impl<'a> GENEN_W<'a> {
#[doc = r"Sets the field bit"]
#[inline(always)]
pub fn set_bit(self) -> &'a mut W {
self.bit(true)
}
#[doc = r"Clears the field bit"]
#[inline(always)]
pub fn clear_bit(self) -> &'a mut W {
self.bit(false)
}
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub fn bit(self, value: bool) -> &'a mut W {
self.w.bits = (self.w.bits & !(0x01 << 8)) | (((value as u32) & 0x01) << 8);
self.w
}
}
#[doc = "Reader of field `IDC`"]
pub type IDC_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `IDC`"]
pub struct IDC_W<'a> {
w: &'a mut W,
}
impl<'a> IDC_W<'a> {
#[doc = r"Sets the field bit"]
#[inline(always)]
pub fn set_bit(self) -> &'a mut W {
self.bit(true)
}
#[doc = r"Clears the field bit"]
#[inline(always)]
pub fn clear_bit(self) -> &'a mut W {
self.bit(false)
}
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub fn bit(self, value: bool) -> &'a mut W {
self.w.bits = (self.w.bits & !(0x01 << 9)) | (((value as u32) & 0x01) << 9);
self.w
}
}
#[doc = "Reader of field `OOV`"]
pub type OOV_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `OOV`"]
pub struct OOV_W<'a> {
w: &'a mut W,
}
impl<'a> OOV_W<'a> {
#[doc = r"Sets the field bit"]
#[inline(always)]
pub fn set_bit(self) -> &'a mut W {
self.bit(true)
}
#[doc = r"Clears the field bit"]
#[inline(always)]
pub fn clear_bit(self) -> &'a mut W {
self.bit(false)
}
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub fn bit(self, value: bool) -> &'a mut W {
self.w.bits = (self.w.bits & !(0x01 << 10)) | (((value as u32) & 0x01) << 10);
self.w
}
}
#[doc = "Reader of field `OE`"]
pub type OE_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `OE`"]
pub struct OE_W<'a> {
w: &'a mut W,
}
impl<'a> OE_W<'a> {
#[doc = r"Sets the field bit"]
#[inline(always)]
pub fn set_bit(self) -> &'a mut W {
self.bit(true)
}
#[doc = r"Clears the field bit"]
#[inline(always)]
pub fn clear_bit(self) -> &'a mut W {
self.bit(false)
}
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub fn bit(self, value: bool) -> &'a mut W {
self.w.bits = (self.w.bits & !(0x01 << 11)) | (((value as u32) & 0x01) << 11);
self.w
}
}
#[doc = "Divide Selection\n\nValue on reset: 0"]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum DIVSEL_A {
#[doc = "0: Divide input directly by divider factor"]
DIV1 = 0,
#[doc = "1: Divide input by 2^(divider factor+ 1)"]
DIV2 = 1,
}
impl From<DIVSEL_A> for bool {
#[inline(always)]
fn from(variant: DIVSEL_A) -> Self {
variant as u8 != 0
}
}
#[doc = "Reader of field `DIVSEL`"]
pub type DIVSEL_R = crate::R<bool, DIVSEL_A>;
impl DIVSEL_R {
#[doc = r"Get enumerated values variant"]
#[inline(always)]
pub fn variant(&self) -> DIVSEL_A {
match self.bits {
false => DIVSEL_A::DIV1,
true => DIVSEL_A::DIV2,
}
}
#[doc = "Checks if the value of the field is `DIV1`"]
#[inline(always)]
pub fn is_div1(&self) -> bool {
*self == DIVSEL_A::DIV1
}
#[doc = "Checks if the value of the field is `DIV2`"]
#[inline(always)]
pub fn is_div2(&self) -> bool {
*self == DIVSEL_A::DIV2
}
}
#[doc = "Write proxy for field `DIVSEL`"]
pub struct DIVSEL_W<'a> {
w: &'a mut W,
}
impl<'a> DIVSEL_W<'a> {
#[doc = r"Writes `variant` to the field"]
#[inline(always)]
pub fn variant(self, variant: DIVSEL_A) -> &'a mut W {
{
self.bit(variant.into())
}
}
#[doc = "Divide input directly by divider factor"]
#[inline(always)]
pub fn div1(self) -> &'a mut W {
self.variant(DIVSEL_A::DIV1)
}
#[doc = "Divide input by 2^(divider factor+ 1)"]
#[inline(always)]
pub fn div2(self) -> &'a mut W {
self.variant(DIVSEL_A::DIV2)
}
#[doc = r"Sets the field bit"]
#[inline(always)]
pub fn set_bit(self) -> &'a mut W {
self.bit(true)
}
#[doc = r"Clears the field bit"]
#[inline(always)]
pub fn clear_bit(self) -> &'a mut W {
self.bit(false)
}
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub fn bit(self, value: bool) -> &'a mut W {
self.w.bits = (self.w.bits & !(0x01 << 12)) | (((value as u32) & 0x01) << 12);
self.w
}
}
#[doc = "Reader of field `RUNSTDBY`"]
pub type RUNSTDBY_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `RUNSTDBY`"]
pub struct RUNSTDBY_W<'a> {
w: &'a mut W,
}
impl<'a> RUNSTDBY_W<'a> {
#[doc = r"Sets the field bit"]
#[inline(always)]
pub fn set_bit(self) -> &'a mut W {
self.bit(true)
}
#[doc = r"Clears the field bit"]
#[inline(always)]
pub fn clear_bit(self) -> &'a mut W {
self.bit(false)
}
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub fn bit(self, value: bool) -> &'a mut W {
self.w.bits = (self.w.bits & !(0x01 << 13)) | (((value as u32) & 0x01) << 13);
self.w
}
}
#[doc = "Reader of field `DIV`"]
pub type DIV_R = crate::R<u16, u16>;
#[doc = "Write proxy for field `DIV`"]
pub struct DIV_W<'a> {
w: &'a mut W,
}
impl<'a> DIV_W<'a> {
#[doc = r"Writes raw bits to the field"]
#[inline(always)]
pub unsafe fn bits(self, value: u16) -> &'a mut W {
self.w.bits = (self.w.bits & !(0xffff << 16)) | (((value as u32) & 0xffff) << 16);
self.w
}
}
impl R {
#[doc = "Bits 0:3 - Source Select"]
#[inline(always)]
pub fn src(&self) -> SRC_R {
SRC_R::new((self.bits & 0x0f) as u8)
}
#[doc = "Bit 8 - Generic Clock Generator Enable"]
#[inline(always)]
pub fn genen(&self) -> GENEN_R {
GENEN_R::new(((self.bits >> 8) & 0x01) != 0)
}
#[doc = "Bit 9 - Improve Duty Cycle"]
#[inline(always)]
pub fn idc(&self) -> IDC_R {
IDC_R::new(((self.bits >> 9) & 0x01) != 0)
}
#[doc = "Bit 10 - Output Off Value"]
#[inline(always)]
pub fn oov(&self) -> OOV_R {
OOV_R::new(((self.bits >> 10) & 0x01) != 0)
}
#[doc = "Bit 11 - Output Enable"]
#[inline(always)]
pub fn oe(&self) -> OE_R {
OE_R::new(((self.bits >> 11) & 0x01) != 0)
}
#[doc = "Bit 12 - Divide Selection"]
#[inline(always)]
pub fn divsel(&self) -> DIVSEL_R {
DIVSEL_R::new(((self.bits >> 12) & 0x01) != 0)
}
#[doc = "Bit 13 - Run in Standby"]
#[inline(always)]
pub fn runstdby(&self) -> RUNSTDBY_R {
RUNSTDBY_R::new(((self.bits >> 13) & 0x01) != 0)
}
#[doc = "Bits 16:31 - Division Factor"]
#[inline(always)]
pub fn div(&self) -> DIV_R {
DIV_R::new(((self.bits >> 16) & 0xffff) as u16)
}
}
impl W {
#[doc = "Bits 0:3 - Source Select"]
#[inline(always)]
pub fn src(&mut self) -> SRC_W {
SRC_W { w: self }
}
#[doc = "Bit 8 - Generic Clock Generator Enable"]
#[inline(always)]
pub fn genen(&mut self) -> GENEN_W {
GENEN_W { w: self }
}
#[doc = "Bit 9 - Improve Duty Cycle"]
#[inline(always)]
pub fn idc(&mut self) -> IDC_W {
IDC_W { w: self }
}
#[doc = "Bit 10 - Output Off Value"]
#[inline(always)]
pub fn oov(&mut self) -> OOV_W {
OOV_W { w: self }
}
#[doc = "Bit 11 - Output Enable"]
#[inline(always)]
pub fn oe(&mut self) -> OE_W {
OE_W { w: self }
}
#[doc = "Bit 12 - Divide Selection"]
#[inline(always)]
pub fn divsel(&mut self) -> DIVSEL_W {
DIVSEL_W { w: self }
}
#[doc = "Bit 13 - Run in Standby"]
#[inline(always)]
pub fn runstdby(&mut self) -> RUNSTDBY_W {
RUNSTDBY_W { w: self }
}
#[doc = "Bits 16:31 - Division Factor"]
#[inline(always)]
pub fn div(&mut self) -> DIV_W {
DIV_W { w: self }
}
}