![]() |
|
|||
File indexing completed on 2025-05-11 08:23:43
0001 /* SPDX-License-Identifier: BSD-2-Clause */ 0002 0003 /* 0004 * Uart driver for Lattice Mico32 (lm32) UART 0005 */ 0006 0007 /* 0008 * COPYRIGHT (c) 1989-1999. 0009 * On-Line Applications Research Corporation (OAR). 0010 * 0011 * Redistribution and use in source and binary forms, with or without 0012 * modification, are permitted provided that the following conditions 0013 * are met: 0014 * 1. Redistributions of source code must retain the above copyright 0015 * notice, this list of conditions and the following disclaimer. 0016 * 2. Redistributions in binary form must reproduce the above copyright 0017 * notice, this list of conditions and the following disclaimer in the 0018 * documentation and/or other materials provided with the distribution. 0019 * 0020 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 0021 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 0022 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 0023 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 0024 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 0025 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 0026 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 0027 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 0028 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 0029 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 0030 * POSSIBILITY OF SUCH DAMAGE. 0031 * 0032 * Jukka Pietarinen <jukka.pietarinen@mrf.fi>, 2008, 0033 * Micro-Research Finland Oy 0034 */ 0035 0036 #include "../include/system_conf.h" 0037 #include "uart.h" 0038 #include <bsp.h> 0039 #include <rtems/libio.h> 0040 0041 static inline int uartread(unsigned int reg) 0042 { 0043 return *((int*)(UART_BASE_ADDRESS + reg)); 0044 } 0045 0046 static inline void uartwrite(unsigned int reg, int value) 0047 { 0048 *((int*)(UART_BASE_ADDRESS + reg)) = value; 0049 } 0050 0051 void BSP_uart_init(int baud) 0052 { 0053 /* Disable UART interrupts */ 0054 uartwrite(LM32_UART_IER, 0); 0055 0056 /* Line control 8 bit, 1 stop, no parity */ 0057 uartwrite(LM32_UART_LCR, LM32_UART_LCR_8BIT); 0058 0059 /* Modem control, DTR = 1, RTS = 1 */ 0060 uartwrite(LM32_UART_MCR, LM32_UART_MCR_DTR | LM32_UART_MCR_RTS); 0061 0062 /* Set baud rate */ 0063 uartwrite(LM32_UART_DIV, CPU_FREQUENCY/baud); 0064 } 0065 0066 void BSP_uart_polled_write(char ch) 0067 { 0068 /* Insert CR before LF */ 0069 if (ch == '\n') 0070 BSP_uart_polled_write('\r'); 0071 /* Wait until THR is empty. */ 0072 while (!(uartread(LM32_UART_LSR) & LM32_UART_LSR_THRE)); 0073 uartwrite(LM32_UART_RBR, ch); 0074 } 0075 0076 int BSP_uart_polled_read( void ) 0077 { 0078 /* Wait until there is a byte in RBR */ 0079 while (!(uartread(LM32_UART_LSR) & LM32_UART_LSR_DR)); 0080 return (int) uartread(LM32_UART_RBR); 0081 } 0082 0083 char BSP_uart_is_character_ready(char *ch) 0084 { 0085 if (uartread(LM32_UART_LSR) & LM32_UART_LSR_DR) 0086 { 0087 *ch = (char) uartread(LM32_UART_RBR); 0088 return true; 0089 } 0090 *ch = '0'; 0091 return false; 0092 }
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |