atsamd51p/dac/
dacctrl.rs

1#[doc = "Register `DACCTRL[%s]` reader"]
2pub type R = crate::R<DacctrlSpec>;
3#[doc = "Register `DACCTRL[%s]` writer"]
4pub type W = crate::W<DacctrlSpec>;
5#[doc = "Field `LEFTADJ` reader - Left Adjusted Data"]
6pub type LeftadjR = crate::BitReader;
7#[doc = "Field `LEFTADJ` writer - Left Adjusted Data"]
8pub type LeftadjW<'a, REG> = crate::BitWriter<'a, REG>;
9#[doc = "Field `ENABLE` reader - Enable DAC0"]
10pub type EnableR = crate::BitReader;
11#[doc = "Field `ENABLE` writer - Enable DAC0"]
12pub type EnableW<'a, REG> = crate::BitWriter<'a, REG>;
13#[doc = "Current Control\n\nValue on reset: 0"]
14#[derive(Clone, Copy, Debug, PartialEq, Eq)]
15#[repr(u8)]
16pub enum Cctrlselect {
17    #[doc = "0: 100kSPS"]
18    Cc100k = 0,
19    #[doc = "1: 500kSPS"]
20    Cc1m = 1,
21    #[doc = "2: 1MSPS"]
22    Cc12m = 2,
23}
24impl From<Cctrlselect> for u8 {
25    #[inline(always)]
26    fn from(variant: Cctrlselect) -> Self {
27        variant as _
28    }
29}
30impl crate::FieldSpec for Cctrlselect {
31    type Ux = u8;
32}
33impl crate::IsEnum for Cctrlselect {}
34#[doc = "Field `CCTRL` reader - Current Control"]
35pub type CctrlR = crate::FieldReader<Cctrlselect>;
36impl CctrlR {
37    #[doc = "Get enumerated values variant"]
38    #[inline(always)]
39    pub const fn variant(&self) -> Option<Cctrlselect> {
40        match self.bits {
41            0 => Some(Cctrlselect::Cc100k),
42            1 => Some(Cctrlselect::Cc1m),
43            2 => Some(Cctrlselect::Cc12m),
44            _ => None,
45        }
46    }
47    #[doc = "100kSPS"]
48    #[inline(always)]
49    pub fn is_cc100k(&self) -> bool {
50        *self == Cctrlselect::Cc100k
51    }
52    #[doc = "500kSPS"]
53    #[inline(always)]
54    pub fn is_cc1m(&self) -> bool {
55        *self == Cctrlselect::Cc1m
56    }
57    #[doc = "1MSPS"]
58    #[inline(always)]
59    pub fn is_cc12m(&self) -> bool {
60        *self == Cctrlselect::Cc12m
61    }
62}
63#[doc = "Field `CCTRL` writer - Current Control"]
64pub type CctrlW<'a, REG> = crate::FieldWriter<'a, REG, 2, Cctrlselect>;
65impl<'a, REG> CctrlW<'a, REG>
66where
67    REG: crate::Writable + crate::RegisterSpec,
68    REG::Ux: From<u8>,
69{
70    #[doc = "100kSPS"]
71    #[inline(always)]
72    pub fn cc100k(self) -> &'a mut crate::W<REG> {
73        self.variant(Cctrlselect::Cc100k)
74    }
75    #[doc = "500kSPS"]
76    #[inline(always)]
77    pub fn cc1m(self) -> &'a mut crate::W<REG> {
78        self.variant(Cctrlselect::Cc1m)
79    }
80    #[doc = "1MSPS"]
81    #[inline(always)]
82    pub fn cc12m(self) -> &'a mut crate::W<REG> {
83        self.variant(Cctrlselect::Cc12m)
84    }
85}
86#[doc = "Field `FEXT` reader - Standalone Filter"]
87pub type FextR = crate::BitReader;
88#[doc = "Field `FEXT` writer - Standalone Filter"]
89pub type FextW<'a, REG> = crate::BitWriter<'a, REG>;
90#[doc = "Field `RUNSTDBY` reader - Run in Standby"]
91pub type RunstdbyR = crate::BitReader;
92#[doc = "Field `RUNSTDBY` writer - Run in Standby"]
93pub type RunstdbyW<'a, REG> = crate::BitWriter<'a, REG>;
94#[doc = "Field `DITHER` reader - Dithering Mode"]
95pub type DitherR = crate::BitReader;
96#[doc = "Field `DITHER` writer - Dithering Mode"]
97pub type DitherW<'a, REG> = crate::BitWriter<'a, REG>;
98#[doc = "Refresh period\n\nValue on reset: 0"]
99#[derive(Clone, Copy, Debug, PartialEq, Eq)]
100#[repr(u8)]
101pub enum Refreshselect {
102    #[doc = "0: Do not Refresh"]
103    Refresh0 = 0,
104    #[doc = "1: Refresh every 30 us"]
105    Refresh1 = 1,
106    #[doc = "2: Refresh every 60 us"]
107    Refresh2 = 2,
108    #[doc = "3: Refresh every 90 us"]
109    Refresh3 = 3,
110    #[doc = "4: Refresh every 120 us"]
111    Refresh4 = 4,
112    #[doc = "5: Refresh every 150 us"]
113    Refresh5 = 5,
114    #[doc = "6: Refresh every 180 us"]
115    Refresh6 = 6,
116    #[doc = "7: Refresh every 210 us"]
117    Refresh7 = 7,
118    #[doc = "8: Refresh every 240 us"]
119    Refresh8 = 8,
120    #[doc = "9: Refresh every 270 us"]
121    Refresh9 = 9,
122    #[doc = "10: Refresh every 300 us"]
123    Refresh10 = 10,
124    #[doc = "11: Refresh every 330 us"]
125    Refresh11 = 11,
126    #[doc = "12: Refresh every 360 us"]
127    Refresh12 = 12,
128    #[doc = "13: Refresh every 390 us"]
129    Refresh13 = 13,
130    #[doc = "14: Refresh every 420 us"]
131    Refresh14 = 14,
132    #[doc = "15: Refresh every 450 us"]
133    Refresh15 = 15,
134}
135impl From<Refreshselect> for u8 {
136    #[inline(always)]
137    fn from(variant: Refreshselect) -> Self {
138        variant as _
139    }
140}
141impl crate::FieldSpec for Refreshselect {
142    type Ux = u8;
143}
144impl crate::IsEnum for Refreshselect {}
145#[doc = "Field `REFRESH` reader - Refresh period"]
146pub type RefreshR = crate::FieldReader<Refreshselect>;
147impl RefreshR {
148    #[doc = "Get enumerated values variant"]
149    #[inline(always)]
150    pub const fn variant(&self) -> Refreshselect {
151        match self.bits {
152            0 => Refreshselect::Refresh0,
153            1 => Refreshselect::Refresh1,
154            2 => Refreshselect::Refresh2,
155            3 => Refreshselect::Refresh3,
156            4 => Refreshselect::Refresh4,
157            5 => Refreshselect::Refresh5,
158            6 => Refreshselect::Refresh6,
159            7 => Refreshselect::Refresh7,
160            8 => Refreshselect::Refresh8,
161            9 => Refreshselect::Refresh9,
162            10 => Refreshselect::Refresh10,
163            11 => Refreshselect::Refresh11,
164            12 => Refreshselect::Refresh12,
165            13 => Refreshselect::Refresh13,
166            14 => Refreshselect::Refresh14,
167            15 => Refreshselect::Refresh15,
168            _ => unreachable!(),
169        }
170    }
171    #[doc = "Do not Refresh"]
172    #[inline(always)]
173    pub fn is_refresh_0(&self) -> bool {
174        *self == Refreshselect::Refresh0
175    }
176    #[doc = "Refresh every 30 us"]
177    #[inline(always)]
178    pub fn is_refresh_1(&self) -> bool {
179        *self == Refreshselect::Refresh1
180    }
181    #[doc = "Refresh every 60 us"]
182    #[inline(always)]
183    pub fn is_refresh_2(&self) -> bool {
184        *self == Refreshselect::Refresh2
185    }
186    #[doc = "Refresh every 90 us"]
187    #[inline(always)]
188    pub fn is_refresh_3(&self) -> bool {
189        *self == Refreshselect::Refresh3
190    }
191    #[doc = "Refresh every 120 us"]
192    #[inline(always)]
193    pub fn is_refresh_4(&self) -> bool {
194        *self == Refreshselect::Refresh4
195    }
196    #[doc = "Refresh every 150 us"]
197    #[inline(always)]
198    pub fn is_refresh_5(&self) -> bool {
199        *self == Refreshselect::Refresh5
200    }
201    #[doc = "Refresh every 180 us"]
202    #[inline(always)]
203    pub fn is_refresh_6(&self) -> bool {
204        *self == Refreshselect::Refresh6
205    }
206    #[doc = "Refresh every 210 us"]
207    #[inline(always)]
208    pub fn is_refresh_7(&self) -> bool {
209        *self == Refreshselect::Refresh7
210    }
211    #[doc = "Refresh every 240 us"]
212    #[inline(always)]
213    pub fn is_refresh_8(&self) -> bool {
214        *self == Refreshselect::Refresh8
215    }
216    #[doc = "Refresh every 270 us"]
217    #[inline(always)]
218    pub fn is_refresh_9(&self) -> bool {
219        *self == Refreshselect::Refresh9
220    }
221    #[doc = "Refresh every 300 us"]
222    #[inline(always)]
223    pub fn is_refresh_10(&self) -> bool {
224        *self == Refreshselect::Refresh10
225    }
226    #[doc = "Refresh every 330 us"]
227    #[inline(always)]
228    pub fn is_refresh_11(&self) -> bool {
229        *self == Refreshselect::Refresh11
230    }
231    #[doc = "Refresh every 360 us"]
232    #[inline(always)]
233    pub fn is_refresh_12(&self) -> bool {
234        *self == Refreshselect::Refresh12
235    }
236    #[doc = "Refresh every 390 us"]
237    #[inline(always)]
238    pub fn is_refresh_13(&self) -> bool {
239        *self == Refreshselect::Refresh13
240    }
241    #[doc = "Refresh every 420 us"]
242    #[inline(always)]
243    pub fn is_refresh_14(&self) -> bool {
244        *self == Refreshselect::Refresh14
245    }
246    #[doc = "Refresh every 450 us"]
247    #[inline(always)]
248    pub fn is_refresh_15(&self) -> bool {
249        *self == Refreshselect::Refresh15
250    }
251}
252#[doc = "Field `REFRESH` writer - Refresh period"]
253pub type RefreshW<'a, REG> = crate::FieldWriter<'a, REG, 4, Refreshselect, crate::Safe>;
254impl<'a, REG> RefreshW<'a, REG>
255where
256    REG: crate::Writable + crate::RegisterSpec,
257    REG::Ux: From<u8>,
258{
259    #[doc = "Do not Refresh"]
260    #[inline(always)]
261    pub fn refresh_0(self) -> &'a mut crate::W<REG> {
262        self.variant(Refreshselect::Refresh0)
263    }
264    #[doc = "Refresh every 30 us"]
265    #[inline(always)]
266    pub fn refresh_1(self) -> &'a mut crate::W<REG> {
267        self.variant(Refreshselect::Refresh1)
268    }
269    #[doc = "Refresh every 60 us"]
270    #[inline(always)]
271    pub fn refresh_2(self) -> &'a mut crate::W<REG> {
272        self.variant(Refreshselect::Refresh2)
273    }
274    #[doc = "Refresh every 90 us"]
275    #[inline(always)]
276    pub fn refresh_3(self) -> &'a mut crate::W<REG> {
277        self.variant(Refreshselect::Refresh3)
278    }
279    #[doc = "Refresh every 120 us"]
280    #[inline(always)]
281    pub fn refresh_4(self) -> &'a mut crate::W<REG> {
282        self.variant(Refreshselect::Refresh4)
283    }
284    #[doc = "Refresh every 150 us"]
285    #[inline(always)]
286    pub fn refresh_5(self) -> &'a mut crate::W<REG> {
287        self.variant(Refreshselect::Refresh5)
288    }
289    #[doc = "Refresh every 180 us"]
290    #[inline(always)]
291    pub fn refresh_6(self) -> &'a mut crate::W<REG> {
292        self.variant(Refreshselect::Refresh6)
293    }
294    #[doc = "Refresh every 210 us"]
295    #[inline(always)]
296    pub fn refresh_7(self) -> &'a mut crate::W<REG> {
297        self.variant(Refreshselect::Refresh7)
298    }
299    #[doc = "Refresh every 240 us"]
300    #[inline(always)]
301    pub fn refresh_8(self) -> &'a mut crate::W<REG> {
302        self.variant(Refreshselect::Refresh8)
303    }
304    #[doc = "Refresh every 270 us"]
305    #[inline(always)]
306    pub fn refresh_9(self) -> &'a mut crate::W<REG> {
307        self.variant(Refreshselect::Refresh9)
308    }
309    #[doc = "Refresh every 300 us"]
310    #[inline(always)]
311    pub fn refresh_10(self) -> &'a mut crate::W<REG> {
312        self.variant(Refreshselect::Refresh10)
313    }
314    #[doc = "Refresh every 330 us"]
315    #[inline(always)]
316    pub fn refresh_11(self) -> &'a mut crate::W<REG> {
317        self.variant(Refreshselect::Refresh11)
318    }
319    #[doc = "Refresh every 360 us"]
320    #[inline(always)]
321    pub fn refresh_12(self) -> &'a mut crate::W<REG> {
322        self.variant(Refreshselect::Refresh12)
323    }
324    #[doc = "Refresh every 390 us"]
325    #[inline(always)]
326    pub fn refresh_13(self) -> &'a mut crate::W<REG> {
327        self.variant(Refreshselect::Refresh13)
328    }
329    #[doc = "Refresh every 420 us"]
330    #[inline(always)]
331    pub fn refresh_14(self) -> &'a mut crate::W<REG> {
332        self.variant(Refreshselect::Refresh14)
333    }
334    #[doc = "Refresh every 450 us"]
335    #[inline(always)]
336    pub fn refresh_15(self) -> &'a mut crate::W<REG> {
337        self.variant(Refreshselect::Refresh15)
338    }
339}
340#[doc = "Sampling Rate\n\nValue on reset: 0"]
341#[derive(Clone, Copy, Debug, PartialEq, Eq)]
342#[repr(u8)]
343pub enum Osrselect {
344    #[doc = "0: No Over Sampling"]
345    Osr1 = 0,
346    #[doc = "1: 2x Over Sampling Ratio"]
347    Osr2 = 1,
348    #[doc = "2: 4x Over Sampling Ratio"]
349    Osr4 = 2,
350    #[doc = "3: 8x Over Sampling Ratio"]
351    Osr8 = 3,
352    #[doc = "4: 16x Over Sampling Ratio"]
353    Osr16 = 4,
354    #[doc = "5: 32x Over Sampling Ratio"]
355    Osr32 = 5,
356}
357impl From<Osrselect> for u8 {
358    #[inline(always)]
359    fn from(variant: Osrselect) -> Self {
360        variant as _
361    }
362}
363impl crate::FieldSpec for Osrselect {
364    type Ux = u8;
365}
366impl crate::IsEnum for Osrselect {}
367#[doc = "Field `OSR` reader - Sampling Rate"]
368pub type OsrR = crate::FieldReader<Osrselect>;
369impl OsrR {
370    #[doc = "Get enumerated values variant"]
371    #[inline(always)]
372    pub const fn variant(&self) -> Option<Osrselect> {
373        match self.bits {
374            0 => Some(Osrselect::Osr1),
375            1 => Some(Osrselect::Osr2),
376            2 => Some(Osrselect::Osr4),
377            3 => Some(Osrselect::Osr8),
378            4 => Some(Osrselect::Osr16),
379            5 => Some(Osrselect::Osr32),
380            _ => None,
381        }
382    }
383    #[doc = "No Over Sampling"]
384    #[inline(always)]
385    pub fn is_osr_1(&self) -> bool {
386        *self == Osrselect::Osr1
387    }
388    #[doc = "2x Over Sampling Ratio"]
389    #[inline(always)]
390    pub fn is_osr_2(&self) -> bool {
391        *self == Osrselect::Osr2
392    }
393    #[doc = "4x Over Sampling Ratio"]
394    #[inline(always)]
395    pub fn is_osr_4(&self) -> bool {
396        *self == Osrselect::Osr4
397    }
398    #[doc = "8x Over Sampling Ratio"]
399    #[inline(always)]
400    pub fn is_osr_8(&self) -> bool {
401        *self == Osrselect::Osr8
402    }
403    #[doc = "16x Over Sampling Ratio"]
404    #[inline(always)]
405    pub fn is_osr_16(&self) -> bool {
406        *self == Osrselect::Osr16
407    }
408    #[doc = "32x Over Sampling Ratio"]
409    #[inline(always)]
410    pub fn is_osr_32(&self) -> bool {
411        *self == Osrselect::Osr32
412    }
413}
414#[doc = "Field `OSR` writer - Sampling Rate"]
415pub type OsrW<'a, REG> = crate::FieldWriter<'a, REG, 3, Osrselect>;
416impl<'a, REG> OsrW<'a, REG>
417where
418    REG: crate::Writable + crate::RegisterSpec,
419    REG::Ux: From<u8>,
420{
421    #[doc = "No Over Sampling"]
422    #[inline(always)]
423    pub fn osr_1(self) -> &'a mut crate::W<REG> {
424        self.variant(Osrselect::Osr1)
425    }
426    #[doc = "2x Over Sampling Ratio"]
427    #[inline(always)]
428    pub fn osr_2(self) -> &'a mut crate::W<REG> {
429        self.variant(Osrselect::Osr2)
430    }
431    #[doc = "4x Over Sampling Ratio"]
432    #[inline(always)]
433    pub fn osr_4(self) -> &'a mut crate::W<REG> {
434        self.variant(Osrselect::Osr4)
435    }
436    #[doc = "8x Over Sampling Ratio"]
437    #[inline(always)]
438    pub fn osr_8(self) -> &'a mut crate::W<REG> {
439        self.variant(Osrselect::Osr8)
440    }
441    #[doc = "16x Over Sampling Ratio"]
442    #[inline(always)]
443    pub fn osr_16(self) -> &'a mut crate::W<REG> {
444        self.variant(Osrselect::Osr16)
445    }
446    #[doc = "32x Over Sampling Ratio"]
447    #[inline(always)]
448    pub fn osr_32(self) -> &'a mut crate::W<REG> {
449        self.variant(Osrselect::Osr32)
450    }
451}
452impl R {
453    #[doc = "Bit 0 - Left Adjusted Data"]
454    #[inline(always)]
455    pub fn leftadj(&self) -> LeftadjR {
456        LeftadjR::new((self.bits & 1) != 0)
457    }
458    #[doc = "Bit 1 - Enable DAC0"]
459    #[inline(always)]
460    pub fn enable(&self) -> EnableR {
461        EnableR::new(((self.bits >> 1) & 1) != 0)
462    }
463    #[doc = "Bits 2:3 - Current Control"]
464    #[inline(always)]
465    pub fn cctrl(&self) -> CctrlR {
466        CctrlR::new(((self.bits >> 2) & 3) as u8)
467    }
468    #[doc = "Bit 5 - Standalone Filter"]
469    #[inline(always)]
470    pub fn fext(&self) -> FextR {
471        FextR::new(((self.bits >> 5) & 1) != 0)
472    }
473    #[doc = "Bit 6 - Run in Standby"]
474    #[inline(always)]
475    pub fn runstdby(&self) -> RunstdbyR {
476        RunstdbyR::new(((self.bits >> 6) & 1) != 0)
477    }
478    #[doc = "Bit 7 - Dithering Mode"]
479    #[inline(always)]
480    pub fn dither(&self) -> DitherR {
481        DitherR::new(((self.bits >> 7) & 1) != 0)
482    }
483    #[doc = "Bits 8:11 - Refresh period"]
484    #[inline(always)]
485    pub fn refresh(&self) -> RefreshR {
486        RefreshR::new(((self.bits >> 8) & 0x0f) as u8)
487    }
488    #[doc = "Bits 13:15 - Sampling Rate"]
489    #[inline(always)]
490    pub fn osr(&self) -> OsrR {
491        OsrR::new(((self.bits >> 13) & 7) as u8)
492    }
493}
494impl W {
495    #[doc = "Bit 0 - Left Adjusted Data"]
496    #[inline(always)]
497    #[must_use]
498    pub fn leftadj(&mut self) -> LeftadjW<DacctrlSpec> {
499        LeftadjW::new(self, 0)
500    }
501    #[doc = "Bit 1 - Enable DAC0"]
502    #[inline(always)]
503    #[must_use]
504    pub fn enable(&mut self) -> EnableW<DacctrlSpec> {
505        EnableW::new(self, 1)
506    }
507    #[doc = "Bits 2:3 - Current Control"]
508    #[inline(always)]
509    #[must_use]
510    pub fn cctrl(&mut self) -> CctrlW<DacctrlSpec> {
511        CctrlW::new(self, 2)
512    }
513    #[doc = "Bit 5 - Standalone Filter"]
514    #[inline(always)]
515    #[must_use]
516    pub fn fext(&mut self) -> FextW<DacctrlSpec> {
517        FextW::new(self, 5)
518    }
519    #[doc = "Bit 6 - Run in Standby"]
520    #[inline(always)]
521    #[must_use]
522    pub fn runstdby(&mut self) -> RunstdbyW<DacctrlSpec> {
523        RunstdbyW::new(self, 6)
524    }
525    #[doc = "Bit 7 - Dithering Mode"]
526    #[inline(always)]
527    #[must_use]
528    pub fn dither(&mut self) -> DitherW<DacctrlSpec> {
529        DitherW::new(self, 7)
530    }
531    #[doc = "Bits 8:11 - Refresh period"]
532    #[inline(always)]
533    #[must_use]
534    pub fn refresh(&mut self) -> RefreshW<DacctrlSpec> {
535        RefreshW::new(self, 8)
536    }
537    #[doc = "Bits 13:15 - Sampling Rate"]
538    #[inline(always)]
539    #[must_use]
540    pub fn osr(&mut self) -> OsrW<DacctrlSpec> {
541        OsrW::new(self, 13)
542    }
543}
544#[doc = "DAC n Control\n\nYou can [`read`](crate::Reg::read) this register and get [`dacctrl::R`](R). You can [`reset`](crate::Reg::reset), [`write`](crate::Reg::write), [`write_with_zero`](crate::Reg::write_with_zero) this register using [`dacctrl::W`](W). You can also [`modify`](crate::Reg::modify) this register. See [API](https://docs.rs/svd2rust/#read--modify--write-api)."]
545pub struct DacctrlSpec;
546impl crate::RegisterSpec for DacctrlSpec {
547    type Ux = u16;
548}
549#[doc = "`read()` method returns [`dacctrl::R`](R) reader structure"]
550impl crate::Readable for DacctrlSpec {}
551#[doc = "`write(|w| ..)` method takes [`dacctrl::W`](W) writer structure"]
552impl crate::Writable for DacctrlSpec {
553    type Safety = crate::Unsafe;
554    const ZERO_TO_MODIFY_FIELDS_BITMAP: u16 = 0;
555    const ONE_TO_MODIFY_FIELDS_BITMAP: u16 = 0;
556}
557#[doc = "`reset()` method sets DACCTRL[%s]
558to value 0"]
559impl crate::Resettable for DacctrlSpec {
560    const RESET_VALUE: u16 = 0;
561}