[PATCH 41/47] bsp/tms570: Optimize tms570_debug_console_out()
Sebastian Huber
sebastian.huber at embedded-brains.de
Thu Dec 21 14:38:14 UTC 2023
Reduce number of interrupt disable/enable actions.
---
bsps/arm/tms570/console/printk-support.c | 41 ++++++++++++------------
1 file 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 at 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)
--
2.35.3
More information about the devel
mailing list