atsamd51n/mclk/
cpudiv.rs

1#[doc = "Register `CPUDIV` reader"]
2pub type R = crate::R<CpudivSpec>;
3#[doc = "Register `CPUDIV` writer"]
4pub type W = crate::W<CpudivSpec>;
5#[doc = "Low-Power Clock Division Factor\n\nValue on reset: 1"]
6#[derive(Clone, Copy, Debug, PartialEq, Eq)]
7#[repr(u8)]
8pub enum Divselect {
9    #[doc = "1: Divide by 1"]
10    Div1 = 1,
11    #[doc = "2: Divide by 2"]
12    Div2 = 2,
13    #[doc = "4: Divide by 4"]
14    Div4 = 4,
15    #[doc = "8: Divide by 8"]
16    Div8 = 8,
17    #[doc = "16: Divide by 16"]
18    Div16 = 16,
19    #[doc = "32: Divide by 32"]
20    Div32 = 32,
21    #[doc = "64: Divide by 64"]
22    Div64 = 64,
23    #[doc = "128: Divide by 128"]
24    Div128 = 128,
25}
26impl From<Divselect> for u8 {
27    #[inline(always)]
28    fn from(variant: Divselect) -> Self {
29        variant as _
30    }
31}
32impl crate::FieldSpec for Divselect {
33    type Ux = u8;
34}
35impl crate::IsEnum for Divselect {}
36#[doc = "Field `DIV` reader - Low-Power Clock Division Factor"]
37pub type DivR = crate::FieldReader<Divselect>;
38impl DivR {
39    #[doc = "Get enumerated values variant"]
40    #[inline(always)]
41    pub const fn variant(&self) -> Option<Divselect> {
42        match self.bits {
43            1 => Some(Divselect::Div1),
44            2 => Some(Divselect::Div2),
45            4 => Some(Divselect::Div4),
46            8 => Some(Divselect::Div8),
47            16 => Some(Divselect::Div16),
48            32 => Some(Divselect::Div32),
49            64 => Some(Divselect::Div64),
50            128 => Some(Divselect::Div128),
51            _ => None,
52        }
53    }
54    #[doc = "Divide by 1"]
55    #[inline(always)]
56    pub fn is_div1(&self) -> bool {
57        *self == Divselect::Div1
58    }
59    #[doc = "Divide by 2"]
60    #[inline(always)]
61    pub fn is_div2(&self) -> bool {
62        *self == Divselect::Div2
63    }
64    #[doc = "Divide by 4"]
65    #[inline(always)]
66    pub fn is_div4(&self) -> bool {
67        *self == Divselect::Div4
68    }
69    #[doc = "Divide by 8"]
70    #[inline(always)]
71    pub fn is_div8(&self) -> bool {
72        *self == Divselect::Div8
73    }
74    #[doc = "Divide by 16"]
75    #[inline(always)]
76    pub fn is_div16(&self) -> bool {
77        *self == Divselect::Div16
78    }
79    #[doc = "Divide by 32"]
80    #[inline(always)]
81    pub fn is_div32(&self) -> bool {
82        *self == Divselect::Div32
83    }
84    #[doc = "Divide by 64"]
85    #[inline(always)]
86    pub fn is_div64(&self) -> bool {
87        *self == Divselect::Div64
88    }
89    #[doc = "Divide by 128"]
90    #[inline(always)]
91    pub fn is_div128(&self) -> bool {
92        *self == Divselect::Div128
93    }
94}
95#[doc = "Field `DIV` writer - Low-Power Clock Division Factor"]
96pub type DivW<'a, REG> = crate::FieldWriter<'a, REG, 8, Divselect>;
97impl<'a, REG> DivW<'a, REG>
98where
99    REG: crate::Writable + crate::RegisterSpec,
100    REG::Ux: From<u8>,
101{
102    #[doc = "Divide by 1"]
103    #[inline(always)]
104    pub fn div1(self) -> &'a mut crate::W<REG> {
105        self.variant(Divselect::Div1)
106    }
107    #[doc = "Divide by 2"]
108    #[inline(always)]
109    pub fn div2(self) -> &'a mut crate::W<REG> {
110        self.variant(Divselect::Div2)
111    }
112    #[doc = "Divide by 4"]
113    #[inline(always)]
114    pub fn div4(self) -> &'a mut crate::W<REG> {
115        self.variant(Divselect::Div4)
116    }
117    #[doc = "Divide by 8"]
118    #[inline(always)]
119    pub fn div8(self) -> &'a mut crate::W<REG> {
120        self.variant(Divselect::Div8)
121    }
122    #[doc = "Divide by 16"]
123    #[inline(always)]
124    pub fn div16(self) -> &'a mut crate::W<REG> {
125        self.variant(Divselect::Div16)
126    }
127    #[doc = "Divide by 32"]
128    #[inline(always)]
129    pub fn div32(self) -> &'a mut crate::W<REG> {
130        self.variant(Divselect::Div32)
131    }
132    #[doc = "Divide by 64"]
133    #[inline(always)]
134    pub fn div64(self) -> &'a mut crate::W<REG> {
135        self.variant(Divselect::Div64)
136    }
137    #[doc = "Divide by 128"]
138    #[inline(always)]
139    pub fn div128(self) -> &'a mut crate::W<REG> {
140        self.variant(Divselect::Div128)
141    }
142}
143impl R {
144    #[doc = "Bits 0:7 - Low-Power Clock Division Factor"]
145    #[inline(always)]
146    pub fn div(&self) -> DivR {
147        DivR::new(self.bits)
148    }
149}
150impl W {
151    #[doc = "Bits 0:7 - Low-Power Clock Division Factor"]
152    #[inline(always)]
153    #[must_use]
154    pub fn div(&mut self) -> DivW<CpudivSpec> {
155        DivW::new(self, 0)
156    }
157}
158#[doc = "CPU Clock Division\n\nYou can [`read`](crate::Reg::read) this register and get [`cpudiv::R`](R). You can [`reset`](crate::Reg::reset), [`write`](crate::Reg::write), [`write_with_zero`](crate::Reg::write_with_zero) this register using [`cpudiv::W`](W). You can also [`modify`](crate::Reg::modify) this register. See [API](https://docs.rs/svd2rust/#read--modify--write-api)."]
159pub struct CpudivSpec;
160impl crate::RegisterSpec for CpudivSpec {
161    type Ux = u8;
162}
163#[doc = "`read()` method returns [`cpudiv::R`](R) reader structure"]
164impl crate::Readable for CpudivSpec {}
165#[doc = "`write(|w| ..)` method takes [`cpudiv::W`](W) writer structure"]
166impl crate::Writable for CpudivSpec {
167    type Safety = crate::Unsafe;
168    const ZERO_TO_MODIFY_FIELDS_BITMAP: u8 = 0;
169    const ONE_TO_MODIFY_FIELDS_BITMAP: u8 = 0;
170}
171#[doc = "`reset()` method sets CPUDIV to value 0x01"]
172impl crate::Resettable for CpudivSpec {
173    const RESET_VALUE: u8 = 0x01;
174}