changeset 3096:0acdd1ec3f4c

* cdl/ser_arm_lpc24xx.cdl: * include/arm_lpc24xx_ser.inl: Added support for LPC17XX CPUs.
author sergeig
date Sun, 13 Mar 2011 13:28:30 +0000
parents 02cc6caf8d94
children e329269debe7
files packages/devs/serial/arm/lpc24xx/current/ChangeLog packages/devs/serial/arm/lpc24xx/current/cdl/ser_arm_lpc24xx.cdl packages/devs/serial/arm/lpc24xx/current/include/arm_lpc24xx_ser.inl
diffstat 3 files changed, 72 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/serial/arm/lpc24xx/current/ChangeLog
+++ b/packages/devs/serial/arm/lpc24xx/current/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-29  Ilija Kocho  <ilijak@siva.com.mk>
+
+	* cdl/ser_arm_lpc24xx.cdl:
+	* include/arm_lpc24xx_ser.inl:
+	Added support for LPC17XX CPUs.
+
 2008-07-07 Uwe Kindler <uwe_kindler@web.de>
 
 	* include/arm_lpc24xx_ser.inl: 
--- a/packages/devs/serial/arm/lpc24xx/current/cdl/ser_arm_lpc24xx.cdl
+++ b/packages/devs/serial/arm/lpc24xx/current/cdl/ser_arm_lpc24xx.cdl
@@ -2,13 +2,13 @@
 #
 #      ser_arm_lpc24xx.cdl
 #
-#      eCos serial ARM/LPC24XX configuration data
+#      eCos serial ARM LPC24XX / Cortex-M LPC17XX configuration data
 #
 # ====================================================================
 ## ####ECOSGPLCOPYRIGHTBEGIN####                                            
 ## -------------------------------------------                              
 ## This file is part of eCos, the Embedded Configurable Operating System.   
-## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
+## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2011 Free Software Foundation, Inc.
 ##
 ## eCos is free software; you can redistribute it and/or modify it under    
 ## the terms of the GNU General Public License as published by the Free     
@@ -39,9 +39,9 @@
 # ====================================================================
 ######DESCRIPTIONBEGIN####
 #
-# Author(s):      Uwe Kindler  
+# Author(s):      Uwe Kindler
 # Original data:  gthomas, jskov
-# Contributors:
+# Contributors:   ilijak
 # Date:           2008-07-06
 #
 #####DESCRIPTIONEND####
