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

📄 uart_403.c

📁 完整的Bell实验室的嵌入式文件系统TFS
💻 C
字号:
/*  uart_403.c: *  This file contains the PPC403 generic serial port driver. * *  General notice: *  This code is part of a boot-monitor package developed as a generic base *  platform for embedded system designs.  As such, it is likely to be *  distributed to various projects beyond the control of the original *  author.  Please notify the author of any enhancements made or bugs found *  so that all may benefit from the changes.  In addition, notification back *  to the author will allow the new user to pick up changes that may have *  been made by other users after this version of the code was distributed. * *  Note1: the majority of this code was edited with 4-space tabs. *  Note2: as more and more contributions are accepted, the term "author" *         is becoming a mis-representation of credit. * *  Original author:    Ed Sutter *  Email:              esutter@lucent.com *  Phone:              908-582-2351 */#include "config.h"#include "cpuio.h"#include "genlib.h"#include "ether.h"#include "stddefs.h"#include "cpu_403.h"int ConsoleBaudRate;int (*remoterawon)(), (*remoterawoff)();int (*remoteputchar)(), (*remotegetchar)(), (*remotegotachar)();/* InitUART():    Fed the baudrate.*/intInit403UART(int baud){    int divisor, brdl, brdh;    if (baud == 0)        baud = ConsoleBaudRate;    /* Keep track of the last baud rate, so that it can be used if the */    /* incoming baudrate is NULL. */    ConsoleBaudRate = baud;    /* Compute Baud Rate Divisor value */    divisor = (MON_CPU_CLOCK/(16*baud)) - 1;    brdl = divisor & 0xff;    brdh = divisor / 0x100;    /* Initialize 403GCX UART: */    CPU_SPU_SPRC = 0;           /* Disable xmitter and receiver */    CPU_SPU_SPTC = 0;    CPU_SPU_SPLS = 0xf8;        /* Clear bits in line status reg */    CPU_SPU_BRDL = brdl;        /* Set baud rate divisor lsb    */    CPU_SPU_BRDH = brdh;        /* Set baud rate divisor msb    */    CPU_SPU_SPCTL = 0x38;       /* Set DTR & RTS, 8 bits, no parity */    CPU_SPU_SPRC = 0x80;        /* Enable receiver      */    CPU_SPU_SPTC = 0x80;        /* Enable transmitter       */    CPU_SPU_SPHS = 0xc0;        /* Clear bits in handshake reg  */    InitRemoteIO();    return(0);}/* rputchar():    Raw put char.*/intrputchar403(char c){    /* First check to see if the default rputchar() function has */    /* been overridden... */    if (remoteputchar) {        remoteputchar(c);        return((int)c);    }    while ((CPU_SPU_SPLS & CPU_SPLS_TBR) == 0);    CPU_SPU_SPTB = c;#if INCLUDE_ETHERNET    SendIPMonChar(c,0);#endif    return((int)c);}intputchar403(char c){    if (c == '\n')        rputchar403('\r');    return(rputchar403(c));}/* gotachar():    Return 0 if no char is avaialable at UART rcv fifo; else 1.    Do NOT pull character out of fifo, just return status. */intgotachar403(){    if (remotegotachar)        return(remotegotachar());    if ((CPU_SPU_SPLS & CPU_SPLS_RBR) != 0)        return(1);    return(0);}/* getchar():    Block on the Uart's status until a byte is available in the     receive buffer, then return with it.*/int getchar403(){    char    c;    /* First check to see if the default getchar() function has */    /* been overridden... */    if (remotegetchar)        return(remotegetchar());        while(!gotachar403()) {#if INCLUDE_ETHERNET        pollethernet();#endif    }    c = CPU_SPU_SPRB;    return((int)c);}

⌨️ 快捷键说明

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