Skip to content

Commit c1f731d

Browse files
committed
Claim USB pins at startup to prevent overwrites
1 parent e232ec1 commit c1f731d

File tree

13 files changed

+35
-32
lines changed

13 files changed

+35
-32
lines changed

ports/stm/common-hal/analogio/AnalogIn.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
#include "py/runtime.h"
3030
#include "supervisor/shared/translate.h"
3131

32-
#include "common-hal/microcontroller/Pin.h"
32+
#include "shared-bindings/microcontroller/Pin.h"
3333

3434
#include "stm32f4xx_hal.h"
3535
#include "stm32f4xx_ll_gpio.h"
@@ -57,7 +57,7 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t* self,
5757
} else {
5858
mp_raise_ValueError(translate("Invalid ADC Unit value"));
5959
}
60-
claim_pin(pin);
60+
common_hal_mcu_pin_claim(pin);
6161
self->pin = pin;
6262
}
6363

ports/stm/common-hal/analogio/AnalogOut.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void common_hal_analogio_analogout_construct(analogio_analogout_obj_t* self,
8686

8787
dac_on[self->dac_index] = true;
8888
self->pin = pin;
89-
claim_pin(pin);
89+
common_hal_mcu_pin_claim(pin);
9090
#endif
9191
}
9292

ports/stm/common-hal/busio/I2C.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
#include "shared-bindings/microcontroller/__init__.h"
3434
#include "supervisor/shared/translate.h"
35-
#include "common-hal/microcontroller/Pin.h"
35+
#include "shared-bindings/microcontroller/Pin.h"
3636

3737
// I2C timing specs for the H7 and F7
3838
// Configured for maximum possible clock settings for the family
@@ -161,8 +161,8 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
161161
if (HAL_I2C_Init(&(self->handle)) != HAL_OK) {
162162
mp_raise_RuntimeError(translate("I2C Init Error"));
163163
}
164-
claim_pin(sda);
165-
claim_pin(scl);
164+
common_hal_mcu_pin_claim(sda);
165+
common_hal_mcu_pin_claim(scl);
166166
}
167167

168168
void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) {

ports/stm/common-hal/busio/SPI.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#include "shared-bindings/microcontroller/__init__.h"
3434
#include "boards/board.h"
3535
#include "supervisor/shared/translate.h"
36-
#include "common-hal/microcontroller/Pin.h"
36+
#include "shared-bindings/microcontroller/Pin.h"
3737

3838
// Note that any bugs introduced in this file can cause crashes at startup
3939
// for chips using external SPI flash.
@@ -233,12 +233,12 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
233233
self->phase = 0;
234234
self->bits = 8;
235235

236-
claim_pin(sck);
236+
common_hal_mcu_pin_claim(sck);
237237
if (self->mosi != NULL) {
238-
claim_pin(mosi);
238+
common_hal_mcu_pin_claim(mosi);
239239
}
240240
if (self->miso != NULL) {
241-
claim_pin(miso);
241+
common_hal_mcu_pin_claim(miso);
242242
}
243243
}
244244

ports/stm/common-hal/busio/UART.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
*/
2626

2727
#include "shared-bindings/microcontroller/__init__.h"
28+
#include "shared-bindings/microcontroller/Pin.h"
2829
#include "shared-bindings/busio/UART.h"
2930

3031
#include "mpconfigport.h"
@@ -224,10 +225,10 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
224225
mp_raise_ValueError(translate("UART Buffer allocation error"));
225226
}
226227
}
227-
claim_pin(rx);
228+
common_hal_mcu_pin_claim(rx);
228229
}
229230
if (self->tx != NULL) {
230-
claim_pin(tx);
231+
common_hal_mcu_pin_claim(tx);
231232
}
232233
self->baudrate = baudrate;
233234
self->timeout_ms = timeout * 1000;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*/
2727

2828
#include "shared-bindings/digitalio/DigitalInOut.h"
29+
#include "shared-bindings/microcontroller/Pin.h"
2930
#include "py/runtime.h"
3031
#include "supervisor/shared/translate.h"
3132