@@ -49,18 +49,18 @@
 # ====================================================================
 
 cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX {
-    display       "ARM LPC24xx serial device drivers"
+    display       "ARM LPC24XX / Cortex-M LPC17XX serial device drivers"
 
     parent        CYGPKG_IO_SERIAL_DEVICES
     active_if     CYGPKG_IO_SERIAL
-    active_if     CYGPKG_HAL_ARM_LPC24XX
+    active_if     ( CYGPKG_HAL_ARM_LPC24XX || CYGPKG_HAL_CORTEXM_LPC17XX )
     implements    CYGINT_IO_SERIAL_GENERIC_16X5X_CHAN_INTPRIO
     requires      CYGPKG_ERROR
     include_dir   cyg/io
 
     description   "
-           This option enables the serial device drivers for the
-           ARM LPC24xx."
+           This option enables the serial device drivers for the ARM
+           LPC24XX and Cortex-M LPC17XX."
 
     # FIXME: This really belongs in the GENERIC_16X5X package
     cdl_interface CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED {
@@ -70,6 +70,10 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX
         puts $::cdl_header "#define CYGPRI_IO_SERIAL_GENERIC_16X5X_STEP 4"
     }
 
+    requires {
+        is_active(CYGPKG_HAL_CORTEXM_LPC17XX)
+        implies CYGPKG_IO_SERIAL_GENERIC_16X5X_XMIT_REQUIRE_PRIME == "1"
+    }
 
     define_proc {
         puts $::cdl_system_header "/***** serial driver proc output start *****/"
@@ -77,53 +81,64 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX
         puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_GENERIC_16X5X_CFG <pkgconf/io_serial_arm_lpc24xx.h>"
         puts $::cdl_system_header "/*****  serial driver proc output end  *****/"
     }
-    
+
+    # For backward compatibility with LPC24XX platforms
+    cdl_option CYGNUM_IO_SERIAL_IRQ_PRIORITY_LEVELS {
+        display       "Interrupt priority levels"
+        flavor        data
+        calculated    { CYGNUM_HAL_IRQ_PRIORITY_LEVELS ? CYGNUM_HAL_IRQ_PRIORITY_LEVELS : 15 }
+        description   "
+            For backward compatibility with LPC 24XX plarforms that
+            do not have CYGNUM_HAL_IRQ_PRIORITY_LEVELS defined."
+    }
+
     # Support up to 4 on-chip UART modules. The number may vary between
     # processor variants so it is easy to update this here
     for { set ::channel 0 } { $::channel < 4 } { incr ::channel } {
-    
+
         cdl_interface CYGINT_IO_SERIAL_LPC24XX_UART[set ::channel] {
-            display     "Platform provides UART [set ::channel]"
-            flavor      bool
-            description "
-                This interface will be implemented if the specific LPC24xx
-                processor being used has on-chip UART [set ::channel], and if
-                that UART is accessible on the target hardware."
+            display       "Platform provides UART [set ::channel]"
+            flavor        bool
+            description   "
+                This interface will be implemented if the specific
+                LPC24XX / LPC17XX processor being used has on-chip UART
+                [set ::channel], and if that UART is accessible on the
+                target hardware."
         }
 
         cdl_component CYGPKG_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel] {
-            display       "ARM LPC24cxx UART [set ::channel] driver"
+            display       "ARM LPC24XX / Cortex LPC17XX UART [set ::channel] driver"
             flavor        bool
             active_if     CYGINT_IO_SERIAL_LPC24XX_UART[set ::channel]
             default_value 1
 
-           implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED
-           implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW
-           implements CYGINT_IO_SERIAL_LINE_STATUS_HW
+            implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED
+            implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW
+            implements CYGINT_IO_SERIAL_LINE_STATUS_HW
 
-           description   "
-                This option includes the serial device driver for the ARM
-                LPC24xx UART [set ::channel]."
+            description   "
+                This option includes the serial device driver for the
+                ARM LPC24XX / LPC17XX UART [set ::channel]."
 
             cdl_option CYGDAT_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel]_NAME {
                 display       "Device name for UART [set ::channel]"
                 flavor        data
-                default_value   [format {"\"/dev/ser%d\""} $::channel]
+                default_value [format {"\"/dev/ser%d\""} $::channel]
                 description   "
                     This option specifies the name of the serial device
-                    for the ARM LPC24xx UART [set ::channel]."
+                    for the ARM LPC24XX / LPC17XX UART [set ::channel]."
             }
 
             cdl_option CYGNUM_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel]_BAUD {
                 display       "Baud rate for UART [set ::channel]"
                 flavor        data
-                legal_values  { 50 75 110 "134_5" 150 200 300 600 1200 1800 
+                legal_values  { 50 75 110 "134_5" 150 200 300 600 1200 1800
                                 2400 3600 4800 7200 9600 14400 19200 38400
                                 57600 115200 230400 }
                 default_value 38400
                 description   "
                     This option specifies the default baud rate (speed)
-                    for the ARM LPC24xx UART [set ::channel]."
+                    for the ARM LPC24XX / LPC17XX UART [set ::channel]."
             }
 
             cdl_option CYGNUM_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel]_BUFSIZE {
@@ -133,28 +148,29 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX
                 default_value 128
                 description   "
                     This option specifies the size of the internal buffers
-                    used for the ARM LPC24xx UART [set ::channel]."
+                    used for the ARM LPC24XX / LPC17XX UART [set ::channel]."
             }
