Skip to content

Commit 07452b2

Browse files
committed
Fix FreeRTOS weirdness on Funhouse
Funhouse has DotStars attached to SPI that exercises this bug. Most boards are NeoPixel and avoid this. Fixes adafruit#9486
1 parent 4d88d73 commit 07452b2

File tree

1 file changed

+5
-1
lines changed
  • ports/espressif/common-hal/busio

1 file changed

+5
-1
lines changed

ports/espressif/common-hal/busio/SPI.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
129129

130130
// Wait for any other users of this to finish.
131131
while (!common_hal_busio_spi_try_lock(self)) {
132+
RUN_BACKGROUND_TASKS;
132133
}
133134

134135
// Mark us as deinit early in case we are used in an interrupt.
@@ -139,7 +140,10 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
139140
spi_bus_remove_device(spi_handle[self->host_id]);
140141
spi_bus_free(self->host_id);
141142

143+
// Release the mutex before we delete it. Otherwise FreeRTOS gets unhappy.
144+
xSemaphoreGive(self->mutex);
142145
vSemaphoreDelete(self->mutex);
146+
self->mutex = NULL;
143147

144148
common_hal_reset_pin(self->MOSI);
145149
common_hal_reset_pin(self->MISO);
@@ -166,7 +170,7 @@ bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
166170
}
167171

168172
bool common_hal_busio_spi_has_lock(busio_spi_obj_t *self) {
169-
return xSemaphoreGetMutexHolder(self->mutex) == xTaskGetCurrentTaskHandle();
173+
return self->mutex != NULL && xSemaphoreGetMutexHolder(self->mutex) == xTaskGetCurrentTaskHandle();
170174
}
171175

172176
void common_hal_busio_spi_unlock(busio_spi_obj_t *self) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy