File tree Expand file tree Collapse file tree 2 files changed +7
-1
lines changed
ports/espressif/common-hal/busio Expand file tree Collapse file tree 2 files changed +7
-1
lines changed Original file line number Diff line number Diff 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
168172bool 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
172176void common_hal_busio_spi_unlock (busio_spi_obj_t * self ) {
Original file line number Diff line number Diff line change @@ -196,8 +196,10 @@ void status_led_deinit() {
196196
197197 #elif defined(MICROPY_HW_APA102_MOSI ) && defined(MICROPY_HW_APA102_SCK )
198198 #if CIRCUITPY_BITBANG_APA102
199+ shared_module_bitbangio_spi_unlock (& status_apa102 );
199200 shared_module_bitbangio_spi_deinit (& status_apa102 );
200201 #else
202+ common_hal_busio_spi_unlock (& status_apa102 );
201203 common_hal_busio_spi_deinit (& status_apa102 );
202204 #endif
203205
You can’t perform that action at this time.
0 commit comments