-            
+
             cdl_option CYGNUM_IO_SERIAL_ARM_LPC24XX_SERIAL[set ::channel]_INTPRIO {
                 display       "Interrupt priority of UART [set ::channel]"
                 flavor        data
-                legal_values  0 to 15
-                default_value 15
+                legal_values  0 to CYGNUM_IO_SERIAL_IRQ_PRIORITY_LEVELS-1
+                default_value CYGNUM_IO_SERIAL_IRQ_PRIORITY_LEVELS-1
                 description   "
-                    This option selects the interupt priority for the
-                    UART [set ::channel] interrupts. There are 16
-                    priority levels corresponding to the values 0
-                    through 15 decimal, of which 15 is the lowest
-                    priority. The reset value of these registers
-                    defaults all interrupt to the lowest priority,
-                    allowing a single write to elevate the priority of
-                    an individual interrupt."
+                    This option selects the interupt priority for
+                    the UART [set ::channel] interrupts. There are
+                    CYGNUM_IO_SERIAL_IRQ_PRIORITY_LEVELS priority
+                    levels corresponding to the values 0 through
+                    CYGNUM_IO_SERIAL_IRQ_PRIORITY_LEVELS-1 decimal, of
+                    which the highest value is the lowest priority. The
+                    reset value of these registers defaults all interrupt
+                    to the lowest priority, allowing a single write to
+                    elevate the priority of an individual interrupt."
             }
         }
     }
 
-     cdl_component CYGPKG_IO_SERIAL_ARM_LPC24XX_TESTING {
+    cdl_component CYGPKG_IO_SERIAL_ARM_LPC24XX_TESTING {
         display    "Testing parameters"
         flavor     bool
         calculated 1
@@ -163,7 +179,7 @@ cdl_package CYGPKG_IO_SERIAL_ARM_LPC24XX
         implements CYGINT_IO_SERIAL_TEST_SKIP_9600
         implements CYGINT_IO_SERIAL_TEST_SKIP_115200
         implements CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN
-        
+
         cdl_option CYGPRI_SER_TEST_SER_DEV {
             display       "Serial device used for testing"
             flavor        data
--- a/packages/devs/serial/arm/lpc24xx/current/include/arm_lpc24xx_ser.inl
+++ b/packages/devs/serial/arm/lpc24xx/current/include/arm_lpc24xx_ser.inl
@@ -2,7 +2,7 @@
 //
 //      io/serial/arm/arm_lpc24xx_ser.inl
 //
-//      ARM LPC24XX Serial I/O definitions
+//      ARM LPC24XX / Cortex-M LPC17XX Serial I/O definitions
 //
 //==========================================================================
 // ####ECOSGPLCOPYRIGHTBEGIN####                                            
@@ -40,10 +40,10 @@
 //#####DESCRIPTIONBEGIN####
 //
 // Author(s):    Uwe Kindler
-// Contributors: gthomas, jlarmour
+// Contributors: gthomas, jlarmour, ilijak
 // Date:         2008-06-07
-// Purpose:      LPC24XX Serial I/O module (interrupt driven version)
-// Description: 
+// Purpose:      LPC24XX and LPC17XX Serial I/O module (interrupt driven version)
+// Description:
 //
 //####DESCRIPTIONEND####
 //
@@ -54,8 +54,12 @@
 //                               INCLUDES
 //==========================================================================
 #include <cyg/hal/hal_intr.h>
-#include <cyg/hal/lpc24xx_misc.h>
 
+#ifdef CYGPKG_HAL_CORTEXM_LPC17XX
+# include <cyg/hal/lpc17xx_misc.h>
+#else
+# include <cyg/hal/lpc24xx_misc.h>
+#endif
 
 //==========================================================================
 //                              STATIC DATA