void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) { #ifdef CONFIG_MBED_ENABLED if (obj->index == UART_3) { if (irq == RxIrq) { log_uart_irq_set(&stdio_uart_log, IIR_RX_RDY, enable); } else { log_uart_irq_set(&stdio_uart_log, IIR_THR_EMPTY, enable); } return; } #endif PHAL_RUART_ADAPTER pHalRuartAdapter; PHAL_RUART_OP pHalRuartOp; u8 uart_idx; pHalRuartAdapter = &(obj->hal_uart_adp); pHalRuartOp = &(obj->hal_uart_op); uart_idx = pHalRuartAdapter->UartIndex; if (enable) { if (irq == RxIrq) { pHalRuartAdapter->Interrupts |= RUART_IER_ERBI | RUART_IER_ELSI; serial_irq_en[uart_idx] |= SERIAL_RX_IRQ_EN; HalRuartSetIMRRtl8195a (pHalRuartAdapter); } else { serial_irq_en[uart_idx] |= SERIAL_TX_IRQ_EN; } pHalRuartOp->HalRuartRegIrq(pHalRuartAdapter); //log_uart pHalRuartOp->HalRuartIntEnable(pHalRuartAdapter); } else { // disable if (irq == RxIrq) { pHalRuartAdapter->Interrupts &= ~(RUART_IER_ERBI | RUART_IER_ELSI); serial_irq_en[uart_idx] &= ~SERIAL_RX_IRQ_EN; } else { pHalRuartAdapter->Interrupts &= ~RUART_IER_ETBEI; serial_irq_en[uart_idx] &= ~SERIAL_TX_IRQ_EN; } HalRuartSetIMRRtl8195a (pHalRuartAdapter); if (pHalRuartAdapter->Interrupts == 0) { InterruptUnRegister(&pHalRuartAdapter->IrqHandle); InterruptDis(&pHalRuartAdapter->IrqHandle); } } }
static void serial_loguart_irq_handler(uint32_t id, LOG_UART_INT_ID event) { log_uart_irq_set(&stdio_uart_log, event, 0); if (log_irq_handler) { if (event == IIR_RX_RDY || event == IIR_CHAR_TIMEOUT) { log_irq_handler(serial_log_irq_ids, RxIrq); } else if (event == IIR_THR_EMPTY) { log_irq_handler(serial_log_irq_ids, TxIrq); } } return; }
void LOGUARTClass::begin( const uint32_t dwBaudRate ) { #if LOG_UART_MODIFIABLE_BAUD_RATE /* log uart initialize in 38400 baud rate. * If we change baud rate here, Serail Monitor would not detect this change and show nothing on screen. */ log_uart_init(&log_uart_obj, dwBaudRate, 8, ParityNone, 1); #else log_uart_init(&log_uart_obj, 38400, 8, ParityNone, 1); #endif log_uart_irq_set(&log_uart_obj, IIR_RX_RDY, 1); log_uart_irq_handler(&log_uart_obj, arduino_loguart_irq_handler, (uint32_t)_rx_buffer); }