changeset 2401:55aa7418e249

Add option to 'prime' UART Tx - on behalf of Alexander Aganichev
author gthomas
date Fri, 22 Jun 2007 11:41:49 +0000
parents 6f68e28560d3
children 029928129a08
files packages/devs/serial/arm/lpc2xxx/current/ChangeLog packages/devs/serial/arm/lpc2xxx/current/cdl/ser_arm_lpc2xxx.cdl packages/devs/serial/generic/16x5x/current/ChangeLog packages/devs/serial/generic/16x5x/current/cdl/ser_generic_16x5x.cdl packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c
diffstat 5 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/serial/arm/lpc2xxx/current/ChangeLog
+++ b/packages/devs/serial/arm/lpc2xxx/current/ChangeLog
@@ -1,3 +1,9 @@
+2007-06-22  Alexander Aganichev <aaganichev@gmail.com>
+
+	* cdl/ser_arm_lpc2xxx.cdl:
+	Added requirement of
+	CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME option.
+
 2004-11-15  Jani Monoses <jani@iv.ro>
 
 	* include/arm_lpc2xxx_ser.inl: 
--- a/packages/devs/serial/arm/lpc2xxx/current/cdl/ser_arm_lpc2xxx.cdl
+++ b/packages/devs/serial/arm/lpc2xxx/current/cdl/ser_arm_lpc2xxx.cdl
@@ -69,6 +69,7 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC2XXX
         puts $::cdl_header "#define CYGPRI_IO_SERIAL_GENERIC_16X5X_STEP 4"
     }
 
+    requires { CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME == "1" }
 
     define_proc {
         puts $::cdl_system_header "/***** serial driver proc output start *****/"
--- a/packages/devs/serial/generic/16x5x/current/ChangeLog
+++ b/packages/devs/serial/generic/16x5x/current/ChangeLog
@@ -1,3 +1,13 @@
+2007-06-22  Alexander Aganichev  <aaganichev@gmail.com>
+
+	* cdl/ser_generic_16x5x.cdl
+	(CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME): New option.
+
+	* src/ser_16x5x.c (pc_serial_start_xmit): Allow platform to define
+	CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME if enabling THRE
+	interrupt does not generate interrupt unless bytes are posted to the
+	FIFO.
+
 2006-11-27  Jonathan Larmour  <jifl@eCosCentric.com>
 
 	* src/ser_16x5x.c (serial_config_port): Add
--- a/packages/devs/serial/generic/16x5x/current/cdl/ser_generic_16x5x.cdl
+++ b/packages/devs/serial/generic/16x5x/current/cdl/ser_generic_16x5x.cdl
@@ -77,6 +77,15 @@ cdl_package CYGPKG_IO_SERIAL_GENERIC_16X
         puts $::cdl_header "#include CYGDAT_IO_SERIAL_GENERIC_16X5X_CFG";
     }
 
+    cdl_option CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME {
+        display       "Transmission require priming"
+        flavor        bool
+        default_value 0
+        description   "
+            This option should be switched on when enabling THRE interrupt
+            does not generate interrupt unless bytes are posted to the FIFO."
+    }
+
     cdl_component CYGPKG_IO_SERIAL_GENERIC_16X5X_FIFO {
         display       "16x5x FIFO support"
         flavor        bool
--- a/packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c
+++ b/packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c
@@ -516,6 +516,9 @@ pc_serial_start_xmit(serial_channel *cha
     HAL_READ_UINT8(base+REG_ier, _ier);
     _ier |= IER_XMT;                    // Enable xmit interrupt
     HAL_WRITE_UINT8(base+REG_ier, _ier);
+#ifdef CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME
+    (chan->callbacks->xmt_char)(chan);
+#endif
 }
 
 // Disable the transmitter on the device