@@ -46,7 +47,7 @@ void common_hal_digitalio_digitalinout_never_reset(
4647
digitalinout_result_t common_hal_digitalio_digitalinout_construct(
4748
digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) {
4849

49-
claim_pin(pin);
50+
common_hal_mcu_pin_claim(pin);
5051
self->pin = pin;
5152

5253
GPIO_InitTypeDef GPIO_InitStruct = {0};

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

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -101,25 +101,15 @@ void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
101101
reset_pin_number(pin->port, pin->number);
102102
}
103103

104-
void claim_pin(const mcu_pin_obj_t* pin) {
104+
void claim_pin(uint8_t pin_port, uint8_t pin_number) {
105105
// Set bit in claimed_pins bitmask.
106-
claimed_pins[pin->port] |= 1<<pin->number;
107-
108-
#ifdef MICROPY_HW_NEOPIXEL
109-
if (pin == MICROPY_HW_NEOPIXEL) {
110-
neopixel_in_use = true;
111-
}
112-
#endif
106+
claimed_pins[pin_port] |= 1<<pin_number;
113107
}
114108

115109
bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number) {
116110
return !(claimed_pins[pin_port] & 1<<pin_number);
117111
}
118112

119-
bool pin_number_is_resettable(uint8_t pin_port, uint8_t pin_number) {
120-
return !(never_reset_pins[pin_port] & 1<<pin_number);
121-
}
122-
123113
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
124114
#ifdef MICROPY_HW_NEOPIXEL
125115
if (pin == MICROPY_HW_NEOPIXEL) {
@@ -143,7 +133,12 @@ uint8_t common_hal_mcu_pin_number(const mcu_pin_obj_t* pin) {
143133
}
144134

145135
void common_hal_mcu_pin_claim(const mcu_pin_obj_t* pin) {
146-
claim_pin(pin);
136+
claim_pin(pin->port, pin->number);
137+
#ifdef MICROPY_HW_NEOPIXEL
138+
if (pin == MICROPY_HW_NEOPIXEL) {
139+
neopixel_in_use = true;
140+
}
141+
#endif
147142
}
148143

149144
void common_hal_mcu_pin_reset_number(uint8_t pin_no) {

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,8 @@ void reset_all_pins(void);
4343
// reset_pin_number takes the pin number instead of the pointer so that objects don't
4444
// need to store a full pointer.
4545
void reset_pin_number(uint8_t pin_port, uint8_t pin_number);
46-
void claim_pin(const mcu_pin_obj_t* pin);
46+
void claim_pin(uint8_t pin_port, uint8_t pin_number);
4747
bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number);
48-
bool pin_number_is_resettable(uint8_t pin_port, uint8_t pin_number)
4948
void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number);
5049
GPIO_TypeDef * pin_port(uint8_t pin_port);
5150
uint16_t pin_mask(uint8_t pin_number);

ports/stm/common-hal/pulseio/PWMOut.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
#include "shared-bindings/microcontroller/__init__.h"
3535
#include STM32_HAL_H
36-
#include "common-hal/microcontroller/Pin.h"
36+
#include "shared-bindings/microcontroller/Pin.h"
3737

3838
#include "timers.h"
3939

ports/stm/common-hal/pulseio/PulseIn.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "py/gc.h"
3232
#include "py/runtime.h"
3333
#include "shared-bindings/microcontroller/__init__.h"
34+
#include "shared-bindings/microcontroller/Pin.h"
3435
#include "shared-bindings/pulseio/PulseIn.h"
3536
#include "timers.h"
3637

@@ -174,7 +175,7 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t* self, const mcu
174175
// Interrupt starts immediately
175176
assign_EXTI_Interrupt(self, pin->number);
176177
HAL_NVIC_EnableIRQ(self->irq);
177-
claim_pin(pin);
178+
common_hal_mcu_pin_claim(pin);
178179
}
179180

180181
bool common_hal_pulseio_pulsein_deinited(pulseio_pulsein_obj_t* self) {

0 commit comments

Comments
 (0)