atsamd51n/dac/
ctrlb.rs

1#[doc = "Register `CTRLB` reader"]
2pub type R = crate::R<CtrlbSpec>;
3#[doc = "Register `CTRLB` writer"]
4pub type W = crate::W<CtrlbSpec>;
5#[doc = "Field `DIFF` reader - Differential mode enable"]
6pub type DiffR = crate::BitReader;
7#[doc = "Field `DIFF` writer - Differential mode enable"]
8pub type DiffW<'a, REG> = crate::BitWriter<'a, REG>;
9#[doc = "Reference Selection for DAC0/1\n\nValue on reset: 1"]
10#[derive(Clone, Copy, Debug, PartialEq, Eq)]
11#[repr(u8)]
12pub enum Refselselect {
13    #[doc = "0: External reference unbuffered"]
14    Vrefpu = 0,
15    #[doc = "1: Analog supply"]
16    Vddana = 1,
17    #[doc = "2: External reference buffered"]
18    Vrefpb = 2,
19    #[doc = "3: Internal bandgap reference"]
20    Intref = 3,
21}
22impl From<Refselselect> for u8 {
23    #[inline(always)]
24    fn from(variant: Refselselect) -> Self {
25        variant as _
26    }
27}
28impl crate::FieldSpec for Refselselect {
29    type Ux = u8;
30}
31impl crate::IsEnum for Refselselect {}
32#[doc = "Field `REFSEL` reader - Reference Selection for DAC0/1"]
33pub type RefselR = crate::FieldReader<Refselselect>;
34impl RefselR {
35    #[doc = "Get enumerated values variant"]
36    #[inline(always)]
37    pub const fn variant(&self) -> Refselselect {
38        match self.bits {
39            0 => Refselselect::Vrefpu,
40            1 => Refselselect::Vddana,
41            2 => Refselselect::Vrefpb,
42            3 => Refselselect::Intref,
43            _ => unreachable!(),
44        }
45    }
46    #[doc = "External reference unbuffered"]
47    #[inline(always)]
48    pub fn is_vrefpu(&self) -> bool {
49        *self == Refselselect::Vrefpu
50    }
51    #[doc = "Analog supply"]
52    #[inline(always)]
53    pub fn is_vddana(&self) -> bool {
54        *self == Refselselect::Vddana
55    }
56    #[doc = "External reference buffered"]
57    #[inline(always)]
58    pub fn is_vrefpb(&self) -> bool {
59        *self == Refselselect::Vrefpb
60    }
61    #[doc = "Internal bandgap reference"]
62    #[inline(always)]
63    pub fn is_intref(&self) -> bool {
64        *self == Refselselect::Intref
65    }
66}
67#[doc = "Field `REFSEL` writer - Reference Selection for DAC0/1"]
68pub type RefselW<'a, REG> = crate::FieldWriter<'a, REG, 2, Refselselect, crate::Safe>;
69impl<'a, REG> RefselW<'a, REG>
70where
71    REG: crate::Writable + crate::RegisterSpec,
72    REG::Ux: From<u8>,
73{
74    #[doc = "External reference unbuffered"]
75    #[inline(always)]
76    pub fn vrefpu(self) -> &'a mut crate::W<REG> {
77        self.variant(Refselselect::Vrefpu)
78    }
79    #[doc = "Analog supply"]
80    #[inline(always)]
81    pub fn vddana(self) -> &'a mut crate::W<REG> {
82        self.variant(Refselselect::Vddana)
83    }
84    #[doc = "External reference buffered"]
85    #[inline(always)]
86    pub fn vrefpb(self) -> &'a mut crate::W<REG> {
87        self.variant(Refselselect::Vrefpb)
88    }
89    #[doc = "Internal bandgap reference"]
90    #[inline(always)]
91    pub fn intref(self) -> &'a mut crate::W<REG> {
92        self.variant(Refselselect::Intref)
93    }
94}
95impl R {
96    #[doc = "Bit 0 - Differential mode enable"]
97    #[inline(always)]
98    pub fn diff(&self) -> DiffR {
99        DiffR::new((self.bits & 1) != 0)
100    }
101    #[doc = "Bits 1:2 - Reference Selection for DAC0/1"]
102    #[inline(always)]
103    pub fn refsel(&self) -> RefselR {
104        RefselR::new((self.bits >> 1) & 3)
105    }
106}
107impl W {
108    #[doc = "Bit 0 - Differential mode enable"]
109    #[inline(always)]
110    #[must_use]
111    pub fn diff(&mut self) -> DiffW<CtrlbSpec> {
112        DiffW::new(self, 0)
113    }
114    #[doc = "Bits 1:2 - Reference Selection for DAC0/1"]
115    #[inline(always)]
116    #[must_use]
117    pub fn refsel(&mut self) -> RefselW<CtrlbSpec> {
118        RefselW::new(self, 1)
119    }
120}
121#[doc = "Control B\n\nYou can [`read`](crate::Reg::read) this register and get [`ctrlb::R`](R). You can [`reset`](crate::Reg::reset), [`write`](crate::Reg::write), [`write_with_zero`](crate::Reg::write_with_zero) this register using [`ctrlb::W`](W). You can also [`modify`](crate::Reg::modify) this register. See [API](https://docs.rs/svd2rust/#read--modify--write-api)."]
122pub struct CtrlbSpec;
123impl crate::RegisterSpec for CtrlbSpec {
124    type Ux = u8;
125}
126#[doc = "`read()` method returns [`ctrlb::R`](R) reader structure"]
127impl crate::Readable for CtrlbSpec {}
128#[doc = "`write(|w| ..)` method takes [`ctrlb::W`](W) writer structure"]
129impl crate::Writable for CtrlbSpec {
130    type Safety = crate::Unsafe;
131    const ZERO_TO_MODIFY_FIELDS_BITMAP: u8 = 0;
132    const ONE_TO_MODIFY_FIELDS_BITMAP: u8 = 0;
133}
134#[doc = "`reset()` method sets CTRLB to value 0x02"]
135impl crate::Resettable for CtrlbSpec {
136    const RESET_VALUE: u8 = 0x02;
137}