diff --git a/epicardium/cdcacm.c b/epicardium/cdcacm.c index 5bc8f706d8e3ef24bbb415cfe341d1cc61e6b023..fd0f2d8614ba034458b987072298870288227089 100644 --- a/epicardium/cdcacm.c +++ b/epicardium/cdcacm.c @@ -172,6 +172,8 @@ void cdcacm_init(void) /* Start with USB in low power mode */ usb_app_sleep(); + /* TODO: Fix priority */ + NVIC_SetPriority(USB_IRQn, 6); NVIC_EnableIRQ(USB_IRQn); } @@ -338,9 +340,19 @@ static int usb_read_callback(void) } /******************************************************************************/ +#include "FreeRTOS.h" +#include "task.h" + +extern TaskHandle_t serial_task_id; void USB_IRQHandler(void) { usb_event_handler(); + + if (serial_task_id != NULL) { + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + vTaskNotifyGiveFromISR(serial_task_id, &xHigherPriorityTaskWoken); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + } } /******************************************************************************/ diff --git a/epicardium/serial.c b/epicardium/serial.c index 0b956422a98123a2287a59f8cd1c45cf7a7af980..ac9e1ce0c72fca5b998fb546805d2e57e9722c45 100644 --- a/epicardium/serial.c +++ b/epicardium/serial.c @@ -13,7 +13,7 @@ #include "queue.h" /* Task ID for the serial handler */ -TaskHandle_t serial_task_id; +TaskHandle_t serial_task_id = NULL; /* The serial console in use (UART0) */ extern mxc_uart_regs_t* ConsoleUart; @@ -109,5 +109,9 @@ void vSerialTask(void*pvParameters) while (UART_NumReadAvail(ConsoleUart) > 0) { enqueue_char(UART_ReadByte(ConsoleUart)); } + + while (cdcacm_num_read_avail() > 0) { + enqueue_char(cdcacm_read()); + } } }