aboutsummaryrefslogtreecommitdiff
path: root/embassy-nxp/src/pac_utils.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-nxp/src/pac_utils.rs')
-rw-r--r--embassy-nxp/src/pac_utils.rs323
1 files changed, 0 insertions, 323 deletions
diff --git a/embassy-nxp/src/pac_utils.rs b/embassy-nxp/src/pac_utils.rs
deleted file mode 100644
index 86a807f6c..000000000
--- a/embassy-nxp/src/pac_utils.rs
+++ /dev/null
@@ -1,323 +0,0 @@
1/// Get the GPIO register block. This is used to configure all GPIO pins.
2///
3/// # Safety
4/// Due to the type system of peripherals, access to the settings of a single pin is possible only
5/// by a single thread at a time. Read/Write operations on a single registers are NOT atomic. You
6/// must ensure that the GPIO registers are not accessed concurrently by multiple threads.
7pub(crate) fn gpio_reg() -> &'static lpc55_pac::gpio::RegisterBlock {
8 unsafe { &*lpc55_pac::GPIO::ptr() }
9}
10
11/// Get the IOCON register block.
12///
13/// # Safety
14/// Read/Write operations on a single registers are NOT atomic. You must ensure that the GPIO
15/// registers are not accessed concurrently by multiple threads.
16pub(crate) fn iocon_reg() -> &'static lpc55_pac::iocon::RegisterBlock {
17 unsafe { &*lpc55_pac::IOCON::ptr() }
18}
19
20/// Get the INPUTMUX register block.
21///
22/// # Safety
23/// Read/Write operations on a single registers are NOT atomic. You must ensure that the GPIO
24/// registers are not accessed concurrently by multiple threads.
25pub(crate) fn inputmux_reg() -> &'static lpc55_pac::inputmux::RegisterBlock {
26 unsafe { &*lpc55_pac::INPUTMUX::ptr() }
27}
28
29/// Get the SYSCON register block.
30///
31/// # Safety
32/// Read/Write operations on a single registers are NOT atomic. You must ensure that the GPIO
33/// registers are not accessed concurrently by multiple threads.
34pub(crate) fn syscon_reg() -> &'static lpc55_pac::syscon::RegisterBlock {
35 unsafe { &*lpc55_pac::SYSCON::ptr() }
36}
37
38/// Get the PINT register block.
39///
40/// # Safety
41/// Read/Write operations on a single registers are NOT atomic. You must ensure that the GPIO
42/// registers are not accessed concurrently by multiple threads.
43pub(crate) fn pint_reg() -> &'static lpc55_pac::pint::RegisterBlock {
44 unsafe { &*lpc55_pac::PINT::ptr() }
45}
46
47/// Match the pin bank and number of a pin to the corresponding IOCON register.
48///
49/// # Example
50/// ```
51/// use embassy_nxp::gpio::Bank;
52/// use embassy_nxp::pac_utils::{iocon_reg, match_iocon};
53///
54/// // Make pin PIO1_6 digital and set it to pull-down mode.
55/// match_iocon!(register, iocon_reg(), Bank::Bank1, 6, {
56/// register.modify(|_, w| w.mode().pull_down().digimode().digital());
57/// });
58/// ```
59macro_rules! match_iocon {
60 ($register:ident, $iocon_register:expr, $pin_bank:expr, $pin_number:expr, $action:expr) => {
61 match ($pin_bank, $pin_number) {
62 (Bank::Bank0, 0) => {
63 let $register = &($iocon_register).pio0_0;
64 $action;
65 }
66 (Bank::Bank0, 1) => {
67 let $register = &($iocon_register).pio0_1;
68 $action;
69 }
70 (Bank::Bank0, 2) => {
71 let $register = &($iocon_register).pio0_2;
72 $action;
73 }
74 (Bank::Bank0, 3) => {
75 let $register = &($iocon_register).pio0_3;
76 $action;
77 }
78 (Bank::Bank0, 4) => {
79 let $register = &($iocon_register).pio0_4;
80 $action;
81 }
82 (Bank::Bank0, 5) => {
83 let $register = &($iocon_register).pio0_5;
84 $action;
85 }
86 (Bank::Bank0, 6) => {
87 let $register = &($iocon_register).pio0_6;
88 $action;
89 }
90 (Bank::Bank0, 7) => {
91 let $register = &($iocon_register).pio0_7;
92 $action;
93 }
94 (Bank::Bank0, 8) => {
95 let $register = &($iocon_register).pio0_8;
96 $action;
97 }
98 (Bank::Bank0, 9) => {
99 let $register = &($iocon_register).pio0_9;
100 $action;
101 }
102 (Bank::Bank0, 10) => {
103 let $register = &($iocon_register).pio0_10;
104 $action;
105 }
106 (Bank::Bank0, 11) => {
107 let $register = &($iocon_register).pio0_11;
108 $action;
109 }
110 (Bank::Bank0, 12) => {
111 let $register = &($iocon_register).pio0_12;
112 $action;
113 }
114 (Bank::Bank0, 13) => {
115 let $register = &($iocon_register).pio0_13;
116 $action;
117 }
118 (Bank::Bank0, 14) => {
119 let $register = &($iocon_register).pio0_14;
120 $action;
121 }
122 (Bank::Bank0, 15) => {
123 let $register = &($iocon_register).pio0_15;
124 $action;
125 }
126 (Bank::Bank0, 16) => {
127 let $register = &($iocon_register).pio0_16;
128 $action;
129 }
130 (Bank::Bank0, 17) => {
131 let $register = &($iocon_register).pio0_17;
132 $action;
133 }
134 (Bank::Bank0, 18) => {
135 let $register = &($iocon_register).pio0_18;
136 $action;
137 }
138 (Bank::Bank0, 19) => {
139 let $register = &($iocon_register).pio0_19;
140 $action;
141 }
142 (Bank::Bank0, 20) => {
143 let $register = &($iocon_register).pio0_20;
144 $action;
145 }
146 (Bank::Bank0, 21) => {
147 let $register = &($iocon_register).pio0_21;
148 $action;
149 }
150 (Bank::Bank0, 22) => {
151 let $register = &($iocon_register).pio0_22;
152 $action;
153 }
154 (Bank::Bank0, 23) => {
155 let $register = &($iocon_register).pio0_23;
156 $action;
157 }
158 (Bank::Bank0, 24) => {
159 let $register = &($iocon_register).pio0_24;
160 $action;
161 }
162 (Bank::Bank0, 25) => {
163 let $register = &($iocon_register).pio0_25;
164 $action;
165 }
166 (Bank::Bank0, 26) => {
167 let $register = &($iocon_register).pio0_26;
168 $action;
169 }
170 (Bank::Bank0, 27) => {
171 let $register = &($iocon_register).pio0_27;
172 $action;
173 }
174 (Bank::Bank0, 28) => {
175 let $register = &($iocon_register).pio0_28;
176 $action;
177 }
178 (Bank::Bank0, 29) => {
179 let $register = &($iocon_register).pio0_29;
180 $action;
181 }
182 (Bank::Bank0, 30) => {
183 let $register = &($iocon_register).pio0_30;
184 $action;
185 }
186 (Bank::Bank0, 31) => {
187 let $register = &($iocon_register).pio0_31;
188 $action;
189 }
190 (Bank::Bank1, 0) => {
191 let $register = &($iocon_register).pio1_0;
192 $action;
193 }
194 (Bank::Bank1, 1) => {
195 let $register = &($iocon_register).pio1_1;
196 $action;
197 }
198 (Bank::Bank1, 2) => {
199 let $register = &($iocon_register).pio1_2;
200 $action;
201 }
202 (Bank::Bank1, 3) => {
203 let $register = &($iocon_register).pio1_3;
204 $action;
205 }
206 (Bank::Bank1, 4) => {
207 let $register = &($iocon_register).pio1_4;
208 $action;
209 }
210 (Bank::Bank1, 5) => {
211 let $register = &($iocon_register).pio1_5;
212 $action;
213 }
214 (Bank::Bank1, 6) => {
215 let $register = &($iocon_register).pio1_6;
216 $action;
217 }
218 (Bank::Bank1, 7) => {
219 let $register = &($iocon_register).pio1_7;
220 $action;
221 }
222 (Bank::Bank1, 8) => {
223 let $register = &($iocon_register).pio1_8;
224 $action;
225 }
226 (Bank::Bank1, 9) => {
227 let $register = &($iocon_register).pio1_9;
228 $action;
229 }
230 (Bank::Bank1, 10) => {
231 let $register = &($iocon_register).pio1_10;
232 $action;
233 }
234 (Bank::Bank1, 11) => {
235 let $register = &($iocon_register).pio1_11;
236 $action;
237 }
238 (Bank::Bank1, 12) => {
239 let $register = &($iocon_register).pio1_12;
240 $action;
241 }
242 (Bank::Bank1, 13) => {
243 let $register = &($iocon_register).pio1_13;
244 $action;
245 }
246 (Bank::Bank1, 14) => {
247 let $register = &($iocon_register).pio1_14;
248 $action;
249 }
250 (Bank::Bank1, 15) => {
251 let $register = &($iocon_register).pio1_15;
252 $action;
253 }
254 (Bank::Bank1, 16) => {
255 let $register = &($iocon_register).pio1_16;
256 $action;
257 }
258 (Bank::Bank1, 17) => {
259 let $register = &($iocon_register).pio1_17;
260 $action;
261 }
262 (Bank::Bank1, 18) => {
263 let $register = &($iocon_register).pio1_18;
264 $action;
265 }
266 (Bank::Bank1, 19) => {
267 let $register = &($iocon_register).pio1_19;
268 $action;
269 }
270 (Bank::Bank1, 20) => {
271 let $register = &($iocon_register).pio1_20;
272 $action;
273 }
274 (Bank::Bank1, 21) => {
275 let $register = &($iocon_register).pio1_21;
276 $action;
277 }
278 (Bank::Bank1, 22) => {
279 let $register = &($iocon_register).pio1_22;
280 $action;
281 }
282 (Bank::Bank1, 23) => {
283 let $register = &($iocon_register).pio1_23;
284 $action;
285 }
286 (Bank::Bank1, 24) => {
287 let $register = &($iocon_register).pio1_24;
288 $action;
289 }
290 (Bank::Bank1, 25) => {
291 let $register = &($iocon_register).pio1_25;
292 $action;
293 }
294 (Bank::Bank1, 26) => {
295 let $register = &($iocon_register).pio1_26;
296 $action;
297 }
298 (Bank::Bank1, 27) => {
299 let $register = &($iocon_register).pio1_27;
300 $action;
301 }
302 (Bank::Bank1, 28) => {
303 let $register = &($iocon_register).pio1_28;
304 $action;
305 }
306 (Bank::Bank1, 29) => {
307 let $register = &($iocon_register).pio1_29;
308 $action;
309 }
310 (Bank::Bank1, 30) => {
311 let $register = &($iocon_register).pio1_30;
312 $action;
313 }
314 (Bank::Bank1, 31) => {
315 let $register = &($iocon_register).pio1_31;
316 $action;
317 }
318 _ => unreachable!(),
319 }
320 };
321}
322
323pub(crate) use match_iocon;