Skip to content

Commit 23b23dd

Browse files
authored
Merge pull request #1158 from dhalbert/nrf-pin-claiming
nrf: rework of pin files; add new boards; add pin claiming
2 parents a0872e8 + 100603a commit 23b23dd

File tree

70 files changed

+1312
-425
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+1312
-425
lines changed

conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,9 @@
115115
"ports/minimal",
116116
"ports/nrf/device",
117117
"ports/nrf/drivers",
118-
"ports/nrf/hal",
119118
"ports/nrf/modules",
120119
"ports/nrf/nrfx",
120+
"ports/nrf/peripherals",
121121
"ports/nrf/usb",
122122
"ports/pic16bit",
123123
"ports/qemu-arm",

main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ void NORETURN __fatal_error(const char *msg) {
451451

452452
#ifndef NDEBUG
453453
void MP_WEAK __assert_func(const char *file, int line, const char *func, const char *expr) {
454-
printf("Assertion '%s' failed, at file %s:%d\n", expr, file, line);
454+
mp_printf(&mp_plat_print, "Assertion '%s' failed, at file %s:%d\n", expr, file, line);
455455
__fatal_error("Assertion failed");
456456
}
457457
#endif

ports/atmel-samd/boards/circuitplayground_express/board.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ bool board_requests_safe_mode(void) {
4848
gpio_set_pin_pull_mode(PIN_PA28, GPIO_PULL_DOWN);
4949
bool safe_mode = gpio_get_pin_level(PIN_PA14) &&
5050
gpio_get_pin_level(PIN_PA28);
51-
reset_pin(PIN_PA14);
52-
reset_pin(PIN_PA28);
51+
reset_pin_number(PIN_PA14);
52+
reset_pin_number(PIN_PA28);
5353
return safe_mode;
5454
}
5555

ports/atmel-samd/boards/circuitplayground_express_crickit/board.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ bool board_requests_safe_mode(void) {
4848
gpio_set_pin_pull_mode(PIN_PA28, GPIO_PULL_DOWN);
4949
bool safe_mode = gpio_get_pin_level(PIN_PA14) &&
5050
gpio_get_pin_level(PIN_PA28);
51-
reset_pin(PIN_PA14);
52-
reset_pin(PIN_PA28);
51+
reset_pin_number(PIN_PA14);
52+
reset_pin_number(PIN_PA28);
5353
return safe_mode;
5454
}
5555

ports/atmel-samd/boards/gemma_m0/pins.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
2121

2222
{ MP_ROM_QSTR(MP_QSTR_APA102_MOSI), MP_ROM_PTR(&pin_PA00) },
2323
{ MP_ROM_QSTR(MP_QSTR_APA102_SCK), MP_ROM_PTR(&pin_PA01) },
24+
2425
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
2526
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
2627
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },

ports/atmel-samd/common-hal/analogio/AnalogIn.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
8080
if (common_hal_analogio_analogin_deinited(self)) {
8181
return;
8282
}
83-
reset_pin(self->pin->number);
83+
reset_pin_number(self->pin->number);
8484
self->pin = mp_const_none;
8585
}
8686

ports/atmel-samd/common-hal/analogio/AnalogOut.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void common_hal_analogio_analogout_deinit(analogio_analogout_obj_t *self) {
113113
return;
114114
}
115115
dac_sync_disable_channel(&self->descriptor, self->channel);
116-
reset_pin(PIN_PA02);
116+
reset_pin_number(PIN_PA02);
117117
// Only deinit the DAC on the SAMD51 if both outputs are free.
118118
#ifdef SAMD51
119119
if (common_hal_mcu_pin_is_free(&pin_PA02) && common_hal_mcu_pin_is_free(&pin_PA05)) {

ports/atmel-samd/common-hal/audiobusio/I2SOut.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,11 @@ void common_hal_audiobusio_i2sout_deinit(audiobusio_i2sout_obj_t* self) {
212212
return;
213213
}
214214

215-
reset_pin(self->bit_clock->number);
215+
reset_pin_number(self->bit_clock->number);
216216
self->bit_clock = mp_const_none;
217-
reset_pin(self->word_select->number);
217+
reset_pin_number(self->word_select->number);
218218
self->word_select = mp_const_none;
219-
reset_pin(self->data->number);
219+
reset_pin_number(self->data->number);
220220
self->data = mp_const_none;
221221
}
222222

