@@ -204,17 +204,18 @@ macro_rules! gpio {
204
204
let offset = 2 * index;
205
205
let offset2 = 4 * index;
206
206
unsafe {
207
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
207
208
if offset2 < 32 {
208
- & ( * $GPIOX :: ptr ( ) ) . afrl. modify( |r, w| {
209
+ reg . afrl. modify( |r, w| {
209
210
w. bits( ( r. bits( ) & !( 0b1111 << offset2) ) | ( mode << offset2) )
210
211
} ) ;
211
212
} else {
212
213
let offset2 = offset2 - 32 ;
213
- & ( * $GPIOX :: ptr ( ) ) . afrh. modify( |r, w| {
214
+ reg . afrh. modify( |r, w| {
214
215
w. bits( ( r. bits( ) & !( 0b1111 << offset2) ) | ( mode << offset2) )
215
216
} ) ;
216
217
}
217
- & ( * $GPIOX :: ptr ( ) ) . moder. modify( |r, w| {
218
+ reg . moder. modify( |r, w| {
218
219
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b10 << offset) )
219
220
} ) ;
220
221
}
@@ -297,10 +298,11 @@ macro_rules! gpio {
297
298
) -> $PXi<Input <Floating >> {
298
299
let offset = 2 * $i;
299
300
unsafe {
300
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
301
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
302
+ reg. pupdr. modify( |r, w| {
301
303
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b00 << offset) )
302
304
} ) ;
303
- & ( * $GPIOX :: ptr ( ) ) . moder. modify( |r, w| {
305
+ reg . moder. modify( |r, w| {
304
306
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b00 << offset) )
305
307
} ) ;
306
308
}
@@ -313,10 +315,11 @@ macro_rules! gpio {
313
315
) -> $PXi<Input <PullDown >> {
314
316
let offset = 2 * $i;
315
317
unsafe {
316
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
318
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
319
+ reg. pupdr. modify( |r, w| {
317
320
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b10 << offset) )
318
321
} ) ;
319
- & ( * $GPIOX :: ptr ( ) ) . moder. modify( |r, w| {
322
+ reg . moder. modify( |r, w| {
320
323
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b00 << offset) )
321
324
} ) ;
322
325
}
@@ -329,10 +332,11 @@ macro_rules! gpio {
329
332
) -> $PXi<Input <PullUp >> {
330
333
let offset = 2 * $i;
331
334
unsafe {
332
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
335
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
336
+ reg. pupdr. modify( |r, w| {
333
337
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b01 << offset) )
334
338
} ) ;
335
- & ( * $GPIOX :: ptr ( ) ) . moder. modify( |r, w| {
339
+ reg . moder. modify( |r, w| {
336
340
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b00 << offset) )
337
341
} ) ;
338
342
}
@@ -345,10 +349,11 @@ macro_rules! gpio {
345
349
) -> $PXi<Analog > {
346
350
let offset = 2 * $i;
347
351
unsafe {
348
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
352
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
353
+ reg. pupdr. modify( |r, w| {
349
354
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b00 << offset) )
350
355
} ) ;
351
- & ( * $GPIOX :: ptr ( ) ) . moder. modify( |r, w| {
356
+ reg . moder. modify( |r, w| {
352
357
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b11 << offset) )
353
358
} ) ;
354
359
}
@@ -361,13 +366,14 @@ macro_rules! gpio {
361
366
) -> $PXi<Output <OpenDrain >> {
362
367
let offset = 2 * $i;
363
368
unsafe {
364
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
369
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
370
+ reg. pupdr. modify( |r, w| {
365
371
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b00 << offset) )
366
372
} ) ;
367
- & ( * $GPIOX :: ptr ( ) ) . otyper. modify( |r, w| {
373
+ reg . otyper. modify( |r, w| {
368
374
w. bits( r. bits( ) | ( 0b1 << $i) )
369
375
} ) ;
370
- & ( * $GPIOX :: ptr ( ) ) . moder. modify( |r, w| {
376
+ reg . moder. modify( |r, w| {
371
377
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b01 << offset) )
372
378
} ) ;
373
379
}
@@ -380,13 +386,14 @@ macro_rules! gpio {
380
386
) -> $PXi<Output <PushPull >> {
381
387
let offset = 2 * $i;
382
388
unsafe {
383
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
389
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
390
+ reg. pupdr. modify( |r, w| {
384
391
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b00 << offset) )
385
392
} ) ;
386
- & ( * $GPIOX :: ptr ( ) ) . otyper. modify( |r, w| {
393
+ reg . otyper. modify( |r, w| {
387
394
w. bits( r. bits( ) & !( 0b1 << $i) )
388
395
} ) ;
389
- & ( * $GPIOX :: ptr ( ) ) . moder. modify( |r, w| {
396
+ reg . moder. modify( |r, w| {
390
397
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b01 << offset) )
391
398
} ) ;
392
399
}
@@ -400,16 +407,17 @@ macro_rules! gpio {
400
407
) -> $PXi<Output <PushPull >> {
401
408
let offset = 2 * $i;
402
409
unsafe {
403
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
410
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
411
+ reg. pupdr. modify( |r, w| {
404
412
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b00 << offset) )
405
413
} ) ;
406
- & ( * $GPIOX :: ptr ( ) ) . otyper. modify( |r, w| {
414
+ reg . otyper. modify( |r, w| {
407
415
w. bits( r. bits( ) & !( 0b1 << $i) )
408
416
} ) ;
409
- & ( * $GPIOX :: ptr ( ) ) . ospeedr. modify( |r, w| {
417
+ reg . ospeedr. modify( |r, w| {
410
418
w. bits( r. bits( ) & !( 0b1 << $i) )
411
419
} ) ;
412
- & ( * $GPIOX :: ptr ( ) ) . moder. modify( |r, w| {
420
+ reg . moder. modify( |r, w| {
413
421
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( 0b01 << offset) )
414
422
} ) ;
415
423
}
@@ -423,7 +431,8 @@ macro_rules! gpio {
423
431
let offset = 2 * $i;
424
432
let value = if on { 0b01 } else { 0b00 } ;
425
433
unsafe {
426
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
434
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
435
+ reg. pupdr. modify( |r, w| {
427
436
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( value << offset) )
428
437
} ) ;
429
438
}
@@ -436,7 +445,8 @@ macro_rules! gpio {
436
445
let offset = 2 * $i;
437
446
let value = if on { 0b01 } else { 0b00 } ;
438
447
unsafe {
439
- & ( * $GPIOX:: ptr( ) ) . pupdr. modify( |r, w| {
448
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
449
+ reg. pupdr. modify( |r, w| {
440
450
w. bits( ( r. bits( ) & !( 0b11 << offset) ) | ( value << offset) )
441
451
} ) ;
442
452
}
@@ -449,7 +459,8 @@ macro_rules! gpio {
449
459
pub fn set_open_drain( self , _cs: & CriticalSection ) -> Self {
450
460
let offset = $i;
451
461
unsafe {
452
- & ( * $GPIOX:: ptr( ) ) . otyper. modify( |r, w| {
462
+ let reg = & ( * $GPIOX:: ptr( ) ) ;
463
+ reg. otyper. modify( |r, w| {
453
464
w. bits( r. bits( ) | ( 1 << offset) )
454
465
} ) ;
455
466
}
0 commit comments