Skip to content

nrf: rework of pin files; add new boards; add pin claiming #1158

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Sep 5, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,9 @@
"ports/minimal",
"ports/nrf/device",
"ports/nrf/drivers",
"ports/nrf/hal",
"ports/nrf/modules",
"ports/nrf/nrfx",
"ports/nrf/peripherals",
"ports/nrf/usb",
"ports/pic16bit",
"ports/qemu-arm",
Expand Down
2 changes: 1 addition & 1 deletion main.c
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ void NORETURN __fatal_error(const char *msg) {

#ifndef NDEBUG
void MP_WEAK __assert_func(const char *file, int line, const char *func, const char *expr) {
printf("Assertion '%s' failed, at file %s:%d\n", expr, file, line);
mp_printf(&mp_plat_print, "Assertion '%s' failed, at file %s:%d\n", expr, file, line);
__fatal_error("Assertion failed");
}
#endif
4 changes: 2 additions & 2 deletions ports/atmel-samd/boards/circuitplayground_express/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ bool board_requests_safe_mode(void) {
gpio_set_pin_pull_mode(PIN_PA28, GPIO_PULL_DOWN);
bool safe_mode = gpio_get_pin_level(PIN_PA14) &&
gpio_get_pin_level(PIN_PA28);
reset_pin(PIN_PA14);
reset_pin(PIN_PA28);
reset_pin_number(PIN_PA14);
reset_pin_number(PIN_PA28);
return safe_mode;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ bool board_requests_safe_mode(void) {
gpio_set_pin_pull_mode(PIN_PA28, GPIO_PULL_DOWN);
bool safe_mode = gpio_get_pin_level(PIN_PA14) &&
gpio_get_pin_level(PIN_PA28);
reset_pin(PIN_PA14);
reset_pin(PIN_PA28);
reset_pin_number(PIN_PA14);
reset_pin_number(PIN_PA28);
return safe_mode;
}

Expand Down
1 change: 1 addition & 0 deletions ports/atmel-samd/boards/gemma_m0/pins.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {

{ MP_ROM_QSTR(MP_QSTR_APA102_MOSI), MP_ROM_PTR(&pin_PA00) },
{ MP_ROM_QSTR(MP_QSTR_APA102_SCK), MP_ROM_PTR(&pin_PA01) },

{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
Expand Down
2 changes: 1 addition & 1 deletion ports/atmel-samd/common-hal/analogio/AnalogIn.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
if (common_hal_analogio_analogin_deinited(self)) {
return;
}
reset_pin(self->pin->number);
reset_pin_number(self->pin->number);
self->pin = mp_const_none;
}

Expand Down
2 changes: 1 addition & 1 deletion ports/atmel-samd/common-hal/analogio/AnalogOut.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ void common_hal_analogio_analogout_deinit(analogio_analogout_obj_t *self) {
return;
}
dac_sync_disable_channel(&self->descriptor, self->channel);
reset_pin(PIN_PA02);
reset_pin_number(PIN_PA02);
// Only deinit the DAC on the SAMD51 if both outputs are free.
#ifdef SAMD51
if (common_hal_mcu_pin_is_free(&pin_PA02) && common_hal_mcu_pin_is_free(&pin_PA05)) {
Expand Down
6 changes: 3 additions & 3 deletions ports/atmel-samd/common-hal/audiobusio/I2SOut.c
Original file line number Diff line number Diff line change
Expand Up @@ -212,11 +212,11 @@ void common_hal_audiobusio_i2sout_deinit(audiobusio_i2sout_obj_t* self) {
return;
}

reset_pin(self->bit_clock->number);
reset_pin_number(self->bit_clock->number);
self->bit_clock = mp_const_none;
reset_pin(self->word_select->number);
reset_pin_number(self->word_select->number);
self->word_select = mp_const_none;
reset_pin(self->data->number);
reset_pin_number(self->data->number);
self->data = mp_const_none;
}

Expand Down
4 changes: 2 additions & 2 deletions ports/atmel-samd/common-hal/audiobusio/PDMIn.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,8 @@ void common_hal_audiobusio_pdmin_deinit(audiobusio_pdmin_obj_t* self) {
disconnect_gclk_from_peripheral(self->gclk, I2S_GCLK_ID_0 + self->clock_unit);
disable_clock_generator(self->gclk);

reset_pin(self->clock_pin->number);
reset_pin(self->data_pin->number);
reset_pin_number(self->clock_pin->number);
reset_pin_number(self->data_pin->number);
self->clock_pin = mp_const_none;
self->data_pin = mp_const_none;
}
Expand Down
4 changes: 2 additions & 2 deletions ports/atmel-samd/common-hal/audioio/AudioOut.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,10 +248,10 @@ void common_hal_audioio_audioout_deinit(audioio_audioout_obj_t* self) {

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

reset_pin(self->left_channel->number);
reset_pin_number(self->left_channel->number);
self->left_channel = mp_const_none;
#ifdef SAMD51
reset_pin(self->right_channel->number);
reset_pin_number(self->right_channel->number);
self->right_channel = mp_const_none;
#endif
}
Expand Down
16 changes: 8 additions & 8 deletions ports/atmel-samd/common-hal/busio/I2C.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
common_hal_mcu_delay_us(3);

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

if (i2c_m_sync_init(&self->i2c_desc, sercom) != ERR_NONE) {
reset_pin(sda->number);
reset_pin(scl->number);
reset_pin_number(sda->number);
reset_pin_number(scl->number);
mp_raise_OSError(MP_EIO);
}

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

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

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

reset_pin(self->sda_pin);
reset_pin(self->scl_pin);
reset_pin_number(self->sda_pin);
reset_pin_number(self->scl_pin);
self->sda_pin = NO_PIN;
self->scl_pin = NO_PIN;
}
Expand Down
2 changes: 1 addition & 1 deletion ports/atmel-samd/common-hal/busio/I2C.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
typedef struct {
mp_obj_base_t base;
struct i2c_m_sync_desc i2c_desc;
volatile bool has_lock;
bool has_lock;
uint8_t scl_pin;
uint8_t sda_pin;
} busio_i2c_obj_t;
Expand Down
6 changes: 3 additions & 3 deletions ports/atmel-samd/common-hal/busio/SPI.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,9 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
}
spi_m_sync_disable(&self->spi_desc);
spi_m_sync_deinit(&self->spi_desc);
reset_pin(self->clock_pin);
reset_pin(self->MOSI_pin);
reset_pin(self->MISO_pin);
reset_pin_number(self->clock_pin);
reset_pin_number(self->MOSI_pin);
reset_pin_number(self->MISO_pin);
self->clock_pin = NO_PIN;
}