ports/atmel-samd/common-hal/audiobusio/PDMIn.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,8 @@ void common_hal_audiobusio_pdmin_deinit(audiobusio_pdmin_obj_t* self) {
235235
disconnect_gclk_from_peripheral(self->gclk, I2S_GCLK_ID_0 + self->clock_unit);
236236
disable_clock_generator(self->gclk);
237237

238-
reset_pin(self->clock_pin->number);
239-
reset_pin(self->data_pin->number);
238+
reset_pin_number(self->clock_pin->number);
239+
reset_pin_number(self->data_pin->number);
240240
self->clock_pin = mp_const_none;
241241
self->data_pin = mp_const_none;
242242
}

ports/atmel-samd/common-hal/audioio/AudioOut.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,10 @@ void common_hal_audioio_audioout_deinit(audioio_audioout_obj_t* self) {
248248

249249
tc_set_enable(tc_insts[self->tc_index], false);
250250

251-
reset_pin(self->left_channel->number);
251+
reset_pin_number(self->left_channel->number);
252252
self->left_channel = mp_const_none;
253253
#ifdef SAMD51
254-
reset_pin(self->right_channel->number);
254+
reset_pin_number(self->right_channel->number);
255255
self->right_channel = mp_const_none;
256256
#endif
257257
}

ports/atmel-samd/common-hal/busio/I2C.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
9696
common_hal_mcu_delay_us(3);
9797

9898
if (!gpio_get_pin_level(sda->number) || !gpio_get_pin_level(scl->number)) {
99-
reset_pin(sda->number);
100-
reset_pin(scl->number);
99+
reset_pin_number(sda->number);
100+
reset_pin_number(scl->number);
101101
mp_raise_RuntimeError(translate("SDA or SCL needs a pull up"));
102102
}
103103
gpio_set_pin_function(sda->number, sda_pinmux);
@@ -107,17 +107,17 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
107107
samd_peripherals_sercom_clock_init(sercom, sercom_index);
108108

109109
if (i2c_m_sync_init(&self->i2c_desc, sercom) != ERR_NONE) {
110-
reset_pin(sda->number);
111-
reset_pin(scl->number);
110+
reset_pin_number(sda->number);
111+
reset_pin_number(scl->number);
112112
mp_raise_OSError(MP_EIO);
113113
}
114114

115115
// clkrate is always 0. baud_rate is in kHz.
116116

117117
// Frequency must be set before the I2C device is enabled.
118118
if (i2c_m_sync_set_baudrate(&self->i2c_desc, 0, frequency / 1000) != ERR_NONE) {
119-
reset_pin(sda->number);
120-
reset_pin(scl->number);
119+
reset_pin_number(sda->number);
120+
reset_pin_number(scl->number);
121121
mp_raise_ValueError(translate("Unsupported baudrate"));
122122
}
123123

@@ -144,8 +144,8 @@ void common_hal_busio_i2c_deinit(busio_i2c_obj_t *self) {
144144
i2c_m_sync_disable(&self->i2c_desc);
145145
i2c_m_sync_deinit(&self->i2c_desc);
146146

147-
reset_pin(self->sda_pin);
148-
reset_pin(self->scl_pin);
147+
reset_pin_number(self->sda_pin);
148+
reset_pin_number(self->scl_pin);
149149
self->sda_pin = NO_PIN;
150150
self->scl_pin = NO_PIN;
151151
}

ports/atmel-samd/common-hal/busio/I2C.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
typedef struct {
3737
mp_obj_base_t base;
3838
struct i2c_m_sync_desc i2c_desc;
39-
volatile bool has_lock;
39+
bool has_lock;
4040
uint8_t scl_pin;
4141
uint8_t sda_pin;
4242
} busio_i2c_obj_t;

ports/atmel-samd/common-hal/busio/SPI.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,9 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
196196
}
197197
spi_m_sync_disable(&self->spi_desc);
198198
spi_m_sync_deinit(&self->spi_desc);
199-
reset_pin(self->clock_pin);
200-
reset_pin(self->MOSI_pin);
201-
reset_pin(self->MISO_pin);
199+
reset_pin_number(self->clock_pin);
200+
reset_pin_number(self->MOSI_pin);
201+
reset_pin_number(self->MISO_pin);
202202
self->clock_pin = NO_PIN;
203203
}
204204

