atsamd21j/i2s/
clkctrl.rs

1#[doc = "Register `CLKCTRL%s` reader"]
2pub type R = crate::R<ClkctrlSpec>;
3#[doc = "Register `CLKCTRL%s` writer"]
4pub type W = crate::W<ClkctrlSpec>;
5#[doc = "Slot Size\n\nValue on reset: 0"]
6#[derive(Clone, Copy, Debug, PartialEq, Eq)]
7#[repr(u8)]
8pub enum Slotsizeselect {
9    #[doc = "0: 8-bit Slot for Clock Unit n"]
10    _8 = 0,
11    #[doc = "1: 16-bit Slot for Clock Unit n"]
12    _16 = 1,
13    #[doc = "2: 24-bit Slot for Clock Unit n"]
14    _24 = 2,
15    #[doc = "3: 32-bit Slot for Clock Unit n"]
16    _32 = 3,
17}
18impl From<Slotsizeselect> for u8 {
19    #[inline(always)]
20    fn from(variant: Slotsizeselect) -> Self {
21        variant as _
22    }
23}
24impl crate::FieldSpec for Slotsizeselect {
25    type Ux = u8;
26}
27impl crate::IsEnum for Slotsizeselect {}
28#[doc = "Field `SLOTSIZE` reader - Slot Size"]
29pub type SlotsizeR = crate::FieldReader<Slotsizeselect>;
30impl SlotsizeR {
31    #[doc = "Get enumerated values variant"]
32    #[inline(always)]
33    pub const fn variant(&self) -> Slotsizeselect {
34        match self.bits {
35            0 => Slotsizeselect::_8,
36            1 => Slotsizeselect::_16,
37            2 => Slotsizeselect::_24,
38            3 => Slotsizeselect::_32,
39            _ => unreachable!(),
40        }
41    }
42    #[doc = "8-bit Slot for Clock Unit n"]
43    #[inline(always)]
44    pub fn is_8(&self) -> bool {
45        *self == Slotsizeselect::_8
46    }
47    #[doc = "16-bit Slot for Clock Unit n"]
48    #[inline(always)]
49    pub fn is_16(&self) -> bool {
50        *self == Slotsizeselect::_16
51    }
52    #[doc = "24-bit Slot for Clock Unit n"]
53    #[inline(always)]
54    pub fn is_24(&self) -> bool {
55        *self == Slotsizeselect::_24
56    }
57    #[doc = "32-bit Slot for Clock Unit n"]
58    #[inline(always)]
59    pub fn is_32(&self) -> bool {
60        *self == Slotsizeselect::_32
61    }
62}
63#[doc = "Field `SLOTSIZE` writer - Slot Size"]
64pub type SlotsizeW<'a, REG> = crate::FieldWriter<'a, REG, 2, Slotsizeselect, crate::Safe>;
65impl<'a, REG> SlotsizeW<'a, REG>
66where
67    REG: crate::Writable + crate::RegisterSpec,
68    REG::Ux: From<u8>,
69{
70    #[doc = "8-bit Slot for Clock Unit n"]
71    #[inline(always)]
72    pub fn _8(self) -> &'a mut crate::W<REG> {
73        self.variant(Slotsizeselect::_8)
74    }
75    #[doc = "16-bit Slot for Clock Unit n"]
76    #[inline(always)]
77    pub fn _16(self) -> &'a mut crate::W<REG> {
78        self.variant(Slotsizeselect::_16)
79    }
80    #[doc = "24-bit Slot for Clock Unit n"]
81    #[inline(always)]
82    pub fn _24(self) -> &'a mut crate::W<REG> {
83        self.variant(Slotsizeselect::_24)
84    }
85    #[doc = "32-bit Slot for Clock Unit n"]
86    #[inline(always)]
87    pub fn _32(self) -> &'a mut crate::W<REG> {
88        self.variant(Slotsizeselect::_32)
89    }
90}
91#[doc = "Field `NBSLOTS` reader - Number of Slots in Frame"]
92pub type NbslotsR = crate::FieldReader;
93#[doc = "Field `NBSLOTS` writer - Number of Slots in Frame"]
94pub type NbslotsW<'a, REG> = crate::FieldWriter<'a, REG, 3>;
95#[doc = "Frame Sync Width\n\nValue on reset: 0"]
96#[derive(Clone, Copy, Debug, PartialEq, Eq)]
97#[repr(u8)]
98pub enum Fswidthselect {
99    #[doc = "0: Frame Sync Pulse is 1 Slot wide (default for I2S protocol)"]
100    Slot = 0,
101    #[doc = "1: Frame Sync Pulse is half a Frame wide"]
102    Half = 1,
103    #[doc = "2: Frame Sync Pulse is 1 Bit wide"]
104    Bit = 2,
105    #[doc = "3: Clock Unit n operates in Burst mode, with a 1-bit wide Frame Sync pulse per Data sample, only when Data transfer is requested"]
106    Burst = 3,
107}
108impl From<Fswidthselect> for u8 {
109    #[inline(always)]
110    fn from(variant: Fswidthselect) -> Self {
111        variant as _
112    }
113}
114impl crate::FieldSpec for Fswidthselect {
115    type Ux = u8;
116}
117impl crate::IsEnum for Fswidthselect {}
118#[doc = "Field `FSWIDTH` reader - Frame Sync Width"]
119pub type FswidthR = crate::FieldReader<Fswidthselect>;
120impl FswidthR {
121    #[doc = "Get enumerated values variant"]
122    #[inline(always)]
123    pub const fn variant(&self) -> Fswidthselect {
124        match self.bits {
125            0 => Fswidthselect::Slot,
126            1 => Fswidthselect::Half,
127            2 => Fswidthselect::Bit,
128            3 => Fswidthselect::Burst,
129            _ => unreachable!(),
130        }
131    }
132    #[doc = "Frame Sync Pulse is 1 Slot wide (default for I2S protocol)"]
133    #[inline(always)]
134    pub fn is_slot(&self) -> bool {
135        *self == Fswidthselect::Slot
136    }
137    #[doc = "Frame Sync Pulse is half a Frame wide"]
138    #[inline(always)]
139    pub fn is_half(&self) -> bool {
140        *self == Fswidthselect::Half
141    }
142    #[doc = "Frame Sync Pulse is 1 Bit wide"]
143    #[inline(always)]
144    pub fn is_bit(&self) -> bool {
145        *self == Fswidthselect::Bit
146    }
147    #[doc = "Clock Unit n operates in Burst mode, with a 1-bit wide Frame Sync pulse per Data sample, only when Data transfer is requested"]
148    #[inline(always)]
149    pub fn is_burst(&self) -> bool {
150        *self == Fswidthselect::Burst
151    }
152}
153#[doc = "Field `FSWIDTH` writer - Frame Sync Width"]
154pub type FswidthW<'a, REG> = crate::FieldWriter<'a, REG, 2, Fswidthselect, crate::Safe>;
155impl<'a, REG> FswidthW<'a, REG>
156where
157    REG: crate::Writable + crate::RegisterSpec,
158    REG::Ux: From<u8>,
159{
160    #[doc = "Frame Sync Pulse is 1 Slot wide (default for I2S protocol)"]
161    #[inline(always)]
162    pub fn slot(self) -> &'a mut crate::W<REG> {
163        self.variant(Fswidthselect::Slot)
164    }
165    #[doc = "Frame Sync Pulse is half a Frame wide"]
166    #[inline(always)]
167    pub fn half(self) -> &'a mut crate::W<REG> {
168        self.variant(Fswidthselect::Half)
169    }
170    #[doc = "Frame Sync Pulse is 1 Bit wide"]
171    #[inline(always)]
172    pub fn bit_(self) -> &'a mut crate::W<REG> {
173        self.variant(Fswidthselect::Bit)
174    }
175    #[doc = "Clock Unit n operates in Burst mode, with a 1-bit wide Frame Sync pulse per Data sample, only when Data transfer is requested"]
176    #[inline(always)]
177    pub fn burst(self) -> &'a mut crate::W<REG> {
178        self.variant(Fswidthselect::Burst)
179    }
180}
181#[doc = "Data Delay from Frame Sync\n\nValue on reset: 0"]
182#[derive(Clone, Copy, Debug, PartialEq, Eq)]
183pub enum Bitdelayselect {
184    #[doc = "0: Left Justified (0 Bit Delay)"]
185    Lj = 0,
186    #[doc = "1: I2S (1 Bit Delay)"]
187    I2s = 1,
188}
189impl From<Bitdelayselect> for bool {
190    #[inline(always)]
191    fn from(variant: Bitdelayselect) -> Self {
192        variant as u8 != 0
193    }
194}
195#[doc = "Field `BITDELAY` reader - Data Delay from Frame Sync"]
196pub type BitdelayR = crate::BitReader<Bitdelayselect>;
197impl BitdelayR {
198    #[doc = "Get enumerated values variant"]
199    #[inline(always)]
200    pub const fn variant(&self) -> Bitdelayselect {
201        match self.bits {
202            false => Bitdelayselect::Lj,
203            true => Bitdelayselect::I2s,
204        }
205    }
206    #[doc = "Left Justified (0 Bit Delay)"]
207    #[inline(always)]
208    pub fn is_lj(&self) -> bool {
209        *self == Bitdelayselect::Lj
210    }
211    #[doc = "I2S (1 Bit Delay)"]
212    #[inline(always)]
213    pub fn is_i2s(&self) -> bool {
214        *self == Bitdelayselect::I2s
215    }
216}
217#[doc = "Field `BITDELAY` writer - Data Delay from Frame Sync"]
218pub type BitdelayW<'a, REG> = crate::BitWriter<'a, REG, Bitdelayselect>;
219impl<'a, REG> BitdelayW<'a, REG>
220where
221    REG: crate::Writable + crate::RegisterSpec,
222{
223    #[doc = "Left Justified (0 Bit Delay)"]
224    #[inline(always)]
225    pub fn lj(self) -> &'a mut crate::W<REG> {
226        self.variant(Bitdelayselect::Lj)
227    }
228    #[doc = "I2S (1 Bit Delay)"]
229    #[inline(always)]
230    pub fn i2s(self) -> &'a mut crate::W<REG> {
231        self.variant(Bitdelayselect::I2s)
232    }
233}
234#[doc = "Frame Sync Select\n\nValue on reset: 0"]
235#[derive(Clone, Copy, Debug, PartialEq, Eq)]
236pub enum Fsselselect {
237    #[doc = "0: Divided Serial Clock n is used as Frame Sync n source"]
238    Sckdiv = 0,
239    #[doc = "1: FSn input pin is used as Frame Sync n source"]
240    Fspin = 1,
241}
242impl From<Fsselselect> for bool {
243    #[inline(always)]
244    fn from(variant: Fsselselect) -> Self {
245        variant as u8 != 0
246    }
247}
248#[doc = "Field `FSSEL` reader - Frame Sync Select"]
249pub type FsselR = crate::BitReader<Fsselselect>;
250impl FsselR {
251    #[doc = "Get enumerated values variant"]
252    #[inline(always)]
253    pub const fn variant(&self) -> Fsselselect {
254        match self.bits {
255            false => Fsselselect::Sckdiv,
256            true => Fsselselect::Fspin,
257        }
258    }
259    #[doc = "Divided Serial Clock n is used as Frame Sync n source"]
260    #[inline(always)]
261    pub fn is_sckdiv(&self) -> bool {
262        *self == Fsselselect::Sckdiv
263    }
264    #[doc = "FSn input pin is used as Frame Sync n source"]
265    #[inline(always)]
266    pub fn is_fspin(&self) -> bool {
267        *self == Fsselselect::Fspin
268    }
269}
270#[doc = "Field `FSSEL` writer - Frame Sync Select"]
271pub type FsselW<'a, REG> = crate::BitWriter<'a, REG, Fsselselect>;
272impl<'a, REG> FsselW<'a, REG>
273where
274    REG: crate::Writable + crate::RegisterSpec,
275{
276    #[doc = "Divided Serial Clock n is used as Frame Sync n source"]
277    #[inline(always)]
278    pub fn sckdiv(self) -> &'a mut crate::W<REG> {
279        self.variant(Fsselselect::Sckdiv)
280    }
281    #[doc = "FSn input pin is used as Frame Sync n source"]
282    #[inline(always)]
283    pub fn fspin(self) -> &'a mut crate::W<REG> {
284        self.variant(Fsselselect::Fspin)
285    }
286}
287#[doc = "Field `FSINV` reader - Frame Sync Invert"]
288pub type FsinvR = crate::BitReader;
289#[doc = "Field `FSINV` writer - Frame Sync Invert"]
290pub type FsinvW<'a, REG> = crate::BitWriter<'a, REG>;
291#[doc = "Serial Clock Select\n\nValue on reset: 0"]
292#[derive(Clone, Copy, Debug, PartialEq, Eq)]
293pub enum Sckselselect {
294    #[doc = "0: Divided Master Clock n is used as Serial Clock n source"]
295    Mckdiv = 0,
296    #[doc = "1: SCKn input pin is used as Serial Clock n source"]
297    Sckpin = 1,
298}
299impl From<Sckselselect> for bool {
300    #[inline(always)]
301    fn from(variant: Sckselselect) -> Self {
302        variant as u8 != 0
303    }
304}
305#[doc = "Field `SCKSEL` reader - Serial Clock Select"]
306pub type SckselR = crate::BitReader<Sckselselect>;
307impl SckselR {
308    #[doc = "Get enumerated values variant"]
309    #[inline(always)]
310    pub const fn variant(&self) -> Sckselselect {
311        match self.bits {
312            false => Sckselselect::Mckdiv,
313            true => Sckselselect::Sckpin,
314        }
315    }
316    #[doc = "Divided Master Clock n is used as Serial Clock n source"]
317    #[inline(always)]
318    pub fn is_mckdiv(&self) -> bool {
319        *self == Sckselselect::Mckdiv
320    }
321    #[doc = "SCKn input pin is used as Serial Clock n source"]
322    #[inline(always)]
323    pub fn is_sckpin(&self) -> bool {
324        *self == Sckselselect::Sckpin
325    }
326}
327#[doc = "Field `SCKSEL` writer - Serial Clock Select"]
328pub type SckselW<'a, REG> = crate::BitWriter<'a, REG, Sckselselect>;
329impl<'a, REG> SckselW<'a, REG>
330where
331    REG: crate::Writable + crate::RegisterSpec,
332{
333    #[doc = "Divided Master Clock n is used as Serial Clock n source"]
334    #[inline(always)]
335    pub fn mckdiv(self) -> &'a mut crate::W<REG> {
336        self.variant(Sckselselect::Mckdiv)
337    }
338    #[doc = "SCKn input pin is used as Serial Clock n source"]
339    #[inline(always)]
340    pub fn sckpin(self) -> &'a mut crate::W<REG> {
341        self.variant(Sckselselect::Sckpin)
342    }
343}
344#[doc = "Master Clock Select\n\nValue on reset: 0"]
345#[derive(Clone, Copy, Debug, PartialEq, Eq)]
346pub enum Mckselselect {
347    #[doc = "0: GCLK_I2S_n is used as Master Clock n source"]
348    Gclk = 0,
349    #[doc = "1: MCKn input pin is used as Master Clock n source"]
350    Mckpin = 1,
351}
352impl From<Mckselselect> for bool {
353    #[inline(always)]
354    fn from(variant: Mckselselect) -> Self {
355        variant as u8 != 0
356    }
357}
358#[doc = "Field `MCKSEL` reader - Master Clock Select"]
359pub type MckselR = crate::BitReader<Mckselselect>;
360impl MckselR {
361    #[doc = "Get enumerated values variant"]
362    #[inline(always)]
363    pub const fn variant(&self) -> Mckselselect {
364        match self.bits {
365            false => Mckselselect::Gclk,
366            true => Mckselselect::Mckpin,
367        }
368    }
369    #[doc = "GCLK_I2S_n is used as Master Clock n source"]
370    #[inline(always)]
371    pub fn is_gclk(&self) -> bool {
372        *self == Mckselselect::Gclk
373    }
374    #[doc = "MCKn input pin is used as Master Clock n source"]
375    #[inline(always)]
376    pub fn is_mckpin(&self) -> bool {
377        *self == Mckselselect::Mckpin
378    }
379}
380#[doc = "Field `MCKSEL` writer - Master Clock Select"]
381pub type MckselW<'a, REG> = crate::BitWriter<'a, REG, Mckselselect>;
382impl<'a, REG> MckselW<'a, REG>
383where
384    REG: crate::Writable + crate::RegisterSpec,
385{
386    #[doc = "GCLK_I2S_n is used as Master Clock n source"]
387    #[inline(always)]
388    pub fn gclk(self) -> &'a mut crate::W<REG> {
389        self.variant(Mckselselect::Gclk)
390    }
391    #[doc = "MCKn input pin is used as Master Clock n source"]
392    #[inline(always)]
393    pub fn mckpin(self) -> &'a mut crate::W<REG> {
394        self.variant(Mckselselect::Mckpin)
395    }
396}
397#[doc = "Field `MCKEN` reader - Master Clock Enable"]
398pub type MckenR = crate::BitReader;
399#[doc = "Field `MCKEN` writer - Master Clock Enable"]
400pub type MckenW<'a, REG> = crate::BitWriter<'a, REG>;
401#[doc = "Field `MCKDIV` reader - Master Clock Division Factor"]
402pub type MckdivR = crate::FieldReader;
403#[doc = "Field `MCKDIV` writer - Master Clock Division Factor"]
404pub type MckdivW<'a, REG> = crate::FieldWriter<'a, REG, 5>;
405#[doc = "Field `MCKOUTDIV` reader - Master Clock Output Division Factor"]
406pub type MckoutdivR = crate::FieldReader;
407#[doc = "Field `MCKOUTDIV` writer - Master Clock Output Division Factor"]
408pub type MckoutdivW<'a, REG> = crate::FieldWriter<'a, REG, 5>;
409#[doc = "Field `FSOUTINV` reader - Frame Sync Output Invert"]
410pub type FsoutinvR = crate::BitReader;
411#[doc = "Field `FSOUTINV` writer - Frame Sync Output Invert"]
412pub type FsoutinvW<'a, REG> = crate::BitWriter<'a, REG>;
413#[doc = "Field `SCKOUTINV` reader - Serial Clock Output Invert"]
414pub type SckoutinvR = crate::BitReader;
415#[doc = "Field `SCKOUTINV` writer - Serial Clock Output Invert"]
416pub type SckoutinvW<'a, REG> = crate::BitWriter<'a, REG>;
417#[doc = "Field `MCKOUTINV` reader - Master Clock Output Invert"]
418pub type MckoutinvR = crate::BitReader;
419#[doc = "Field `MCKOUTINV` writer - Master Clock Output Invert"]
420pub type MckoutinvW<'a, REG> = crate::BitWriter<'a, REG>;
421impl R {
422    #[doc = "Bits 0:1 - Slot Size"]
423    #[inline(always)]
424    pub fn slotsize(&self) -> SlotsizeR {
425        SlotsizeR::new((self.bits & 3) as u8)
426    }
427    #[doc = "Bits 2:4 - Number of Slots in Frame"]
428    #[inline(always)]
429    pub fn nbslots(&self) -> NbslotsR {
430        NbslotsR::new(((self.bits >> 2) & 7) as u8)
431    }
432    #[doc = "Bits 5:6 - Frame Sync Width"]
433    #[inline(always)]
434    pub fn fswidth(&self) -> FswidthR {
435        FswidthR::new(((self.bits >> 5) & 3) as u8)
436    }
437    #[doc = "Bit 7 - Data Delay from Frame Sync"]
438    #[inline(always)]
439    pub fn bitdelay(&self) -> BitdelayR {
440        BitdelayR::new(((self.bits >> 7) & 1) != 0)
441    }
442    #[doc = "Bit 8 - Frame Sync Select"]
443    #[inline(always)]
444    pub fn fssel(&self) -> FsselR {
445        FsselR::new(((self.bits >> 8) & 1) != 0)
446    }
447    #[doc = "Bit 11 - Frame Sync Invert"]
448    #[inline(always)]
449    pub fn fsinv(&self) -> FsinvR {
450        FsinvR::new(((self.bits >> 11) & 1) != 0)
451    }
452    #[doc = "Bit 12 - Serial Clock Select"]
453    #[inline(always)]
454    pub fn scksel(&self) -> SckselR {
455        SckselR::new(((self.bits >> 12) & 1) != 0)
456    }
457    #[doc = "Bit 16 - Master Clock Select"]
458    #[inline(always)]
459    pub fn mcksel(&self) -> MckselR {
460        MckselR::new(((self.bits >> 16) & 1) != 0)
461    }
462    #[doc = "Bit 18 - Master Clock Enable"]
463    #[inline(always)]
464    pub fn mcken(&self) -> MckenR {
465        MckenR::new(((self.bits >> 18) & 1) != 0)
466    }
467    #[doc = "Bits 19:23 - Master Clock Division Factor"]
468    #[inline(always)]
469    pub fn mckdiv(&self) -> MckdivR {
470        MckdivR::new(((self.bits >> 19) & 0x1f) as u8)
471    }
472    #[doc = "Bits 24:28 - Master Clock Output Division Factor"]
473    #[inline(always)]
474    pub fn mckoutdiv(&self) -> MckoutdivR {
475        MckoutdivR::new(((self.bits >> 24) & 0x1f) as u8)
476    }
477    #[doc = "Bit 29 - Frame Sync Output Invert"]
478    #[inline(always)]
479    pub fn fsoutinv(&self) -> FsoutinvR {
480        FsoutinvR::new(((self.bits >> 29) & 1) != 0)
481    }
482    #[doc = "Bit 30 - Serial Clock Output Invert"]
483    #[inline(always)]
484    pub fn sckoutinv(&self) -> SckoutinvR {
485        SckoutinvR::new(((self.bits >> 30) & 1) != 0)
486    }
487    #[doc = "Bit 31 - Master Clock Output Invert"]
488    #[inline(always)]
489    pub fn mckoutinv(&self) -> MckoutinvR {
490        MckoutinvR::new(((self.bits >> 31) & 1) != 0)
491    }
492}
493impl W {
494    #[doc = "Bits 0:1 - Slot Size"]
495    #[inline(always)]
496    #[must_use]
497    pub fn slotsize(&mut self) -> SlotsizeW<ClkctrlSpec> {
498        SlotsizeW::new(self, 0)
499    }
500    #[doc = "Bits 2:4 - Number of Slots in Frame"]
501    #[inline(always)]
502    #[must_use]
503    pub fn nbslots(&mut self) -> NbslotsW<ClkctrlSpec> {
504        NbslotsW::new(self, 2)
505    }
506    #[doc = "Bits 5:6 - Frame Sync Width"]
507    #[inline(always)]
508    #[must_use]
509    pub fn fswidth(&mut self) -> FswidthW<ClkctrlSpec> {
510        FswidthW::new(self, 5)
511    }
512    #[doc = "Bit 7 - Data Delay from Frame Sync"]
513    #[inline(always)]
514    #[must_use]
515    pub fn bitdelay(&mut self) -> BitdelayW<ClkctrlSpec> {
516        BitdelayW::new(self, 7)
517    }
518    #[doc = "Bit 8 - Frame Sync Select"]
519    #[inline(always)]
520    #[must_use]
521    pub fn fssel(&mut self) -> FsselW<ClkctrlSpec> {
522        FsselW::new(self, 8)
523    }
524    #[doc = "Bit 11 - Frame Sync Invert"]
525    #[inline(always)]
526    #[must_use]
527    pub fn fsinv(&mut self) -> FsinvW<ClkctrlSpec> {
528        FsinvW::new(self, 11)
529    }
530    #[doc = "Bit 12 - Serial Clock Select"]
531    #[inline(always)]
532    #[must_use]
533    pub fn scksel(&mut self) -> SckselW<ClkctrlSpec> {
534        SckselW::new(self, 12)
535    }
536    #[doc = "Bit 16 - Master Clock Select"]
537    #[inline(always)]
538    #[must_use]
539    pub fn mcksel(&mut self) -> MckselW<ClkctrlSpec> {
540        MckselW::new(self, 16)
541    }
542    #[doc = "Bit 18 - Master Clock Enable"]
543    #[inline(always)]
544    #[must_use]
545    pub fn mcken(&mut self) -> MckenW<ClkctrlSpec> {
546        MckenW::new(self, 18)
547    }
548    #[doc = "Bits 19:23 - Master Clock Division Factor"]
549    #[inline(always)]
550    #[must_use]
551    pub fn mckdiv(&mut self) -> MckdivW<ClkctrlSpec> {
552        MckdivW::new(self, 19)
553    }
554    #[doc = "Bits 24:28 - Master Clock Output Division Factor"]
555    #[inline(always)]
556    #[must_use]
557    pub fn mckoutdiv(&mut self) -> MckoutdivW<ClkctrlSpec> {
558        MckoutdivW::new(self, 24)
559    }
560    #[doc = "Bit 29 - Frame Sync Output Invert"]
561    #[inline(always)]
562    #[must_use]
563    pub fn fsoutinv(&mut self) -> FsoutinvW<ClkctrlSpec> {
564        FsoutinvW::new(self, 29)
565    }
566    #[doc = "Bit 30 - Serial Clock Output Invert"]
567    #[inline(always)]
568    #[must_use]
569    pub fn sckoutinv(&mut self) -> SckoutinvW<ClkctrlSpec> {
570        SckoutinvW::new(self, 30)
571    }
572    #[doc = "Bit 31 - Master Clock Output Invert"]
573    #[inline(always)]
574    #[must_use]
575    pub fn mckoutinv(&mut self) -> MckoutinvW<ClkctrlSpec> {
576        MckoutinvW::new(self, 31)
577    }
578}
579#[doc = "Clock Unit n Control\n\nYou can [`read`](crate::Reg::read) this register and get [`clkctrl::R`](R). You can [`reset`](crate::Reg::reset), [`write`](crate::Reg::write), [`write_with_zero`](crate::Reg::write_with_zero) this register using [`clkctrl::W`](W). You can also [`modify`](crate::Reg::modify) this register. See [API](https://docs.rs/svd2rust/#read--modify--write-api)."]
580pub struct ClkctrlSpec;
581impl crate::RegisterSpec for ClkctrlSpec {
582    type Ux = u32;
583}
584#[doc = "`read()` method returns [`clkctrl::R`](R) reader structure"]
585impl crate::Readable for ClkctrlSpec {}
586#[doc = "`write(|w| ..)` method takes [`clkctrl::W`](W) writer structure"]
587impl crate::Writable for ClkctrlSpec {
588    type Safety = crate::Unsafe;
589    const ZERO_TO_MODIFY_FIELDS_BITMAP: u32 = 0;
590    const ONE_TO_MODIFY_FIELDS_BITMAP: u32 = 0;
591}
592#[doc = "`reset()` method sets CLKCTRL%s to value 0"]
593impl crate::Resettable for ClkctrlSpec {
594    const RESET_VALUE: u32 = 0;
595}