📄 hw_uart.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 + -