shared/tinyusb: Wake main task if needed at end of USB ISR.
Signed-off-by: Andrew Leech <andrew@alelec.net>
This commit is contained in:
committed by
Damien George
parent
11bc7d0fc1
commit
548f88d2bd
@@ -109,6 +109,10 @@ __attribute__((always_inline)) static inline uint32_t disable_irq(void) {
|
|||||||
|
|
||||||
void mp_hal_set_interrupt_char(int c);
|
void mp_hal_set_interrupt_char(int c);
|
||||||
|
|
||||||
|
static inline void mp_hal_wake_main_task_from_isr(void) {
|
||||||
|
// Defined for tinyusb support, nothing needs to be done here.
|
||||||
|
}
|
||||||
|
|
||||||
static inline mp_uint_t mp_hal_ticks_ms(void) {
|
static inline mp_uint_t mp_hal_ticks_ms(void) {
|
||||||
return ticks_ms32();
|
return ticks_ms32();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ void mp_hal_set_interrupt_char(int c); // -1 to disable
|
|||||||
int mp_hal_stdin_rx_chr(void);
|
int mp_hal_stdin_rx_chr(void);
|
||||||
void mp_hal_stdout_tx_str(const char *str);
|
void mp_hal_stdout_tx_str(const char *str);
|
||||||
|
|
||||||
|
static inline void mp_hal_wake_main_task_from_isr(void) {
|
||||||
|
// Defined for tinyusb support, nothing needs to be done here.
|
||||||
|
}
|
||||||
|
|
||||||
void mp_hal_delay_ms(mp_uint_t ms);
|
void mp_hal_delay_ms(mp_uint_t ms);
|
||||||
void mp_hal_delay_us(mp_uint_t us);
|
void mp_hal_delay_us(mp_uint_t us);
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,10 @@ static inline int mp_hal_status_to_neg_errno(HAL_StatusTypeDef status) {
|
|||||||
NORETURN void mp_hal_raise(HAL_StatusTypeDef status);
|
NORETURN void mp_hal_raise(HAL_StatusTypeDef status);
|
||||||
void mp_hal_set_interrupt_char(int c); // -1 to disable
|
void mp_hal_set_interrupt_char(int c); // -1 to disable
|
||||||
|
|
||||||
|
static inline void mp_hal_wake_main_task_from_isr(void) {
|
||||||
|
// Defined for tinyusb support, nothing needs to be done here.
|
||||||
|
}
|
||||||
|
|
||||||
// timing functions
|
// timing functions
|
||||||
|
|
||||||
#include "irq.h"
|
#include "irq.h"
|
||||||
|
|||||||
@@ -77,6 +77,10 @@ void mp_thread_end_atomic_section(uint32_t);
|
|||||||
void mp_hal_set_interrupt_char(int c);
|
void mp_hal_set_interrupt_char(int c);
|
||||||
void mp_hal_time_ns_set_from_rtc(void);
|
void mp_hal_time_ns_set_from_rtc(void);
|
||||||
|
|
||||||
|
static inline void mp_hal_wake_main_task_from_isr(void) {
|
||||||
|
// Defined for tinyusb support, nothing needs to be done here.
|
||||||
|
}
|
||||||
|
|
||||||
static inline void mp_hal_delay_us_fast(mp_uint_t us) {
|
static inline void mp_hal_delay_us_fast(mp_uint_t us) {
|
||||||
busy_wait_us(us);
|
busy_wait_us(us);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,10 @@ uint64_t mp_hal_ticks_us_64(void);
|
|||||||
|
|
||||||
void mp_hal_set_interrupt_char(int c);
|
void mp_hal_set_interrupt_char(int c);
|
||||||
|
|
||||||
|
static inline void mp_hal_wake_main_task_from_isr(void) {
|
||||||
|
// Defined for tinyusb support, nothing needs to be done here.
|
||||||
|
}
|
||||||
|
|
||||||
__attribute__((always_inline)) static inline void enable_irq(uint32_t state) {
|
__attribute__((always_inline)) static inline void enable_irq(uint32_t state) {
|
||||||
__set_PRIMASK(state);
|
__set_PRIMASK(state);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "py/mpconfig.h"
|
#include "py/mphal.h"
|
||||||
|
|
||||||
#if MICROPY_HW_ENABLE_USBDEV
|
#if MICROPY_HW_ENABLE_USBDEV
|
||||||
|
|
||||||
@@ -55,6 +55,7 @@ extern void __real_dcd_event_handler(dcd_event_t const *event, bool in_isr);
|
|||||||
TU_ATTR_FAST_FUNC void __wrap_dcd_event_handler(dcd_event_t const *event, bool in_isr) {
|
TU_ATTR_FAST_FUNC void __wrap_dcd_event_handler(dcd_event_t const *event, bool in_isr) {
|
||||||
__real_dcd_event_handler(event, in_isr);
|
__real_dcd_event_handler(event, in_isr);
|
||||||
mp_usbd_schedule_task();
|
mp_usbd_schedule_task();
|
||||||
|
mp_hal_wake_main_task_from_isr();
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_FAST_FUNC void mp_usbd_schedule_task(void) {
|
TU_ATTR_FAST_FUNC void mp_usbd_schedule_task(void) {
|
||||||
|
|||||||
Reference in New Issue
Block a user