Expand Down
4 changes: 2 additions & 2 deletions ports/atmel-samd/common-hal/busio/UART.c
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,8 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
struct usart_async_descriptor * const usart_desc_p = (struct usart_async_descriptor * const) &self->usart_desc;
usart_async_disable(usart_desc_p);
usart_async_deinit(usart_desc_p);
reset_pin(self->rx_pin);
reset_pin(self->tx_pin);
reset_pin_number(self->rx_pin);
reset_pin_number(self->tx_pin);
self->rx_pin = NO_PIN;
self->tx_pin = NO_PIN;
}
Expand Down
6 changes: 4 additions & 2 deletions ports/atmel-samd/common-hal/digitalio/DigitalInOut.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct(
digitalio_digitalinout_obj_t* self, const mcu_pin_obj_t* pin) {
claim_pin(pin);
self->pin = pin;
self->output = false;
self->open_drain = false;

// Must set pull after setting direction.
gpio_set_pin_direction(pin->number, GPIO_DIRECTION_IN);
Expand All @@ -55,7 +57,7 @@ void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t* self
if (common_hal_digitalio_digitalinout_deinited(self)) {
return;
}
reset_pin(self->pin->number);
reset_pin_number(self->pin->number);
self->pin = mp_const_none;
}

Expand Down Expand Up @@ -83,7 +85,7 @@ void common_hal_digitalio_digitalinout_switch_to_output(

digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
digitalio_digitalinout_obj_t* self) {
return self->output? DIRECTION_OUTPUT : DIRECTION_INPUT;
return self->output ? DIRECTION_OUTPUT : DIRECTION_INPUT;
}

