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);
}
/** @} */