summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/nrf/Makefile1
-rw-r--r--ports/nrf/boards/arduino_primo/mpconfigboard.h12
-rw-r--r--ports/nrf/boards/dvk_bl652/mpconfigboard.h14
-rw-r--r--ports/nrf/boards/feather52/mpconfigboard.h10
-rw-r--r--ports/nrf/boards/make-pins.py23
-rw-r--r--ports/nrf/boards/microbit/mpconfigboard.h12
-rw-r--r--ports/nrf/boards/pca10000/mpconfigboard.h4
-rw-r--r--ports/nrf/boards/pca10001/mpconfigboard.h8
-rw-r--r--ports/nrf/boards/pca10028/mpconfigboard.h14
-rw-r--r--ports/nrf/boards/pca10031/mpconfigboard.h14
-rw-r--r--ports/nrf/boards/pca10040/mpconfigboard.h14
-rw-r--r--ports/nrf/boards/pca10056/mpconfigboard.h14
-rw-r--r--ports/nrf/modules/machine/pin.c105
-rw-r--r--ports/nrf/modules/machine/spi.c6
-rw-r--r--ports/nrf/modules/machine/uart.c8
-rw-r--r--ports/nrf/modules/music/modmusic.c6
-rw-r--r--ports/nrf/mpconfigport.h7
-rw-r--r--ports/nrf/nrfx_config.h10
18 files changed, 163 insertions, 119 deletions
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 4aa4d4622..85d733017 100644
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -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/,\
diff --git a/ports/nrf/boards/arduino_primo/mpconfigboard.h b/ports/nrf/boards/arduino_primo/mpconfigboard.h
index e4a5d9bf2..c809857da 100644
--- a/ports/nrf/boards/arduino_primo/mpconfigboard.h
+++ b/ports/nrf/boards/arduino_primo/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/boards/dvk_bl652/mpconfigboard.h b/ports/nrf/boards/dvk_bl652/mpconfigboard.h
index 150dd3318..b8af9ac68 100644
--- a/ports/nrf/boards/dvk_bl652/mpconfigboard.h
+++ b/ports/nrf/boards/dvk_bl652/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/boards/feather52/mpconfigboard.h b/ports/nrf/boards/feather52/mpconfigboard.h
index ca2284af4..d0f86c391 100644
--- a/ports/nrf/boards/feather52/mpconfigboard.h
+++ b/ports/nrf/boards/feather52/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/boards/make-pins.py b/ports/nrf/boards/make-pins.py
index 84d70add2..023b2161c 100644
--- a/ports/nrf/boards/make-pins.py
+++ b/ports/nrf/boards/make-pins.py
@@ -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)
diff --git a/ports/nrf/boards/microbit/mpconfigboard.h b/ports/nrf/boards/microbit/mpconfigboard.h
index 5aa2fb10d..03f7a1811 100644
--- a/ports/nrf/boards/microbit/mpconfigboard.h
+++ b/ports/nrf/boards/microbit/mpconfigboard.h
@@ -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)
diff --git a/ports/nrf/boards/pca10000/mpconfigboard.h b/ports/nrf/boards/pca10000/mpconfigboard.h
index 89108d0c0..59a559784 100644
--- a/ports/nrf/boards/pca10000/mpconfigboard.h
+++ b/ports/nrf/boards/pca10000/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/boards/pca10001/mpconfigboard.h b/ports/nrf/boards/pca10001/mpconfigboard.h
index 3ecea41e8..a97f236b1 100644
--- a/ports/nrf/boards/pca10001/mpconfigboard.h
+++ b/ports/nrf/boards/pca10001/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/boards/pca10028/mpconfigboard.h b/ports/nrf/boards/pca10028/mpconfigboard.h
index 26c85f0f5..44334af3c 100644
--- a/ports/nrf/boards/pca10028/mpconfigboard.h
+++ b/ports/nrf/boards/pca10028/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/boards/pca10031/mpconfigboard.h b/ports/nrf/boards/pca10031/mpconfigboard.h
index b4a21c876..0834aa609 100644
--- a/ports/nrf/boards/pca10031/mpconfigboard.h
+++ b/ports/nrf/boards/pca10031/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/boards/pca10040/mpconfigboard.h b/ports/nrf/boards/pca10040/mpconfigboard.h
index ca2edb942..996124e3a 100644
--- a/ports/nrf/boards/pca10040/mpconfigboard.h
+++ b/ports/nrf/boards/pca10040/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/boards/pca10056/mpconfigboard.h b/ports/nrf/boards/pca10056/mpconfigboard.h
index f14e0990e..78590e974 100644
--- a/ports/nrf/boards/pca10056/mpconfigboard.h
+++ b/ports/nrf/boards/pca10056/mpconfigboard.h
@@ -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"
diff --git a/ports/nrf/modules/machine/pin.c b/ports/nrf/modules/machine/pin.c
index 47778e01c..195db2e59 100644
--- a/ports/nrf/modules/machine/pin.c
+++ b/ports/nrf/modules/machine/pin.c
@@ -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,
-};*/
diff --git a/ports/nrf/modules/machine/spi.c b/ports/nrf/modules/machine/spi.c
index 79d503d52..e94c83cdd 100644
--- a/ports/nrf/modules/machine/spi.c
+++ b/ports/nrf/modules/machine/spi.c
@@ -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.
diff --git a/ports/nrf/modules/machine/uart.c b/ports/nrf/modules/machine/uart.c
index 4362bed8d..3a2d7a14a 100644
--- a/ports/nrf/modules/machine/uart.c
+++ b/ports/nrf/modules/machine/uart.c
@@ -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
diff --git a/ports/nrf/modules/music/modmusic.c b/ports/nrf/modules/music/modmusic.c
index 3aaf3960c..96eca95a2 100644
--- a/ports/nrf/modules/music/modmusic.c
+++ b/ports/nrf/modules/music/modmusic.c
@@ -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
diff --git a/ports/nrf/mpconfigport.h b/ports/nrf/mpconfigport.h
index 85c513159..3de4107a8 100644
--- a/ports/nrf/mpconfigport.h
+++ b/ports/nrf/mpconfigport.h
@@ -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; \
diff --git a/ports/nrf/nrfx_config.h b/ports/nrf/nrfx_config.h
index 3957da9bc..455475b38 100644
--- a/ports/nrf/nrfx_config.h
+++ b/ports/nrf/nrfx_config.h
@@ -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