mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Jun 21 17:46:44 2017 +0100
Revision:
167:e84263d55307
This updates the lib to the mbed lib v 145

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /* mbed Microcontroller Library
AnnaBridge 167:e84263d55307 2 * Copyright (c) 2013-2016 Realtek Semiconductor Corp.
AnnaBridge 167:e84263d55307 3 *
AnnaBridge 167:e84263d55307 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 167:e84263d55307 5 * you may not use this file except in compliance with the License.
AnnaBridge 167:e84263d55307 6 * You may obtain a copy of the License at
AnnaBridge 167:e84263d55307 7 *
AnnaBridge 167:e84263d55307 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 167:e84263d55307 9 *
AnnaBridge 167:e84263d55307 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 167:e84263d55307 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 167:e84263d55307 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 167:e84263d55307 13 * See the License for the specific language governing permissions and
AnnaBridge 167:e84263d55307 14 * limitations under the License.
AnnaBridge 167:e84263d55307 15 */
AnnaBridge 167:e84263d55307 16
AnnaBridge 167:e84263d55307 17 #include "objects.h"
AnnaBridge 167:e84263d55307 18 #include "log_uart_api.h"
AnnaBridge 167:e84263d55307 19
AnnaBridge 167:e84263d55307 20 #include <string.h>
AnnaBridge 167:e84263d55307 21
AnnaBridge 167:e84263d55307 22 const u32 log_uart_support_rate[] = {
AnnaBridge 167:e84263d55307 23 UART_BAUD_RATE_2400, UART_BAUD_RATE_4800, UART_BAUD_RATE_9600,
AnnaBridge 167:e84263d55307 24 UART_BAUD_RATE_19200, UART_BAUD_RATE_38400, UART_BAUD_RATE_57600,
AnnaBridge 167:e84263d55307 25 UART_BAUD_RATE_115200, UART_BAUD_RATE_921600, UART_BAUD_RATE_1152000,
AnnaBridge 167:e84263d55307 26
AnnaBridge 167:e84263d55307 27 0xFFFFFFFF
AnnaBridge 167:e84263d55307 28 };
AnnaBridge 167:e84263d55307 29
AnnaBridge 167:e84263d55307 30 extern HAL_TIMER_OP HalTimerOp;
AnnaBridge 167:e84263d55307 31
AnnaBridge 167:e84263d55307 32 extern u32 ConfigDebugErr;
AnnaBridge 167:e84263d55307 33 extern u32 ConfigDebugWarn;
AnnaBridge 167:e84263d55307 34 extern u32 ConfigDebugInfo;
AnnaBridge 167:e84263d55307 35 extern u32 CfgSysDebugErr;
AnnaBridge 167:e84263d55307 36 extern u32 CfgSysDebugInfo;
AnnaBridge 167:e84263d55307 37 extern u32 CfgSysDebugWarn;
AnnaBridge 167:e84263d55307 38
AnnaBridge 167:e84263d55307 39 extern HAL_Status RuartIsTimeout (u32 StartCount, u32 TimeoutCnt);
AnnaBridge 167:e84263d55307 40 extern u32 HalLogUartInitSetting(HAL_LOG_UART_ADAPTER *pUartAdapter);
AnnaBridge 167:e84263d55307 41 extern VOID HalLogUartSetBaudRate(HAL_LOG_UART_ADAPTER *pUartAdapter);
AnnaBridge 167:e84263d55307 42 extern VOID HalLogUartSetLineCtrl(HAL_LOG_UART_ADAPTER *pUartAdapter);
AnnaBridge 167:e84263d55307 43 extern VOID HalLogUartIrqHandle(VOID * Data);
AnnaBridge 167:e84263d55307 44
AnnaBridge 167:e84263d55307 45 int32_t log_uart_init (log_uart_t *obj, int baudrate, int data_bits, SerialParity parity, int stop_bits)
AnnaBridge 167:e84263d55307 46 {
AnnaBridge 167:e84263d55307 47 HAL_LOG_UART_ADAPTER *pUartAdapter;
AnnaBridge 167:e84263d55307 48 int i;
AnnaBridge 167:e84263d55307 49
AnnaBridge 167:e84263d55307 50 _memset((void*)obj, 0, sizeof(log_uart_t));
AnnaBridge 167:e84263d55307 51 pUartAdapter = &obj->log_hal_uart;
AnnaBridge 167:e84263d55307 52 // Check Baud rate
AnnaBridge 167:e84263d55307 53 for (i=0; log_uart_support_rate[i]!=0xFFFFFF; i++) {
AnnaBridge 167:e84263d55307 54 if (log_uart_support_rate[i] == baudrate) {
AnnaBridge 167:e84263d55307 55 break;
AnnaBridge 167:e84263d55307 56 }
AnnaBridge 167:e84263d55307 57 }
AnnaBridge 167:e84263d55307 58 if (log_uart_support_rate[i]== 0xFFFFFF) {
AnnaBridge 167:e84263d55307 59 DBG_UART_ERR("log_uart_init: Not support Baud Rate %d\n", baudrate);
AnnaBridge 167:e84263d55307 60 return -1;
AnnaBridge 167:e84263d55307 61 }
AnnaBridge 167:e84263d55307 62 // check word width
AnnaBridge 167:e84263d55307 63 if ((data_bits < 5) || (data_bits > 8)) {
AnnaBridge 167:e84263d55307 64 DBG_UART_ERR("log_uart_init: Not support Word Width %d\n", data_bits);
AnnaBridge 167:e84263d55307 65 return -1;
AnnaBridge 167:e84263d55307 66 }
AnnaBridge 167:e84263d55307 67
AnnaBridge 167:e84263d55307 68 //4 Inital Log uart
AnnaBridge 167:e84263d55307 69 pUartAdapter->BaudRate = baudrate;
AnnaBridge 167:e84263d55307 70 pUartAdapter->DataLength = data_bits-5;
AnnaBridge 167:e84263d55307 71 pUartAdapter->FIFOControl = FCR_FIFO_EN | FCR_TX_TRIG_HF | FCR_RX_TRIG_HF;
AnnaBridge 167:e84263d55307 72 // only enable Rx linstatus at initial,
AnnaBridge 167:e84263d55307 73 // Tx & Rx interrupt will be enabled @ transfer start time
AnnaBridge 167:e84263d55307 74 pUartAdapter->IntEnReg = IER_ELSI;
AnnaBridge 167:e84263d55307 75 switch (parity) {
AnnaBridge 167:e84263d55307 76 case ParityNone:
AnnaBridge 167:e84263d55307 77 pUartAdapter->Parity = LCR_PARITY_NONE;
AnnaBridge 167:e84263d55307 78 break;
AnnaBridge 167:e84263d55307 79
AnnaBridge 167:e84263d55307 80 case ParityOdd:
AnnaBridge 167:e84263d55307 81 pUartAdapter->Parity = LCR_PARITY_ODD;
AnnaBridge 167:e84263d55307 82 break;
AnnaBridge 167:e84263d55307 83
AnnaBridge 167:e84263d55307 84 case ParityEven:
AnnaBridge 167:e84263d55307 85 pUartAdapter->Parity = LCR_PARITY_EVEN;
AnnaBridge 167:e84263d55307 86 break;
AnnaBridge 167:e84263d55307 87
AnnaBridge 167:e84263d55307 88 default:
AnnaBridge 167:e84263d55307 89 DBG_UART_ERR("log_uart_init: Not support parity type %d\n", parity);
AnnaBridge 167:e84263d55307 90 return -1;
AnnaBridge 167:e84263d55307 91 }
AnnaBridge 167:e84263d55307 92
AnnaBridge 167:e84263d55307 93 if (stop_bits > 1) {
AnnaBridge 167:e84263d55307 94 // if width is 5 bits, stop bit will be 1.5 bit
AnnaBridge 167:e84263d55307 95 pUartAdapter->Stop = LCR_STOP_2B;
AnnaBridge 167:e84263d55307 96 } else {
AnnaBridge 167:e84263d55307 97 pUartAdapter->Stop = LCR_STOP_1B;
AnnaBridge 167:e84263d55307 98 }
AnnaBridge 167:e84263d55307 99
AnnaBridge 167:e84263d55307 100 //4 Initial Log Uart
AnnaBridge 167:e84263d55307 101 HalLogUartInitSetting(pUartAdapter);
AnnaBridge 167:e84263d55307 102
AnnaBridge 167:e84263d55307 103 // disable all debug message
AnnaBridge 167:e84263d55307 104 ConfigDebugErr = 0;
AnnaBridge 167:e84263d55307 105 ConfigDebugWarn = 0;
AnnaBridge 167:e84263d55307 106 ConfigDebugInfo = 0;
AnnaBridge 167:e84263d55307 107 CfgSysDebugErr = 0;
AnnaBridge 167:e84263d55307 108 CfgSysDebugInfo = 0;
AnnaBridge 167:e84263d55307 109 CfgSysDebugWarn = 0;
AnnaBridge 167:e84263d55307 110
AnnaBridge 167:e84263d55307 111 return 0;
AnnaBridge 167:e84263d55307 112 }
AnnaBridge 167:e84263d55307 113
AnnaBridge 167:e84263d55307 114 void log_uart_free(log_uart_t *obj)
AnnaBridge 167:e84263d55307 115 {
AnnaBridge 167:e84263d55307 116 LOG_UART_ADAPTER UartAdapter;
AnnaBridge 167:e84263d55307 117
AnnaBridge 167:e84263d55307 118 // Recover the Log UART for debug message printing
AnnaBridge 167:e84263d55307 119 //4 Release log uart reset and clock
AnnaBridge 167:e84263d55307 120 LOC_UART_FCTRL(OFF);
AnnaBridge 167:e84263d55307 121 LOC_UART_FCTRL(ON);
AnnaBridge 167:e84263d55307 122 ACTCK_LOG_UART_CCTRL(ON);
AnnaBridge 167:e84263d55307 123
AnnaBridge 167:e84263d55307 124 //4 Inital Log uart
AnnaBridge 167:e84263d55307 125 UartAdapter.BaudRate = UART_BAUD_RATE_38400;
AnnaBridge 167:e84263d55307 126 UartAdapter.DataLength = UART_DATA_LEN_8BIT;
AnnaBridge 167:e84263d55307 127 UartAdapter.FIFOControl = 0xC1;
AnnaBridge 167:e84263d55307 128 UartAdapter.IntEnReg = 0x00;
AnnaBridge 167:e84263d55307 129 UartAdapter.Parity = UART_PARITY_DISABLE;
AnnaBridge 167:e84263d55307 130 UartAdapter.Stop = UART_STOP_1BIT;
AnnaBridge 167:e84263d55307 131
AnnaBridge 167:e84263d55307 132 // un_register current IRQ first
AnnaBridge 167:e84263d55307 133 InterruptUnRegister(&(obj->log_hal_uart.IrqHandle));
AnnaBridge 167:e84263d55307 134
AnnaBridge 167:e84263d55307 135 //4 Initial Log Uart
AnnaBridge 167:e84263d55307 136 HalLogUartInit(UartAdapter);
AnnaBridge 167:e84263d55307 137 }
AnnaBridge 167:e84263d55307 138
AnnaBridge 167:e84263d55307 139 void log_uart_baud(log_uart_t *obj, int baudrate)
AnnaBridge 167:e84263d55307 140 {
AnnaBridge 167:e84263d55307 141 HAL_LOG_UART_ADAPTER *pUartAdapter;
AnnaBridge 167:e84263d55307 142 int i;
AnnaBridge 167:e84263d55307 143
AnnaBridge 167:e84263d55307 144 pUartAdapter = &obj->log_hal_uart;
AnnaBridge 167:e84263d55307 145 // Check Baud rate
AnnaBridge 167:e84263d55307 146 for (i=0; log_uart_support_rate[i]!=0xFFFFFFFF; i++) {
AnnaBridge 167:e84263d55307 147 if (log_uart_support_rate[i] == baudrate) {
AnnaBridge 167:e84263d55307 148 break;
AnnaBridge 167:e84263d55307 149 }
AnnaBridge 167:e84263d55307 150 }
AnnaBridge 167:e84263d55307 151 if (log_uart_support_rate[i]== 0xFFFFFF) {
AnnaBridge 167:e84263d55307 152 DBG_UART_ERR("log_uart_baud: Not support Baud Rate %d\n", baudrate);
AnnaBridge 167:e84263d55307 153 return;
AnnaBridge 167:e84263d55307 154 }
AnnaBridge 167:e84263d55307 155 pUartAdapter->BaudRate = baudrate;
AnnaBridge 167:e84263d55307 156 HalLogUartSetBaudRate(pUartAdapter);
AnnaBridge 167:e84263d55307 157 }
AnnaBridge 167:e84263d55307 158
AnnaBridge 167:e84263d55307 159 void log_uart_format(log_uart_t *obj, int data_bits, SerialParity parity, int stop_bits)
AnnaBridge 167:e84263d55307 160 {
AnnaBridge 167:e84263d55307 161 HAL_LOG_UART_ADAPTER *pUartAdapter;
AnnaBridge 167:e84263d55307 162 pUartAdapter = &obj->log_hal_uart;
AnnaBridge 167:e84263d55307 163
AnnaBridge 167:e84263d55307 164 // check word width
AnnaBridge 167:e84263d55307 165 if ((data_bits < 5) || (data_bits > 8)) {
AnnaBridge 167:e84263d55307 166 DBG_UART_ERR("log_uart_format: Not support Word Width %d\n", data_bits);
AnnaBridge 167:e84263d55307 167 return;
AnnaBridge 167:e84263d55307 168 }
AnnaBridge 167:e84263d55307 169
AnnaBridge 167:e84263d55307 170 //4 Inital Log uart
AnnaBridge 167:e84263d55307 171 pUartAdapter->DataLength = data_bits - 5;
AnnaBridge 167:e84263d55307 172 switch (parity) {
AnnaBridge 167:e84263d55307 173 case ParityNone:
AnnaBridge 167:e84263d55307 174 pUartAdapter->Parity = LCR_PARITY_NONE;
AnnaBridge 167:e84263d55307 175 break;
AnnaBridge 167:e84263d55307 176
AnnaBridge 167:e84263d55307 177 case ParityOdd:
AnnaBridge 167:e84263d55307 178 pUartAdapter->Parity = LCR_PARITY_ODD;
AnnaBridge 167:e84263d55307 179 break;
AnnaBridge 167:e84263d55307 180
AnnaBridge 167:e84263d55307 181 case ParityEven:
AnnaBridge 167:e84263d55307 182 pUartAdapter->Parity = LCR_PARITY_EVEN;
AnnaBridge 167:e84263d55307 183 break;
AnnaBridge 167:e84263d55307 184
AnnaBridge 167:e84263d55307 185 default:
AnnaBridge 167:e84263d55307 186 DBG_UART_ERR("log_uart_format: Not support parity type %d\n", parity);
AnnaBridge 167:e84263d55307 187 return;
AnnaBridge 167:e84263d55307 188 }
AnnaBridge 167:e84263d55307 189
AnnaBridge 167:e84263d55307 190 if (stop_bits > 1) {
AnnaBridge 167:e84263d55307 191 // if width is 5 bits, stop bit will be 1.5 bit
AnnaBridge 167:e84263d55307 192 pUartAdapter->Stop = LCR_STOP_2B;
AnnaBridge 167:e84263d55307 193 } else {
AnnaBridge 167:e84263d55307 194 pUartAdapter->Stop = LCR_STOP_1B;
AnnaBridge 167:e84263d55307 195 }
AnnaBridge 167:e84263d55307 196
AnnaBridge 167:e84263d55307 197 HalLogUartSetLineCtrl(pUartAdapter);
AnnaBridge 167:e84263d55307 198 }
AnnaBridge 167:e84263d55307 199
AnnaBridge 167:e84263d55307 200 /******************************************************************************
AnnaBridge 167:e84263d55307 201 * INTERRUPTS HANDLING
AnnaBridge 167:e84263d55307 202 ******************************************************************************/
AnnaBridge 167:e84263d55307 203 void log_uart_irq_handler(log_uart_t *obj, loguart_irq_handler handler, uint32_t id)
AnnaBridge 167:e84263d55307 204 {
AnnaBridge 167:e84263d55307 205 HAL_LOG_UART_ADAPTER *pUartAdapter;
AnnaBridge 167:e84263d55307 206
AnnaBridge 167:e84263d55307 207 pUartAdapter = &(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 208 pUartAdapter->api_irq_handler = handler;
AnnaBridge 167:e84263d55307 209 pUartAdapter->api_irq_id = id;
AnnaBridge 167:e84263d55307 210 }
AnnaBridge 167:e84263d55307 211
AnnaBridge 167:e84263d55307 212 void log_uart_irq_set(log_uart_t *obj, LOG_UART_INT_ID irq, uint32_t enable)
AnnaBridge 167:e84263d55307 213 {
AnnaBridge 167:e84263d55307 214 HAL_LOG_UART_ADAPTER *pUartAdapter;
AnnaBridge 167:e84263d55307 215 u8 int_en=0;
AnnaBridge 167:e84263d55307 216
AnnaBridge 167:e84263d55307 217 pUartAdapter = &(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 218
AnnaBridge 167:e84263d55307 219 switch (irq) {
AnnaBridge 167:e84263d55307 220 case IIR_RX_RDY:
AnnaBridge 167:e84263d55307 221 int_en = IER_ERBFI;
AnnaBridge 167:e84263d55307 222 break;
AnnaBridge 167:e84263d55307 223
AnnaBridge 167:e84263d55307 224 case IIR_THR_EMPTY:
AnnaBridge 167:e84263d55307 225 int_en = IER_ETBEI;
AnnaBridge 167:e84263d55307 226 break;
AnnaBridge 167:e84263d55307 227
AnnaBridge 167:e84263d55307 228 case IIR_RX_LINE_STATUS:
AnnaBridge 167:e84263d55307 229 int_en = IER_ELSI;
AnnaBridge 167:e84263d55307 230 break;
AnnaBridge 167:e84263d55307 231
AnnaBridge 167:e84263d55307 232 case IIR_MODEM_STATUS:
AnnaBridge 167:e84263d55307 233 int_en = IER_EDSSI;
AnnaBridge 167:e84263d55307 234 break;
AnnaBridge 167:e84263d55307 235
AnnaBridge 167:e84263d55307 236 default:
AnnaBridge 167:e84263d55307 237 DBG_UART_WARN("log_uart_irq_set: Unknown Irq Id\n");
AnnaBridge 167:e84263d55307 238 return;
AnnaBridge 167:e84263d55307 239 }
AnnaBridge 167:e84263d55307 240
AnnaBridge 167:e84263d55307 241 if (enable) {
AnnaBridge 167:e84263d55307 242 pUartAdapter->IntEnReg |= int_en;
AnnaBridge 167:e84263d55307 243 } else {
AnnaBridge 167:e84263d55307 244 // disable
AnnaBridge 167:e84263d55307 245 pUartAdapter->IntEnReg &= (~int_en);
AnnaBridge 167:e84263d55307 246 }
AnnaBridge 167:e84263d55307 247 HalLogUartSetIntEn(pUartAdapter);
AnnaBridge 167:e84263d55307 248 }
AnnaBridge 167:e84263d55307 249
AnnaBridge 167:e84263d55307 250 /******************************************************************************
AnnaBridge 167:e84263d55307 251 * READ/WRITE
AnnaBridge 167:e84263d55307 252 ******************************************************************************/
AnnaBridge 167:e84263d55307 253
AnnaBridge 167:e84263d55307 254 char log_uart_getc(log_uart_t *obj)
AnnaBridge 167:e84263d55307 255 {
AnnaBridge 167:e84263d55307 256 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 257
AnnaBridge 167:e84263d55307 258 while (!log_uart_readable(obj));
AnnaBridge 167:e84263d55307 259 return (char)(HAL_UART_READ32(UART_REV_BUF_OFF) & 0xFF);
AnnaBridge 167:e84263d55307 260 }
AnnaBridge 167:e84263d55307 261
AnnaBridge 167:e84263d55307 262 void log_uart_putc(log_uart_t *obj, char c)
AnnaBridge 167:e84263d55307 263 {
AnnaBridge 167:e84263d55307 264 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 265
AnnaBridge 167:e84263d55307 266 while (!log_uart_writable(obj));
AnnaBridge 167:e84263d55307 267 HAL_UART_WRITE8(UART_TRAN_HOLD_OFF, c);
AnnaBridge 167:e84263d55307 268 }
AnnaBridge 167:e84263d55307 269
AnnaBridge 167:e84263d55307 270 int log_uart_readable(log_uart_t *obj)
AnnaBridge 167:e84263d55307 271 {
AnnaBridge 167:e84263d55307 272 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 273 volatile u8 line_status;
AnnaBridge 167:e84263d55307 274
AnnaBridge 167:e84263d55307 275 line_status = HAL_UART_READ8(UART_LINE_STATUS_REG_OFF);
AnnaBridge 167:e84263d55307 276
AnnaBridge 167:e84263d55307 277 if (line_status & LSR_DR) {
AnnaBridge 167:e84263d55307 278 return 1;
AnnaBridge 167:e84263d55307 279 } else {
AnnaBridge 167:e84263d55307 280 return 0;
AnnaBridge 167:e84263d55307 281 }
AnnaBridge 167:e84263d55307 282 }
AnnaBridge 167:e84263d55307 283
AnnaBridge 167:e84263d55307 284 int log_uart_writable(log_uart_t *obj)
AnnaBridge 167:e84263d55307 285 {
AnnaBridge 167:e84263d55307 286 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 287 volatile u8 line_status;
AnnaBridge 167:e84263d55307 288
AnnaBridge 167:e84263d55307 289 line_status = HAL_UART_READ8(UART_LINE_STATUS_REG_OFF);
AnnaBridge 167:e84263d55307 290 if (line_status & LSR_THRE) {
AnnaBridge 167:e84263d55307 291 return 1;
AnnaBridge 167:e84263d55307 292 } else {
AnnaBridge 167:e84263d55307 293 return 0;
AnnaBridge 167:e84263d55307 294 }
AnnaBridge 167:e84263d55307 295 }
AnnaBridge 167:e84263d55307 296
AnnaBridge 167:e84263d55307 297 void log_uart_clear(log_uart_t *obj)
AnnaBridge 167:e84263d55307 298 {
AnnaBridge 167:e84263d55307 299 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 300
AnnaBridge 167:e84263d55307 301 HalLogUartRstFIFO(pUartAdapter, (LOG_UART_RST_TX_FIFO|LOG_UART_RST_TX_FIFO));
AnnaBridge 167:e84263d55307 302 pUartAdapter->TxCount = 0;
AnnaBridge 167:e84263d55307 303 pUartAdapter->RxCount = 0;
AnnaBridge 167:e84263d55307 304 }
AnnaBridge 167:e84263d55307 305
AnnaBridge 167:e84263d55307 306 void log_uart_clear_tx(log_uart_t *obj)
AnnaBridge 167:e84263d55307 307 {
AnnaBridge 167:e84263d55307 308 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 309
AnnaBridge 167:e84263d55307 310 HalLogUartRstFIFO(pUartAdapter, LOG_UART_RST_TX_FIFO);
AnnaBridge 167:e84263d55307 311 pUartAdapter->TxCount = 0;
AnnaBridge 167:e84263d55307 312 }
AnnaBridge 167:e84263d55307 313
AnnaBridge 167:e84263d55307 314 void log_uart_clear_rx(log_uart_t *obj)
AnnaBridge 167:e84263d55307 315 {
AnnaBridge 167:e84263d55307 316 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 317
AnnaBridge 167:e84263d55307 318 HalLogUartRstFIFO(pUartAdapter, LOG_UART_RST_RX_FIFO);
AnnaBridge 167:e84263d55307 319 pUartAdapter->RxCount = 0;
AnnaBridge 167:e84263d55307 320 }
AnnaBridge 167:e84263d55307 321
AnnaBridge 167:e84263d55307 322 void log_uart_break_set(log_uart_t *obj)
AnnaBridge 167:e84263d55307 323 {
AnnaBridge 167:e84263d55307 324 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 325 u32 RegValue;
AnnaBridge 167:e84263d55307 326
AnnaBridge 167:e84263d55307 327 RegValue = HAL_UART_READ32(UART_LINE_CTL_REG_OFF);
AnnaBridge 167:e84263d55307 328 RegValue |= LCR_BC;
AnnaBridge 167:e84263d55307 329 HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, RegValue);
AnnaBridge 167:e84263d55307 330 }
AnnaBridge 167:e84263d55307 331
AnnaBridge 167:e84263d55307 332 void log_uart_break_clear(log_uart_t *obj)
AnnaBridge 167:e84263d55307 333 {
AnnaBridge 167:e84263d55307 334 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 335 u32 RegValue;
AnnaBridge 167:e84263d55307 336
AnnaBridge 167:e84263d55307 337 RegValue = HAL_UART_READ32(UART_LINE_CTL_REG_OFF);
AnnaBridge 167:e84263d55307 338 RegValue &= ~LCR_BC;
AnnaBridge 167:e84263d55307 339 HAL_UART_WRITE32(UART_LINE_CTL_REG_OFF, RegValue);
AnnaBridge 167:e84263d55307 340 }
AnnaBridge 167:e84263d55307 341
AnnaBridge 167:e84263d55307 342 void log_uart_tx_comp_handler(log_uart_t *obj, void *handler, uint32_t id)
AnnaBridge 167:e84263d55307 343 {
AnnaBridge 167:e84263d55307 344 HAL_LOG_UART_ADAPTER *pUartAdapter=(PHAL_LOG_UART_ADAPTER)&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 345
AnnaBridge 167:e84263d55307 346 pUartAdapter->TxCompCallback = (void(*)(void*))handler;
AnnaBridge 167:e84263d55307 347 pUartAdapter->TxCompCbPara = (void*)id;
AnnaBridge 167:e84263d55307 348 }
AnnaBridge 167:e84263d55307 349
AnnaBridge 167:e84263d55307 350 void log_uart_rx_comp_handler(log_uart_t *obj, void *handler, uint32_t id)
AnnaBridge 167:e84263d55307 351 {
AnnaBridge 167:e84263d55307 352 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 353
AnnaBridge 167:e84263d55307 354 pUartAdapter->RxCompCallback = (void(*)(void*))handler;
AnnaBridge 167:e84263d55307 355 pUartAdapter->RxCompCbPara = (void*)id;
AnnaBridge 167:e84263d55307 356 }
AnnaBridge 167:e84263d55307 357
AnnaBridge 167:e84263d55307 358 void log_uart_line_status_handler(log_uart_t *obj, void *handler, uint32_t id)
AnnaBridge 167:e84263d55307 359 {
AnnaBridge 167:e84263d55307 360 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 361
AnnaBridge 167:e84263d55307 362 pUartAdapter->LineStatusCallback = (void(*)(void*, u8))handler;
AnnaBridge 167:e84263d55307 363 pUartAdapter->LineStatusCbPara = (void*)id;
AnnaBridge 167:e84263d55307 364 }
AnnaBridge 167:e84263d55307 365
AnnaBridge 167:e84263d55307 366 // Blocked(busy wait) receive, return received bytes count
AnnaBridge 167:e84263d55307 367 int32_t log_uart_recv (log_uart_t *obj, char *prxbuf, uint32_t len, uint32_t timeout_ms)
AnnaBridge 167:e84263d55307 368 {
AnnaBridge 167:e84263d55307 369 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 370 int ret;
AnnaBridge 167:e84263d55307 371
AnnaBridge 167:e84263d55307 372 ret = (int)HalLogUartRecv(pUartAdapter, prxbuf, len, timeout_ms);
AnnaBridge 167:e84263d55307 373 return (ret);
AnnaBridge 167:e84263d55307 374 }
AnnaBridge 167:e84263d55307 375
AnnaBridge 167:e84263d55307 376 // Blocked(busy wait) send, return transmitted bytes count
AnnaBridge 167:e84263d55307 377 int32_t log_uart_send (log_uart_t *obj, char *ptxbuf, uint32_t len, uint32_t timeout_ms)
AnnaBridge 167:e84263d55307 378 {
AnnaBridge 167:e84263d55307 379 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 380 int ret;
AnnaBridge 167:e84263d55307 381
AnnaBridge 167:e84263d55307 382 ret = (int)HalLogUartSend(pUartAdapter, ptxbuf, len, timeout_ms);
AnnaBridge 167:e84263d55307 383 return (ret);
AnnaBridge 167:e84263d55307 384 }
AnnaBridge 167:e84263d55307 385
AnnaBridge 167:e84263d55307 386 // Interrupt mode(no wait) receive, return HAL function result
AnnaBridge 167:e84263d55307 387 int32_t log_uart_recv_stream (log_uart_t *obj, char *prxbuf, uint32_t len)
AnnaBridge 167:e84263d55307 388 {
AnnaBridge 167:e84263d55307 389 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 390 int ret;
AnnaBridge 167:e84263d55307 391
AnnaBridge 167:e84263d55307 392 ret = (int)HalLogUartIntRecv(pUartAdapter, (u8*)prxbuf, len);
AnnaBridge 167:e84263d55307 393 return (ret);
AnnaBridge 167:e84263d55307 394 }
AnnaBridge 167:e84263d55307 395
AnnaBridge 167:e84263d55307 396 // Interrupt Mode(no wait) send, return HAL function result
AnnaBridge 167:e84263d55307 397 int32_t log_uart_send_stream (log_uart_t *obj, char *ptxbuf, uint32_t len)
AnnaBridge 167:e84263d55307 398 {
AnnaBridge 167:e84263d55307 399 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 400 int ret;
AnnaBridge 167:e84263d55307 401
AnnaBridge 167:e84263d55307 402 ret = (int)HalLogUartIntSend(pUartAdapter, (u8*)ptxbuf, len);
AnnaBridge 167:e84263d55307 403 return (ret);
AnnaBridge 167:e84263d55307 404 }
AnnaBridge 167:e84263d55307 405
AnnaBridge 167:e84263d55307 406 // Interrupt mode(no wait) receive with timeout
AnnaBridge 167:e84263d55307 407 // return the byte count received before timeout, or error(<0)
AnnaBridge 167:e84263d55307 408 int32_t log_uart_recv_stream_timeout (log_uart_t *obj, char *prxbuf, uint32_t len,
AnnaBridge 167:e84263d55307 409 uint32_t timeout_ms, void *force_cs)
AnnaBridge 167:e84263d55307 410 {
AnnaBridge 167:e84263d55307 411 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 412 uint32_t TimeoutCount=0, StartCount;
AnnaBridge 167:e84263d55307 413 int ret;
AnnaBridge 167:e84263d55307 414 void (*task_yield)(void);
AnnaBridge 167:e84263d55307 415
AnnaBridge 167:e84263d55307 416 task_yield = NULL;
AnnaBridge 167:e84263d55307 417 ret = (int)HalLogUartIntRecv(pUartAdapter, (u8*)prxbuf, len);
AnnaBridge 167:e84263d55307 418
AnnaBridge 167:e84263d55307 419 if ((ret == HAL_OK) && (timeout_ms > 0)) {
AnnaBridge 167:e84263d55307 420 TimeoutCount = (timeout_ms*1000/TIMER_TICK_US);
AnnaBridge 167:e84263d55307 421 StartCount = HalTimerOp.HalTimerReadCount(1);
AnnaBridge 167:e84263d55307 422 task_yield = (void (*)(void))force_cs;
AnnaBridge 167:e84263d55307 423 while (pUartAdapter->RxCount > 0) {
AnnaBridge 167:e84263d55307 424 if (HAL_TIMEOUT == RuartIsTimeout(StartCount, TimeoutCount)) {
AnnaBridge 167:e84263d55307 425 HalLogUartAbortIntRecv(pUartAdapter);
AnnaBridge 167:e84263d55307 426 break;
AnnaBridge 167:e84263d55307 427 }
AnnaBridge 167:e84263d55307 428 if (NULL != task_yield) {
AnnaBridge 167:e84263d55307 429 task_yield();
AnnaBridge 167:e84263d55307 430 }
AnnaBridge 167:e84263d55307 431 }
AnnaBridge 167:e84263d55307 432 return (len - pUartAdapter->RxCount);
AnnaBridge 167:e84263d55307 433 } else {
AnnaBridge 167:e84263d55307 434 return (-ret);
AnnaBridge 167:e84263d55307 435 }
AnnaBridge 167:e84263d55307 436 }
AnnaBridge 167:e84263d55307 437
AnnaBridge 167:e84263d55307 438 // Abort Interrupt Mode TX and return how many bytes data has been sent
AnnaBridge 167:e84263d55307 439 int32_t log_uart_send_stream_abort (log_uart_t *obj)
AnnaBridge 167:e84263d55307 440 {
AnnaBridge 167:e84263d55307 441 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 442 int ret;
AnnaBridge 167:e84263d55307 443
AnnaBridge 167:e84263d55307 444 HalLogUartAbortIntSend(pUartAdapter);
AnnaBridge 167:e84263d55307 445
AnnaBridge 167:e84263d55307 446 ret = (u32)pUartAdapter->pTxBuf - (u32)pUartAdapter->pTxStartAddr;
AnnaBridge 167:e84263d55307 447 return (ret);
AnnaBridge 167:e84263d55307 448 }
AnnaBridge 167:e84263d55307 449
AnnaBridge 167:e84263d55307 450 // Abort Interrupt Mode RX and return how many bytes data has been received
AnnaBridge 167:e84263d55307 451 int32_t log_uart_recv_stream_abort (log_uart_t *obj)
AnnaBridge 167:e84263d55307 452 {
AnnaBridge 167:e84263d55307 453 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 454 int ret;
AnnaBridge 167:e84263d55307 455
AnnaBridge 167:e84263d55307 456 HalLogUartAbortIntRecv(pUartAdapter);
AnnaBridge 167:e84263d55307 457
AnnaBridge 167:e84263d55307 458 ret = (u32)pUartAdapter->pRxBuf - (u32)pUartAdapter->pRxStartAddr;
AnnaBridge 167:e84263d55307 459 return (ret);
AnnaBridge 167:e84263d55307 460 }
AnnaBridge 167:e84263d55307 461
AnnaBridge 167:e84263d55307 462 void log_uart_disable (log_uart_t *obj)
AnnaBridge 167:e84263d55307 463 {
AnnaBridge 167:e84263d55307 464 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 465
AnnaBridge 167:e84263d55307 466 HalLogUartDisable(pUartAdapter);
AnnaBridge 167:e84263d55307 467 }
AnnaBridge 167:e84263d55307 468
AnnaBridge 167:e84263d55307 469 void log_uart_enable (log_uart_t *obj)
AnnaBridge 167:e84263d55307 470 {
AnnaBridge 167:e84263d55307 471 HAL_LOG_UART_ADAPTER *pUartAdapter=&(obj->log_hal_uart);
AnnaBridge 167:e84263d55307 472
AnnaBridge 167:e84263d55307 473 HalLogUartEnable(pUartAdapter);
AnnaBridge 167:e84263d55307 474 }
AnnaBridge 167:e84263d55307 475
AnnaBridge 167:e84263d55307 476 // to read Line-Status register
AnnaBridge 167:e84263d55307 477 // Bit 0: RX Data Ready
AnnaBridge 167:e84263d55307 478 // Bit 1: Overrun Error
AnnaBridge 167:e84263d55307 479 // Bit 2: Parity Error
AnnaBridge 167:e84263d55307 480 // Bit 3: Framing Error
AnnaBridge 167:e84263d55307 481 // Bit 4: Break Interrupt (received data input is held in 0 state for a longer than a full word tx time)
AnnaBridge 167:e84263d55307 482 // Bit 5: TX FIFO empty (THR empty)
AnnaBridge 167:e84263d55307 483 // Bit 6: TX FIFO empty (THR & TSR both empty)
AnnaBridge 167:e84263d55307 484 // Bit 7: Receiver FIFO Error (parity error, framing error or break indication)
AnnaBridge 167:e84263d55307 485 uint8_t log_uart_raed_lsr(log_uart_t *obj)
AnnaBridge 167:e84263d55307 486 {
AnnaBridge 167:e84263d55307 487 uint8_t LineStatus;
AnnaBridge 167:e84263d55307 488
AnnaBridge 167:e84263d55307 489 LineStatus = HAL_UART_READ8(UART_LINE_STATUS_REG_OFF);
AnnaBridge 167:e84263d55307 490
AnnaBridge 167:e84263d55307 491 return LineStatus;
AnnaBridge 167:e84263d55307 492 }
AnnaBridge 167:e84263d55307 493
AnnaBridge 167:e84263d55307 494 // to read Modem-Status register
AnnaBridge 167:e84263d55307 495 // Bit 0: DCTS, The CTS line has changed its state
AnnaBridge 167:e84263d55307 496 // Bit 1: DDSR, The DSR line has changed its state
AnnaBridge 167:e84263d55307 497 // Bit 2: TERI, RI line has changed its state from low to high state
AnnaBridge 167:e84263d55307 498 // Bit 3: DDCD, DCD line has changed its state
AnnaBridge 167:e84263d55307 499 // Bit 4: Complement of the CTS input
AnnaBridge 167:e84263d55307 500 // Bit 5: Complement of the DSR input
AnnaBridge 167:e84263d55307 501 // Bit 6: Complement of the RI input
AnnaBridge 167:e84263d55307 502 // Bit 7: Complement of the DCD input
AnnaBridge 167:e84263d55307 503 uint8_t log_uart_raed_msr(log_uart_t *obj)
AnnaBridge 167:e84263d55307 504 {
AnnaBridge 167:e84263d55307 505 uint8_t RegValue;
AnnaBridge 167:e84263d55307 506
AnnaBridge 167:e84263d55307 507 RegValue = HAL_UART_READ8(UART_MODEM_STATUS_REG_OFF);
AnnaBridge 167:e84263d55307 508 return RegValue;
AnnaBridge 167:e84263d55307 509 }
AnnaBridge 167:e84263d55307 510