diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-12-21 15:16:49 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2024-01-15 10:33:54 +0100 |
commit | 65831d71ed25b1c1e2daa92a317c82c4aeabbf96 (patch) | |
tree | 653f0afca9e9510403aebd04163e66b6c6f85be4 /bsps/arm/tms570/console/printk-support.c | |
parent | bsp/tms570: Initialize and enable caches on demand (diff) | |
download | rtems-65831d71ed25b1c1e2daa92a317c82c4aeabbf96.tar.bz2 |
bsp/tms570: Optimize tms570_debug_console_out()
Reduce number of interrupt disable/enable actions.
Update #4982.
Diffstat (limited to 'bsps/arm/tms570/console/printk-support.c')
-rw-r--r-- | bsps/arm/tms570/console/printk-support.c | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/bsps/arm/tms570/console/printk-support.c b/bsps/arm/tms570/console/printk-support.c index 6e44ad0969..17c3a1f630 100644 --- a/bsps/arm/tms570/console/printk-support.c +++ b/bsps/arm/tms570/console/printk-support.c @@ -10,6 +10,7 @@ */ /* + * Copyright (C) 2023 embedded brains GmbH & Co. KG * Copyright (C) 2014 Premysl Houdek <kom541000@gmail.com> * * Google Summer of Code 2014 at @@ -55,33 +56,33 @@ * * @retval Void */ -static void tms570_debug_console_putc(char ch) +static void tms570_debug_console_out(char ch) { tms570_sci_context *ctx = TMS570_CONSOLE; volatile tms570_sci_t *regs = ctx->regs; - rtems_interrupt_level level; - rtems_interrupt_disable(level); - while ( ( regs->FLR & TMS570_SCI_FLR_TXRDY ) == 0) { - rtems_interrupt_flash(level); + while ( true ) { + rtems_interrupt_level level; + + while ( ( regs->FLR & TMS570_SCI_FLR_TXRDY ) == 0) { + /* Wait */ + } + + rtems_interrupt_disable( level ); + + if ( ( regs->FLR & TMS570_SCI_FLR_TXRDY ) != 0) { + regs->TD = ch; + rtems_interrupt_enable( level ); + + break; + } + + rtems_interrupt_enable( level ); } - regs->TD = ch; + while ( ( regs->FLR & TMS570_SCI_FLR_TX_EMPTY ) == 0) { - rtems_interrupt_flash(level); + /* Wait */ } - rtems_interrupt_enable(level); -} - -/** - * @brief debug console output - * - * debug functions always use serial dev 0 peripheral - * - * @retval Void - */ -static void tms570_debug_console_out(char c) -{ - tms570_debug_console_putc(c); } static void tms570_debug_console_init(void) |