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

📄 xuartns550_selftest.c

📁 powerpc405下linux的串口驱动程序
💻 C
字号:
/* $Id: xuartns550_selftest.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_selftest.c** This file contains the self-test functions for the 16450/16550 UART driver.** <pre>* MODIFICATION HISTORY:** Ver   Who  Date     Changes* ----- ---- -------- -----------------------------------------------* 1.00a ecm  08/16/01 First release* 1.00b jhl  03/11/02 Repartitioned driver for smaller files.* </pre>*******************************************************************************//***************************** Include Files *********************************/#include "xstatus.h"#include "xuartns550.h"#include "xuartns550_i.h"#include "xio.h"/************************** Constant Definitions *****************************//**************************** Type Definitions *******************************//***************** Macros (Inline Functions) Definitions *********************/#define XUN_TOTAL_BYTES 32/************************** Variable Definitions *****************************/static Xuint8 TestString[XUN_TOTAL_BYTES + 1] =                                        "abcdefghABCDEFGH0123456776543210";static Xuint8 ReturnString[XUN_TOTAL_BYTES + 1];/************************** Function Prototypes ******************************//****************************************************************************//**** This functions runs a self-test on the driver and hardware device. This self* test performs a local loopback and verifies data can be sent and received.** The statistics are cleared at the end of the test. The time for this test* to execute is proportional to the baud rate that has been set prior to* calling this function.** @param    InstancePtr is a pointer to the XUartNs550 instance to be worked on.** @return** - XST_SUCCESS if the test was successful* - XST_UART_TEST_FAIL if the test failed looping back the data** @note** This function can hang if the hardware is not functioning properly.*******************************************************************************/XStatus XUartNs550_SelfTest(XUartNs550 *InstancePtr){    XStatus Status = XST_SUCCESS;    Xuint8 McrRegister;    Xuint8 LsrRegister;    Xuint8 IerRegister;    Xuint8 Index;    /*     * Assert validates the input arguments     */    XASSERT_NONVOID(InstancePtr != XNULL);    XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);    /*     * Setup for polling by disabling all interrupts in the interrupt enable     * register     */    IerRegister = XIo_In8(InstancePtr->BaseAddress + XUN_IER_OFFSET);    XIo_Out8(InstancePtr->BaseAddress + XUN_IER_OFFSET, 0);    /*     * Setup for loopback by enabling the loopback in the modem control     * register     */    McrRegister = XIo_In8(InstancePtr->BaseAddress + XUN_MCR_OFFSET);    XIo_Out8(InstancePtr->BaseAddress + XUN_MCR_OFFSET,             McrRegister | XUN_MCR_LOOP);    /* Send a number of bytes and receive them, one at a time so this     * test will work for 450 and 550     */    for (Index = 0; Index < XUN_TOTAL_BYTES; Index++)    {        /*         * Send out the byte and if it was not sent then the failure will         * be caught in the compare at the end         */        XUartNs550_Send(InstancePtr, &TestString[Index], 1);        /*         * Wait til the byte is received such that it should be waiting         * in the receiver. This can hang if the HW is broken.         */        do        {            LsrRegister = XIo_In8(InstancePtr->BaseAddress +                  XUN_LSR_OFFSET);        }        while ((LsrRegister & XUN_LSR_DATA_READY) == 0);        /*         * Receive the byte that should have been received because of the         * loopback, if it wasn't received then it will be caught in the         * compare at the end         */        XUartNs550_Recv(InstancePtr, &ReturnString[Index], 1);    }    /*     * Clear the stats since they are corrupted by the test     */    XUartNs550_mClearStats(InstancePtr);    /*     * Compare the bytes received to the bytes sent to verify the exact data     * was received     */    for (Index = 0; Index < XUN_TOTAL_BYTES; Index++)    {        if (TestString[Index] != ReturnString[Index])        {            Status = XST_UART_TEST_FAIL;        }    }    /*     * Restore the registers which were altered to put into polling and loopback     * modes so that this test is not destructive     */    XIo_Out8(InstancePtr->BaseAddress + XUN_IER_OFFSET, IerRegister);    XIo_Out8(InstancePtr->BaseAddress + XUN_MCR_OFFSET, McrRegister);    return Status;}

⌨️ 快捷键说明

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