48
48
#define NO_DMA_CHANNEL (-1)
49
49
50
50
// Count how many state machines are using each pin.
51
- STATIC uint8_t _pin_reference_count [TOTAL_GPIO_COUNT ];
51
+ STATIC uint8_t _pin_reference_count [NUM_BANK0_GPIOS ];
52
52
STATIC uint32_t _current_program_id [NUM_PIOS ][NUM_PIO_STATE_MACHINES ];
53
53
STATIC uint8_t _current_program_offset [NUM_PIOS ][NUM_PIO_STATE_MACHINES ];
54
54
STATIC uint8_t _current_program_len [NUM_PIOS ][NUM_PIO_STATE_MACHINES ];
@@ -71,7 +71,7 @@ STATIC void *_interrupt_arg[NUM_PIOS][NUM_PIO_STATE_MACHINES];
71
71
STATIC void rp2pio_statemachine_interrupt_handler (void );
72
72
73
73
static void rp2pio_statemachine_set_pull (uint32_t pull_pin_up , uint32_t pull_pin_down , uint32_t pins_we_use ) {
74
- for (size_t i = 0 ; i < TOTAL_GPIO_COUNT ; i ++ ) {
74
+ for (size_t i = 0 ; i < NUM_BANK0_GPIOS ; i ++ ) {
75
75
bool used = pins_we_use & (1 << i );
76
76
if (used ) {
77
77
bool pull_up = pull_pin_up & (1 << i );
@@ -120,7 +120,7 @@ STATIC void _reset_statemachine(PIO pio, uint8_t sm, bool leave_pins) {
120
120
}
121
121
122
122
uint32_t pins = _current_sm_pins [pio_index ][sm ];
123
- for (size_t pin_number = 0 ; pin_number < TOTAL_GPIO_COUNT ; pin_number ++ ) {
123
+ for (size_t pin_number = 0 ; pin_number < NUM_BANK0_GPIOS ; pin_number ++ ) {
124
124
if ((pins & (1 << pin_number )) == 0 ) {
125
125
continue ;
126
126
}
@@ -161,10 +161,14 @@ STATIC uint32_t _check_pins_free(const mcu_pin_obj_t *first_pin, uint8_t pin_cou
161
161
if (first_pin != NULL ) {
162
162
for (size_t i = 0 ; i < pin_count ; i ++ ) {
163
163
uint8_t pin_number = first_pin -> number + i ;
164
- if (pin_number >= TOTAL_GPIO_COUNT ) {
164
+ if (pin_number >= NUM_BANK0_GPIOS ) {
165
165
mp_raise_ValueError (translate ("Pin count too large" ));
166
166
}
167
- const mcu_pin_obj_t * pin = mcu_pin_global_dict_table [pin_number ].value ;
167
+ const mcu_pin_obj_t * pin = mcu_get_pin_by_number (pin_number );
168
+ if (!pin ) {
169
+ mp_raise_ValueError_varg (translate ("%q in use" ), MP_QSTR_Pin );
170
+ }
171
+
168
172
if (exclusive_pin_use || _pin_reference_count [pin_number ] == 0 ) {
169
173
assert_pin_free (pin );
170
174
}
@@ -269,12 +273,15 @@ bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self,
269
273
self -> pull_pin_up = pull_pin_up ;
270
274
self -> pull_pin_down = pull_pin_down ;
271
275
272
- for (size_t pin_number = 0 ; pin_number < TOTAL_GPIO_COUNT ; pin_number ++ ) {
276
+ for (size_t pin_number = 0 ; pin_number < NUM_BANK0_GPIOS ; pin_number ++ ) {
273
277
if ((pins_we_use & (1 << pin_number )) == 0 ) {
274
278
continue ;
275
279
}
280
+ const mcu_pin_obj_t * pin = mcu_get_pin_by_number (pin_number );
281
+ if (!pin ) {
282
+ return false;
283
+ }
276
284
_pin_reference_count [pin_number ]++ ;
277
- const mcu_pin_obj_t * pin = mcu_pin_global_dict_table [pin_number ].value ;
278
285
// Also claim the pin at the top level when we're the first to grab it.
279
286
if (_pin_reference_count [pin_number ] == 1 ) {
280
287
if (claim_pins ) {
0 commit comments