1#![doc = "Peripheral access API for LPC11UXX microcontrollers (generated using svd2rust v0.14.0)\n\nYou can find an overview of the API [here].\n\n[here]: https://docs.rs/svd2rust/0.14.0/svd2rust/#peripheral-api"]
2#![deny(missing_docs)]
3#![deny(warnings)]
4#![allow(non_camel_case_types)]
5#![no_std]
6extern crate bare_metal;
7extern crate cortex_m;
8#[cfg(feature = "rt")]
9extern crate cortex_m_rt;
10extern crate vcell;
11use core::marker::PhantomData;
12use core::ops::Deref;
13#[doc = r" Number available in the NVIC for configuring priority"]
14pub const NVIC_PRIO_BITS: u8 = 2;
15#[cfg(feature = "rt")]
16extern "C" {
17 fn PIN_INT0();
18 fn PIN_INT1();
19 fn PIN_INT2();
20 fn PIN_INT3();
21 fn PIN_INT4();
22 fn PIN_INT5();
23 fn PIN_INT6();
24 fn PIN_INT7();
25 fn GINT0();
26 fn GINT1();
27 fn SSP1();
28 fn I2C();
29 fn CT16B0();
30 fn CT16B1();
31 fn CT32B0();
32 fn CT32B1();
33 fn SSP0();
34 fn USART();
35 fn USB_IRQ();
36 fn USB_FIQ();
37 fn ADC();
38 fn WDT();
39 fn BOD_IRQ();
40 fn FLASH_IRQ();
41 fn USBWAKEUP();
42}
43#[doc(hidden)]
44pub union Vector {
45 _handler: unsafe extern "C" fn(),
46 _reserved: u32,
47}
48#[cfg(feature = "rt")]
49#[doc(hidden)]
50#[link_section = ".vector_table.interrupts"]
51#[no_mangle]
52pub static __INTERRUPTS: [Vector; 31] = [
53 Vector { _handler: PIN_INT0 },
54 Vector { _handler: PIN_INT1 },
55 Vector { _handler: PIN_INT2 },
56 Vector { _handler: PIN_INT3 },
57 Vector { _handler: PIN_INT4 },
58 Vector { _handler: PIN_INT5 },
59 Vector { _handler: PIN_INT6 },
60 Vector { _handler: PIN_INT7 },
61 Vector { _handler: GINT0 },
62 Vector { _handler: GINT1 },
63 Vector { _reserved: 0 },
64 Vector { _reserved: 0 },
65 Vector { _reserved: 0 },
66 Vector { _reserved: 0 },
67 Vector { _handler: SSP1 },
68 Vector { _handler: I2C },
69 Vector { _handler: CT16B0 },
70 Vector { _handler: CT16B1 },
71 Vector { _handler: CT32B0 },
72 Vector { _handler: CT32B1 },
73 Vector { _handler: SSP0 },
74 Vector { _handler: USART },
75 Vector { _handler: USB_IRQ },
76 Vector { _handler: USB_FIQ },
77 Vector { _handler: ADC },
78 Vector { _handler: WDT },
79 Vector { _handler: BOD_IRQ },
80 Vector {
81 _handler: FLASH_IRQ,
82 },
83 Vector { _reserved: 0 },
84 Vector { _reserved: 0 },
85 Vector {
86 _handler: USBWAKEUP,
87 },
88];
89#[doc = r" Enumeration of all the interrupts"]
90pub enum Interrupt {
91 #[doc = "0 - PIN_INT0"]
92 PIN_INT0,
93 #[doc = "1 - PIN_INT1"]
94 PIN_INT1,
95 #[doc = "2 - PIN_INT2"]
96 PIN_INT2,
97 #[doc = "3 - PIN_INT3"]
98 PIN_INT3,
99 #[doc = "4 - PIN_INT4"]
100 PIN_INT4,
101 #[doc = "5 - PIN_INT5"]
102 PIN_INT5,
103 #[doc = "6 - PIN_INT6"]
104 PIN_INT6,
105 #[doc = "7 - PIN_INT7"]
106 PIN_INT7,
107 #[doc = "8 - GINT0"]
108 GINT0,
109 #[doc = "9 - GINT1"]
110 GINT1,
111 #[doc = "14 - SSP1"]
112 SSP1,
113 #[doc = "15 - I2C"]
114 I2C,
115 #[doc = "16 - CT16B0"]
116 CT16B0,
117 #[doc = "17 - CT16B1"]
118 CT16B1,
119 #[doc = "18 - CT32B0"]
120 CT32B0,
121 #[doc = "19 - CT32B1"]
122 CT32B1,
123 #[doc = "20 - SSP0"]
124 SSP0,
125 #[doc = "21 - USART"]
126 USART,
127 #[doc = "22 - USB_IRQ"]
128 USB_IRQ,
129 #[doc = "23 - USB_FIQ"]
130 USB_FIQ,
131 #[doc = "24 - ADC"]
132 ADC,
133 #[doc = "25 - WDT"]
134 WDT,
135 #[doc = "26 - BOD_IRQ"]
136 BOD_IRQ,
137 #[doc = "27 - FLASH_IRQ"]
138 FLASH_IRQ,
139 #[doc = "30 - USBWAKEUP"]
140 USBWAKEUP,
141}
142unsafe impl ::bare_metal::Nr for Interrupt {
143 #[inline]
144 fn nr(&self) -> u8 {
145 match *self {
146 Interrupt::PIN_INT0 => 0,
147 Interrupt::PIN_INT1 => 1,
148 Interrupt::PIN_INT2 => 2,
149 Interrupt::PIN_INT3 => 3,
150 Interrupt::PIN_INT4 => 4,
151 Interrupt::PIN_INT5 => 5,
152 Interrupt::PIN_INT6 => 6,
153 Interrupt::PIN_INT7 => 7,
154 Interrupt::GINT0 => 8,
155 Interrupt::GINT1 => 9,
156 Interrupt::SSP1 => 14,
157 Interrupt::I2C => 15,
158 Interrupt::CT16B0 => 16,
159 Interrupt::CT16B1 => 17,
160 Interrupt::CT32B0 => 18,
161 Interrupt::CT32B1 => 19,
162 Interrupt::SSP0 => 20,
163 Interrupt::USART => 21,
164 Interrupt::USB_IRQ => 22,
165 Interrupt::USB_FIQ => 23,
166 Interrupt::ADC => 24,
167 Interrupt::WDT => 25,
168 Interrupt::BOD_IRQ => 26,
169 Interrupt::FLASH_IRQ => 27,
170 Interrupt::USBWAKEUP => 30,
171 }
172 }
173}
174#[cfg(feature = "rt")]
175pub use self::Interrupt as interrupt;
176pub use cortex_m::peripheral::Peripherals as CorePeripherals;
177pub use cortex_m::peripheral::{CBP, CPUID, DCB, DWT, FPB, ITM, MPU, NVIC, SCB, SYST, TPIU};
178#[cfg(feature = "rt")]
179pub use cortex_m_rt::interrupt;
180#[doc = "I2C-bus controller"]
181pub struct I2C {
182 _marker: PhantomData<*const ()>,
183}
184unsafe impl Send for I2C {}
185impl I2C {
186 #[doc = r" Returns a pointer to the register block"]
187 pub fn ptr() -> *const i2c::RegisterBlock {
188 1073741824 as *const _
189 }
190}
191impl Deref for I2C {
192 type Target = i2c::RegisterBlock;
193 fn deref(&self) -> &i2c::RegisterBlock {
194 unsafe { &*I2C::ptr() }
195 }
196}
197#[doc = "I2C-bus controller"]
198pub mod i2c;
199#[doc = "Windowed Watchdog Timer (WWDT)"]
200pub struct WWDT {
201 _marker: PhantomData<*const ()>,
202}
203unsafe impl Send for WWDT {}
204impl WWDT {
205 #[doc = r" Returns a pointer to the register block"]
206 pub fn ptr() -> *const wwdt::RegisterBlock {
207 1073758208 as *const _
208 }
209}
210impl Deref for WWDT {
211 type Target = wwdt::RegisterBlock;
212 fn deref(&self) -> &wwdt::RegisterBlock {
213 unsafe { &*WWDT::ptr() }
214 }
215}
216#[doc = "Windowed Watchdog Timer (WWDT)"]
217pub mod wwdt;
218#[doc = "USART"]
219pub struct USART {
220 _marker: PhantomData<*const ()>,
221}
222unsafe impl Send for USART {}
223impl USART {
224 #[doc = r" Returns a pointer to the register block"]
225 pub fn ptr() -> *const usart::RegisterBlock {
226 1073774592 as *const _
227 }
228}
229impl Deref for USART {
230 type Target = usart::RegisterBlock;
231 fn deref(&self) -> &usart::RegisterBlock {
232 unsafe { &*USART::ptr() }
233 }
234}
235#[doc = "USART"]
236pub mod usart;
237#[doc = "16-bit counter/timers CT16B0"]
238pub struct CT16B0 {
239 _marker: PhantomData<*const ()>,
240}
241unsafe impl Send for CT16B0 {}
242impl CT16B0 {
243 #[doc = r" Returns a pointer to the register block"]
244 pub fn ptr() -> *const ct16b0::RegisterBlock {
245 1073790976 as *const _
246 }
247}
248impl Deref for CT16B0 {
249 type Target = ct16b0::RegisterBlock;
250 fn deref(&self) -> &ct16b0::RegisterBlock {
251 unsafe { &*CT16B0::ptr() }
252 }
253}
254#[doc = "16-bit counter/timers CT16B0"]
255pub mod ct16b0;
256#[doc = "16-bit counter/timers CT16B1"]
257pub struct CT16B1 {
258 _marker: PhantomData<*const ()>,
259}
260unsafe impl Send for CT16B1 {}
261impl CT16B1 {
262 #[doc = r" Returns a pointer to the register block"]
263 pub fn ptr() -> *const ct16b1::RegisterBlock {
264 1073807360 as *const _
265 }
266}
267impl Deref for CT16B1 {
268 type Target = ct16b1::RegisterBlock;
269 fn deref(&self) -> &ct16b1::RegisterBlock {
270 unsafe { &*CT16B1::ptr() }
271 }
272}
273#[doc = "16-bit counter/timers CT16B1"]
274pub mod ct16b1;
275#[doc = "32-bit counter/timers CT32B0"]
276pub struct CT32B0 {
277 _marker: PhantomData<*const ()>,
278}
279unsafe impl Send for CT32B0 {}
280impl CT32B0 {
281 #[doc = r" Returns a pointer to the register block"]
282 pub fn ptr() -> *const ct32b0::RegisterBlock {
283 1073823744 as *const _
284 }
285}
286impl Deref for CT32B0 {
287 type Target = ct32b0::RegisterBlock;
288 fn deref(&self) -> &ct32b0::RegisterBlock {
289 unsafe { &*CT32B0::ptr() }
290 }
291}
292#[doc = "32-bit counter/timers CT32B0"]
293pub mod ct32b0;
294#[doc = "32-bit counter/timers CT32B1"]
295pub struct CT32B1 {
296 _marker: PhantomData<*const ()>,
297}
298unsafe impl Send for CT32B1 {}
299impl CT32B1 {
300 #[doc = r" Returns a pointer to the register block"]
301 pub fn ptr() -> *const ct32b1::RegisterBlock {
302 1073840128 as *const _
303 }
304}
305impl Deref for CT32B1 {
306 type Target = ct32b1::RegisterBlock;
307 fn deref(&self) -> &ct32b1::RegisterBlock {
308 unsafe { &*CT32B1::ptr() }
309 }
310}
311#[doc = "32-bit counter/timers CT32B1"]
312pub mod ct32b1;
313#[doc = "ADC"]
314pub struct ADC {
315 _marker: PhantomData<*const ()>,
316}
317unsafe impl Send for ADC {}
318impl ADC {
319 #[doc = r" Returns a pointer to the register block"]
320 pub fn ptr() -> *const adc::RegisterBlock {
321 1073856512 as *const _
322 }
323}
324impl Deref for ADC {
325 type Target = adc::RegisterBlock;
326 fn deref(&self) -> &adc::RegisterBlock {
327 unsafe { &*ADC::ptr() }
328 }
329}
330#[doc = "ADC"]
331pub mod adc;
332#[doc = "Power Management Unit (PMU)"]
333pub struct PMU {
334 _marker: PhantomData<*const ()>,
335}
336unsafe impl Send for PMU {}
337impl PMU {
338 #[doc = r" Returns a pointer to the register block"]
339 pub fn ptr() -> *const pmu::RegisterBlock {
340 1073971200 as *const _
341 }
342}
343impl Deref for PMU {
344 type Target = pmu::RegisterBlock;
345 fn deref(&self) -> &pmu::RegisterBlock {
346 unsafe { &*PMU::ptr() }
347 }
348}
349#[doc = "Power Management Unit (PMU)"]
350pub mod pmu;
351#[doc = "Flash controller"]
352pub struct FLASHCTRL {
353 _marker: PhantomData<*const ()>,
354}
355unsafe impl Send for FLASHCTRL {}
356impl FLASHCTRL {
357 #[doc = r" Returns a pointer to the register block"]
358 pub fn ptr() -> *const flashctrl::RegisterBlock {
359 1073987584 as *const _
360 }
361}
362impl Deref for FLASHCTRL {
363 type Target = flashctrl::RegisterBlock;
364 fn deref(&self) -> &flashctrl::RegisterBlock {
365 unsafe { &*FLASHCTRL::ptr() }
366 }
367}
368#[doc = "Flash controller"]
369pub mod flashctrl;
370#[doc = "SSP/SPI"]
371pub struct SSP0 {
372 _marker: PhantomData<*const ()>,
373}
374unsafe impl Send for SSP0 {}
375impl SSP0 {
376 #[doc = r" Returns a pointer to the register block"]
377 pub fn ptr() -> *const ssp0::RegisterBlock {
378 1074003968 as *const _
379 }
380}
381impl Deref for SSP0 {
382 type Target = ssp0::RegisterBlock;
383 fn deref(&self) -> &ssp0::RegisterBlock {
384 unsafe { &*SSP0::ptr() }
385 }
386}
387#[doc = "SSP/SPI"]
388pub mod ssp0;
389#[doc = "I/O configuration Modification"]
390pub struct IOCON {
391 _marker: PhantomData<*const ()>,
392}
393unsafe impl Send for IOCON {}
394impl IOCON {
395 #[doc = r" Returns a pointer to the register block"]
396 pub fn ptr() -> *const iocon::RegisterBlock {
397 1074020352 as *const _
398 }
399}
400impl Deref for IOCON {
401 type Target = iocon::RegisterBlock;
402 fn deref(&self) -> &iocon::RegisterBlock {
403 unsafe { &*IOCON::ptr() }
404 }
405}
406#[doc = "I/O configuration Modification"]
407pub mod iocon;
408#[doc = "System control block"]
409pub struct SYSCON {
410 _marker: PhantomData<*const ()>,
411}
412unsafe impl Send for SYSCON {}
413impl SYSCON {
414 #[doc = r" Returns a pointer to the register block"]
415 pub fn ptr() -> *const syscon::RegisterBlock {
416 1074036736 as *const _
417 }
418}
419impl Deref for SYSCON {
420 type Target = syscon::RegisterBlock;
421 fn deref(&self) -> &syscon::RegisterBlock {
422 unsafe { &*SYSCON::ptr() }
423 }
424}
425#[doc = "System control block"]
426pub mod syscon;
427#[doc = "GPIO pin interrupt"]
428pub struct GPIO_PIN_INT {
429 _marker: PhantomData<*const ()>,
430}
431unsafe impl Send for GPIO_PIN_INT {}
432impl GPIO_PIN_INT {
433 #[doc = r" Returns a pointer to the register block"]
434 pub fn ptr() -> *const gpio_pin_int::RegisterBlock {
435 1074053120 as *const _
436 }
437}
438impl Deref for GPIO_PIN_INT {
439 type Target = gpio_pin_int::RegisterBlock;
440 fn deref(&self) -> &gpio_pin_int::RegisterBlock {
441 unsafe { &*GPIO_PIN_INT::ptr() }
442 }
443}
444#[doc = "GPIO pin interrupt"]
445pub mod gpio_pin_int;
446#[doc = "SSP1"]
447pub struct SSP1 {
448 _marker: PhantomData<*const ()>,
449}
450unsafe impl Send for SSP1 {}
451impl SSP1 {
452 #[doc = r" Returns a pointer to the register block"]
453 pub fn ptr() -> *const ssp0::RegisterBlock {
454 1074102272 as *const _
455 }
456}
457impl Deref for SSP1 {
458 type Target = ssp0::RegisterBlock;
459 fn deref(&self) -> &ssp0::RegisterBlock {
460 unsafe { &*SSP1::ptr() }
461 }
462}
463#[doc = "GPIO group interrupt"]
464pub struct GPIO_GROUP_INT0 {
465 _marker: PhantomData<*const ()>,
466}
467unsafe impl Send for GPIO_GROUP_INT0 {}
468impl GPIO_GROUP_INT0 {
469 #[doc = r" Returns a pointer to the register block"]
470 pub fn ptr() -> *const gpio_group_int0::RegisterBlock {
471 1074118656 as *const _
472 }
473}
474impl Deref for GPIO_GROUP_INT0 {
475 type Target = gpio_group_int0::RegisterBlock;
476 fn deref(&self) -> &gpio_group_int0::RegisterBlock {
477 unsafe { &*GPIO_GROUP_INT0::ptr() }
478 }
479}
480#[doc = "GPIO group interrupt"]
481pub mod gpio_group_int0;
482#[doc = "GPIO_GROUP_INT1"]
483pub struct GPIO_GROUP_INT1 {
484 _marker: PhantomData<*const ()>,
485}
486unsafe impl Send for GPIO_GROUP_INT1 {}
487impl GPIO_GROUP_INT1 {
488 #[doc = r" Returns a pointer to the register block"]
489 pub fn ptr() -> *const gpio_group_int0::RegisterBlock {
490 1074135040 as *const _
491 }
492}
493impl Deref for GPIO_GROUP_INT1 {
494 type Target = gpio_group_int0::RegisterBlock;
495 fn deref(&self) -> &gpio_group_int0::RegisterBlock {
496 unsafe { &*GPIO_GROUP_INT1::ptr() }
497 }
498}
499#[doc = "USB2.0 device controller"]
500pub struct USB {
501 _marker: PhantomData<*const ()>,
502}
503unsafe impl Send for USB {}
504impl USB {
505 #[doc = r" Returns a pointer to the register block"]
506 pub fn ptr() -> *const usb::RegisterBlock {
507 1074266112 as *const _
508 }
509}
510impl Deref for USB {
511 type Target = usb::RegisterBlock;
512 fn deref(&self) -> &usb::RegisterBlock {
513 unsafe { &*USB::ptr() }
514 }
515}
516#[doc = "USB2.0 device controller"]
517pub mod usb;
518#[doc = "GPIO port"]
519pub struct GPIO_PORT {
520 _marker: PhantomData<*const ()>,
521}
522unsafe impl Send for GPIO_PORT {}
523impl GPIO_PORT {
524 #[doc = r" Returns a pointer to the register block"]
525 pub fn ptr() -> *const gpio_port::RegisterBlock {
526 1342177280 as *const _
527 }
528}
529impl Deref for GPIO_PORT {
530 type Target = gpio_port::RegisterBlock;
531 fn deref(&self) -> &gpio_port::RegisterBlock {
532 unsafe { &*GPIO_PORT::ptr() }
533 }
534}
535#[doc = "GPIO port"]
536pub mod gpio_port;
537#[allow(renamed_and_removed_lints)]
538#[allow(private_no_mangle_statics)]
539#[no_mangle]
540static mut DEVICE_PERIPHERALS: bool = false;
541#[doc = r" All the peripherals"]
542#[allow(non_snake_case)]
543pub struct Peripherals {
544 #[doc = "I2C"]
545 pub I2C: I2C,
546 #[doc = "WWDT"]
547 pub WWDT: WWDT,
548 #[doc = "USART"]
549 pub USART: USART,
550 #[doc = "CT16B0"]
551 pub CT16B0: CT16B0,
552 #[doc = "CT16B1"]
553 pub CT16B1: CT16B1,
554 #[doc = "CT32B0"]
555 pub CT32B0: CT32B0,
556 #[doc = "CT32B1"]
557 pub CT32B1: CT32B1,
558 #[doc = "ADC"]
559 pub ADC: ADC,
560 #[doc = "PMU"]
561 pub PMU: PMU,
562 #[doc = "FLASHCTRL"]
563 pub FLASHCTRL: FLASHCTRL,
564 #[doc = "SSP0"]
565 pub SSP0: SSP0,
566 #[doc = "IOCON"]
567 pub IOCON: IOCON,
568 #[doc = "SYSCON"]
569 pub SYSCON: SYSCON,
570 #[doc = "GPIO_PIN_INT"]
571 pub GPIO_PIN_INT: GPIO_PIN_INT,
572 #[doc = "SSP1"]
573 pub SSP1: SSP1,
574 #[doc = "GPIO_GROUP_INT0"]
575 pub GPIO_GROUP_INT0: GPIO_GROUP_INT0,
576 #[doc = "GPIO_GROUP_INT1"]
577 pub GPIO_GROUP_INT1: GPIO_GROUP_INT1,
578 #[doc = "USB"]
579 pub USB: USB,
580 #[doc = "GPIO_PORT"]
581 pub GPIO_PORT: GPIO_PORT,
582}
583impl Peripherals {
584 #[doc = r" Returns all the peripherals *once*"]
585 #[inline]
586 pub fn take() -> Option<Self> {
587 cortex_m::interrupt::free(|_| {
588 if unsafe { DEVICE_PERIPHERALS } {
589 None
590 } else {
591 Some(unsafe { Peripherals::steal() })
592 }
593 })
594 }
595 #[doc = r" Unchecked version of `Peripherals::take`"]
596 pub unsafe fn steal() -> Self {
597 debug_assert!(!DEVICE_PERIPHERALS);
598 DEVICE_PERIPHERALS = true;
599 Peripherals {
600 I2C: I2C {
601 _marker: PhantomData,
602 },
603 WWDT: WWDT {
604 _marker: PhantomData,
605 },
606 USART: USART {
607 _marker: PhantomData,
608 },
609 CT16B0: CT16B0 {
610 _marker: PhantomData,
611 },
612 CT16B1: CT16B1 {
613 _marker: PhantomData,
614 },
615 CT32B0: CT32B0 {
616 _marker: PhantomData,
617 },
618 CT32B1: CT32B1 {
619 _marker: PhantomData,
620 },
621 ADC: ADC {
622 _marker: PhantomData,
623 },
624 PMU: PMU {
625 _marker: PhantomData,
626 },
627 FLASHCTRL: FLASHCTRL {
628 _marker: PhantomData,
629 },
630 SSP0: SSP0 {
631 _marker: PhantomData,
632 },
633 IOCON: IOCON {
634 _marker: PhantomData,
635 },
636 SYSCON: SYSCON {
637 _marker: PhantomData,
638 },
639 GPIO_PIN_INT: GPIO_PIN_INT {
640 _marker: PhantomData,
641 },
642 SSP1: SSP1 {
643 _marker: PhantomData,
644 },
645 GPIO_GROUP_INT0: GPIO_GROUP_INT0 {
646 _marker: PhantomData,
647 },
648 GPIO_GROUP_INT1: GPIO_GROUP_INT1 {
649 _marker: PhantomData,
650 },
651 USB: USB {
652 _marker: PhantomData,
653 },
654 GPIO_PORT: GPIO_PORT {
655 _marker: PhantomData,
656 },
657 }
658 }
659}