lpc11uxx/
lib.rs

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}