@@ -68,9 +68,13 @@ static HAL_GDMA_OP UartGdmaOp;
68
68
69
69
#ifdef CONFIG_MBED_ENABLED
70
70
#include "log_uart_api.h"
71
+ #include "hal_log_uart.h"
71
72
int stdio_uart_inited = 0 ;
72
73
serial_t stdio_uart ;
73
74
log_uart_t stdio_uart_log ;
75
+ static uint32_t serial_log_irq_ids ;
76
+ static uart_irq_handler log_irq_handler ;
77
+ static uint32_t serial_log_irq_en ;
74
78
#endif
75
79
76
80
static void SerialTxDoneCallBack (VOID * pAdapter );
@@ -99,7 +103,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx)
99
103
return ;
100
104
}
101
105
#ifdef CONFIG_MBED_ENABLED
102
- else if (uart_idx == UART_3 ){
106
+ else if (uart_idx == UART_3 ) {
103
107
obj -> index = UART_3 ;
104
108
goto init_stdio ;
105
109
}
@@ -158,11 +162,11 @@ void serial_free(serial_t *obj)
158
162
{
159
163
PHAL_RUART_ADAPTER pHalRuartAdapter ;
160
164
#ifdef CONFIG_GDMA_EN
161
- u8 uart_idx ;
165
+ u8 uart_idx ;
162
166
PUART_DMA_CONFIG pHalRuartDmaCfg ;
163
167
#endif
164
168
#ifdef CONFIG_MBED_ENABLED
165
- if (obj -> index == UART_3 ){
169
+ if (obj -> index == UART_3 ) {
166
170
log_uart_free (& stdio_uart_log );
167
171
return ;
168
172
}
@@ -189,7 +193,7 @@ void serial_free(serial_t *obj)
189
193
void serial_baud (serial_t * obj , int baudrate )
190
194
{
191
195
#ifdef CONFIG_MBED_ENABLED
192
- if (obj -> index == UART_3 ){
196
+ if (obj -> index == UART_3 ) {
193
197
return ;
194
198
}
195
199
#endif
@@ -204,7 +208,7 @@ void serial_baud(serial_t *obj, int baudrate)
204
208
void serial_format (serial_t * obj , int data_bits , SerialParity parity , int stop_bits )
205
209
{
206
210
#ifdef CONFIG_MBED_ENABLED
207
- if (obj -> index == UART_3 ){
211
+ if (obj -> index == UART_3 ) {
208
212
log_uart_format (& stdio_uart_log , data_bits , parity , stop_bits );
209
213
return ;
210
214
}
@@ -271,30 +275,64 @@ static void SerialRxDoneCallBack(VOID *pAdapter)
271
275
}
272
276
}
273
277
278
+
279
+ #ifdef CONFIG_MBED_ENABLED
280
+ static void serial_loguart_irq_handler (uint32_t id , LOG_UART_INT_ID event )
281
+ {
282
+ if (event == IIR_RX_RDY || event == IIR_CHAR_TIMEOUT )
283
+ {
284
+ if (log_irq_handler ) {
285
+ log_irq_handler (serial_log_irq_ids , RxIrq );
286
+ }
287
+ } else if (event == IIR_THR_EMPTY ) {
288
+ if (log_irq_handler ) {
289
+ log_irq_handler (serial_log_irq_ids , TxIrq );
290
+ }
291
+ }
292
+ return ;
293
+ }
294
+ #endif
295
+
296
+
297
+
274
298
void serial_irq_handler (serial_t * obj , uart_irq_handler handler , uint32_t id )
275
299
{
300
+
301
+ #ifdef CONFIG_MBED_ENABLED
302
+ if (obj -> index == UART_3 ) {
303
+ log_irq_handler = handler ;
304
+ serial_log_irq_ids = id ;
305
+ log_uart_irq_handler (& stdio_uart_log , serial_loguart_irq_handler , id );
306
+ return ;
307
+ }
308
+ #endif
276
309
PHAL_RUART_ADAPTER pHalRuartAdapter ;
277
310
u8 uart_idx ;
278
-
279
- pHalRuartAdapter = & (obj -> hal_uart_adp );
311
+ pHalRuartAdapter = & (obj -> hal_uart_adp );
280
312
uart_idx = pHalRuartAdapter -> UartIndex ;
281
-
282
313
irq_handler [uart_idx ] = handler ;
283
- serial_irq_ids [uart_idx ] = id ;
284
-
314
+ serial_irq_ids [uart_idx ] = id ;
285
315
pHalRuartAdapter -> TxTDCallback = SerialTxDoneCallBack ;
286
316
pHalRuartAdapter -> TxTDCbPara = (void * )pHalRuartAdapter ;
287
317
pHalRuartAdapter -> RxDRCallback = SerialRxDoneCallBack ;
288
318
pHalRuartAdapter -> RxDRCbPara = (void * )pHalRuartAdapter ;
289
319
}
290
320
291
-
292
321
void serial_irq_set (serial_t * obj , SerialIrq irq , uint32_t enable )
293
322
{
323
+ #ifdef CONFIG_MBED_ENABLED
324
+ if (obj -> index == UART_3 ) {
325
+ if (irq == RxIrq ) {
326
+ log_uart_irq_set (& stdio_uart_log , IIR_RX_RDY , enable );
327
+ } else {
328
+ log_uart_irq_set (& stdio_uart_log , IIR_THR_EMPTY , enable );
329
+ }
330
+ return ;
331
+ }
332
+ #endif
294
333
PHAL_RUART_ADAPTER pHalRuartAdapter ;
295
334
PHAL_RUART_OP pHalRuartOp ;
296
335
u8 uart_idx ;
297
-
298
336
pHalRuartAdapter = & (obj -> hal_uart_adp );
299
337
pHalRuartOp = & (obj -> hal_uart_op );
300
338
uart_idx = pHalRuartAdapter -> UartIndex ;
@@ -304,10 +342,12 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
304
342
pHalRuartAdapter -> Interrupts |= RUART_IER_ERBI | RUART_IER_ELSI ;
305
343
serial_irq_en [uart_idx ] |= SERIAL_RX_IRQ_EN ;
306
344
HalRuartSetIMRRtl8195a (pHalRuartAdapter );
307
- } else {
345
+ } else {
308
346
serial_irq_en [uart_idx ] |= SERIAL_TX_IRQ_EN ;
309
347
}
348
+
310
349
pHalRuartOp -> HalRuartRegIrq (pHalRuartAdapter );
350
+ //log_uart
311
351
pHalRuartOp -> HalRuartIntEnable (pHalRuartAdapter );
312
352
} else { // disable
313
353
if (irq == RxIrq ) {
@@ -318,6 +358,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
318
358
serial_irq_en [uart_idx ] &= ~SERIAL_TX_IRQ_EN ;
319
359
}
320
360
HalRuartSetIMRRtl8195a (pHalRuartAdapter );
361
+
321
362
if (pHalRuartAdapter -> Interrupts == 0 ) {
322
363
InterruptUnRegister (& pHalRuartAdapter -> IrqHandle );
323
364
InterruptDis (& pHalRuartAdapter -> IrqHandle );
@@ -332,7 +373,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
332
373
int serial_getc (serial_t * obj )
333
374
{
334
375
#ifdef CONFIG_MBED_ENABLED
335
- if (obj -> index == UART_3 ){
376
+ if (obj -> index == UART_3 ) {
336
377
return log_uart_getc (& stdio_uart_log );
337
378
}
338
379
#endif
@@ -346,7 +387,7 @@ int serial_getc(serial_t *obj)
346
387
void serial_putc (serial_t * obj , int c )
347
388
{
348
389
#ifdef CONFIG_MBED_ENABLED
349
- if (obj -> index == UART_3 ){
390
+ if (obj -> index == UART_3 ) {
350
391
log_uart_putc (& stdio_uart_log , (char )c );
351
392
return ;
352
393
}
@@ -367,7 +408,7 @@ void serial_putc(serial_t *obj, int c)
367
408
int serial_readable (serial_t * obj )
368
409
{
369
410
#ifdef CONFIG_MBED_ENABLED
370
- if (obj -> index == UART_3 ){
411
+ if (obj -> index == UART_3 ) {
371
412
return log_uart_readable (& stdio_uart_log );
372
413
}
373
414
#endif
@@ -385,16 +426,15 @@ int serial_readable(serial_t *obj)
385
426
int serial_writable (serial_t * obj )
386
427
{
387
428
#ifdef CONFIG_MBED_ENABLED
388
- if (obj -> index == UART_3 ){
429
+ if (obj -> index == UART_3 ) {
389
430
return log_uart_writable (& stdio_uart_log );
390
431
}
391
432
#endif
392
433
393
434
PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER )& (obj -> hal_uart_adp );
394
435
u8 uart_idx = pHalRuartAdapter -> UartIndex ;
395
436
396
- if (HAL_RUART_READ32 (uart_idx , RUART_LINE_STATUS_REG_OFF ) &
397
- (RUART_LINE_STATUS_REG_THRE )) {
437
+ if (HAL_RUART_READ32 (uart_idx , RUART_LINE_STATUS_REG_OFF ) & (RUART_LINE_STATUS_REG_THRE )) {
398
438
return 1 ;
399
439
} else {
400
440
return 0 ;
@@ -404,7 +444,7 @@ int serial_writable(serial_t *obj)
404
444
void serial_clear (serial_t * obj )
405
445
{
406
446
#ifdef CONFIG_MBED_ENABLED
407
- if (obj -> index == UART_3 ){
447
+ if (obj -> index == UART_3 ) {
408
448
log_uart_clear (& stdio_uart_log );
409
449
return ;
410
450
}
@@ -419,7 +459,7 @@ void serial_clear(serial_t *obj)
419
459
void serial_break_set (serial_t * obj )
420
460
{
421
461
#ifdef CONFIG_MBED_ENABLED
422
- if (obj -> index == UART_3 ){
462
+ if (obj -> index == UART_3 ) {
423
463
log_uart_break_set (& stdio_uart_log );
424
464
return ;
425
465
}
@@ -428,7 +468,6 @@ void serial_break_set(serial_t *obj)
428
468
PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER )& (obj -> hal_uart_adp );
429
469
u8 uart_idx = pHalRuartAdapter -> UartIndex ;
430
470
u32 RegValue ;
431
-
432
471
RegValue = HAL_RUART_READ32 (uart_idx , RUART_LINE_CTL_REG_OFF );
433
472
RegValue |= BIT_UART_LCR_BREAK_CTRL ;
434
473
HAL_RUART_WRITE32 (uart_idx , RUART_LINE_CTL_REG_OFF , RegValue );
@@ -437,16 +476,14 @@ void serial_break_set(serial_t *obj)
437
476
void serial_break_clear (serial_t * obj )
438
477
{
439
478
#ifdef CONFIG_MBED_ENABLED
440
- if (obj -> index == UART_3 ){
479
+ if (obj -> index == UART_3 ) {
441
480
log_uart_break_clear (& stdio_uart_log );
442
481
return ;
443
482
}
444
483
#endif
445
-
446
484
PHAL_RUART_ADAPTER pHalRuartAdapter = (PHAL_RUART_ADAPTER )& (obj -> hal_uart_adp );
447
485
u8 uart_idx = pHalRuartAdapter -> UartIndex ;
448
486
u32 RegValue ;
449
-
450
487
RegValue = HAL_RUART_READ32 (uart_idx , RUART_LINE_CTL_REG_OFF );
451
488
RegValue &= ~(BIT_UART_LCR_BREAK_CTRL );
452
489
HAL_RUART_WRITE32 (uart_idx , RUART_LINE_CTL_REG_OFF , RegValue );
0 commit comments