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

📄 xuartns550_l.c

📁 powerpc405下linux的串口驱动程序
💻 C
字号:
/* $Id: xuartns550_l.c,v 1.1 2006/02/17 22:43:40 moleres Exp $ *//********************************************************************************       XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"*       AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND*       SOLUTIONS FOR XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE,*       OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,*       APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION*       THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,*       AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE*       FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY*       WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE*       IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR*       REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF*       INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS*       FOR A PARTICULAR PURPOSE.**       (c) Copyright 2002 Xilinx Inc.*       All rights reserved.*******************************************************************************//*****************************************************************************//**** @file xuartns550_l.c** This file contains low-level driver functions that can be used to access the* device.  The user should refer to the hardware device specification for more* details of the device operation.** <pre>* MODIFICATION HISTORY:** Ver   Who  Date     Changes* ----- ---- -------- -----------------------------------------------* 1.00b jhl  04/24/02 First release* </pre>*******************************************************************************//***************************** Include Files *********************************/#include "xuartns550_l.h"/************************** Constant Definitions *****************************//**************************** Type Definitions *******************************//***************** Macros (Inline Functions) Definitions *********************//************************** Function Prototypes ******************************//************************** Variable Definitions *****************************//****************************************************************************//**** This function sends a data byte with the UART. This function operates in the* polling mode and blocks until the data has been put into the UART transmit* holding register.** @param    BaseAddress contains the base address of the UART.* @param    Data contains the data byte to be sent.** @return   None.** @note     None.******************************************************************************/void XUartNs550_SendByte(Xuint32 BaseAddress, Xuint8 Data){    /* Wait til we know that the byte can be sent, the 550 does not have any     * way to tell how much room is in the FIFO such that we must wait for     * it to be empty     */    while (!XUartNs550_mIsTransmitEmpty(BaseAddress));    /* Write the data byte to the UART to be transmitted */    XUartNs550_mWriteReg(BaseAddress, XUN_THR_OFFSET, Data);}/****************************************************************************//**** This function receives a byte from the UART.  It operates in a polling mode* and blocks until a byte of data is received.** @param    BaseAddress contains the base address of the UART.** @return   The data byte received by the UART.** @note     None.******************************************************************************/Xuint8 XUartNs550_RecvByte(Xuint32 BaseAddress){   /* Wait for there to be data received */   while (!XUartNs550_mIsReceiveData(BaseAddress));   /* Return the next data byte the UART received */   return XUartNs550_mReadReg(BaseAddress, XUN_RBR_OFFSET);}/******************************************************************************* Set the baud rate for the UART.** @param    BaseAddress contains the base address of the UART.* @param    InputClockHz is the frequency of the input clock to the device in*           Hertz.* @param    BaudRate is the baud rate to be set.** @return** None.** @note** None.******************************************************************************/void XUartNs550_SetBaud(Xuint32 BaseAddress, Xuint32 InputClockHz,                        Xuint32 BaudRate){    Xuint8 BaudLSB;    Xuint8 BaudMSB;    Xuint8 LcrRegister;    Xuint32 Divisor;    /*     * Determine what the divisor should be to get the specified baud     * rater based upon the input clock frequency and a baud clock prescaler     * of 16     */    Divisor = InputClockHz / (BaudRate * 16UL);    /* Get the least significant and most significant bytes of the divisor     * so they can be written to 2 byte registers     */    BaudLSB = Divisor & XUN_DIVISOR_BYTE_MASK;    BaudMSB = (Divisor >> 8) & XUN_DIVISOR_BYTE_MASK;    /* Get the line control register contents and set the divisor latch     * access bit so the baud rate can be set     */    LcrRegister = XUartNs550_mReadReg(BaseAddress, XUN_LCR_OFFSET);    XUartNs550_mWriteReg(BaseAddress, XUN_LCR_OFFSET,                         LcrRegister | XUN_LCR_DLAB);    /*     * Set the baud Divisors to set rate, the initial write of 0xFF is to keep     * the divisor from being 0 which is not recommended as per the NS16550D     * spec sheet     */    XUartNs550_mWriteReg(BaseAddress, XUN_DRLS_OFFSET, 0xFF);    XUartNs550_mWriteReg(BaseAddress, XUN_DRLM_OFFSET, BaudMSB);    XUartNs550_mWriteReg(BaseAddress, XUN_DRLS_OFFSET, BaudLSB);    /*     * Clear the Divisor latch access bit, DLAB to allow nornal     * operation and write to the line control register     */    XUartNs550_mWriteReg(BaseAddress, XUN_LCR_OFFSET, LcrRegister);}

⌨️ 快捷键说明

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