imxrt10xx/
lib.rs

1// Licensed under the Apache License, Version 2.0 or the MIT License.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// Copyright Tock Contributors 2022.
4
5//! Peripheral implementations for the IMXRT1050 and IMXRT1060 MCUs.
6//!
7//! imxrt1050 chip: <https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/i-mx-rt1050-evaluation-kit:MIMXRT1050-EVK>
8
9#![no_std]
10
11pub mod chip;
12pub mod nvic;
13
14// Peripherals
15pub mod ccm;
16pub mod ccm_analog;
17pub mod dcdc;
18pub mod dma;
19pub mod gpio;
20pub mod gpt;
21pub mod iomuxc;
22pub mod iomuxc_snvs;
23pub mod lpi2c;
24pub mod lpuart;
25
26use cortexm7::{initialize_ram_jump_to_main, unhandled_interrupt, CortexM7, CortexMVariant};
27
28extern "C" {
29    // _estack is not really a function, but it makes the types work
30    // You should never actually invoke it!!
31    fn _estack();
32}
33
34#[cfg_attr(
35    all(target_arch = "arm", target_os = "none"),
36    link_section = ".vectors"
37)]
38// used Ensures that the symbol is kept until the final binary
39#[cfg_attr(all(target_arch = "arm", target_os = "none"), used)]
40pub static BASE_VECTORS: [unsafe extern "C" fn(); 16] = [
41    _estack,
42    initialize_ram_jump_to_main,
43    unhandled_interrupt,          // NMI
44    CortexM7::HARD_FAULT_HANDLER, // Hard Fault
45    unhandled_interrupt,          // MemManage
46    unhandled_interrupt,          // BusFault
47    unhandled_interrupt,          // UsageFault
48    unhandled_interrupt,
49    unhandled_interrupt,
50    unhandled_interrupt,
51    unhandled_interrupt,
52    CortexM7::SVC_HANDLER, // SVC
53    unhandled_interrupt,   // DebugMon
54    unhandled_interrupt,
55    unhandled_interrupt,       // PendSV
56    CortexM7::SYSTICK_HANDLER, // SysTick
57];
58
59// imxrt 1050 has total of 160 interrupts
60#[cfg_attr(all(target_arch = "arm", target_os = "none"), link_section = ".irqs")]
61// used Ensures that the symbol is kept until the final binary
62#[cfg_attr(all(target_arch = "arm", target_os = "none"), used)]
63pub static IRQS: [unsafe extern "C" fn(); 160] = [
64    CortexM7::GENERIC_ISR, // eDMA (0)
65    CortexM7::GENERIC_ISR, // eDMA (1)
66    CortexM7::GENERIC_ISR, // eDMA (2)
67    CortexM7::GENERIC_ISR, // eDMA (3)
68    CortexM7::GENERIC_ISR, // eDMA (4)
69    CortexM7::GENERIC_ISR, // eDMA (5)
70    CortexM7::GENERIC_ISR, // eDMA (6)
71    CortexM7::GENERIC_ISR, // eDMA (7)
72    CortexM7::GENERIC_ISR, // eDMA (8)
73    CortexM7::GENERIC_ISR, // eDMA (9)
74    CortexM7::GENERIC_ISR, // eDMA (10)
75    CortexM7::GENERIC_ISR, // eDMA (11)
76    CortexM7::GENERIC_ISR, // eDMA (12)
77    CortexM7::GENERIC_ISR, // eDMA (13)
78    CortexM7::GENERIC_ISR, // eDMA (14)
79    CortexM7::GENERIC_ISR, // eDMA (15)
80    CortexM7::GENERIC_ISR, // Error_interrupt (16)
81    CortexM7::GENERIC_ISR, // CM7 (17)
82    CortexM7::GENERIC_ISR, // CM7 (18)
83    CortexM7::GENERIC_ISR, // CM7 (19)
84    CortexM7::GENERIC_ISR, // LPUART1 (20)
85    CortexM7::GENERIC_ISR, // LPUART2 (21)
86    CortexM7::GENERIC_ISR, // LPUART3 (22)
87    CortexM7::GENERIC_ISR, // LPUART4 (23)
88    CortexM7::GENERIC_ISR, // LPUART5 (24)
89    CortexM7::GENERIC_ISR, // LPUART6 (25)
90    CortexM7::GENERIC_ISR, // LPUART7 (26)
91    CortexM7::GENERIC_ISR, // LPUART8 (27)
92    CortexM7::GENERIC_ISR, // LPI2C1 (28)
93    CortexM7::GENERIC_ISR, // LPI2C2 (29)
94    CortexM7::GENERIC_ISR, // LPI2C3 (30)
95    CortexM7::GENERIC_ISR, // LPI2C4 (31)
96    CortexM7::GENERIC_ISR, // LPSPI1 (32)
97    CortexM7::GENERIC_ISR, // LPSPI2 (33)
98    CortexM7::GENERIC_ISR, // LPSPI3 (34)
99    CortexM7::GENERIC_ISR, // LPSPI4 (35)
100    CortexM7::GENERIC_ISR, // FLEXCAN1 (36)
101    CortexM7::GENERIC_ISR, // FLEXCAN2 (37)
102    CortexM7::GENERIC_ISR, // CM7 (38)
103    CortexM7::GENERIC_ISR, // KPP (39)
104    CortexM7::GENERIC_ISR, // TSC_DIG (40)
105    CortexM7::GENERIC_ISR, // GPR_IRQ (41)
106    CortexM7::GENERIC_ISR, // LCDIF (42)
107    CortexM7::GENERIC_ISR, // CSI (43)
108    CortexM7::GENERIC_ISR, // PXP (44)
109    CortexM7::GENERIC_ISR, // WDOG2 (45)
110    CortexM7::GENERIC_ISR, // SNVS_HP_WRAPPER (46)
111    CortexM7::GENERIC_ISR, // SNVS_HP_WRAPPER (47)
112    CortexM7::GENERIC_ISR, // SNVS_HP_WRAPPER / SNVS_LP_WRAPPER (48)
113    CortexM7::GENERIC_ISR, // CSU (49)
114    CortexM7::GENERIC_ISR, // DCP (50)
115    CortexM7::GENERIC_ISR, // DCP (51)
116    CortexM7::GENERIC_ISR, // DCP (52)
117    CortexM7::GENERIC_ISR, // TRNG (53)
118    CortexM7::GENERIC_ISR, // Reserved (54)
119    CortexM7::GENERIC_ISR, // BEE (55)
120    CortexM7::GENERIC_ISR, // SAI1 (56)
121    CortexM7::GENERIC_ISR, // SAI2 (57)
122    CortexM7::GENERIC_ISR, // SAI3 (58)
123    CortexM7::GENERIC_ISR, // SAI3 (59)
124    CortexM7::GENERIC_ISR, // SPDIF (60)
125    CortexM7::GENERIC_ISR, // PMU (61)
126    CortexM7::GENERIC_ISR, // Reserved (62)
127    CortexM7::GENERIC_ISR, // Temperature Monitor (63)
128    CortexM7::GENERIC_ISR, // Temperature Monitor (64)
129    CortexM7::GENERIC_ISR, // USB PHY (65)
130    CortexM7::GENERIC_ISR, // USB PHY (66)
131    CortexM7::GENERIC_ISR, // ADC1 (67)
132    CortexM7::GENERIC_ISR, // ADC2 (68)
133    CortexM7::GENERIC_ISR, // DCDC (69)
134    CortexM7::GENERIC_ISR, // Reserved (70)
135    CortexM7::GENERIC_ISR, // Reserved (71)
136    CortexM7::GENERIC_ISR, // GPIO1 (72)
137    CortexM7::GENERIC_ISR, // GPIO1 (73)
138    CortexM7::GENERIC_ISR, // GPIO1 (74)
139    CortexM7::GENERIC_ISR, // GPIO1 (75)
140    CortexM7::GENERIC_ISR, // GPIO1 (76)
141    CortexM7::GENERIC_ISR, // GPIO1 (77)
142    CortexM7::GENERIC_ISR, // GPIO1 (78)
143    CortexM7::GENERIC_ISR, // GPIO1 (79)
144    CortexM7::GENERIC_ISR, // GPIO1_1 (80)
145    CortexM7::GENERIC_ISR, // GPIO1_2 (81)
146    CortexM7::GENERIC_ISR, // GPIO2_1 (82)
147    CortexM7::GENERIC_ISR, // GPIO2_2 (83)
148    CortexM7::GENERIC_ISR, // GPIO3_1 (84)
149    CortexM7::GENERIC_ISR, // GPIO3_2 (85)
150    CortexM7::GENERIC_ISR, // GPIO4_1 (86)
151    CortexM7::GENERIC_ISR, // GPIO4_2 (87)
152    CortexM7::GENERIC_ISR, // GPIO5_1 (88)
153    CortexM7::GENERIC_ISR, // GPIO5_2 (89)
154    CortexM7::GENERIC_ISR, // FLEXIO1 (90)
155    CortexM7::GENERIC_ISR, // FLEXIO2 (91)
156    CortexM7::GENERIC_ISR, // WDOG1 (92)
157    CortexM7::GENERIC_ISR, // RTWDOG (93)
158    CortexM7::GENERIC_ISR, // EWM (94)
159    CortexM7::GENERIC_ISR, // CCM (95)
160    CortexM7::GENERIC_ISR, // CCM (96)
161    CortexM7::GENERIC_ISR, // GPC (97)
162    CortexM7::GENERIC_ISR, // SRC (98)
163    CortexM7::GENERIC_ISR, // Reserved (99)
164    CortexM7::GENERIC_ISR, // GPT1 (100)
165    CortexM7::GENERIC_ISR, // GPT2 (101)
166    CortexM7::GENERIC_ISR, // FLEXPWM1 (102)
167    CortexM7::GENERIC_ISR, // FLEXPWM1 (103)
168    CortexM7::GENERIC_ISR, // FLEXPWM1 (104)
169    CortexM7::GENERIC_ISR, // FLEXPWM1 (105)
170    CortexM7::GENERIC_ISR, // FLEXPWM1 (106)
171    CortexM7::GENERIC_ISR, // Reserved (107)
172    CortexM7::GENERIC_ISR, // FLEXSPI (108)
173    CortexM7::GENERIC_ISR, // SEMC (109)
174    CortexM7::GENERIC_ISR, // USDHC1 (110)
175    CortexM7::GENERIC_ISR, // USDHC2 (111)
176    CortexM7::GENERIC_ISR, // USB (112)
177    CortexM7::GENERIC_ISR, // USB (113)
178    CortexM7::GENERIC_ISR, // ENET (114)
179    CortexM7::GENERIC_ISR, // ENET (115)
180    CortexM7::GENERIC_ISR, // XBAR1 (116)
181    CortexM7::GENERIC_ISR, // XBAR1 (117)
182    CortexM7::GENERIC_ISR, // ADC_ETC (118)
183    CortexM7::GENERIC_ISR, // ADC_ETC (119)
184    CortexM7::GENERIC_ISR, // ADC_ETC (120)
185    CortexM7::GENERIC_ISR, // ADC_ETC (121)
186    CortexM7::GENERIC_ISR, // PIT (122)
187    CortexM7::GENERIC_ISR, // ACMP (123)
188    CortexM7::GENERIC_ISR, // ACMP (124)
189    CortexM7::GENERIC_ISR, // ACMP (125)
190    CortexM7::GENERIC_ISR, // ACMP (126)
191    CortexM7::GENERIC_ISR, // Reserved (127)
192    CortexM7::GENERIC_ISR, // Reserved (128)
193    CortexM7::GENERIC_ISR, // ENC1 (129)
194    CortexM7::GENERIC_ISR, // ENC2 (130)
195    CortexM7::GENERIC_ISR, // ENC3 (131)
196    CortexM7::GENERIC_ISR, // ENC4 (132)
197    CortexM7::GENERIC_ISR, // QTIMER1 (133)
198    CortexM7::GENERIC_ISR, // QTIMER2 (134)
199    CortexM7::GENERIC_ISR, // QTIMER3 (135)
200    CortexM7::GENERIC_ISR, // QTIMER4 (136)
201    CortexM7::GENERIC_ISR, // FLEXPWM2 (137)
202    CortexM7::GENERIC_ISR, // FLEXPWM2 (138)
203    CortexM7::GENERIC_ISR, // FLEXPWM2 (139)
204    CortexM7::GENERIC_ISR, // FLEXPWM2 (140)
205    CortexM7::GENERIC_ISR, // FLEXPWM2 (141)
206    CortexM7::GENERIC_ISR, // FLEXPWM3 (142)
207    CortexM7::GENERIC_ISR, // FLEXPWM3 (143)
208    CortexM7::GENERIC_ISR, // FLEXPWM3 (144)
209    CortexM7::GENERIC_ISR, // FLEXPWM3 (145)
210    CortexM7::GENERIC_ISR, // FLEXPWM3 (146)
211    CortexM7::GENERIC_ISR, // FLEXPWM4 (147)
212    CortexM7::GENERIC_ISR, // FLEXPWM4 (148)
213    CortexM7::GENERIC_ISR, // FLEXPWM4 (149)
214    CortexM7::GENERIC_ISR, // FLEXPWM4 (150)
215    CortexM7::GENERIC_ISR, // FLEXPWM4 (151)
216    CortexM7::GENERIC_ISR, // Reserved (152)
217    CortexM7::GENERIC_ISR, // Reserved (153)
218    CortexM7::GENERIC_ISR, // Reserved (154)
219    CortexM7::GENERIC_ISR, // Reserved (155)
220    CortexM7::GENERIC_ISR, // Reserved (156)
221    CortexM7::GENERIC_ISR, // Reserved (157)
222    CortexM7::GENERIC_ISR, // Reserved (158)
223    CortexM7::GENERIC_ISR, // Reserved (159)
224];
225
226pub unsafe fn init() {
227    cortexm7::nvic::disable_all();
228    cortexm7::nvic::clear_all_pending();
229
230    cortexm7::scb::set_vector_table_offset(core::ptr::addr_of!(BASE_VECTORS) as *const ());
231
232    cortexm7::nvic::enable_all();
233}