⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hw_uart.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*   Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  uart.c
Desc :  uart接口函数的实现

Author : huangxinyu
Date : 2007-05-30
Notes :

$Log: hw_uart.c,v $
Revision 1.2  2008/06/19 04:43:36  Administrator
代码整理!

Revision 1.1.1.1  2008/05/07 04:15:08  Administrator
no message

Revision 1.1.1.1  2008/03/06 13:29:08  Lingzhaojun
no message

Revision 1.5  2007/12/24 07:56:17  Lingzhaojun
同步蓝魔版本基本模块

Revision 1.1.1.1  2007/12/01 01:30:13  Lingzhaojun
no message

Revision 1.4  2007/10/17 01:58:51  Huangxinyu
完善串口

Revision 1.3  2007/10/13 02:34:24  Huangshilin
System

Revision 1.2  2007/10/08 02:38:49  Lingzhaojun
添加版本自动注释脚本

* huangxinyu   2007-06-01     修改uart接口名称
*********************************************************************/

/*********************************************************************
 INCLUDE FILES
*********************************************************************/
#include "include.h"
#include "hw_uart.h"
#include "hw_scu.h"
/*********************************************************************
 GLOBAL DEFINITIONS
*********************************************************************/
#define LCRVAL LCR_8N1     /* 8 data, 1 stop, no parity */
#define MCRVAL (MCR_DTR | MCR_RTS)   /* RTS/DTR */
#define FCRVAL (FCR_FIFO_EN | FCR_RXSR | FCR_TXSR) /* Clear & enable FIFOs */
/*********************************************************************
 GLOBAL OR STATIC VARIABLES
*********************************************************************/

/*********************************************************************
 STATIC FUNCTION PROTOTYPES
*********************************************************************/

/*********************************************************************
 EXPORTED FUNCTIONS
*********************************************************************/
/**************************************************************************
* 函数描述: 初始化UART端口
* 入口参数: port -- uart端口号
*           baud_divisor -- 波特率分频因子
* 出口参数: 无
* 返回值:   无
***************************************************************************/
#ifdef DLL

//for dll ,0: OK , other: ERROR.
INT32U Uart_ModelInit(PKDRV_UART_IFACE iFace)
{
//    if(iFace!= NULL  &&  iFace->iGUID != GUID_DRV_UART || iFace->iSIze != sizeof(KDRV_UART_IFACE) )
//        return 1;
    iFace->Uart_PowerOnInit = Uart_PowerOnInit;
    iFace->Uart_ReadChar = Uart_ReadChar;
    iFace->Uart_WriteChar = Uart_WriteChar;
    iFace->Uart_PowerOffDeinit = Uart_PowerOffDeinit;
    return 0;
}
#endif

void Uart_PowerOnInit(puartRegister_t port, int baud_divisor)
{

    port->ier = 0x00;  // disable uart interrupt, use polling

    port->lcr = LCR_BKSE | LCRVAL;  // The divisor latches can be accessed.
    // 8 bit

    port->dll = baud_divisor & 0xff;
    port->dlm = (baud_divisor >> 8) & 0xff;


    port->lcr = LCRVAL;  // 设置baud之后要恢复lcr设置
    port->mcr = MCRVAL;  // 设置RTS和DTR
    port->fcr = FCRVAL;  // Enable FIFO  Clear TX FIFO Clear RX FIFO

}

/**************************************************************************
* 函数描述: 从UART端口读一个字符
* 入口参数: port -- uart端口号
* 出口参数: 无
* 返回值:   读到的字符
***************************************************************************/
char Uart_ReadChar(puartRegister_t port)
{

    if (port == (puartRegister_t)APB0_UART0_BASE)
    {
        if (ReadReg32(&pSCUReg->SCU_CLKCFG)& UART0_CLK_DIS)
            return 0;
    }
    else
    {
        if (ReadReg32(&pSCUReg->SCU_CLKCFG)& UART1_CLK_DIS)
            return 0;
    }

#if 1
    while ((port->lsr & LSR_DR) == 0); // 1 indicate data ready
    return (port->rbr);
#else
    if ((port->lsr & LSR_DR) == 0)
        return INVALID_CHAR;
    else
        return (port->rbr);
#endif
}

/**************************************************************************
* 函数描述: 向UART端口写一个字符
* 入口参数: port -- uart端口号
*           c -- 写入的字符
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void Uart_WriteChar(puartRegister_t port, char c)
{
    if (port == (puartRegister_t)APB0_UART0_BASE)
    {
        if (ReadReg32(&pSCUReg->SCU_CLKCFG)& UART0_CLK_DIS)
            return;
    }
    else
    {
        if (ReadReg32(&pSCUReg->SCU_CLKCFG)& UART1_CLK_DIS)
            return;
    }

    while ((port->lsr & LSR_THRE) == 0); // wait for TX FIFO empty(1)
    port->thr = c;
}

/**************************************************************************
* 函数描述: UART端口FIFO是否有数据
* 入口参数: port -- uart端口号
* 出口参数: 无
* 返回值:   1 -- 表示FIFO有数据
*           0 -- 表示FIFO没有数据
***************************************************************************/
int Uart_Tstc(puartRegister_t port)
{
    return ((port->lsr & LSR_DR) != 0);  // 1 indicate data ready
}

/**************************************************************************
* 函数描述: 反初始化UART端口
* 入口参数: port -- uart端口号
*           baud_divisor -- 波特率分频因子
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void Uart_PowerOffDeinit(puartRegister_t port, int baud_divisor)
{
    port->ier = 0x00;
    port->lcr = LCR_BKSE;
    port->dll = baud_divisor & 0xff;
    port->dlm = (baud_divisor >> 8) & 0xff;
    port->lcr = LCRVAL;
    port->mcr = MCRVAL;
    port->fcr = FCRVAL;
}
/*********************************************************************
 PRIVATE FUNCTIONS
*********************************************************************/

/*********************************************************************
 END OF FILE
*********************************************************************/


⌨️ 快捷键说明

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