summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--osal/usb_osal_freertos.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/osal/usb_osal_freertos.c b/osal/usb_osal_freertos.c
index e536ff14..14118570 100644
--- a/osal/usb_osal_freertos.c
+++ b/osal/usb_osal_freertos.c
@@ -153,7 +153,17 @@ void usb_osal_timer_delete(struct usb_osal_timer *timer)
void usb_osal_timer_start(struct usb_osal_timer *timer)
{
- xTimerStart(timer->timer, 0);
+ BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+ int ret;
+
+ if (xPortIsInsideInterrupt()) {
+ ret = xTimerStartFromISR(timer->timer, &xHigherPriorityTaskWoken);
+ if (ret == pdPASS) {
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ }
+ } else {
+ xTimerStart(timer->timer, 0);
+ }
}
void usb_osal_timer_stop(struct usb_osal_timer *timer)