omap730serial.c

来自「OMAP730 UART 驱动源码」· C语言 代码 · 共 90 行

C
90
字号
BOOL OEMDebugInit()
{
    OMAP730_UART_REGS *pUartRegs;
    OMAP730_CONFIG_REGS *pConfigRegs;

    pUartRegs = (OMAP730_UART_REGS *)OMAP730_UART1_REGS_PA;
    pConfigRegs = (OMAP730_CONFIG_REGS *)OMAP730_CONFIG_REGS_PA;

    // Enable UART1 48MHz clock
    SETREG32(&pConfigRegs->PCC_CONF_REG, PCC_CONF_UART1_DPLL_REQ);

    // Reset UART & wait until it completes
    OUTREG8(&pUartRegs->SYSC, UART_SYSC_RST);
    while ((INREG8(&pUartRegs->SYSS) & UART_SYSS_RST_DONE) == 0);
    // Set baud rate
    OUTREG8(&pUartRegs->LCR, UART_LCR_DLAB);
    OUTREG8(&pUartRegs->DLL, BSP_UART_DSIUDLL);
    OUTREG8(&pUartRegs->DLH, BSP_UART_DSIUDLH);
    // 8 bit, 1 stop bit, no parity
    OUTREG8(&pUartRegs->LCR, BSP_UART_LCR);
    // Enable FIFO
    OUTREG8(&pUartRegs->FCR, UART_FCR_FIFO_EN);
    // Pool
    OUTREG8(&pUartRegs->IER, 0);
    // Set DTR/RTS signals
    OUTREG8(&pUartRegs->MCR, UART_MCR_DTR|UART_MCR_RTS);
    // Configuration complete so select UART 16x mode
    OUTREG8(&pUartRegs->MDR1, UART_MDR1_UART16);

    return TRUE;
}

//------------------------------------------------------------------------------
//
//  Function:  OEMDebugDeinit
//
//  Close debug serial port
//
VOID OEMDebugDeinit()
{
    OMAP730_UART_REGS *pUartRegs;
    OMAP730_CONFIG_REGS *pConfigRegs;

    pUartRegs = (OMAP730_UART_REGS *)OMAP730_UART1_REGS_PA;
    pConfigRegs = (OMAP730_CONFIG_REGS *)OMAP730_CONFIG_REGS_PA;

    // Wait while FIFO isn't empty
    while ((INREG8(&pUartRegs->LSR) & UART_LSR_TX_SR_E) == 0);
    // Stop UART1 48-MHz clock
    CLRREG32(&pConfigRegs->PCC_CONF_REG, PCC_CONF_UART1_DPLL_REQ);
}

//------------------------------------------------------------------------------
//
//  Function:  OEMWriteDebugByte
//
//  Write byte to debug serial port.
//
VOID OEMWriteDebugByte(UINT8 ch)
{
    OMAP730_UART_REGS *pUartRegs = (OMAP730_UART_REGS *)OMAP730_UART1_REGS_PA;

    // Wait while FIFO is full
    while ((INREG8(&pUartRegs->SSR) & UART_SSR_TX_FIFO_FULL) != 0);
    // Send byte
    OUTREG8(&pUartRegs->THR, ch);
}

//------------------------------------------------------------------------------
//
//  Function:  OEMReadDebugByte
//
//  Input character/byte from debug serial port
//
INT OEMReadDebugByte()
{
    OMAP730_UART_REGS *pUartRegs = (OMAP730_UART_REGS *)OMAP730_UART1_REGS_PA;
    UINT8 ch = OEM_DEBUG_READ_NODATA;
    UINT8 status;

    status = INREG8(&pUartRegs->LSR);
	  OEMWriteDebugByte(status);
    if ((status & UART_LSR_RX_FIFO_E) != 0) {
        ch = INREG8(&pUartRegs->RHR);
		OEMWriteDebugByte(ch);
        if ((status & UART_LSR_RX_ERROR) != 0) ch = OEM_DEBUG_COM_ERROR;
    }
    return (INT)ch;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?