Skip to content

Commit b310b04

Browse files
committed
Remove pin/port distinction
1 parent 2acd173 commit b310b04

File tree

7 files changed

+283
-311
lines changed

7 files changed

+283
-311
lines changed

ports/mimxrt10xx/common-hal/digitalio/DigitalInOut.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct(
7474

7575
void common_hal_digitalio_digitalinout_never_reset(
7676
digitalio_digitalinout_obj_t *self) {
77-
never_reset_pin_number(self->pin->port, self->pin->number);
77+
common_hal_never_reset_pin(self->pin);
7878
}
7979

8080
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t* self) {

ports/mimxrt10xx/common-hal/microcontroller/Pin.c

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,19 @@ bool neopixel_in_use;
3434

3535
#define GPIO_PORT_COUNT (IOMUXC_SW_PAD_CTL_PAD_COUNT / 32 + 1)
3636

37-
// GPIO ports are 32 pins wide
38-
STATIC uint32_t claimed_pins[GPIO_PORT_COUNT]; //remove?
39-
STATIC uint32_t never_reset_pins[GPIO_PORT_COUNT];
37+
STATIC bool claimed_pins[IOMUXC_SW_PAD_CTL_PAD_COUNT];
38+
STATIC bool never_reset_pins[IOMUXC_SW_PAD_CTL_PAD_COUNT];
4039

4140
// There are two numbering systems used here:
4241
// IOMUXC index, used for iterating through pins and accessing reset information,
4342
// and GPIO port and number, used to store claimed and reset tagging. The two number
4443
// systems are not related and one cannot determine the other without a pin object
4544
void reset_all_pins(void) {
46-
for (uint8_t i = 0; i < GPIO_PORT_COUNT; i++) {
45+
for (uint8_t i = 0; i < IOMUXC_SW_PAD_CTL_PAD_COUNT; i++) {
4746
claimed_pins[i] = never_reset_pins[i];
4847
}
4948
for (uint8_t i = 0; i < IOMUXC_SW_PAD_CTL_PAD_COUNT; i++) {
50-
if(!(never_reset_pins[((mcu_pin_obj_t*)(mcu_pin_globals.map.table[i].value))->port]
51-
& (1 << ((mcu_pin_obj_t*)(mcu_pin_globals.map.table[i].value))->number))) {
49+
if(!never_reset_pins[i]) {
5250
IOMUXC->SW_MUX_CTL_PAD[i] = ((mcu_pin_obj_t*)(mcu_pin_globals.map.table[i].value))->mux_reset;
5351
IOMUXC->SW_PAD_CTL_PAD[i] = ((mcu_pin_obj_t*)(mcu_pin_globals.map.table[i].value))->pad_reset;
5452
}
@@ -59,15 +57,11 @@ void reset_all_pins(void) {
5957
#endif
6058
}
6159

62-
void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number) {
63-
never_reset_pins[pin_port] |= 1 << pin_number;
64-
}
65-
6660
// Since i.MX pins need extra register and reset information to reset properly,
6761
// resetting pins by number alone has been removed.
6862
void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
69-
never_reset_pins[pin->port] &= ~(1 << pin->number);
70-
claimed_pins[pin->port] &= ~(1 << pin->number);
63+
never_reset_pins[pin->mux_idx] = false;
64+
claimed_pins[pin->mux_idx] = false;
7165
*(uint32_t*)pin->mux_reg = pin->mux_reset;
7266
*(uint32_t*)pin->cfg_reg = pin->pad_reset;
7367

@@ -81,17 +75,7 @@ void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
8175
}
8276

8377
void common_hal_never_reset_pin(const mcu_pin_obj_t* pin) {
84-
never_reset_pin_number(pin->port, pin->number);
85-
}
86-
87-
void claim_pin(const mcu_pin_obj_t* pin) {
88-
claimed_pins[pin->port] |= 1 << pin->number;
89-
90-
#ifdef MICROPY_HW_NEOPIXEL
91-
if (pin == MICROPY_HW_NEOPIXEL) {
92-
neopixel_in_use = true;
93-
}
94-
#endif
78+
never_reset_pins[pin->mux_idx] = true;
9579
}
9680

9781
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t* pin) {
@@ -101,22 +85,27 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t* pin) {
10185
}
10286
#endif
10387

104-
return !(claimed_pins[pin->port] & 1<<pin->number);
88+
return !claimed_pins[pin->mux_idx];
10589
}
10690

10791
uint8_t common_hal_mcu_pin_number(const mcu_pin_obj_t* pin) {
10892
return pin->mux_idx; // returns IOMUXC to align with pin table
109-
// Note: IOMUXC "numbers" do not align cleanly with GPIO values
11093
}
11194

11295
void common_hal_mcu_pin_claim(const mcu_pin_obj_t* pin) {
113-
claim_pin(pin);
96+
claimed_pins[pin->mux_idx] = true;
97+
98+
#ifdef MICROPY_HW_NEOPIXEL
99+
if (pin == MICROPY_HW_NEOPIXEL) {
100+
neopixel_in_use = true;
101+
}
102+
#endif
103+
}
104+
105+
void claim_pin(const mcu_pin_obj_t* pin) {
106+
common_hal_mcu_pin_claim(pin);
114107
}
115108

116109
void common_hal_mcu_pin_reset_number(uint8_t pin_no) {
117110
common_hal_reset_pin((mcu_pin_obj_t*)(mcu_pin_globals.map.table[pin_no].value));
118111
}
119-
120-
// TODO: replace use of GPIO pointers in pin struct with this system?
121-
// GPIO_TypeDef * pin_port(uint8_t pin_port) {}
122-
// uint16_t pin_mask(uint8_t pin_number) {}

ports/mimxrt10xx/common-hal/microcontroller/Pin.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ extern bool neopixel_in_use;
3737
#endif
3838

3939
void reset_all_pins(void);
40-
// reset_pin_number takes the pin number instead of the pointer so that objects don't
41-
// need to store a full pointer.
42-
void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number);
4340
void claim_pin(const mcu_pin_obj_t* pin);
4441