void common_hal_digitalio_digitalinout_set_value(
Expand Down
4 changes: 2 additions & 2 deletions ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ void common_hal_i2cslave_i2c_slave_deinit(i2cslave_i2c_slave_obj_t *self) {

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

reset_pin(self->sda_pin);
reset_pin(self->scl_pin);
reset_pin_number(self->sda_pin);
reset_pin_number(self->scl_pin);
self->sda_pin = NO_PIN;
self->scl_pin = NO_PIN;
}
Expand Down
30 changes: 15 additions & 15 deletions ports/atmel-samd/common-hal/microcontroller/Pin.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,48 +91,48 @@ void reset_all_pins(void) {
#endif
}

void reset_pin(uint8_t pin) {
if (pin >= PORT_BITS) {
void reset_pin_number(uint8_t pin_number) {
if (pin_number >= PORT_BITS) {
return;
}

#ifdef MICROPY_HW_NEOPIXEL
if (pin == MICROPY_HW_NEOPIXEL->number) {
if (pin_number == MICROPY_HW_NEOPIXEL->number) {
neopixel_in_use = false;
rgb_led_status_init();
return;
}
#endif
#ifdef MICROPY_HW_APA102_MOSI
if (pin == MICROPY_HW_APA102_MOSI->number ||
pin == MICROPY_HW_APA102_SCK->number) {
apa102_mosi_in_use = apa102_mosi_in_use && pin != MICROPY_HW_APA102_MOSI->number;
apa102_sck_in_use = apa102_sck_in_use && pin != MICROPY_HW_APA102_SCK->number;
if (pin_number == MICROPY_HW_APA102_MOSI->number ||
pin_number == MICROPY_HW_APA102_SCK->number) {
apa102_mosi_in_use = apa102_mosi_in_use && pin_number != MICROPY_HW_APA102_MOSI->number;
apa102_sck_in_use = apa102_sck_in_use && pin_number != MICROPY_HW_APA102_SCK->number;
if (!apa102_sck_in_use && !apa102_mosi_in_use) {
rgb_led_status_init();
}
return;
}
#endif

if (pin == PIN_PA30
if (pin_number == PIN_PA30
#ifdef SAMD51
) {
gpio_set_pin_function(pin, GPIO_PIN_FUNCTION_H);
gpio_set_pin_function(pin_number, GPIO_PIN_FUNCTION_H);
#endif
#ifdef SAMD21
|| pin == PIN_PA31) {
gpio_set_pin_function(pin, GPIO_PIN_FUNCTION_G);
|| pin_number == PIN_PA31) {
gpio_set_pin_function(pin_number, GPIO_PIN_FUNCTION_G);
#endif
} else {
gpio_set_pin_direction(pin, GPIO_DIRECTION_OFF);
gpio_set_pin_function(pin, GPIO_PIN_FUNCTION_OFF);
gpio_set_pin_direction(pin_number, GPIO_DIRECTION_OFF);
gpio_set_pin_function(pin_number, GPIO_PIN_FUNCTION_OFF);
}

#ifdef SPEAKER_ENABLE_PIN
if (pin == SPEAKER_ENABLE_PIN->number) {
if (pin_number == SPEAKER_ENABLE_PIN->number) {
speaker_enable_in_use = false;
gpio_set_pin_function(pin, GPIO_PIN_FUNCTION_OFF);
gpio_set_pin_function(pin_number, GPIO_PIN_FUNCTION_OFF);
gpio_set_pin_direction(SPEAKER_ENABLE_PIN->number, GPIO_DIRECTION_OUT);
gpio_set_pin_level(SPEAKER_ENABLE_PIN->number, false);
}
Expand Down
4 changes: 2 additions & 2 deletions ports/atmel-samd/common-hal/microcontroller/Pin.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ extern bool apa102_mosi_in_use;
#endif

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

#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_MICROCONTROLLER_PIN_H
2 changes: 1 addition & 1 deletion ports/atmel-samd/common-hal/pulseio/PWMOut.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self) {
}
}
}
reset_pin(self->pin->number);
reset_pin_number(self->pin->number);
self->pin = mp_const_none;
}

Expand Down
4 changes: 3 additions & 1 deletion ports/atmel-samd/common-hal/pulseio/PulseIn.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t* self,

turn_on_cpu_interrupt(self->channel);

claim_pin(pin);

// Set config will enable the EIC.
pulsein_set_config(self, true);
}
Expand All @@ -152,7 +154,7 @@ void common_hal_pulseio_pulsein_deinit(pulseio_pulsein_obj_t* self) {
return;
}
turn_off_eic_channel(self->channel);
reset_pin(self->pin);
reset_pin_number(self->pin);
self->pin = NO_PIN;
}

Expand Down
7 changes: 5 additions & 2 deletions ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ void common_hal_rotaryio_incrementalencoder_construct(rotaryio_incrementalencode
((uint8_t) gpio_get_pin_level(self->pin_a) << 1) |
(uint8_t) gpio_get_pin_level(self->pin_b);

claim_pin(pin_a);
claim_pin(pin_b);

turn_on_eic_channel(self->eic_channel_a, EIC_CONFIG_SENSE0_BOTH_Val, EIC_HANDLER_INCREMENTAL_ENCODER);
turn_on_eic_channel(self->eic_channel_b, EIC_CONFIG_SENSE0_BOTH_Val, EIC_HANDLER_INCREMENTAL_ENCODER);
}
Expand All @@ -87,9 +90,9 @@ void common_hal_rotaryio_incrementalencoder_deinit(rotaryio_incrementalencoder_o
}
turn_off_eic_channel(self->eic_channel_a);
turn_off_eic_channel(self->eic_channel_b);
reset_pin(self->pin_a);
reset_pin_number(self->pin_a);
self->pin_a = NO_PIN;
reset_pin(self->pin_b);
reset_pin_number(self->pin_b);
self->pin_b = NO_PIN;
}

Expand Down
2 changes: 1 addition & 1 deletion ports/atmel-samd/common-hal/touchio/TouchIn.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ void common_hal_touchio_touchin_deinit(touchio_touchin_obj_t* self) {
}
// We leave the clocks running because they may be in use by others.

reset_pin(self->config.pin);
reset_pin_number(self->config.pin);
self->config.pin = NO_PIN;
}

Expand Down
2 changes: 1 addition & 1 deletion ports/atmel-samd/peripherals
Loading