diff --git a/os/xhal/codegen/hal_spi.xml b/os/xhal/codegen/hal_spi.xml index 3bf0c9510..5c8e899e3 100644 --- a/os/xhal/codegen/hal_spi.xml +++ b/os/xhal/codegen/hal_spi.xml @@ -844,9 +844,14 @@ if (self->cb != NULL) { cb) { +if (self->cb != NULL) { + self->state = HAL_DRV_STATE_ERROR; self->cb(self); + if (self->state == HAL_DRV_STATE_ERROR) { + self->state = HAL_DRV_STATE_READY; + } } + __spi_wakeup_isr(self, msg);]]> diff --git a/os/xhal/include/hal_spi.h b/os/xhal/include/hal_spi.h index d8a90d716..255cbd234 100644 --- a/os/xhal/include/hal_spi.h +++ b/os/xhal/include/hal_spi.h @@ -574,9 +574,14 @@ CC_FORCE_INLINE static inline void __spi_isr_error_code(void *ip, msg_t msg) { hal_spi_driver_c *self = (hal_spi_driver_c *)ip; - if (self->cb) { + if (self->cb != NULL) { + self->state = HAL_DRV_STATE_ERROR; self->cb(self); + if (self->state == HAL_DRV_STATE_ERROR) { + self->state = HAL_DRV_STATE_READY; + } } + __spi_wakeup_isr(self, msg); } /** @} */