nrf/modules/machine/pin: Add support for IRQ on Pin's

This patch ads irq method to the pin object. Handlers
registered in the irq method will be kept as part of the
ROOT_POINTERS.

In order to resolve which pin object is the root of the
IRQ, the pin_find has been extended to also be able to
search up Pin objects based on mp_int_t pin number.
This also implies that the Pin.new API is now also supporting
creation of Pin objects based on the integer value of the
pin instead of old style mandating string name of the Pin.

All boards have been updated to use real pin number from
0-48 instead of pin_Pxx for UART/SPI and music module pins.

UART/SPI/modmusic has also been updated to use pin number
provided directly or look up the Pin object based on the
integer value of the pin (modmusic).

Pin generation has been updated to create a list of pins, where
the board/cpu dicts are now refering to an index in this list
instead of having one const declaration for each pin. This new
const table makes it possible to iterate through all pins generated
in order to locate the correct Pin object.
pull/3137/merge
Glenn Ruben Bakke 2018-04-03 00:10:05 +02:00 zatwierdzone przez Damien George
rodzic 864f671744
commit 6e8a605500
18 zmienionych plików z 163 dodań i 119 usunięć

Wyświetl plik

@ -173,6 +173,7 @@ SRC_NRFX += $(addprefix lib/nrfx/drivers/src/,\
nrfx_rtc.c \
nrfx_timer.c \
nrfx_pwm.c \
nrfx_gpiote.c \
)
SRC_NRFX_HAL += $(addprefix lib/nrfx/hal/,\

Wyświetl plik

@ -60,21 +60,21 @@
#define MICROPY_HW_LED1 (20) // LED1
// UART config
#define MICROPY_HW_UART1_RX (pin_P11)
#define MICROPY_HW_UART1_TX (pin_P12)
#define MICROPY_HW_UART1_RX (11)
#define MICROPY_HW_UART1_TX (12)
#define MICROPY_HW_UART1_HWFC (0)
// SPI0 config
#define MICROPY_HW_SPI0_NAME "SPI0"
#define MICROPY_HW_SPI0_SCK (pin_P25) // (Arduino D13)
#define MICROPY_HW_SPI0_MOSI (pin_P23) // (Arduino D11)
#define MICROPY_HW_SPI0_MISO (pin_P24) // (Arduino D12)
#define MICROPY_HW_SPI0_SCK (25) // (Arduino D13)
#define MICROPY_HW_SPI0_MOSI (23) // (Arduino D11)
#define MICROPY_HW_SPI0_MISO (24) // (Arduino D12)
#define MICROPY_HW_PWM0_NAME "PWM0"
#define MICROPY_HW_PWM1_NAME "PWM1"
#define MICROPY_HW_PWM2_NAME "PWM2"
// buzzer pin
#define MICROPY_HW_MUSIC_PIN (pin_P8)
#define MICROPY_HW_MUSIC_PIN (8)
#define HELP_TEXT_BOARD_LED "1"

Wyświetl plik

@ -60,17 +60,17 @@
#define MICROPY_HW_LED2 (19) // LED2
// UART config
#define MICROPY_HW_UART1_RX (pin_P8)
#define MICROPY_HW_UART1_TX (pin_P6)
#define MICROPY_HW_UART1_CTS (pin_P7)
#define MICROPY_HW_UART1_RTS (pin_P5)
#define MICROPY_HW_UART1_RX (8)
#define MICROPY_HW_UART1_TX (6)
#define MICROPY_HW_UART1_CTS (7)
#define MICROPY_HW_UART1_RTS (5)
#define MICROPY_HW_UART1_HWFC (1)
// SPI0 config
#define MICROPY_HW_SPI0_NAME "SPI0"
#define MICROPY_HW_SPI0_SCK (pin_P25)
#define MICROPY_HW_SPI0_MOSI (pin_P23)
#define MICROPY_HW_SPI0_MISO (pin_P24)
#define MICROPY_HW_SPI0_SCK (25)
#define MICROPY_HW_SPI0_MOSI (23)
#define MICROPY_HW_SPI0_MISO (24)
#define MICROPY_HW_PWM0_NAME "PWM0"
#define MICROPY_HW_PWM1_NAME "PWM1"

Wyświetl plik

@ -60,15 +60,15 @@
#define MICROPY_HW_LED2 (19) // LED2
// UART config
#define MICROPY_HW_UART1_RX (pin_P8)
#define MICROPY_HW_UART1_TX (pin_P6)
#define MICROPY_HW_UART1_RX (8)
#define MICROPY_HW_UART1_TX (6)
#define MICROPY_HW_UART1_HWFC (0)
// SPI0 config
#define MICROPY_HW_SPI0_NAME "SPI0"
#define MICROPY_HW_SPI0_SCK (pin_P12) // (Arduino D13)
#define MICROPY_HW_SPI0_MOSI (pin_P13) // (Arduino D11)
#define MICROPY_HW_SPI0_MISO (pin_P14) // (Arduino D12)
#define MICROPY_HW_SPI0_SCK (12) // (Arduino D13)
#define MICROPY_HW_SPI0_MOSI (13) // (Arduino D11)
#define MICROPY_HW_SPI0_MISO (14) // (Arduino D12)
#define MICROPY_HW_PWM0_NAME "PWM0"
#define MICROPY_HW_PWM1_NAME "PWM1"

Wyświetl plik

@ -140,6 +140,12 @@ class Pin(object):
str = '0'
return str
def print_const_table_entry(self):
print(' PIN({:d}, {:s}, {:s}, {:d}),'.format(
self.pin,
self.alt_fn_name(null_if_0=True),
self.adc_num_str(), self.adc_channel))
def print(self):
if self.alt_fn_count == 0:
print("// ", end='')
@ -227,18 +233,27 @@ class Pins(object):
def print_named(self, label, named_pins):
print('STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{'.format(label))
index = 0
for named_pin in named_pins:
pin = named_pin.pin()
if pin.is_board_pin():
print(' {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}) }},'.format(named_pin.name(), pin.cpu_pin_name()))
print(' {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&machine_pin_obj[{:d}]) }},'.format(named_pin.name(), index))
index += 1
print('};')
print('MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);'.format(label, label));
def print(self):
def print_const_table(self):
print('')
print('const uint8_t machine_pin_num_of_pins = {:d};'.format(len(self.board_pins)))
print('')
print('const pin_obj_t machine_pin_obj[{:d}] = {{'.format(len(self.board_pins)))
for named_pin in self.cpu_pins:
pin = named_pin.pin()
if pin.is_board_pin():
pin.print()
pin.print_const_table_entry()
print('};');
def print(self):
self.print_named('cpu', self.cpu_pins)
print('')
self.print_named('board', self.board_pins)
@ -381,6 +396,8 @@ def main():
print('')
with open(args.prefix_filename, 'r') as prefix_file:
print(prefix_file.read())
pins.print_const_table()
pins.print()
pins.print_header(args.hdr_filename)
pins.print_qstr(args.qstr_filename)

Wyświetl plik

@ -56,15 +56,15 @@
#define MICROPY_HW_ENABLE_CAN (0)
// UART config
#define MICROPY_HW_UART1_RX (pin_P25)
#define MICROPY_HW_UART1_TX (pin_P24)
#define MICROPY_HW_UART1_RX (25)
#define MICROPY_HW_UART1_TX (24)
#define MICROPY_HW_UART1_HWFC (0)
// SPI0 config
#define MICROPY_HW_SPI0_NAME "SPI0"
#define MICROPY_HW_SPI0_SCK (pin_P23)
#define MICROPY_HW_SPI0_MOSI (pin_P21)
#define MICROPY_HW_SPI0_MISO (pin_P22)
#define MICROPY_HW_SPI0_SCK (23)
#define MICROPY_HW_SPI0_MOSI (21)
#define MICROPY_HW_SPI0_MISO (22)
// micro:bit music pin
#define MICROPY_HW_MUSIC_PIN (pin_P3)
#define MICROPY_HW_MUSIC_PIN (3)

Wyświetl plik

@ -60,8 +60,8 @@
#define MICROPY_HW_LED_BLUE (23) // BLUE
// UART config
#define MICROPY_HW_UART1_RX (pin_P11)
#define MICROPY_HW_UART1_TX (pin_P9)
#define MICROPY_HW_UART1_RX (11)
#define MICROPY_HW_UART1_TX (9)
#define MICROPY_HW_UART1_HWFC (0)
#define HELP_TEXT_BOARD_LED "1,2,3"

Wyświetl plik

@ -60,10 +60,10 @@
#define MICROPY_HW_LED2 (19) // LED2
// UART config
#define MICROPY_HW_UART1_RX (pin_P11)
#define MICROPY_HW_UART1_TX (pin_P9)
#define MICROPY_HW_UART1_CTS (pin_P10)
#define MICROPY_HW_UART1_RTS (pin_P8)
#define MICROPY_HW_UART1_RX (11)
#define MICROPY_HW_UART1_TX (9)
#define MICROPY_HW_UART1_CTS (10)
#define MICROPY_HW_UART1_RTS (8)
#define MICROPY_HW_UART1_HWFC (0)
#define HELP_TEXT_BOARD_LED "1,2"

Wyświetl plik

@ -61,16 +61,16 @@
#define MICROPY_HW_LED4 (24) // LED4
// UART config
#define MICROPY_HW_UART1_RX (pin_P11)
#define MICROPY_HW_UART1_TX (pin_P9)
#define MICROPY_HW_UART1_CTS (pin_P10)
#define MICROPY_HW_UART1_RTS (pin_P8)
#define MICROPY_HW_UART1_RX (11)
#define MICROPY_HW_UART1_TX (9)
#define MICROPY_HW_UART1_CTS (10)
#define MICROPY_HW_UART1_RTS (8)
#define MICROPY_HW_UART1_HWFC (1)
// SPI0 config
#define MICROPY_HW_SPI0_NAME "SPI0"
#define MICROPY_HW_SPI0_SCK (pin_P29)
#define MICROPY_HW_SPI0_MOSI (pin_P25)
#define MICROPY_HW_SPI0_MISO (pin_P28)
#define MICROPY_HW_SPI0_SCK (29)
#define MICROPY_HW_SPI0_MOSI (25)
#define MICROPY_HW_SPI0_MISO (28)
#define HELP_TEXT_BOARD_LED "1,2,3,4"

Wyświetl plik

@ -60,16 +60,16 @@
#define MICROPY_HW_LED_BLUE (23) // BLUE
// UART config
#define MICROPY_HW_UART1_RX (pin_P11)
#define MICROPY_HW_UART1_TX (pin_P9)
#define MICROPY_HW_UART1_CTS (pin_P10)
#define MICROPY_HW_UART1_RTS (pin_P8)
#define MICROPY_HW_UART1_RX (11)
#define MICROPY_HW_UART1_TX (9)
#define MICROPY_HW_UART1_CTS (10)
#define MICROPY_HW_UART1_RTS (8)
#define MICROPY_HW_UART1_HWFC (0)
// SPI0 config
#define MICROPY_HW_SPI0_NAME "SPI0"
#define MICROPY_HW_SPI0_SCK (pin_P15)
#define MICROPY_HW_SPI0_MOSI (pin_P16)
#define MICROPY_HW_SPI0_MISO (pin_P17)
#define MICROPY_HW_SPI0_SCK (15)
#define MICROPY_HW_SPI0_MOSI (16)
#define MICROPY_HW_SPI0_MISO (17)
#define HELP_TEXT_BOARD_LED "1,2,3"

Wyświetl plik

@ -63,17 +63,17 @@
#define MICROPY_HW_LED4 (20) // LED4
// UART config
#define MICROPY_HW_UART1_RX (pin_P8)
#define MICROPY_HW_UART1_TX (pin_P6)
#define MICROPY_HW_UART1_CTS (pin_P7)
#define MICROPY_HW_UART1_RTS (pin_P5)
#define MICROPY_HW_UART1_RX (8)
#define MICROPY_HW_UART1_TX (6)
#define MICROPY_HW_UART1_CTS (7)
#define MICROPY_HW_UART1_RTS (5)
#define MICROPY_HW_UART1_HWFC (1)
// SPI0 config
#define MICROPY_HW_SPI0_NAME "SPI0"
#define MICROPY_HW_SPI0_SCK (pin_P25) // (Arduino D13)
#define MICROPY_HW_SPI0_MOSI (pin_P23) // (Arduino D11)
#define MICROPY_HW_SPI0_MISO (pin_P24) // (Arduino D12)
#define MICROPY_HW_SPI0_SCK (25) // (Arduino D13)
#define MICROPY_HW_SPI0_MOSI (23) // (Arduino D11)
#define MICROPY_HW_SPI0_MISO (24) // (Arduino D12)
#define MICROPY_HW_PWM0_NAME "PWM0"
#define MICROPY_HW_PWM1_NAME "PWM1"

Wyświetl plik

@ -62,18 +62,18 @@
#define MICROPY_HW_LED4 (16) // LED4
// UART config
#define MICROPY_HW_UART1_RX (pin_P8)
#define MICROPY_HW_UART1_TX (pin_P6)
#define MICROPY_HW_UART1_CTS (pin_P7)
#define MICROPY_HW_UART1_RTS (pin_P5)
#define MICROPY_HW_UART1_RX (8)
#define MICROPY_HW_UART1_TX (6)
#define MICROPY_HW_UART1_CTS (7)
#define MICROPY_HW_UART1_RTS (5)
#define MICROPY_HW_UART1_HWFC (1)
// SPI0 config
#define MICROPY_HW_SPI0_NAME "SPI0"
#define MICROPY_HW_SPI0_SCK (pin_P47)
#define MICROPY_HW_SPI0_MOSI (pin_P45)
#define MICROPY_HW_SPI0_MISO (pin_P46)
#define MICROPY_HW_SPI0_SCK (47)
#define MICROPY_HW_SPI0_MOSI (45)
#define MICROPY_HW_SPI0_MISO (46)
#define MICROPY_HW_PWM0_NAME "PWM0"
#define MICROPY_HW_PWM1_NAME "PWM1"

Wyświetl plik

@ -4,7 +4,7 @@
* The MIT License (MIT)
*
* Copyright (c) 2013, 2014 Damien P. George
* Copyright (c) 2016 Glenn Ruben Bakke
* Copyright (c) 2016, 2018 Glenn Ruben Bakke
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@ -35,6 +35,10 @@
#include "py/mphal.h"
#include "pin.h"
#include "nrf_gpio.h"
#include "nrfx_gpiote.h"
extern const pin_obj_t machine_pin_obj[];
extern const uint8_t machine_pin_num_of_pins;
/// \moduleref pyb
/// \class Pin - control I/O pins
@ -105,6 +109,13 @@ STATIC bool pin_class_debug;
void pin_init0(void) {
MP_STATE_PORT(pin_class_mapper) = mp_const_none;
MP_STATE_PORT(pin_class_map_dict) = mp_const_none;
for (int i = 0; i < NUM_OF_PINS; i++) {
MP_STATE_PORT(pin_irq_handlers)[i] = mp_const_none;
}
// Initialize GPIOTE if not done yet.
if (!nrfx_gpiote_is_init()) {
nrfx_gpiote_init();
}
#if PIN_DEBUG
pin_class_debug = false;
@ -114,6 +125,15 @@ void pin_init0(void) {
// C API used to convert a user-supplied pin name into an ordinal pin number.
const pin_obj_t *pin_find(mp_obj_t user_obj) {
const pin_obj_t *pin_obj;
// If pin is SMALL_INT
if (MP_OBJ_IS_SMALL_INT(user_obj)) {
uint8_t value = MP_OBJ_SMALL_INT_VALUE(user_obj);
for (uint8_t i = 0; i < machine_pin_num_of_pins; i++) {
if (machine_pin_obj[i].pin == value) {
return &machine_pin_obj[i];
}
}
}
// If a pin was provided, then use it
if (MP_OBJ_IS_TYPE(user_obj, &pin_type)) {
@ -506,24 +526,51 @@ STATIC mp_obj_t pin_af(mp_obj_t self_in) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_af_obj, pin_af);
/*
STATIC void pin_common_irq_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) {
mp_obj_t pin_handler = MP_STATE_PORT(pin_irq_handlers)[pin];
mp_obj_t pin_number = MP_OBJ_NEW_SMALL_INT(pin);
const pin_obj_t *pin_obj = pin_find(pin_number);
mp_call_function_1(pin_handler, (mp_obj_t)pin_obj);
}
STATIC mp_obj_t pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum {ARG_handler, ARG_trigger, ARG_wake};
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_handler, MP_ARG_OBJ, {.u_obj = mp_const_none} },
{ MP_QSTR_trigger, MP_ARG_INT, {.u_int = HAL_GPIO_POLARITY_EVENT_TOGGLE} },
{ MP_QSTR_handler, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = mp_const_none} },
{ MP_QSTR_trigger, MP_ARG_INT, {.u_int = NRF_GPIOTE_POLARITY_LOTOHI | NRF_GPIOTE_POLARITY_HITOLO} },
{ MP_QSTR_wake, MP_ARG_BOOL, {.u_bool = false} },
};
pin_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
(void)self;
nrfx_gpiote_pin_t pin = self->pin;
nrfx_gpiote_in_config_t config = NRFX_GPIOTE_CONFIG_IN_SENSE_TOGGLE(true);
if (args[ARG_trigger].u_int == NRF_GPIOTE_POLARITY_LOTOHI) {
config.sense = NRF_GPIOTE_POLARITY_LOTOHI;
} else if (args[ARG_trigger].u_int == NRF_GPIOTE_POLARITY_HITOLO) {
config.sense = NRF_GPIOTE_POLARITY_HITOLO;
}
config.pull = NRF_GPIO_PIN_PULLUP;
nrfx_err_t err_code = nrfx_gpiote_in_init(pin, &config, pin_common_irq_handler);
if (err_code == NRFX_ERROR_INVALID_STATE) {
// Re-init if already configured.
nrfx_gpiote_in_uninit(pin);
nrfx_gpiote_in_init(pin, &config, pin_common_irq_handler);
}
MP_STATE_PORT(pin_irq_handlers)[pin] = args[ARG_handler].u_obj;
nrfx_gpiote_in_event_enable(pin, true);
// return the irq object
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pin_irq_obj, 1, pin_irq);
*/
STATIC const mp_rom_map_elem_t pin_locals_dict_table[] = {
// instance methods
@ -541,7 +588,7 @@ STATIC const mp_rom_map_elem_t pin_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_mode), MP_ROM_PTR(&pin_mode_obj) },
{ MP_ROM_QSTR(MP_QSTR_pull), MP_ROM_PTR(&pin_pull_obj) },
{ MP_ROM_QSTR(MP_QSTR_af), MP_ROM_PTR(&pin_af_obj) },
// { MP_ROM_QSTR(MP_QSTR_irq), MP_ROM_PTR(&pin_irq_obj) },
{ MP_ROM_QSTR(MP_QSTR_irq), MP_ROM_PTR(&pin_irq_obj) },
// class methods
{ MP_ROM_QSTR(MP_QSTR_mapper), MP_ROM_PTR(&pin_mapper_obj) },
@ -566,11 +613,11 @@ STATIC const mp_rom_map_elem_t pin_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_PULL_DISABLED), MP_ROM_INT(NRF_GPIO_PIN_NOPULL) },
{ MP_ROM_QSTR(MP_QSTR_PULL_UP), MP_ROM_INT(NRF_GPIO_PIN_PULLUP) },
{ MP_ROM_QSTR(MP_QSTR_PULL_DOWN), MP_ROM_INT(NRF_GPIO_PIN_PULLDOWN) },
/*
// IRQ triggers, can be or'd together
{ MP_ROM_QSTR(MP_QSTR_IRQ_RISING), MP_ROM_INT(HAL_GPIO_POLARITY_EVENT_LOW_TO_HIGH) },
{ MP_ROM_QSTR(MP_QSTR_IRQ_FALLING), MP_ROM_INT(HAL_GPIO_POLARITY_EVENT_HIGH_TO_LOW) },
// IRQ triggers, can be or'd together
{ MP_ROM_QSTR(MP_QSTR_IRQ_RISING), MP_ROM_INT(NRF_GPIOTE_POLARITY_LOTOHI) },
{ MP_ROM_QSTR(MP_QSTR_IRQ_FALLING), MP_ROM_INT(NRF_GPIOTE_POLARITY_HITOLO) },
/*
// legacy class constants
{ MP_ROM_QSTR(MP_QSTR_OUT_PP), MP_ROM_INT(GPIO_MODE_OUTPUT_PP) },
{ MP_ROM_QSTR(MP_QSTR_OUT_OD), MP_ROM_INT(GPIO_MODE_OUTPUT_OD) },
@ -664,39 +711,3 @@ const mp_obj_type_t pin_af_type = {
.print = pin_af_obj_print,
.locals_dict = (mp_obj_dict_t*)&pin_af_locals_dict,
};
/******************************************************************************/
// Pin IRQ object
typedef struct _pin_irq_obj_t {
mp_obj_base_t base;
pin_obj_t pin;
} pin_irq_obj_t;
// STATIC const mp_obj_type_t pin_irq_type;
/*STATIC mp_obj_t pin_irq_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
pin_irq_obj_t *self = self_in;
(void)self;
return mp_const_none;
}*/
/*STATIC mp_obj_t pin_irq_trigger(size_t n_args, const mp_obj_t *args) {
pin_irq_obj_t *self = args[0];
(void)self;
return mp_const_none;
}*/
// STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pin_irq_trigger_obj, 1, 2, pin_irq_trigger);
// STATIC const mp_rom_map_elem_t pin_irq_locals_dict_table[] = {
// { MP_ROM_QSTR(MP_QSTR_trigger), MP_ROM_PTR(&pin_irq_trigger_obj) },
// };
// STATIC MP_DEFINE_CONST_DICT(pin_irq_locals_dict, pin_irq_locals_dict_table);
/*STATIC const mp_obj_type_t pin_irq_type = {
{ &mp_type_type },
.name = MP_QSTR_IRQ,
.call = pin_irq_call,
.locals_dict = (mp_obj_dict_t*)&pin_irq_locals_dict,
};*/

Wyświetl plik

@ -259,9 +259,9 @@ STATIC mp_obj_t machine_hard_spi_make_new(mp_arg_val_t *args) {
self->p_config->mosi_pin = ((const pin_obj_t *)args[ARG_NEW_mosi].u_obj)->pin;
self->p_config->miso_pin = ((const pin_obj_t *)args[ARG_NEW_miso].u_obj)->pin;
} else {
self->p_config->sck_pin = (&MICROPY_HW_SPI0_SCK)->pin;
self->p_config->mosi_pin = (&MICROPY_HW_SPI0_MOSI)->pin;
self->p_config->miso_pin = (&MICROPY_HW_SPI0_MISO)->pin;
self->p_config->sck_pin = MICROPY_HW_SPI0_SCK;
self->p_config->mosi_pin = MICROPY_HW_SPI0_MOSI;
self->p_config->miso_pin = MICROPY_HW_SPI0_MISO;
}
// Manually trigger slave select from upper layer.

Wyświetl plik

@ -220,12 +220,12 @@ STATIC mp_obj_t machine_hard_uart_make_new(const mp_obj_type_t *type, size_t n_a
break;
}
config.pseltxd = (&MICROPY_HW_UART1_TX)->pin;
config.pselrxd = (&MICROPY_HW_UART1_RX)->pin;
config.pseltxd = MICROPY_HW_UART1_TX;
config.pselrxd = MICROPY_HW_UART1_RX;
#if MICROPY_HW_UART1_HWFC
config.pselrts = (&MICROPY_HW_UART1_RTS)->pin;
config.pselcts = (&MICROPY_HW_UART1_CTS)->pin;
config.pselrts = MICROPY_HW_UART1_RTS;
config.pselcts = MICROPY_HW_UART1_CTS;
#endif
// Set context to this instance of UART

Wyświetl plik

@ -282,7 +282,7 @@ STATIC mp_obj_t microbit_music_stop(mp_uint_t n_args, const mp_obj_t *args) {
const pin_obj_t *pin;
if (n_args == 0) {
#ifdef MICROPY_HW_MUSIC_PIN
pin = &MICROPY_HW_MUSIC_PIN;
pin = pin_find(MP_OBJ_NEW_SMALL_INT(MICROPY_HW_MUSIC_PIN));
#else
mp_raise_ValueError("pin parameter not given");
#endif
@ -335,7 +335,7 @@ STATIC mp_obj_t microbit_music_play(mp_uint_t n_args, const mp_obj_t *pos_args,
const pin_obj_t *pin;
if (args[1].u_obj == MP_OBJ_NULL) {
#ifdef MICROPY_HW_MUSIC_PIN
pin = &MICROPY_HW_MUSIC_PIN;
pin = pin_find(MP_OBJ_NEW_SMALL_INT(MICROPY_HW_MUSIC_PIN));
#else
mp_raise_ValueError("pin parameter not given");
#endif
@ -390,7 +390,7 @@ STATIC mp_obj_t microbit_music_pitch(mp_uint_t n_args, const mp_obj_t *pos_args,
const pin_obj_t *pin;
if (args[2].u_obj == MP_OBJ_NULL) {
#ifdef MICROPY_HW_MUSIC_PIN
pin = &MICROPY_HW_MUSIC_PIN;
pin = pin_find(MP_OBJ_NEW_SMALL_INT(MICROPY_HW_MUSIC_PIN));
#else
mp_raise_ValueError("pin parameter not given");
#endif

Wyświetl plik

@ -308,10 +308,17 @@ extern const struct _mp_obj_module_t ble_module;
#define ROOT_POINTERS_SOFTPWM
#endif
#if defined(NRF52840_XXAA)
#define NUM_OF_PINS 48
#else
#define NUM_OF_PINS 32
#endif
#define MICROPY_PORT_ROOT_POINTERS \
const char *readline_hist[8]; \
mp_obj_t pin_class_mapper; \
mp_obj_t pin_class_map_dict; \
mp_obj_t pin_irq_handlers[NUM_OF_PINS]; \
\
/* stdio is repeated on this UART object if it's not null */ \
struct _machine_hard_uart_obj_t *pyb_stdio_uart; \

Wyświetl plik

@ -42,10 +42,18 @@
#if NRF51 || NRF52832
#define GPIO_COUNT 1
#elif NRF52840
#elif NRF52840 || NRF52840_XXAA
#define GPIO_COUNT 2
#endif
#define NRFX_GPIOTE_ENABLED 1
#define NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 1
#if NRF51
#define NRFX_GPIOTE_CONFIG_IRQ_PRIORITY 3
#else
#define NRFX_GPIOTE_CONFIG_IRQ_PRIORITY 6
#endif
#define NRFX_UART_ENABLED 1
#define NRFX_UART0_ENABLED 1