1#[doc = "Register `CTRL` reader"]
2pub type R = crate::R<CTRL_SPEC>;
3#[doc = "Register `CTRL` writer"]
4pub type W = crate::W<CTRL_SPEC>;
5#[doc = "Field `FREQ_RANGE` reader - Controls the number of delay stages in the ROSC ring
6 LOW uses stages 0 to 7
7 MEDIUM uses stages 0 to 5
8 HIGH uses stages 0 to 3
9 TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications
10 The clock output will not glitch when changing the range up one step at a time
11 The clock output will glitch when changing the range down
12 Note: the values here are gray coded which is why HIGH comes before TOOHIGH"]
13pub type FREQ_RANGE_R = crate::FieldReader<FREQ_RANGE_A>;
14#[doc = "Controls the number of delay stages in the ROSC ring
15 LOW uses stages 0 to 7
16 MEDIUM uses stages 0 to 5
17 HIGH uses stages 0 to 3
18 TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications
19 The clock output will not glitch when changing the range up one step at a time
20 The clock output will glitch when changing the range down
21 Note: the values here are gray coded which is why HIGH comes before TOOHIGH
2223Value on reset: 2720"]
24#[derive(Clone, Copy, Debug, PartialEq, Eq)]
25#[repr(u16)]
26pub enum FREQ_RANGE_A {
27#[doc = "4004: `111110100100`"]
28LOW = 4004,
29#[doc = "4005: `111110100101`"]
30MEDIUM = 4005,
31#[doc = "4007: `111110100111`"]
32HIGH = 4007,
33#[doc = "4006: `111110100110`"]
34TOOHIGH = 4006,
35}
36impl From<FREQ_RANGE_A> for u16 {
37#[inline(always)]
38fn from(variant: FREQ_RANGE_A) -> Self {
39 variant as _
40}
41}
42impl crate::FieldSpec for FREQ_RANGE_A {
43type Ux = u16;
44}
45impl FREQ_RANGE_R {
46#[doc = "Get enumerated values variant"]
47 #[inline(always)]
48pub const fn variant(&self) -> Option<FREQ_RANGE_A> {
49match self.bits {
504004 => Some(FREQ_RANGE_A::LOW),
514005 => Some(FREQ_RANGE_A::MEDIUM),
524007 => Some(FREQ_RANGE_A::HIGH),
534006 => Some(FREQ_RANGE_A::TOOHIGH),
54_ => None,
55 }
56 }
57#[doc = "`111110100100`"]
58 #[inline(always)]
59pub fn is_low(&self) -> bool {
60*self == FREQ_RANGE_A::LOW
61 }
62#[doc = "`111110100101`"]
63 #[inline(always)]
64pub fn is_medium(&self) -> bool {
65*self == FREQ_RANGE_A::MEDIUM
66 }
67#[doc = "`111110100111`"]
68 #[inline(always)]
69pub fn is_high(&self) -> bool {
70*self == FREQ_RANGE_A::HIGH
71 }
72#[doc = "`111110100110`"]
73 #[inline(always)]
74pub fn is_toohigh(&self) -> bool {
75*self == FREQ_RANGE_A::TOOHIGH
76 }
77}
78#[doc = "Field `FREQ_RANGE` writer - Controls the number of delay stages in the ROSC ring
79 LOW uses stages 0 to 7
80 MEDIUM uses stages 0 to 5
81 HIGH uses stages 0 to 3
82 TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications
83 The clock output will not glitch when changing the range up one step at a time
84 The clock output will glitch when changing the range down
85 Note: the values here are gray coded which is why HIGH comes before TOOHIGH"]
86pub type FREQ_RANGE_W<'a, REG> = crate::FieldWriter<'a, REG, 12, FREQ_RANGE_A>;
87impl<'a, REG> FREQ_RANGE_W<'a, REG>
88where
89REG: crate::Writable + crate::RegisterSpec,
90 REG::Ux: From<u16>,
91{
92#[doc = "`111110100100`"]
93 #[inline(always)]
94pub fn low(self) -> &'a mut crate::W<REG> {
95self.variant(FREQ_RANGE_A::LOW)
96 }
97#[doc = "`111110100101`"]
98 #[inline(always)]
99pub fn medium(self) -> &'a mut crate::W<REG> {
100self.variant(FREQ_RANGE_A::MEDIUM)
101 }
102#[doc = "`111110100111`"]
103 #[inline(always)]
104pub fn high(self) -> &'a mut crate::W<REG> {
105self.variant(FREQ_RANGE_A::HIGH)
106 }
107#[doc = "`111110100110`"]
108 #[inline(always)]
109pub fn toohigh(self) -> &'a mut crate::W<REG> {
110self.variant(FREQ_RANGE_A::TOOHIGH)
111 }
112}
113#[doc = "Field `ENABLE` reader - On power-up this field is initialised to ENABLE
114 The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up
115 The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator."]
116pub type ENABLE_R = crate::FieldReader<ENABLE_A>;
117#[doc = "On power-up this field is initialised to ENABLE
118 The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up
119 The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator.
120121Value on reset: 0"]
122#[derive(Clone, Copy, Debug, PartialEq, Eq)]
123#[repr(u16)]
124pub enum ENABLE_A {
125#[doc = "3358: `110100011110`"]
126DISABLE = 3358,
127#[doc = "4011: `111110101011`"]
128ENABLE = 4011,
129}
130impl From<ENABLE_A> for u16 {
131#[inline(always)]
132fn from(variant: ENABLE_A) -> Self {
133 variant as _
134}
135}
136impl crate::FieldSpec for ENABLE_A {
137type Ux = u16;
138}
139impl ENABLE_R {
140#[doc = "Get enumerated values variant"]
141 #[inline(always)]
142pub const fn variant(&self) -> Option<ENABLE_A> {
143match self.bits {
1443358 => Some(ENABLE_A::DISABLE),
1454011 => Some(ENABLE_A::ENABLE),
146_ => None,
147 }
148 }
149#[doc = "`110100011110`"]
150 #[inline(always)]
151pub fn is_disable(&self) -> bool {
152*self == ENABLE_A::DISABLE
153 }
154#[doc = "`111110101011`"]
155 #[inline(always)]
156pub fn is_enable(&self) -> bool {
157*self == ENABLE_A::ENABLE
158 }
159}
160#[doc = "Field `ENABLE` writer - On power-up this field is initialised to ENABLE
161 The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up
162 The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator."]
163pub type ENABLE_W<'a, REG> = crate::FieldWriter<'a, REG, 12, ENABLE_A>;
164impl<'a, REG> ENABLE_W<'a, REG>
165where
166REG: crate::Writable + crate::RegisterSpec,
167 REG::Ux: From<u16>,
168{
169#[doc = "`110100011110`"]
170 #[inline(always)]
171pub fn disable(self) -> &'a mut crate::W<REG> {
172self.variant(ENABLE_A::DISABLE)
173 }
174#[doc = "`111110101011`"]
175 #[inline(always)]
176pub fn enable(self) -> &'a mut crate::W<REG> {
177self.variant(ENABLE_A::ENABLE)
178 }
179}
180impl R {
181#[doc = "Bits 0:11 - Controls the number of delay stages in the ROSC ring
182 LOW uses stages 0 to 7
183 MEDIUM uses stages 0 to 5
184 HIGH uses stages 0 to 3
185 TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications
186 The clock output will not glitch when changing the range up one step at a time
187 The clock output will glitch when changing the range down
188 Note: the values here are gray coded which is why HIGH comes before TOOHIGH"]
189 #[inline(always)]
190pub fn freq_range(&self) -> FREQ_RANGE_R {
191 FREQ_RANGE_R::new((self.bits & 0x0fff) as u16)
192 }
193#[doc = "Bits 12:23 - On power-up this field is initialised to ENABLE
194 The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up
195 The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator."]
196 #[inline(always)]
197pub fn enable(&self) -> ENABLE_R {
198 ENABLE_R::new(((self.bits >> 12) & 0x0fff) as u16)
199 }
200}
201impl W {
202#[doc = "Bits 0:11 - Controls the number of delay stages in the ROSC ring
203 LOW uses stages 0 to 7
204 MEDIUM uses stages 0 to 5
205 HIGH uses stages 0 to 3
206 TOOHIGH uses stages 0 to 1 and should not be used because its frequency exceeds design specifications
207 The clock output will not glitch when changing the range up one step at a time
208 The clock output will glitch when changing the range down
209 Note: the values here are gray coded which is why HIGH comes before TOOHIGH"]
210 #[inline(always)]
211 #[must_use]
212pub fn freq_range(&mut self) -> FREQ_RANGE_W<CTRL_SPEC> {
213 FREQ_RANGE_W::new(self, 0)
214 }
215#[doc = "Bits 12:23 - On power-up this field is initialised to ENABLE
216 The system clock must be switched to another source before setting this field to DISABLE otherwise the chip will lock up
217 The 12-bit code is intended to give some protection against accidental writes. An invalid setting will enable the oscillator."]
218 #[inline(always)]
219 #[must_use]
220pub fn enable(&mut self) -> ENABLE_W<CTRL_SPEC> {
221 ENABLE_W::new(self, 12)
222 }
223#[doc = r" Writes raw bits to the register."]
224 #[doc = r""]
225 #[doc = r" # Safety"]
226 #[doc = r""]
227 #[doc = r" Passing incorrect value can cause undefined behaviour. See reference manual"]
228 #[inline(always)]
229pub unsafe fn bits(&mut self, bits: u32) -> &mut Self {
230self.bits = bits;
231self
232}
233}
234#[doc = "Ring Oscillator control
235236You can [`read`](crate::generic::Reg::read) this register and get [`ctrl::R`](R). You can [`reset`](crate::generic::Reg::reset), [`write`](crate::generic::Reg::write), [`write_with_zero`](crate::generic::Reg::write_with_zero) this register using [`ctrl::W`](W). You can also [`modify`](crate::generic::Reg::modify) this register. See [API](https://docs.rs/svd2rust/#read--modify--write-api)."]
237pub struct CTRL_SPEC;
238impl crate::RegisterSpec for CTRL_SPEC {
239type Ux = u32;
240}
241#[doc = "`read()` method returns [`ctrl::R`](R) reader structure"]
242impl crate::Readable for CTRL_SPEC {}
243#[doc = "`write(|w| ..)` method takes [`ctrl::W`](W) writer structure"]
244impl crate::Writable for CTRL_SPEC {
245const ZERO_TO_MODIFY_FIELDS_BITMAP: u32 = 0;
246const ONE_TO_MODIFY_FIELDS_BITMAP: u32 = 0;
247}
248#[doc = "`reset()` method sets CTRL to value 0x0aa0"]
249impl crate::Resettable for CTRL_SPEC {
250const RESET_VALUE: u32 = 0x0aa0;
251}