1#[doc = "Register `tp_ctrl0` reader"]
2pub type R = crate::R<TP_CTRL0_SPEC>;
3#[doc = "Register `tp_ctrl0` writer"]
4pub type W = crate::W<TP_CTRL0_SPEC>;
5#[doc = "Field `tacq` reader - Touch panel ADC acquire time"]
6pub type TACQ_R = crate::FieldReader<u16>;
7#[doc = "Field `tacq` writer - Touch panel ADC acquire time"]
8pub type TACQ_W<'a, REG> = crate::FieldWriter<'a, REG, 16, u16>;
9#[doc = "Field `fs_div` reader - ADC Sample Frequency Divider"]
10pub type FS_DIV_R = crate::FieldReader<FS_DIV_A>;
11#[doc = "ADC Sample Frequency Divider\n\nValue on reset: 0"]
12#[derive(Clone, Copy, Debug, PartialEq, Eq)]
13#[repr(u8)]
14pub enum FS_DIV_A {
15 #[doc = "0: CLK_IN / 2 ^ (20 - 0)"]
16 C2P0 = 0,
17 #[doc = "1: CLK_IN / 2 ^ (20 - 1)"]
18 C2P1 = 1,
19 #[doc = "2: CLK_IN / 2 ^ (20 - 2)"]
20 C2P2 = 2,
21 #[doc = "3: CLK_IN / 2 ^ (20 - 3)"]
22 C2P3 = 3,
23 #[doc = "4: CLK_IN / 2 ^ (20 - 4)"]
24 C2P4 = 4,
25 #[doc = "5: CLK_IN / 2 ^ (20 - 5)"]
26 C2P5 = 5,
27 #[doc = "6: CLK_IN / 2 ^ (20 - 6)"]
28 C2P6 = 6,
29 #[doc = "7: CLK_IN / 2 ^ (20 - 7)"]
30 C2P7 = 7,
31 #[doc = "8: CLK_IN / 2 ^ (20 - 8)"]
32 C2P8 = 8,
33 #[doc = "9: CLK_IN / 2 ^ (20 - 9)"]
34 C2P9 = 9,
35 #[doc = "10: CLK_IN / 2 ^ (20 - 10)"]
36 C2P10 = 10,
37 #[doc = "11: CLK_IN / 2 ^ (20 - 11)"]
38 C2P11 = 11,
39 #[doc = "12: CLK_IN / 2 ^ (20 - 12)"]
40 C2P12 = 12,
41 #[doc = "13: CLK_IN / 2 ^ (20 - 13)"]
42 C2P13 = 13,
43 #[doc = "14: CLK_IN / 2 ^ (20 - 14)"]
44 C2P14 = 14,
45 #[doc = "15: CLK_IN / 2 ^ (20 - 15)"]
46 C2P15 = 15,
47}
48impl From<FS_DIV_A> for u8 {
49 #[inline(always)]
50 fn from(variant: FS_DIV_A) -> Self {
51 variant as _
52 }
53}
54impl crate::FieldSpec for FS_DIV_A {
55 type Ux = u8;
56}
57impl FS_DIV_R {
58 #[doc = "Get enumerated values variant"]
59 #[inline(always)]
60 pub const fn variant(&self) -> FS_DIV_A {
61 match self.bits {
62 0 => FS_DIV_A::C2P0,
63 1 => FS_DIV_A::C2P1,
64 2 => FS_DIV_A::C2P2,
65 3 => FS_DIV_A::C2P3,
66 4 => FS_DIV_A::C2P4,
67 5 => FS_DIV_A::C2P5,
68 6 => FS_DIV_A::C2P6,
69 7 => FS_DIV_A::C2P7,
70 8 => FS_DIV_A::C2P8,
71 9 => FS_DIV_A::C2P9,
72 10 => FS_DIV_A::C2P10,
73 11 => FS_DIV_A::C2P11,
74 12 => FS_DIV_A::C2P12,
75 13 => FS_DIV_A::C2P13,
76 14 => FS_DIV_A::C2P14,
77 15 => FS_DIV_A::C2P15,
78 _ => unreachable!(),
79 }
80 }
81 #[doc = "CLK_IN / 2 ^ (20 - 0)"]
82 #[inline(always)]
83 pub fn is_c2p0(&self) -> bool {
84 *self == FS_DIV_A::C2P0
85 }
86 #[doc = "CLK_IN / 2 ^ (20 - 1)"]
87 #[inline(always)]
88 pub fn is_c2p1(&self) -> bool {
89 *self == FS_DIV_A::C2P1
90 }
91 #[doc = "CLK_IN / 2 ^ (20 - 2)"]
92 #[inline(always)]
93 pub fn is_c2p2(&self) -> bool {
94 *self == FS_DIV_A::C2P2
95 }
96 #[doc = "CLK_IN / 2 ^ (20 - 3)"]
97 #[inline(always)]
98 pub fn is_c2p3(&self) -> bool {
99 *self == FS_DIV_A::C2P3
100 }
101 #[doc = "CLK_IN / 2 ^ (20 - 4)"]
102 #[inline(always)]
103 pub fn is_c2p4(&self) -> bool {
104 *self == FS_DIV_A::C2P4
105 }
106 #[doc = "CLK_IN / 2 ^ (20 - 5)"]
107 #[inline(always)]
108 pub fn is_c2p5(&self) -> bool {
109 *self == FS_DIV_A::C2P5
110 }
111 #[doc = "CLK_IN / 2 ^ (20 - 6)"]
112 #[inline(always)]
113 pub fn is_c2p6(&self) -> bool {
114 *self == FS_DIV_A::C2P6
115 }
116 #[doc = "CLK_IN / 2 ^ (20 - 7)"]
117 #[inline(always)]
118 pub fn is_c2p7(&self) -> bool {
119 *self == FS_DIV_A::C2P7
120 }
121 #[doc = "CLK_IN / 2 ^ (20 - 8)"]
122 #[inline(always)]
123 pub fn is_c2p8(&self) -> bool {
124 *self == FS_DIV_A::C2P8
125 }
126 #[doc = "CLK_IN / 2 ^ (20 - 9)"]
127 #[inline(always)]
128 pub fn is_c2p9(&self) -> bool {
129 *self == FS_DIV_A::C2P9
130 }
131 #[doc = "CLK_IN / 2 ^ (20 - 10)"]
132 #[inline(always)]
133 pub fn is_c2p10(&self) -> bool {
134 *self == FS_DIV_A::C2P10
135 }
136 #[doc = "CLK_IN / 2 ^ (20 - 11)"]
137 #[inline(always)]
138 pub fn is_c2p11(&self) -> bool {
139 *self == FS_DIV_A::C2P11
140 }
141 #[doc = "CLK_IN / 2 ^ (20 - 12)"]
142 #[inline(always)]
143 pub fn is_c2p12(&self) -> bool {
144 *self == FS_DIV_A::C2P12
145 }
146 #[doc = "CLK_IN / 2 ^ (20 - 13)"]
147 #[inline(always)]
148 pub fn is_c2p13(&self) -> bool {
149 *self == FS_DIV_A::C2P13
150 }
151 #[doc = "CLK_IN / 2 ^ (20 - 14)"]
152 #[inline(always)]
153 pub fn is_c2p14(&self) -> bool {
154 *self == FS_DIV_A::C2P14
155 }
156 #[doc = "CLK_IN / 2 ^ (20 - 15)"]
157 #[inline(always)]
158 pub fn is_c2p15(&self) -> bool {
159 *self == FS_DIV_A::C2P15
160 }
161}
162#[doc = "Field `fs_div` writer - ADC Sample Frequency Divider"]
163pub type FS_DIV_W<'a, REG> = crate::FieldWriterSafe<'a, REG, 4, FS_DIV_A>;
164impl<'a, REG> FS_DIV_W<'a, REG>
165where
166 REG: crate::Writable + crate::RegisterSpec,
167 REG::Ux: From<u8>,
168{
169 #[doc = "CLK_IN / 2 ^ (20 - 0)"]
170 #[inline(always)]
171 pub fn c2p0(self) -> &'a mut crate::W<REG> {
172 self.variant(FS_DIV_A::C2P0)
173 }
174 #[doc = "CLK_IN / 2 ^ (20 - 1)"]
175 #[inline(always)]
176 pub fn c2p1(self) -> &'a mut crate::W<REG> {
177 self.variant(FS_DIV_A::C2P1)
178 }
179 #[doc = "CLK_IN / 2 ^ (20 - 2)"]
180 #[inline(always)]
181 pub fn c2p2(self) -> &'a mut crate::W<REG> {
182 self.variant(FS_DIV_A::C2P2)
183 }
184 #[doc = "CLK_IN / 2 ^ (20 - 3)"]
185 #[inline(always)]
186 pub fn c2p3(self) -> &'a mut crate::W<REG> {
187 self.variant(FS_DIV_A::C2P3)
188 }
189 #[doc = "CLK_IN / 2 ^ (20 - 4)"]
190 #[inline(always)]
191 pub fn c2p4(self) -> &'a mut crate::W<REG> {
192 self.variant(FS_DIV_A::C2P4)
193 }
194 #[doc = "CLK_IN / 2 ^ (20 - 5)"]
195 #[inline(always)]
196 pub fn c2p5(self) -> &'a mut crate::W<REG> {
197 self.variant(FS_DIV_A::C2P5)
198 }
199 #[doc = "CLK_IN / 2 ^ (20 - 6)"]
200 #[inline(always)]
201 pub fn c2p6(self) -> &'a mut crate::W<REG> {
202 self.variant(FS_DIV_A::C2P6)
203 }
204 #[doc = "CLK_IN / 2 ^ (20 - 7)"]
205 #[inline(always)]
206 pub fn c2p7(self) -> &'a mut crate::W<REG> {
207 self.variant(FS_DIV_A::C2P7)
208 }
209 #[doc = "CLK_IN / 2 ^ (20 - 8)"]
210 #[inline(always)]
211 pub fn c2p8(self) -> &'a mut crate::W<REG> {
212 self.variant(FS_DIV_A::C2P8)
213 }
214 #[doc = "CLK_IN / 2 ^ (20 - 9)"]
215 #[inline(always)]
216 pub fn c2p9(self) -> &'a mut crate::W<REG> {
217 self.variant(FS_DIV_A::C2P9)
218 }
219 #[doc = "CLK_IN / 2 ^ (20 - 10)"]
220 #[inline(always)]
221 pub fn c2p10(self) -> &'a mut crate::W<REG> {
222 self.variant(FS_DIV_A::C2P10)
223 }
224 #[doc = "CLK_IN / 2 ^ (20 - 11)"]
225 #[inline(always)]
226 pub fn c2p11(self) -> &'a mut crate::W<REG> {
227 self.variant(FS_DIV_A::C2P11)
228 }
229 #[doc = "CLK_IN / 2 ^ (20 - 12)"]
230 #[inline(always)]
231 pub fn c2p12(self) -> &'a mut crate::W<REG> {
232 self.variant(FS_DIV_A::C2P12)
233 }
234 #[doc = "CLK_IN / 2 ^ (20 - 13)"]
235 #[inline(always)]
236 pub fn c2p13(self) -> &'a mut crate::W<REG> {
237 self.variant(FS_DIV_A::C2P13)
238 }
239 #[doc = "CLK_IN / 2 ^ (20 - 14)"]
240 #[inline(always)]
241 pub fn c2p14(self) -> &'a mut crate::W<REG> {
242 self.variant(FS_DIV_A::C2P14)
243 }
244 #[doc = "CLK_IN / 2 ^ (20 - 15)"]
245 #[inline(always)]
246 pub fn c2p15(self) -> &'a mut crate::W<REG> {
247 self.variant(FS_DIV_A::C2P15)
248 }
249}
250#[doc = "Field `adc_clk_divider` reader - ADC Clock Divider (CLK_IN)"]
251pub type ADC_CLK_DIVIDER_R = crate::FieldReader<ADC_CLK_DIVIDER_A>;
252#[doc = "ADC Clock Divider (CLK_IN)\n\nValue on reset: 0"]
253#[derive(Clone, Copy, Debug, PartialEq, Eq)]
254#[repr(u8)]
255pub enum ADC_CLK_DIVIDER_A {
256 #[doc = "0: CLK / 2"]
257 C2 = 0,
258 #[doc = "1: CLK / 3"]
259 C3 = 1,
260 #[doc = "2: CLK / 6"]
261 C6 = 2,
262 #[doc = "3: CLK / 1"]
263 C1 = 3,
264}
265impl From<ADC_CLK_DIVIDER_A> for u8 {
266 #[inline(always)]
267 fn from(variant: ADC_CLK_DIVIDER_A) -> Self {
268 variant as _
269 }
270}
271impl crate::FieldSpec for ADC_CLK_DIVIDER_A {
272 type Ux = u8;
273}
274impl ADC_CLK_DIVIDER_R {
275 #[doc = "Get enumerated values variant"]
276 #[inline(always)]
277 pub const fn variant(&self) -> ADC_CLK_DIVIDER_A {
278 match self.bits {
279 0 => ADC_CLK_DIVIDER_A::C2,
280 1 => ADC_CLK_DIVIDER_A::C3,
281 2 => ADC_CLK_DIVIDER_A::C6,
282 3 => ADC_CLK_DIVIDER_A::C1,
283 _ => unreachable!(),
284 }
285 }
286 #[doc = "CLK / 2"]
287 #[inline(always)]
288 pub fn is_c2(&self) -> bool {
289 *self == ADC_CLK_DIVIDER_A::C2
290 }
291 #[doc = "CLK / 3"]
292 #[inline(always)]
293 pub fn is_c3(&self) -> bool {
294 *self == ADC_CLK_DIVIDER_A::C3
295 }
296 #[doc = "CLK / 6"]
297 #[inline(always)]
298 pub fn is_c6(&self) -> bool {
299 *self == ADC_CLK_DIVIDER_A::C6
300 }
301 #[doc = "CLK / 1"]
302 #[inline(always)]
303 pub fn is_c1(&self) -> bool {
304 *self == ADC_CLK_DIVIDER_A::C1
305 }
306}
307#[doc = "Field `adc_clk_divider` writer - ADC Clock Divider (CLK_IN)"]
308pub type ADC_CLK_DIVIDER_W<'a, REG> = crate::FieldWriterSafe<'a, REG, 2, ADC_CLK_DIVIDER_A>;
309impl<'a, REG> ADC_CLK_DIVIDER_W<'a, REG>
310where
311 REG: crate::Writable + crate::RegisterSpec,
312 REG::Ux: From<u8>,
313{
314 #[doc = "CLK / 2"]
315 #[inline(always)]
316 pub fn c2(self) -> &'a mut crate::W<REG> {
317 self.variant(ADC_CLK_DIVIDER_A::C2)
318 }
319 #[doc = "CLK / 3"]
320 #[inline(always)]
321 pub fn c3(self) -> &'a mut crate::W<REG> {
322 self.variant(ADC_CLK_DIVIDER_A::C3)
323 }
324 #[doc = "CLK / 6"]
325 #[inline(always)]
326 pub fn c6(self) -> &'a mut crate::W<REG> {
327 self.variant(ADC_CLK_DIVIDER_A::C6)
328 }
329 #[doc = "CLK / 1"]
330 #[inline(always)]
331 pub fn c1(self) -> &'a mut crate::W<REG> {
332 self.variant(ADC_CLK_DIVIDER_A::C1)
333 }
334}
335#[doc = "Field `adc_first_dly_mode` reader - ADC First Convert Delay Mode Select"]
336pub type ADC_FIRST_DLY_MODE_R = crate::BitReader<ADC_FIRST_DLY_MODE_A>;
337#[doc = "ADC First Convert Delay Mode Select\n\nValue on reset: 0"]
338#[derive(Clone, Copy, Debug, PartialEq, Eq)]
339pub enum ADC_FIRST_DLY_MODE_A {
340 #[doc = "0: CLK_IN / 16"]
341 C16 = 0,
342 #[doc = "1: CLK_IN / 16 * 256"]
343 C16_256 = 1,
344}
345impl From<ADC_FIRST_DLY_MODE_A> for bool {
346 #[inline(always)]
347 fn from(variant: ADC_FIRST_DLY_MODE_A) -> Self {
348 variant as u8 != 0
349 }
350}
351impl ADC_FIRST_DLY_MODE_R {
352 #[doc = "Get enumerated values variant"]
353 #[inline(always)]
354 pub const fn variant(&self) -> ADC_FIRST_DLY_MODE_A {
355 match self.bits {
356 false => ADC_FIRST_DLY_MODE_A::C16,
357 true => ADC_FIRST_DLY_MODE_A::C16_256,
358 }
359 }
360 #[doc = "CLK_IN / 16"]
361 #[inline(always)]
362 pub fn is_c16(&self) -> bool {
363 *self == ADC_FIRST_DLY_MODE_A::C16
364 }
365 #[doc = "CLK_IN / 16 * 256"]
366 #[inline(always)]
367 pub fn is_c16_256(&self) -> bool {
368 *self == ADC_FIRST_DLY_MODE_A::C16_256
369 }
370}
371#[doc = "Field `adc_first_dly_mode` writer - ADC First Convert Delay Mode Select"]
372pub type ADC_FIRST_DLY_MODE_W<'a, REG> = crate::BitWriter<'a, REG, ADC_FIRST_DLY_MODE_A>;
373impl<'a, REG> ADC_FIRST_DLY_MODE_W<'a, REG>
374where
375 REG: crate::Writable + crate::RegisterSpec,
376{
377 #[doc = "CLK_IN / 16"]
378 #[inline(always)]
379 pub fn c16(self) -> &'a mut crate::W<REG> {
380 self.variant(ADC_FIRST_DLY_MODE_A::C16)
381 }
382 #[doc = "CLK_IN / 16 * 256"]
383 #[inline(always)]
384 pub fn c16_256(self) -> &'a mut crate::W<REG> {
385 self.variant(ADC_FIRST_DLY_MODE_A::C16_256)
386 }
387}
388#[doc = "Field `adc_first_dly` reader - ADC First Convert Delay Time (T_FCDT) Setting"]
389pub type ADC_FIRST_DLY_R = crate::FieldReader;
390#[doc = "Field `adc_first_dly` writer - ADC First Convert Delay Time (T_FCDT) Setting"]
391pub type ADC_FIRST_DLY_W<'a, REG> = crate::FieldWriter<'a, REG, 8>;
392impl R {
393 #[doc = "Bits 0:15 - Touch panel ADC acquire time"]
394 #[inline(always)]
395 pub fn tacq(&self) -> TACQ_R {
396 TACQ_R::new((self.bits & 0xffff) as u16)
397 }
398 #[doc = "Bits 16:19 - ADC Sample Frequency Divider"]
399 #[inline(always)]
400 pub fn fs_div(&self) -> FS_DIV_R {
401 FS_DIV_R::new(((self.bits >> 16) & 0x0f) as u8)
402 }
403 #[doc = "Bits 20:21 - ADC Clock Divider (CLK_IN)"]
404 #[inline(always)]
405 pub fn adc_clk_divider(&self) -> ADC_CLK_DIVIDER_R {
406 ADC_CLK_DIVIDER_R::new(((self.bits >> 20) & 3) as u8)
407 }
408 #[doc = "Bit 23 - ADC First Convert Delay Mode Select"]
409 #[inline(always)]
410 pub fn adc_first_dly_mode(&self) -> ADC_FIRST_DLY_MODE_R {
411 ADC_FIRST_DLY_MODE_R::new(((self.bits >> 23) & 1) != 0)
412 }
413 #[doc = "Bits 24:31 - ADC First Convert Delay Time (T_FCDT) Setting"]
414 #[inline(always)]
415 pub fn adc_first_dly(&self) -> ADC_FIRST_DLY_R {
416 ADC_FIRST_DLY_R::new(((self.bits >> 24) & 0xff) as u8)
417 }
418}
419impl W {
420 #[doc = "Bits 0:15 - Touch panel ADC acquire time"]
421 #[inline(always)]
422 #[must_use]
423 pub fn tacq(&mut self) -> TACQ_W<TP_CTRL0_SPEC> {
424 TACQ_W::new(self, 0)
425 }
426 #[doc = "Bits 16:19 - ADC Sample Frequency Divider"]
427 #[inline(always)]
428 #[must_use]
429 pub fn fs_div(&mut self) -> FS_DIV_W<TP_CTRL0_SPEC> {
430 FS_DIV_W::new(self, 16)
431 }
432 #[doc = "Bits 20:21 - ADC Clock Divider (CLK_IN)"]
433 #[inline(always)]
434 #[must_use]
435 pub fn adc_clk_divider(&mut self) -> ADC_CLK_DIVIDER_W<TP_CTRL0_SPEC> {
436 ADC_CLK_DIVIDER_W::new(self, 20)
437 }
438 #[doc = "Bit 23 - ADC First Convert Delay Mode Select"]
439 #[inline(always)]
440 #[must_use]
441 pub fn adc_first_dly_mode(&mut self) -> ADC_FIRST_DLY_MODE_W<TP_CTRL0_SPEC> {
442 ADC_FIRST_DLY_MODE_W::new(self, 23)
443 }
444 #[doc = "Bits 24:31 - ADC First Convert Delay Time (T_FCDT) Setting"]
445 #[inline(always)]
446 #[must_use]
447 pub fn adc_first_dly(&mut self) -> ADC_FIRST_DLY_W<TP_CTRL0_SPEC> {
448 ADC_FIRST_DLY_W::new(self, 24)
449 }
450 #[doc = r" Writes raw bits to the register."]
451 #[doc = r""]
452 #[doc = r" # Safety"]
453 #[doc = r""]
454 #[doc = r" Passing incorrect value can cause undefined behaviour. See reference manual"]
455 #[inline(always)]
456 pub unsafe fn bits(&mut self, bits: u32) -> &mut Self {
457 self.bits = bits;
458 self
459 }
460}
461#[doc = "TP Control Register 0\n\nYou can [`read`](crate::generic::Reg::read) this register and get [`tp_ctrl0::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 [`tp_ctrl0::W`](W). You can also [`modify`](crate::generic::Reg::modify) this register. See [API](https://docs.rs/svd2rust/#read--modify--write-api)."]
462pub struct TP_CTRL0_SPEC;
463impl crate::RegisterSpec for TP_CTRL0_SPEC {
464 type Ux = u32;
465}
466#[doc = "`read()` method returns [`tp_ctrl0::R`](R) reader structure"]
467impl crate::Readable for TP_CTRL0_SPEC {}
468#[doc = "`write(|w| ..)` method takes [`tp_ctrl0::W`](W) writer structure"]
469impl crate::Writable for TP_CTRL0_SPEC {
470 const ZERO_TO_MODIFY_FIELDS_BITMAP: Self::Ux = 0;
471 const ONE_TO_MODIFY_FIELDS_BITMAP: Self::Ux = 0;
472}
473#[doc = "`reset()` method sets tp_ctrl0 to value 0"]
474impl crate::Resettable for TP_CTRL0_SPEC {
475 const RESET_VALUE: Self::Ux = 0;
476}