Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface mbed-rtos
UART.cpp
00001 #define RTNO_SUBMODULE_DEFINE 00002 00003 #include "mbed.h" 00004 #include "UART.h" 00005 00006 #define UART_RX_BUFFER_SIZE 64 00007 00008 static Serial *m_pSerial; 00009 unsigned char uart_rx_buffer[UART_RX_BUFFER_SIZE]; 00010 int uart_rx_buffer_pointer_head = 0; 00011 int uart_rx_buffer_pointer_tail = 0; 00012 00013 00014 /** 00015 * Push data to ring buffer. 00016 */ 00017 int uart_rx_buffer_push(unsigned char* c) { 00018 uart_rx_buffer[uart_rx_buffer_pointer_tail] = *c; 00019 uart_rx_buffer_pointer_tail++; 00020 if(uart_rx_buffer_pointer_tail >= UART_RX_BUFFER_SIZE) { 00021 uart_rx_buffer_pointer_tail = 0; 00022 } 00023 return 0; 00024 } 00025 00026 00027 00028 /** 00029 * Pop data fron ring buffer 00030 */ 00031 int uart_rx_buffer_pop(unsigned char *c) { 00032 *c = uart_rx_buffer[uart_rx_buffer_pointer_head]; 00033 uart_rx_buffer_pointer_head++; 00034 if(uart_rx_buffer_pointer_head >= UART_RX_BUFFER_SIZE) { 00035 uart_rx_buffer_pointer_head = 0; 00036 } 00037 return 0; 00038 } 00039 00040 int uart_rx_buffer_get_size() { 00041 int size = uart_rx_buffer_pointer_tail - uart_rx_buffer_pointer_head; 00042 if(size < 0) { 00043 size += UART_RX_BUFFER_SIZE; 00044 } 00045 return size; 00046 } 00047 00048 void rx_isr(void) { 00049 int8_t c = m_pSerial->getc(); 00050 uart_rx_buffer_push((uint8_t*)&c); 00051 } 00052 00053 00054 00055 void UART_init(unsigned char num, unsigned long baudrate) 00056 { 00057 PinName rx, tx; 00058 switch(num) { 00059 case 0: 00060 rx = USBRX; tx = USBTX; 00061 break; 00062 case 1: 00063 tx = p9, rx = p10; 00064 break; 00065 case 2: 00066 tx = p13, rx = p14; 00067 break; 00068 case 3: 00069 tx = p28, rx = p27; 00070 break; 00071 } 00072 00073 m_pSerial = new Serial(tx, rx); 00074 m_pSerial->baud(baudrate); 00075 m_pSerial->attach(rx_isr, Serial::RxIrq); 00076 00077 SerialDevice_putc = UART_putc; 00078 SerialDevice_getc = UART_getc; 00079 SerialDevice_available = UART_available; 00080 } 00081 00082 void UART_putc(const char c) { 00083 while(!m_pSerial->writeable()) { 00084 wait_us(100); 00085 } 00086 m_pSerial->putc(c); 00087 } 00088 00089 uint8_t UART_available() 00090 { 00091 return uart_rx_buffer_get_size(); 00092 } 00093 00094 00095 uint8_t UART_getc() 00096 { 00097 unsigned char c; 00098 uart_rx_buffer_pop(&c); 00099 return c; 00100 }
Generated on Fri Jul 22 2022 21:22:50 by
1.7.2