ports/atmel-samd/common-hal/busio/UART.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
222222
struct usart_async_descriptor * const usart_desc_p = (struct usart_async_descriptor * const) &self->usart_desc;
223223
usart_async_disable(usart_desc_p);
224224
usart_async_deinit(usart_desc_p);
225-
reset_pin(self->rx_pin);
226-
reset_pin(self->tx_pin);
225+
reset_pin_number(self->rx_pin);
226+
reset_pin_number(self->tx_pin);
227227
self->rx_pin = NO_PIN;
228228
self->tx_pin = NO_PIN;
229229
}

ports/atmel-samd/common-hal/digitalio/DigitalInOut.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct(
4040
digitalio_digitalinout_obj_t* self, const mcu_pin_obj_t* pin) {
4141
claim_pin(pin);
4242
self->pin = pin;
43+
self->output = false;
44+
self->open_drain = false;
4345

4446
// Must set pull after setting direction.
4547
gpio_set_pin_direction(pin->number, GPIO_DIRECTION_IN);
@@ -55,7 +57,7 @@ void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t* self
5557
if (common_hal_digitalio_digitalinout_deinited(self)) {
5658
return;
5759
}
58-
reset_pin(self->pin->number);
60+
reset_pin_number(self->pin->number);
5961
self->pin = mp_const_none;
6062
}
6163

@@ -83,7 +85,7 @@ void common_hal_digitalio_digitalinout_switch_to_output(
8385

8486
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
8587
digitalio_digitalinout_obj_t* self) {
86-
return self->output? DIRECTION_OUTPUT : DIRECTION_INPUT;
88+
return self->output ? DIRECTION_OUTPUT : DIRECTION_INPUT;
8789
}
8890

8991
void common_hal_digitalio_digitalinout_set_value(

ports/atmel-samd/common-hal/i2cslave/I2CSlave.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ void common_hal_i2cslave_i2c_slave_deinit(i2cslave_i2c_slave_obj_t *self) {
105105

106106
self->sercom->I2CS.CTRLA.bit.ENABLE = 0;
107107

108-
reset_pin(self->sda_pin);
109-
reset_pin(self->scl_pin);
108+
reset_pin_number(self->sda_pin);
109+
reset_pin_number(self->scl_pin);
110110
self->sda_pin = NO_PIN;
111111
self->scl_pin = NO_PIN;
112112
}

ports/atmel-samd/common-hal/microcontroller/Pin.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,48 +91,48 @@ void reset_all_pins(void) {
9191
#endif
9292
}
9393

94-
void reset_pin(uint8_t pin) {
95-
if (pin >= PORT_BITS) {
94+
void reset_pin_number(uint8_t pin_number) {
95+
if (pin_number >= PORT_BITS) {
9696
return;
9797
}
9898

9999
#ifdef MICROPY_HW_NEOPIXEL
100-
if (pin == MICROPY_HW_NEOPIXEL->number) {
100+
if (pin_number == MICROPY_HW_NEOPIXEL->number) {
101101
neopixel_in_use = false;
102102
rgb_led_status_init();
103103
return;
104104
}
105105
#endif
106106
#ifdef MICROPY_HW_APA102_MOSI
107-
if (pin == MICROPY_HW_APA102_MOSI->number ||
108-
pin == MICROPY_HW_APA102_SCK->number) {
109-
apa102_mosi_in_use = apa102_mosi_in_use && pin != MICROPY_HW_APA102_MOSI->number;
110-
apa102_sck_in_use = apa102_sck_in_use && pin != MICROPY_HW_APA102_SCK->number;
107+
if (pin_number == MICROPY_HW_APA102_MOSI->number ||
108+
pin_number == MICROPY_HW_APA102_SCK->number) {
109+
apa102_mosi_in_use = apa102_mosi_in_use && pin_number != MICROPY_HW_APA102_MOSI->number;
110+
apa102_sck_in_use = apa102_sck_in_use && pin_number != MICROPY_HW_APA102_SCK->number;
111111
if (!apa102_sck_in_use && !apa102_mosi_in_use) {
112112
rgb_led_status_init();
113113
}
114114
return;
115115
}
116116
#endif
117117

118-
if (pin == PIN_PA30
118+
if (pin_number == PIN_PA30
119119
#ifdef SAMD51
120120
) {
121-
gpio_set_pin_function(pin, GPIO_PIN_FUNCTION_H);
121+
gpio_set_pin_function(pin_number, GPIO_PIN_FUNCTION_H);
122122
#endif
123123
#ifdef SAMD21
124-
|| pin == PIN_PA31) {
125-
gpio_set_pin_function(pin, GPIO_PIN_FUNCTION_G);
124+
|| pin_number == PIN_PA31) {
125+
gpio_set_pin_function(pin_number, GPIO_PIN_FUNCTION_G);
126126
#endif
127127
} else {
128-
gpio_set_pin_direction(pin, GPIO_DIRECTION_OFF);
129-
gpio_set_pin_function(pin, GPIO_PIN_FUNCTION_OFF);
128+
gpio_set_pin_direction(pin_number, GPIO_DIRECTION_OFF);
129+
gpio_set_pin_function(pin_number, GPIO_PIN_FUNCTION_OFF);
130130
}
131131

132132
#ifdef SPEAKER_ENABLE_PIN
133-
if (pin == SPEAKER_ENABLE_PIN->number) {
133+
if (pin_number == SPEAKER_ENABLE_PIN->number) {
134134
speaker_enable_in_use = false;
135-
gpio_set_pin_function(pin, GPIO_PIN_FUNCTION_OFF);
135+
gpio_set_pin_function(pin_number, GPIO_PIN_FUNCTION_OFF);
136136
gpio_set_pin_direction(SPEAKER_ENABLE_PIN->number, GPIO_DIRECTION_OUT);
137137
gpio_set_pin_level(SPEAKER_ENABLE_PIN->number, false);
138138
}

ports/atmel-samd/common-hal/microcontroller/Pin.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ extern bool apa102_mosi_in_use;
4040
#endif
4141

4242
void reset_all_pins(void);
43-
// reset_pin takes the pin number instead of the pointer so that objects don't
43+
// reset_pin_number takes the pin number instead of the pointer so that objects don't
4444
// need to store a full pointer.
45-
void reset_pin(uint8_t pin);
45+
void reset_pin_number(uint8_t pin_number);
4646
void claim_pin(const mcu_pin_obj_t* pin);
4747

4848
#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_MICROCONTROLLER_PIN_H

ports/atmel-samd/common-hal/pulseio/PWMOut.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self) {
285285
}
286286
}
287287
}
288-
reset_pin(self->pin->number);
288+
reset_pin_number(self->pin->number);
289289
self->pin = mp_const_none;
290290
}
291291

ports/atmel-samd/common-hal/pulseio/PulseIn.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t* self,
139139

140140
turn_on_cpu_interrupt(self->channel);
141141

142+
claim_pin(pin);
143+
142144
// Set config will enable the EIC.
143145
pulsein_set_config(self, true);
144146
}
@@ -152,7 +154,7 @@ void common_hal_pulseio_pulsein_deinit(pulseio_pulsein_obj_t* self) {
152154
return;
153155
}
154156
turn_off_eic_channel(self->channel);
155-
reset_pin(self->pin);
157+
reset_pin_number(self->pin);
156158
self->pin = NO_PIN;
157159
}
158160

ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ void common_hal_rotaryio_incrementalencoder_construct(rotaryio_incrementalencode
7373
((uint8_t) gpio_get_pin_level(self->pin_a) << 1) |
7474
(uint8_t) gpio_get_pin_level(self->pin_b);
7575

76+
claim_pin(pin_a);
77+
claim_pin(pin_b);
78+
7679
turn_on_eic_channel(self->eic_channel_a, EIC_CONFIG_SENSE0_BOTH_Val, EIC_HANDLER_INCREMENTAL_ENCODER);
7780
turn_on_eic_channel(self->eic_channel_b, EIC_CONFIG_SENSE0_BOTH_Val, EIC_HANDLER_INCREMENTAL_ENCODER);
7881
}
@@ -87,9 +90,9 @@ void common_hal_rotaryio_incrementalencoder_deinit(rotaryio_incrementalencoder_o
8790
}
8891
turn_off_eic_channel(self->eic_channel_a);
8992
turn_off_eic_channel(self->eic_channel_b);
90-
reset_pin(self->pin_a);
93+
reset_pin_number(self->pin_a);
9194
self->pin_a = NO_PIN;
92-
reset_pin(self->pin_b);
95+
reset_pin_number(self->pin_b);
9396
self->pin_b = NO_PIN;
9497
}
9598

ports/atmel-samd/common-hal/touchio/TouchIn.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ void common_hal_touchio_touchin_deinit(touchio_touchin_obj_t* self) {
110110
}
111111
// We leave the clocks running because they may be in use by others.
112112

113-
reset_pin(self->config.pin);
113+
reset_pin_number(self->config.pin);
114114
self->config.pin = NO_PIN;
115115
}
116116

0 commit comments

Comments
 (0)