Skip to content

Commit 292737f

Browse files
authored
Merge pull request #1354 from tannewt/nrf_feather_fixes
A few fixes for nRF52840 feather QSPI and neopixel
2 parents e77c06e + 15eeac5 commit 292737f

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

ports/nrf/boards/feather_nrf52840_express/mpconfigboard.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,21 @@
3535

3636
#define MICROPY_HW_NEOPIXEL (&pin_P0_16)
3737

38+
#ifdef QSPI_FLASH_FILESYSTEM
3839
#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(0, 17)
3940
#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(0, 22)
4041
#define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(0, 23)
4142
#define MICROPY_QSPI_DATA3 NRF_GPIO_PIN_MAP(0, 21)
4243
#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(0, 19)
4344
#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(0, 20)
45+
#endif
46+
47+
#ifdef SPI_FLASH_FILESYSTEM
48+
#define SPI_FLASH_MOSI_PIN &pin_P0_17
49+
#define SPI_FLASH_MISO_PIN &pin_P0_22
50+
#define SPI_FLASH_SCK_PIN &pin_P0_19
51+
#define SPI_FLASH_CS_PIN &pin_P0_20
52+
#endif
4453

4554
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
4655

@@ -51,8 +60,6 @@
5160

5261
#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
5362

54-
#define EXTERNAL_FLASH_QSPI_DUAL (1)
55-
5663
#define BOARD_HAS_CRYSTAL 1
5764

5865
#define DEFAULT_I2C_BUS_SCL (&pin_P0_11)

ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ endif
2020

2121
NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
2222

23-
QSPI_FLASH_FILESYSTEM = 1
23+
SPI_FLASH_FILESYSTEM = 1
2424
EXTERNAL_FLASH_DEVICE_COUNT = 1
2525
EXTERNAL_FLASH_DEVICES = "GD25Q16C"

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ STATIC uint32_t claimed_pins[GPIO_COUNT];
4848
STATIC uint32_t never_reset_pins[GPIO_COUNT];
4949

5050
void reset_all_pins(void) {
51-
return;
5251
for (size_t i = 0; i < GPIO_COUNT; i++) {
5352
claimed_pins[i] = never_reset_pins[i];
5453
}
@@ -77,7 +76,6 @@ void reset_all_pins(void) {
7776

7877
// Mark pin as free and return it to a quiescent state.
7978
void reset_pin_number(uint8_t pin_number) {
80-
return;
8179
if (pin_number == NO_PIN) {
8280
return;
8381
}

ports/nrf/common-hal/neopixel_write/__init__.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,21 @@ void common_hal_neopixel_write (const digitalio_digitalinout_obj_t* digitalinout
108108
// using DWT
109109
uint32_t pattern_size = numBytes * 8 * sizeof(uint16_t) + 2 * sizeof(uint16_t);
110110
uint16_t* pixels_pattern = NULL;
111+
bool pattern_on_heap = false;
112+
113+
// Use the stack to store 1 pixels worth of PWM data for the status led. uint32_t to ensure alignment.
114+
uint32_t one_pixel[8 * sizeof(uint16_t) + 1];
111115

112116
NRF_PWM_Type* pwm = find_free_pwm();
113117

114118
// only malloc if there is PWM device available
115119
if ( pwm != NULL ) {
116-
pixels_pattern = (uint16_t *) m_malloc(pattern_size, false);
120+
if (numBytes == 4) {
121+
pixels_pattern = (uint16_t *) one_pixel;
122+
} else {
123+
pixels_pattern = (uint16_t *) m_malloc_maybe(pattern_size, false);
124+
pattern_on_heap = true;
125+
}
117126
}
118127

119128
// Use the identified device to choose the implementation
@@ -193,7 +202,10 @@ void common_hal_neopixel_write (const digitalio_digitalinout_obj_t* digitalinout
193202
nrf_pwm_disable(pwm);
194203
nrf_pwm_pins_set(pwm, (uint32_t[]) {0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL} );
195204

196-
m_free(pixels_pattern);
205+
if (pattern_on_heap) {
206+
m_free(pixels_pattern);
207+
}
208+
197209
} // End of DMA implementation
198210
// ---------------------------------------------------------------------
199211
else {

0 commit comments

Comments
 (0)