示例#1
0
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);
        }
    }
}
示例#2
0
文件: serial_api.c 项目: pan-/mbed
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;
}
示例#3
0
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);
}