4542
#endif // MICROPY_INCLUDED_MIMXRT10XX_COMMON_HAL_MICROCONTROLLER_PIN_H

ports/mimxrt10xx/peripherals/mimxrt10xx/MIMXRT1011/pins.c

Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -29,50 +29,48 @@
2929
#include "py/mphal.h"
3030
#include "mimxrt10xx/pins.h"
3131

32-
const mcu_pin_obj_t pin_GPIO_00 = PIN(GPIO1, 0, 0, GPIO_00, NO_ADC, 0, 0x00000005, 0x000010A0);
33-
const mcu_pin_obj_t pin_GPIO_01 = PIN(GPIO1, 0, 1, GPIO_01, NO_ADC, 0, 0x00000005, 0x000010A0);
34-
const mcu_pin_obj_t pin_GPIO_02 = PIN(GPIO1, 0, 2, GPIO_02, NO_ADC, 0, 0x00000005, 0x000010A0);
35-
const mcu_pin_obj_t pin_GPIO_03 = PIN(GPIO1, 0, 3, GPIO_03, NO_ADC, 0, 0x00000005, 0x000010A0);
36-
const mcu_pin_obj_t pin_GPIO_04 = PIN(GPIO1, 0, 4, GPIO_04, NO_ADC, 0, 0x00000005, 0x000010A0);
37-
const mcu_pin_obj_t pin_GPIO_05 = PIN(GPIO1, 0, 5, GPIO_05, NO_ADC, 0, 0x00000005, 0x000010A0);
38-
const mcu_pin_obj_t pin_GPIO_06 = PIN(GPIO1, 0, 6, GPIO_06, NO_ADC, 0, 0x00000005, 0x000010A0);
39-
const mcu_pin_obj_t pin_GPIO_07 = PIN(GPIO1, 0, 7, GPIO_07, NO_ADC, 0, 0x00000005, 0x000010A0);
40-
const mcu_pin_obj_t pin_GPIO_08 = PIN(GPIO1, 0, 8, GPIO_08, NO_ADC, 0, 0x00000005, 0x000010A0);
41-
const mcu_pin_obj_t pin_GPIO_09 = PIN(GPIO1, 0, 9, GPIO_09, NO_ADC, 0, 0x00000005, 0x000010A0);
42-
const mcu_pin_obj_t pin_GPIO_10 = PIN(GPIO1, 0, 10, GPIO_10, NO_ADC, 0, 0x00000005, 0x000010A0);
43-
const mcu_pin_obj_t pin_GPIO_11 = PIN(GPIO1, 0, 11, GPIO_11, NO_ADC, 0, 0x00000005, 0x000010A0);
44-
const mcu_pin_obj_t pin_GPIO_12 = PIN(GPIO1, 0, 12, GPIO_12, NO_ADC, 0, 0x00000005, 0x000010A0);
45-
const mcu_pin_obj_t pin_GPIO_13 = PIN(GPIO1, 0, 13, GPIO_13, NO_ADC, 0, 0x00000005, 0x000010A0);
46-
47-
const mcu_pin_obj_t pin_GPIO_AD_00 = PIN(GPIO1, 0, 14, GPIO_AD_00, ADC1, 0, 0x00000005, 0x000010A0);
48-
const mcu_pin_obj_t pin_GPIO_AD_01 = PIN(GPIO1, 0, 15, GPIO_AD_01, ADC1, 1, 0x00000005, 0x000010A0);
49-
const mcu_pin_obj_t pin_GPIO_AD_02 = PIN(GPIO1, 0, 16, GPIO_AD_02, ADC1, 2, 0x00000005, 0x000010A0);
50-
const mcu_pin_obj_t pin_GPIO_AD_03 = PIN(GPIO1, 0, 17, GPIO_AD_03, ADC1, 3, 0x00000005, 0x000010A0);
51-
const mcu_pin_obj_t pin_GPIO_AD_04 = PIN(GPIO1, 0, 18, GPIO_AD_04, ADC1, 4, 0x00000005, 0x000010A0);
52-
const mcu_pin_obj_t pin_GPIO_AD_05 = PIN(GPIO1, 0, 19, GPIO_AD_05, ADC1, 5, 0x00000005, 0x000010A0);
53-
const mcu_pin_obj_t pin_GPIO_AD_06 = PIN(GPIO1, 0, 20, GPIO_AD_06, ADC1, 6, 0x00000005, 0x000010A0);
54-
const mcu_pin_obj_t pin_GPIO_AD_07 = PIN(GPIO1, 0, 21, GPIO_AD_07, ADC1, 7, 0x00000005, 0x000010A0);
55-
const mcu_pin_obj_t pin_GPIO_AD_08 = PIN(GPIO1, 0, 22, GPIO_AD_08, ADC1, 8, 0x00000007, 0x000070A0);
56-
const mcu_pin_obj_t pin_GPIO_AD_09 = PIN(GPIO1, 0, 23, GPIO_AD_09, ADC1, 9, 0x00000007, 0x000090B1);
57-
const mcu_pin_obj_t pin_GPIO_AD_10 = PIN(GPIO1, 0, 24, GPIO_AD_10, ADC1, 10, 0x00000007, 0x000070A0);
58-
const mcu_pin_obj_t pin_GPIO_AD_11 = PIN(GPIO1, 0, 25, GPIO_AD_11, ADC1, 11, 0x00000007, 0x000030A0);
59-
const mcu_pin_obj_t pin_GPIO_AD_12 = PIN(GPIO1, 0, 26, GPIO_AD_12, ADC1, 12, 0x00000007, 0x000030A0);
60-
const mcu_pin_obj_t pin_GPIO_AD_13 = PIN(GPIO1, 0, 27, GPIO_AD_13, ADC1, 13, 0x00000007, 0x000070A0);
61-
const mcu_pin_obj_t pin_GPIO_AD_14 = PIN(GPIO1, 0, 28, GPIO_AD_14, ADC1, 14, 0x00000005, 0x000010A0);
62-
63-
const mcu_pin_obj_t pin_GPIO_SD_00 = PIN(GPIO2, 1, 0, GPIO_SD_00, NO_ADC, 0, 0x00000005, 0x000010A0);
64-
const mcu_pin_obj_t pin_GPIO_SD_01 = PIN(GPIO2, 1, 1, GPIO_SD_01, NO_ADC, 0, 0x00000005, 0x000010A0);
65-
const mcu_pin_obj_t pin_GPIO_SD_02 = PIN(GPIO2, 1, 2, GPIO_SD_02, NO_ADC, 0, 0x00000005, 0x000010A0);
66-
const mcu_pin_obj_t pin_GPIO_SD_03 = PIN(GPIO2, 1, 3, GPIO_SD_03, NO_ADC, 0, 0x00000006, 0x000030A0);
67-
const mcu_pin_obj_t pin_GPIO_SD_04 = PIN(GPIO2, 1, 4, GPIO_SD_04, NO_ADC, 0, 0x00000006, 0x000030A0);
68-
const mcu_pin_obj_t pin_GPIO_SD_05 = PIN(GPIO2, 1, 5, GPIO_SD_05, NO_ADC, 0, 0x00000005, 0x000010A0);
69-
const mcu_pin_obj_t pin_GPIO_SD_06 = PIN(GPIO2, 1, 6, GPIO_SD_06, NO_ADC, 0, 0x00000005, 0x000010A0);
70-
const mcu_pin_obj_t pin_GPIO_SD_07 = PIN(GPIO2, 1, 7, GPIO_SD_07, NO_ADC, 0, 0x00000005, 0x000010A0);
71-
const mcu_pin_obj_t pin_GPIO_SD_08 = PIN(GPIO2, 1, 8, GPIO_SD_08, NO_ADC, 0, 0x00000005, 0x000010A0);
72-
const mcu_pin_obj_t pin_GPIO_SD_09 = PIN(GPIO2, 1, 9, GPIO_SD_09, NO_ADC, 0, 0x00000005, 0x000010A0);
73-
const mcu_pin_obj_t pin_GPIO_SD_10 = PIN(GPIO2, 1, 10, GPIO_SD_10, NO_ADC, 0, 0x00000005, 0x000010A0);
74-
const mcu_pin_obj_t pin_GPIO_SD_11 = PIN(GPIO2, 1, 11, GPIO_SD_11, NO_ADC, 0, 0x00000005, 0x000010A0);
75-
const mcu_pin_obj_t pin_GPIO_SD_12 = PIN(GPIO2, 1, 12, GPIO_SD_12, NO_ADC, 0, 0x00000005, 0x000010A0);
76-
const mcu_pin_obj_t pin_GPIO_SD_13 = PIN(GPIO2, 1, 13, GPIO_SD_13, NO_ADC, 0, 0x00000005, 0x000010A0);
77-
const mcu_pin_obj_t pin_GPIO_SD_14 = PIN(GPIO2, 1, 14, GPIO_SD_14, NO_ADC, 0, 0x00000000, 0x000010A0);
32+
const mcu_pin_obj_t pin_GPIO_00 = PIN(GPIO1, 0, GPIO_00, NO_ADC, 0, 0x00000005, 0x000010A0);
33+
const mcu_pin_obj_t pin_GPIO_01 = PIN(GPIO1, 1, GPIO_01, NO_ADC, 0, 0x00000005, 0x000010A0);
34+
const mcu_pin_obj_t pin_GPIO_02 = PIN(GPIO1, 2, GPIO_02, NO_ADC, 0, 0x00000005, 0x000010A0);
35+
const mcu_pin_obj_t pin_GPIO_03 = PIN(GPIO1, 3, GPIO_03, NO_ADC, 0, 0x00000005, 0x000010A0);
36+
const mcu_pin_obj_t pin_GPIO_04 = PIN(GPIO1, 4, GPIO_04, NO_ADC, 0, 0x00000005, 0x000010A0);
37+
const mcu_pin_obj_t pin_GPIO_05 = PIN(GPIO1, 5, GPIO_05, NO_ADC, 0, 0x00000005, 0x000010A0);
38+
const mcu_pin_obj_t pin_GPIO_06 = PIN(GPIO1, 6, GPIO_06, NO_ADC, 0, 0x00000005, 0x000010A0);
39+
const mcu_pin_obj_t pin_GPIO_07 = PIN(GPIO1, 7, GPIO_07, NO_ADC, 0, 0x00000005, 0x000010A0);
40+
const mcu_pin_obj_t pin_GPIO_08 = PIN(GPIO1, 8, GPIO_08, NO_ADC, 0, 0x00000005, 0x000010A0);
41+
const mcu_pin_obj_t pin_GPIO_09 = PIN(GPIO1, 9, GPIO_09, NO_ADC, 0, 0x00000005, 0x000010A0);
42+
const mcu_pin_obj_t pin_GPIO_10 = PIN(GPIO1, 10, GPIO_10, NO_ADC, 0, 0x00000005, 0x000010A0);
43+
const mcu_pin_obj_t pin_GPIO_11 = PIN(GPIO1, 11, GPIO_11, NO_ADC, 0, 0x00000005, 0x000010A0);
44+
const mcu_pin_obj_t pin_GPIO_12 = PIN(GPIO1, 12, GPIO_12, NO_ADC, 0, 0x00000005, 0x000010A0);
45+
const mcu_pin_obj_t pin_GPIO_13 = PIN(GPIO1, 13, GPIO_13, NO_ADC, 0, 0x00000005, 0x000010A0);
46+
const mcu_pin_obj_t pin_GPIO_AD_00 = PIN(GPIO1, 14, GPIO_AD_00, ADC1, 0, 0x00000005, 0x000010A0);
47+
const mcu_pin_obj_t pin_GPIO_AD_01 = PIN(GPIO1, 15, GPIO_AD_01, ADC1, 1, 0x00000005, 0x000010A0);
48+
const mcu_pin_obj_t pin_GPIO_AD_02 = PIN(GPIO1, 16, GPIO_AD_02, ADC1, 2, 0x00000005, 0x000010A0);
49+
const mcu_pin_obj_t pin_GPIO_AD_03 = PIN(GPIO1, 17, GPIO_AD_03, ADC1, 3, 0x00000005, 0x000010A0);
50+
const mcu_pin_obj_t pin_GPIO_AD_04 = PIN(GPIO1, 18, GPIO_AD_04, ADC1, 4, 0x00000005, 0x000010A0);
51+
const mcu_pin_obj_t pin_GPIO_AD_05 = PIN(GPIO1, 19, GPIO_AD_05, ADC1, 5, 0x00000005, 0x000010A0);
52+
const mcu_pin_obj_t pin_GPIO_AD_06 = PIN(GPIO1, 20, GPIO_AD_06, ADC1, 6, 0x00000005, 0x000010A0);
53+
const mcu_pin_obj_t pin_GPIO_AD_07 = PIN(GPIO1, 21, GPIO_AD_07, ADC1, 7, 0x00000005, 0x000010A0);
54+
const mcu_pin_obj_t pin_GPIO_AD_08 = PIN(GPIO1, 22, GPIO_AD_08, ADC1, 8, 0x00000007, 0x000070A0);
55+
const mcu_pin_obj_t pin_GPIO_AD_09 = PIN(GPIO1, 23, GPIO_AD_09, ADC1, 9, 0x00000007, 0x000090B1);
56+
const mcu_pin_obj_t pin_GPIO_AD_10 = PIN(GPIO1, 24, GPIO_AD_10, ADC1, 10, 0x00000007, 0x000070A0);
57+
const mcu_pin_obj_t pin_GPIO_AD_11 = PIN(GPIO1, 25, GPIO_AD_11, ADC1, 11, 0x00000007, 0x000030A0);
58+
const mcu_pin_obj_t pin_GPIO_AD_12 = PIN(GPIO1, 26, GPIO_AD_12, ADC1, 12, 0x00000007, 0x000030A0);
59+
const mcu_pin_obj_t pin_GPIO_AD_13 = PIN(GPIO1, 27, GPIO_AD_13, ADC1, 13, 0x00000007, 0x000070A0);
60+
const mcu_pin_obj_t pin_GPIO_AD_14 = PIN(GPIO1, 28, GPIO_AD_14, ADC1, 14, 0x00000005, 0x000010A0);
61+
const mcu_pin_obj_t pin_GPIO_SD_00 = PIN(GPIO2, 0, GPIO_SD_00, NO_ADC, 0, 0x00000005, 0x000010A0);
62+
const mcu_pin_obj_t pin_GPIO_SD_01 = PIN(GPIO2, 1, GPIO_SD_01, NO_ADC, 0, 0x00000005, 0x000010A0);
63+
const mcu_pin_obj_t pin_GPIO_SD_02 = PIN(GPIO2, 2, GPIO_SD_02, NO_ADC, 0, 0x00000005, 0x000010A0);
64+
const mcu_pin_obj_t pin_GPIO_SD_03 = PIN(GPIO2, 3, GPIO_SD_03, NO_ADC, 0, 0x00000006, 0x000030A0);
65+
const mcu_pin_obj_t pin_GPIO_SD_04 = PIN(GPIO2, 4, GPIO_SD_04, NO_ADC, 0, 0x00000006, 0x000030A0);
66+
const mcu_pin_obj_t pin_GPIO_SD_05 = PIN(GPIO2, 5, GPIO_SD_05, NO_ADC, 0, 0x00000005, 0x000010A0);
67+
const mcu_pin_obj_t pin_GPIO_SD_06 = PIN(GPIO2, 6, GPIO_SD_06, NO_ADC, 0, 0x00000005, 0x000010A0);
68+
const mcu_pin_obj_t pin_GPIO_SD_07 = PIN(GPIO2, 7, GPIO_SD_07, NO_ADC, 0, 0x00000005, 0x000010A0);
69+
const mcu_pin_obj_t pin_GPIO_SD_08 = PIN(GPIO2, 8, GPIO_SD_08, NO_ADC, 0, 0x00000005, 0x000010A0);
70+
const mcu_pin_obj_t pin_GPIO_SD_09 = PIN(GPIO2, 9, GPIO_SD_09, NO_ADC, 0, 0x00000005, 0x000010A0);
71+
const mcu_pin_obj_t pin_GPIO_SD_10 = PIN(GPIO2, 10, GPIO_SD_10, NO_ADC, 0, 0x00000005, 0x000010A0);
72+
const mcu_pin_obj_t pin_GPIO_SD_11 = PIN(GPIO2, 11, GPIO_SD_11, NO_ADC, 0, 0x00000005, 0x000010A0);
73+
const mcu_pin_obj_t pin_GPIO_SD_12 = PIN(GPIO2, 12, GPIO_SD_12, NO_ADC, 0, 0x00000005, 0x000010A0);
74+
const mcu_pin_obj_t pin_GPIO_SD_13 = PIN(GPIO2, 13, GPIO_SD_13, NO_ADC, 0, 0x00000005, 0x000010A0);
75+
const mcu_pin_obj_t pin_GPIO_SD_14 = PIN(GPIO2, 14, GPIO_SD_14, NO_ADC, 0, 0x00000000, 0x000010A0);
7876
// pin_GPIO_SD_14 isn't actually used as a pad but we include it anyway to make resetting easier

0 commit comments

Comments
 (0)