summaryrefslogtreecommitdiff
path: root/ecos/packages/hal/cortexm/lm3s
diff options
context:
space:
mode:
Diffstat (limited to 'ecos/packages/hal/cortexm/lm3s')
-rw-r--r--ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/ChangeLog39
-rw-r--r--ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/cdl/hal_cortexm_ek_lm3s811.cdl78
-rw-r--r--ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/doc/ek_lm3s811.sgml140
-rw-r--r--ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/ek_lm3s811_misc.c163
-rw-r--r--ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/platform_i2c.c178
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/ChangeLog42
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/cdl/hal_cortexm_lm3s8xx.cdl390
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.h19
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.ldi34
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_arch.h60
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_intr.h61
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_io.h153
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/misc/default_ROM.ecm22
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/src/lm3s8xx_misc.c246
-rw-r--r--ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/tests/timers.c359
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/ChangeLog38
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/cdl/hal_cortexm_lm3s.cdl123
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/include/hal_cache.h66
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/include/hal_diag.h88
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/include/plf_stub.h88
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/include/var_arch.h61
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/include/var_intr.h119
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/include/var_io.h1371
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/include/variant.inc54
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/src/hal_diag.c406
-rw-r--r--ecos/packages/hal/cortexm/lm3s/var/current/src/lm3s_misc.c328
26 files changed, 4726 insertions, 0 deletions
diff --git a/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/ChangeLog b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/ChangeLog
new file mode 100644
index 0000000..738b455
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/ChangeLog
@@ -0,0 +1,39 @@
+2011-02-09 John Dallaway <john@dallaway.org.uk>
+
+ * doc/ek_lm3s811.sgml: Eliminate underscores in SGML ID strings. They
+ cause problems for some installations of openjade.
+
+ * cdl/hal_cortexm_ek_lm3s811.cdl: Fix documentation filename to match
+ the above change.
+
+2011-01-18 Christophe Coutand <ccoutand@stmi.com>
+
+ * cdl/hal_cortexm_ek_lm3s811.cdl:
+ * doc/ek_lm3s811.sgml:
+ * src/ek_lm3s811_misc.c:
+ * src/platform_i2c.c:
+ New package -- Stellaris Cortex-M3 EK-LM3S811 platform HAL.
+
+//===========================================================================
+// ####GPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This program 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 Software Foundation; either version 2 or (at your option) any
+// later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the
+// Free Software Foundation, Inc., 51 Franklin Street,
+// Fifth Floor, Boston, MA 02110-1301, USA.
+// -------------------------------------------
+// ####GPLCOPYRIGHTEND####
+//===========================================================================
diff --git a/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/cdl/hal_cortexm_ek_lm3s811.cdl b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/cdl/hal_cortexm_ek_lm3s811.cdl
new file mode 100644
index 0000000..ee64fb1
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/cdl/hal_cortexm_ek_lm3s811.cdl
@@ -0,0 +1,78 @@
+# ====================================================================
+##
+## hal_cortexm_ek_lm3s811.cdl
+##
+## Stellaris Cortex-M3 EK-LM3S811 board platform HAL
+##
+# ====================================================================
+## ####ECOSGPLCOPYRIGHTBEGIN####
+## -------------------------------------------
+## This file is part of eCos, the Embedded Configurable Operating System.
+## Copyright (C) 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
+## Software Foundation; either version 2 or (at your option) any later
+## version.
+##
+## eCos is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+## for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with eCos; if not, write to the Free Software Foundation, Inc.,
+## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+##
+## As a special exception, if other files instantiate templates or use
+## macros or inline functions from this file, or you compile this file
+## and link it with other works to produce a work based on this file,
+## this file does not by itself cause the resulting work to be covered by
+## the GNU General Public License. However the source code for this file
+## must still be made available in accordance with section (3) of the GNU
+## General Public License v2.
+##
+## This exception does not invalidate any other reasons why a work based
+## on this file might be covered by the GNU General Public License.
+## -------------------------------------------
+## ####ECOSGPLCOPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s): ccoutand
+# Contributors:
+# Date: 2011-01-18
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_package CYGPKG_HAL_CORTEXM_EK_LM3S811 {
+ display "Stellaris EK-LM3S811 Development Board HAL"
+ doc ref/hal-cortexm-lm3s-ek-lm3s811.html
+ parent CYGPKG_HAL_CORTEXM_LM3S8XX
+ define_header hal_cortexm_ek_lm3s811.h
+ include_dir cyg/hal
+ hardware
+
+ description "
+ The EK-LM3S811 HAL package provides the support needed to run
+ eCos on the Stellaris EK-LM3S811 EVAL board."
+
+ compile ek_lm3s811_misc.c platform_i2c.c
+
+ requires { CYGHWR_HAL_CORTEXM_LM3S == "LM3S8XX" }
+ requires { CYGHWR_HAL_CORTEXM_LM3S8XX == "LM3S811" }
+ requires { CYGNUM_HAL_CORTEXM_LM3S8XX_XTAL_FREQ == 6000000 }
+ requires { CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT == 1 }
+
+ define_proc {
+ puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_cortexm_ek_lm3s811.h>"
+ puts $::cdl_header "#include <pkgconf/hal_cortexm_lm3s8xx.h>"
+ puts $::cdl_header "#define HAL_PLATFORM_CPU \"Cortex-M3 - LM3S811\""
+ puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Stellaris EK-LM3S811\""
+ puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\""
+ }
+}
+
+# EOF hal_cortexm_ek_lm3s811.cdl
diff --git a/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/doc/ek_lm3s811.sgml b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/doc/ek_lm3s811.sgml
new file mode 100644
index 0000000..f358d73
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/doc/ek_lm3s811.sgml
@@ -0,0 +1,140 @@
+<!-- DOCTYPE part PUBLIC "-//OASIS//DTD DocBook V3.1//EN" -->
+
+<!-- {{{ Banner -->
+
+<!-- =============================================================== -->
+<!-- -->
+<!-- ek_lm3s811.sgml -->
+<!-- -->
+<!-- ek_lm3s811 board documentation. -->
+<!-- -->
+<!-- =============================================================== -->
+<!-- ####ECOSDOCCOPYRIGHTBEGIN#### -->
+<!-- =============================================================== -->
+<!-- Copyright (C) 2011 Free Software Foundation, Inc. -->
+<!-- This material may be distributed only subject to the terms -->
+<!-- and conditions set forth in the Open Publication License, v1.0 -->
+<!-- or later (the latest version is presently available at -->
+<!-- http://www.opencontent.org/openpub/) -->
+<!-- Distribution of the work or derivative of the work in any -->
+<!-- standard (paper) book form is prohibited unless prior -->
+<!-- permission obtained from the copyright holder -->
+<!-- =============================================================== -->
+<!-- ####ECOSDOCCOPYRIGHTEND#### -->
+<!-- =============================================================== -->
+<!-- #####DESCRIPTIONBEGIN#### -->
+<!-- -->
+<!-- Author(s): ccoutand -->
+<!-- Contact(s): ccoutand -->
+<!-- Date: 2011/01/18 -->
+<!-- Version: 0.01 -->
+<!-- -->
+<!-- ####DESCRIPTIONEND#### -->
+<!-- =============================================================== -->
+
+<!-- }}} -->
+
+<part id="hal-cortexm-lm3s-ek-lm3s811"><title>Stellaris EKK-LM3S811 Board Support</title>
+
+<refentry id="lm3s-ek-lm3s811">
+ <refmeta>
+ <refentrytitle>Overview</refentrytitle>
+ </refmeta>
+ <refnamediv>
+ <refname>eCos Support for the Stellaris EKK-LM3S811 Board</refname>
+ <refpurpose>Overview</refpurpose>
+ </refnamediv>
+
+ <refsect1 id="lm3s-ek-lm3s811-description"><title>Description</title>
+ <para>
+The Stellaris EKK-LM3S811 evaluation kit uses the Stellaris LM3S811 microcontroller from the
+800 Series. The LM3S811 is an ARM cortex-M3 based microcontroller with 64KB of FLASH
+and 8KB of SRAM. The device has various peripherals such as UART, I2C, ADC or Analog
+Comparator. The kit features an OLED graphical display and UART0 is accessible via the
+on-board USB to UART converter.
+ </para>
+ <para>
+Due to extreme limited RAM ressources (8KB SRAM only), the eCos port targets standalone ROM
+application using the eCos kernel in single user thread environment. The cortex-M architecture HAL
+requires a seperate stack to handle interrupts, thus the minimum kernel enable application requires 3
+stacks. The interrupt stack, the Idle thread stack and the user stack. All stacks are set to the architecture
+minimum allowed size of CYGNUM_HAL_STACK_SIZE_MINIMUM ( 1360 bytes ).
+ </para>
+ </refsect1>
+
+ <refsect1 id="lm3s-ek-lm3s811-config"><title>Configuration</title>
+ <para>
+The minimum board configuration includes the Microcontroller HAL alongs with the ADC and I2C device
+drivers.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><varname>LM3S811 Microcontroller</varname></term>
+ <listitem>
+ <para>
+CYGPKG_HAL_CORTEXM_LM3S8XX - The microcontroller configuration
+requirements are minimal. With the default setup, the microcontroller runs from the
+external clock source, a crystal of 6MHz. The chip internal PLL generates a fix
+200MHz clock that is divided down to the default system clock frequency of 50MHz.
+In this scenario, the device uses full processing power. The system clock divider
+allows down scaling of the system clock frequency to reduce the overall power
+consumption of the device. The microcontroller also offers the option to run from an
+internal oscillator. This option has 2 modes, 3MHz or 12MHz. When selecting the
+internal oscillator, the PLL is bypassed. The system clock frequency becomes at
+best 12MHz if no further clock division is applied.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>I2C Interface</varname></term>
+ <listitem><para>
+CYGPKG_DEVS_I2C_CORTEXM_LM3S - The microcontroller uses the I2C bus
+to communicate with the SD1300 controller of the OLED 96 x 16 display. The SD1300
+controller eCos driver is not currently available.
+The I2C is default set to use the low frequency mode ( 100KHz bus clock ). The high
+frequency mode ( 400 KHz ) is available by changing CYGNUM_HAL_CORTEXM_LM3S_I2C_CLK_SPEED.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>ADC Interface</varname></term>
+ <listitem><para>
+CYGPKG_DEVS_ADC_CORTEXM_LM3S - The LM3S811 includes 4 ADC channels including an
+optional internal temperature probe. There are many ways to use the on-chip ADC.
+The current eCos driver uses a single sequencer (sequencer 0) to schedule sampling of all
+channels. This practically means that all channels are sampled from the same trigger, a periodic timer
+interrupt in the current driver. The timer to use
+is selected from CYGNUM_DEVS_ADC_CORTEXM_LM3S_ADC0_SELECT_TIMER, with timer 0 as
+default value. The timer is used in 32 bits periodic mode, therefore cannot be re-used
+for any other user purpose. While the ADC has the possibility to trigger sampling on external
+IO events, the driver does not offer that flexibility. Finally, the driver only allows measurement of
+single-ended IOs.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id="lm3s-ek-lm3s811-rebuild"><title>Build ROM type applications</title>
+ <para>
+The steps needed to build the HAL library for the EKK-LM3S811 board are:
+ </para>
+ <screen>
+$ mkdir ek_lm3s811
+$ cd ek_lm3s811
+$ ecosconfig new ek-lm3s811 minimal
+$ ecosconfig import $ECOS_REPOSITORY/hal/cortexm/lm3s/ek_lm3s811/current/misc/default_ROM.ecm
+$ ecosconfig resolve
+$ ecosconfig tree
+$ make
+ </screen>
+ <para>
+At the end of the build the <filename
+class="directory">install/lib</filename> subdirectory should contain the library and linker script and the <filename
+class="directory">install/include</filename> subdirectory the necessary includes to compile the application.
+ </para>
+ </refsect1>
+
+
+</refentry>
+
+</part>
diff --git a/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/ek_lm3s811_misc.c b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/ek_lm3s811_misc.c
new file mode 100644
index 0000000..e77ef6c
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/ek_lm3s811_misc.c
@@ -0,0 +1,163 @@
+//==========================================================================
+//
+// ek_lm3s811_misc.c
+//
+// Cortex-M3 Stellaris EK-LM3S811 HAL functions
+//
+//==========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2008, 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): Original for STM3210E EVAL: nickg
+// Updated for EK-LM3S811: ccoutand
+// Date: 2011-01-18
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <pkgconf/hal.h>
+
+#include <cyg/infra/diag.h>
+#include <cyg/infra/cyg_type.h>
+#include <cyg/infra/cyg_trac.h> // tracing macros
+#include <cyg/infra/cyg_ass.h> // assertion macros
+
+#include <cyg/hal/hal_arch.h>
+#include <cyg/hal/hal_intr.h>
+
+
+// On-board status LED
+#define CYGHWR_HAL_EK_LM3S811_STATUS_LED \
+ CYGHWR_HAL_LM3S_GPIO( C, 5, OUT, 4_MA, PULLUP, DISABLE )
+
+// OLED regulator control
+#define CYGHWR_HAL_EK_LM3S811_OLED_PWD \
+ CYGHWR_HAL_LM3S_GPIO( D, 7, OUT, NONE, NONE, DISABLE )
+
+
+//==========================================================================
+// Drive OLED power ON/OFF IO
+
+__externC void
+hal_ek_lm3s811_oled_pwd( bool pwd )
+{
+ cyg_uint32 oled_pwd_io = CYGHWR_HAL_EK_LM3S811_OLED_PWD;
+
+ // Power ON regulator
+ if ( pwd == true )
+ CYGHWR_HAL_LM3S_GPIO_OUT( oled_pwd_io, 1 );
+ else
+ CYGHWR_HAL_LM3S_GPIO_OUT( oled_pwd_io, 0 );
+}
+
+
+//==========================================================================
+// Setup platform
+
+__externC void
+hal_platform_init( void )
+{
+ cyg_uint32 led_io = CYGHWR_HAL_EK_LM3S811_STATUS_LED;
+ cyg_uint32 oled_pwd_io = CYGHWR_HAL_EK_LM3S811_OLED_PWD;
+
+ // OLED power switch IO is on port D and user LED on port C
+ CYGHWR_HAL_LM3S_PERIPH_SET( CYGHWR_HAL_LM3S_P_GPIOC, 1 );
+ CYGHWR_HAL_LM3S_PERIPH_SET( CYGHWR_HAL_LM3S_P_GPIOD, 1 );
+ CYGHWR_HAL_LM3S_PERIPH_SET( CYGHWR_HAL_LM3S_P_I2C0, 0 );
+
+ // Status LED -> ON
+ CYGHWR_HAL_LM3S_GPIO_SET( led_io );
+ CYGHWR_HAL_LM3S_GPIO_OUT( led_io, 1 );
+
+ // Shutdown power regulator
+ CYGHWR_HAL_LM3S_GPIO_SET( oled_pwd_io );
+
+ hal_ek_lm3s811_oled_pwd( false );
+}
+
+
+//==========================================================================
+
+#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+
+#include CYGHWR_MEMORY_LAYOUT_H
+
+//--------------------------------------------------------------------------
+// Accesses to areas not backed by real devices or memory can cause
+// the CPU to hang.
+//
+// The following table defines the memory areas that GDB is allowed to
+// touch. All others are disallowed.
+// This table needs to be kept up to date with the set of memory areas
+// that are available on the board.
+
+static struct {
+ CYG_ADDRESS start; // Region start address
+ CYG_ADDRESS end; // End address (last byte)
+} hal_data_access[] = {
+#ifdef CYGMEM_REGION_sram // On-chip SRAM
+ {
+ CYGMEM_REGION_sram, CYGMEM_REGION_sram + CYGMEM_REGION_sram_SIZE - 1},
+#endif
+#ifdef CYGMEM_REGION_flash // On-chip flash
+ {
+ CYGMEM_REGION_flash,
+ CYGMEM_REGION_flash + CYGMEM_REGION_flash_SIZE - 1},
+#endif
+ {
+ 0xE0000000, 0x00000000 - 1}, // Cortex-M peripherals
+ {
+ 0x40000000, 0x50000000 - 1}, // Stellaris peripherals
+};
+
+__externC int
+cyg_hal_stub_permit_data_access( CYG_ADDRESS addr, cyg_uint32 count )
+{
+ int i;
+ for( i = 0; i < sizeof( hal_data_access ) / sizeof( hal_data_access[0] );
+ i++ ) {
+ if( ( addr >= hal_data_access[i].start )
+ && ( addr + count ) <= hal_data_access[i].end )
+ return true;
+ }
+ return false;
+}
+
+#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+
+
+//==========================================================================
+// EOF ek_lm3s811_misc.c
diff --git a/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/platform_i2c.c b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/platform_i2c.c
new file mode 100644
index 0000000..0889f36
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/ek_lm3s811/current/src/platform_i2c.c
@@ -0,0 +1,178 @@
+//==========================================================================
+//
+// platform_i2c.c
+//
+// Optional I2C support for Cortex-M3 Stellaris EK-LM3S811
+//
+//==========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Contributors:
+// Date: 2011-01-18
+// Purpose:
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+
+//=============================================================================
+// INCLUDES
+//=============================================================================
+#include <pkgconf/system.h>
+#include <cyg/infra/cyg_type.h>
+#include <cyg/hal/hal_io.h>
+#include <cyg/infra/cyg_ass.h>
+#include <cyg/hal/hal_endian.h>
+#include <cyg/hal/hal_intr.h>
+
+#ifdef CYGPKG_DEVS_I2C_CORTEXM_LM3S
+
+#include <cyg/io/i2c.h>
+#include <cyg/io/i2c_lm3s.h>
+
+//=============================================================================
+// Setup I2C bus 0
+//
+static void
+lm3s8xx_i2c0_init( struct cyg_i2c_bus *bus )
+{
+ cyg_uint32 scl_io = CYGHWR_HAL_LM3S_I2C_SCL;
+ cyg_uint32 sda_io = CYGHWR_HAL_LM3S_I2C_SDA;
+
+ //
+ // We only need to setup the pins here and
+ // leave the I2C driver to take care of the rest.
+ //
+ CYGHWR_HAL_LM3S_PERIPH_SET( CYGHWR_HAL_LM3S_P_GPIOB, 1 );
+ CYGHWR_HAL_LM3S_GPIO_SET( scl_io );
+ CYGHWR_HAL_LM3S_GPIO_SET( sda_io );
+ lm3s_i2c_init( bus );
+}
+
+
+//-----------------------------------------------------------------------------
+// I2C bus 0
+//
+CYG_LM3S_I2C_BUS(hal_lm3s8xx_i2c0_bus,
+ &lm3s8xx_i2c0_init,
+ CYGHWR_HAL_LM3S_I2C_M0,
+ CYGHWR_HAL_LM3S_P_I2C0,
+ CYGNUM_HAL_INTERRUPT_I2C,
+ 0x60,
+ 10);
+
+
+//-----------------------------------------------------------------------------
+// OLED
+//
+CYG_I2C_DEVICE(i2c_lm3s8xx_oled,
+ &hal_lm3s8xx_i2c0_bus,
+ 0x3d,
+ 0,
+ CYG_I2C_DEFAULT_DELAY);
+
+
+#define DELAY 1
+
+// Wrapper to TI OLED driver
+
+externC cyg_uint32
+lm3s8xx_oled_write_first( cyg_uint8 byte )
+{
+ cyg_uint32 result;
+
+ cyg_i2c_transaction_begin( &i2c_lm3s8xx_oled );
+
+ result = cyg_i2c_transaction_tx( &i2c_lm3s8xx_oled,
+ true, ( cyg_uint8 * )&byte, 1, false );
+
+#ifdef CYGPKG_KERNEL
+ cyg_thread_delay( DELAY );
+#endif
+
+ return result;
+}
+
+externC cyg_uint32
+lm3s8xx_oled_write_byte( cyg_uint8 byte )
+{
+ cyg_uint32 result;
+
+ result = cyg_i2c_transaction_tx( &i2c_lm3s8xx_oled,
+ false, ( cyg_uint8 * )&byte, 1, false );
+
+#ifdef CYGPKG_KERNEL
+ cyg_thread_delay( DELAY );
+#endif
+
+ return result;
+}
+
+
+externC cyg_uint32
+lm3s8xx_oled_write_array( const cyg_uint8 *array, cyg_uint32 count )
+{
+ cyg_uint32 result;
+
+ result = cyg_i2c_transaction_tx( &i2c_lm3s8xx_oled,
+ false, array, count, false );
+
+ return result;
+}
+
+
+externC cyg_uint32
+lm3s8xx_oled_write_final( cyg_uint8 byte )
+{
+ cyg_uint32 result;
+
+ result = cyg_i2c_transaction_tx( &i2c_lm3s8xx_oled,
+ false, ( cyg_uint8 * )&byte, 1, true );
+#ifdef CYGPKG_KERNEL
+ cyg_thread_delay( DELAY );
+#endif
+
+ cyg_i2c_transaction_end( &i2c_lm3s8xx_oled );
+
+ return result;
+}
+
+#endif // #ifdef CYGPKG_DEVS_I2C_CORTEXM_LM3S
+
+//-----------------------------------------------------------------------------
+// EOF platform_i2c.c
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/ChangeLog b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/ChangeLog
new file mode 100644
index 0000000..d3d3bec
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/ChangeLog
@@ -0,0 +1,42 @@
+2011-05-04 John Dallaway <john@dallaway.org.uk>
+
+ * include/plf_io.h: Fix determination when CYGHWR_HAL_LM3S_ADC0_CHAN
+ should be 8. Patch from Anatoly Sokolov. [ Bugzilla 1001222 ]
+
+2011-01-18 Christophe Coutand <ccoutand@stmi.com>
+
+ * cdl/hal_cortexm_lm3s8xx.cdl:
+ * include/pkgconf/mlt_cortexm_ek_lm3s811_rom.h:
+ * include/pkgconf/mlt_cortexm_ek_lm3s811_rom.ldi:
+ * include/plf_arch.h:
+ * include/plf_intr.h:
+ * include/plf_io.h:
+ * misc/default_ROM.ecm:
+ * src/lm3s8xx_misc.c:
+ * tests/timers.c:
+ New package -- Stellaris Cortex M3 800 Series HAL.
+
+//===========================================================================
+// ####GPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This program 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 Software Foundation; either version 2 or (at your option) any
+// later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the
+// Free Software Foundation, Inc., 51 Franklin Street,
+// Fifth Floor, Boston, MA 02110-1301, USA.
+// -------------------------------------------
+// ####GPLCOPYRIGHTEND####
+//===========================================================================
+
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/cdl/hal_cortexm_lm3s8xx.cdl b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/cdl/hal_cortexm_lm3s8xx.cdl
new file mode 100644
index 0000000..b46415c
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/cdl/hal_cortexm_lm3s8xx.cdl
@@ -0,0 +1,390 @@
+##==========================================================================
+##
+## hal_cortexm_lm8xx.cdl
+##
+## Stellaris Cortex-M3 800 Series variant HAL configuration data
+##
+##==========================================================================
+## ####ECOSGPLCOPYRIGHTBEGIN####
+## -------------------------------------------
+## This file is part of eCos, the Embedded Configurable Operating System.
+## Copyright (C) 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
+## Software Foundation; either version 2 or (at your option) any later
+## version.
+##
+## eCos is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+## for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with eCos; if not, write to the Free Software Foundation, Inc.,
+## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+##
+## As a special exception, if other files instantiate templates or use
+## macros or inline functions from this file, or you compile this file
+## and link it with other works to produce a work based on this file,
+## this file does not by itself cause the resulting work to be covered by
+## the GNU General Public License. However the source code for this file
+## must still be made available in accordance with section (3) of the GNU
+## General Public License v2.
+##
+## This exception does not invalidate any other reasons why a work based
+## on this file might be covered by the GNU General Public License.
+## -------------------------------------------
+## ####ECOSGPLCOPYRIGHTEND####
+##==========================================================================
+#######DESCRIPTIONBEGIN####
+##
+## Author(s): ccoutand
+## Date: 2011-01-18
+##
+######DESCRIPTIONEND####
+##
+##==========================================================================
+
+cdl_package CYGPKG_HAL_CORTEXM_LM3S8XX {
+ display "Stellaris Cortex-M3 800 Series"
+ parent CYGPKG_HAL_CORTEXM
+ include_dir cyg/hal
+ define_header hal_cortexm_lm3s8xx.h
+ hardware
+ description "
+ This package provides generic support for the Cortex-M3 based
+ Stellaris LM 800 Series microcontroller family. It is also
+ necessary to select a variant and platform HAL package."
+
+ compile lm3s8xx_misc.c
+
+ implements CYGINT_DEVS_I2C_LM3S8XX_BUS_DEVICES
+
+ requires { CYGHWR_HAL_CORTEXM_LM3S == "LM3S8XX" }
+
+ define_proc {
+ puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H <pkgconf/hal_cortexm.h>"
+ puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H <pkgconf/hal_cortexm_lm3s.h>"
+ puts $::cdl_system_header "#define CYGBLD_HAL_CORTEXM_VAR_IO_H"
+ }
+
+ cdl_option CYGHWR_HAL_CORTEXM_LM3S8XX {
+ display "Stellaris LM 800 Series variant in use"
+ flavor data
+ default_value { "LM3S811" }
+ legal_values { "LM3S828" "LM3S818" "LM3S817"
+ "LM3S815" "LM3S812" "LM3S811"
+ "LM3S808" "LM3S801" "LM3S800" }
+ description "
+ The Stellaris 800 Series has several variants, the main
+ difference being the numbers of some peripherals"
+ }
+
+ cdl_component CYGNUM_HAL_RTC_CONSTANTS {
+ display "Real-time clock constants"
+ flavor none
+ no_define
+
+ cdl_option CYGNUM_HAL_RTC_NUMERATOR {
+ display "Real-time clock numerator"
+ flavor data
+ default_value 1000000000
+ }
+
+ cdl_option CYGNUM_HAL_RTC_DENOMINATOR {
+ display "Real-time clock denominator"
+ flavor data
+ default_value 100
+ }
+
+ cdl_option CYGNUM_HAL_RTC_PERIOD {
+ display "Real-time clock period"
+ flavor data
+ default_value 1000000 / CYGNUM_HAL_RTC_DENOMINATOR
+ }
+ }
+
+ cdl_component CYG_HAL_STARTUP {
+ display "Startup type"
+ flavor data
+ default_value { "ROM" }
+ legal_values { "ROM" }
+ no_define
+ define -file system.h CYG_HAL_STARTUP
+ description "
+ With its 8KB of SRAM, the 800 Series devices only allows
+ ROM startup."
+ }
+
+ cdl_component CYGHWR_MEMORY_LAYOUT {
+ display "Memory layout"
+ flavor data
+ no_define
+ calculated { (CYG_HAL_STARTUP == "ROM") ? \
+ "cortexm_lm3s8xx_rom" : "undefined" }
+
+ cdl_option CYGHWR_MEMORY_LAYOUT_LDI {
+ display "Memory layout linker script fragment"
+ flavor data
+ no_define
+ define -file system.h CYGHWR_MEMORY_LAYOUT_LDI
+ calculated { "<pkgconf/mlt_" . CYGHWR_MEMORY_LAYOUT . ".ldi>" }
+ }
+
+ cdl_option CYGHWR_MEMORY_LAYOUT_H {
+ display "Memory layout header file"
+ flavor data
+ no_define
+ define -file system.h CYGHWR_MEMORY_LAYOUT_H
+ calculated { "<pkgconf/mlt_" . CYGHWR_MEMORY_LAYOUT . ".h>" }
+ }
+ }
+
+ cdl_component CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK {
+ display "Clocking"
+ flavor none
+ requires { CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT || \
+ CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT }
+
+ cdl_component CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT {
+ display "External clock source"
+ active_if ! CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT
+ flavor bool
+ default_value 1
+
+ cdl_option CYGNUM_HAL_CORTEXM_LM3S8XX_XTAL_FREQ {
+ display "Crystal frequency in Hz"
+ flavor data
+ default_value 8000000
+ legal_values { 1000000 to 8192000 }
+ description "
+ Select the external crystal frequency from 1 to
+ 8.192 MHz. Selecting the internal PLL adds additional
+ constraints to the external crystal frequency setting.
+ Check-out CYGHWR_HAL_CORTEXM_LM3S8XX_PLL"
+ }
+ }
+
+ cdl_component CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT {
+ display "Internal clock source"
+ active_if ! CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT
+ flavor bool
+ default_value 0
+
+ cdl_option CYGNUM_HAL_CORTEXM_LM3S8XX_CLOCK_INT_FREQ {
+ display "Internal clock source frequency in Hz"
+ flavor data
+ default_value 12000000
+ legal_values { 12000000 3000000 }
+ description "
+ Select the internal clock source. The frequency of the
+ internal clock source can either be 12MHz or 3MHz."
+ }
+ }
+
+ cdl_component CYGHWR_HAL_CORTEXM_LM3S8XX_PLL {
+ display "Enable PLL"
+ flavor bool
+ default_value 1
+ active_if CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT
+
+ cdl_option CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT {
+ display "PLL input clock frequency"
+ flavor data
+ calculated { CYGNUM_HAL_CORTEXM_LM3S8XX_XTAL_FREQ }
+ legal_values { 3579545 3686400 4000000 4096000 4915200 5000000 \
+ 5120000 6000000 6144000 7372800 8000000 8192000 }
+ description "
+ PLL output frequency is fixed to 200 MHz. Using the
+ PLL puts more constraints to the external reference
+ clock. The PLL input clock frequency is not defined
+ if internal chip reference clock is used."
+ }
+ }
+
+ cdl_option CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK {
+ display "System Clock frequency"
+ flavor data
+ calculated { CYGHWR_HAL_CORTEXM_LM3S8XX_PLL ? ( 200000000 / CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV ) : CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT ? ( CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL_FREQ / CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV ) : ( CYGNUM_HAL_CORTEXM_LM3S8XX_CLOCK_INT_FREQ / CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV ) }
+ legal_values { 1000000 to 50000000 }
+ description "
+ The chip system clock frequency is 200 MHz divided
+ by the system clock divider when the PLL is in used,
+ otherwise the frequency value is the chip source clock
+ frequency divided by the system clock divider."
+ }
+
+ cdl_option CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV {
+ display "System Clock divider"
+ flavor data
+ default_value 4
+ legal_values { 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 }
+ description "
+ Select the system clock divider."
+ }
+ }
+
+ # UART0 is available for diagnostic/debug use.
+ implements CYGINT_HAL_CORTEXM_LM3S_UART0
+
+ cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS {
+ display "Number of communication channels on the board"
+ flavor data
+ calculated 1
+ }
+
+ cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
+ display "Debug serial port"
+ active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
+ flavor data
+ calculated 0
+ description "
+ This option selects which port will be used to connect to
+ a host running GDB."
+ }
+
+ cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
+ display "Diagnostic serial port"
+ active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
+ flavor data
+ calculated 0
+ description "
+ This option selects which port will be used for diagnostic
+ output."
+ }
+
+ cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD {
+ display "Console serial port baud rate"
+ flavor data
+ legal_values 9600 19200 38400 57600 115200
+ default_value 38400
+ description "
+ This option controls the default baud rate used for the
+ console connection. Note: this should match the value chosen
+ for the GDB port if the diagnostic and GDB port are the same."
+ }
+
+ cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD {
+ display "GDB serial port baud rate"
+ flavor data
+ legal_values 9600 19200 38400 57600 115200
+ default_value 38400
+ description "
+ This option controls the default baud rate used for the GDB
+ connection. Note: this should match the value chosen for
+ the console port if the console and GDB port are the same."
+ }
+
+ cdl_component CYGBLD_GLOBAL_OPTIONS {
+ display "Global build options"
+ flavor none
+ parent CYGPKG_NONE
+ description "
+ Global build options including control over compiler flags,
+ linker flags and choice of toolchain."
+
+ cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX {
+ display "Global command prefix"
+ flavor data
+ no_define
+ default_value { "arm-eabi" }
+ description "
+ This option specifies the command prefix used when
+ invoking the build tools."
+ }
+
+ cdl_option CYGBLD_GLOBAL_CFLAGS {
+ display "Global compiler flags"
+ flavor data
+ no_define
+ default_value { CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" }
+ description "
+ This option controls the global compiler flags which
+ are used to compile all packages by default. Individual
+ packages may define options which override these global
+ flags."
+ }
+
+ cdl_option CYGBLD_GLOBAL_LDFLAGS {
+ display "Global linker flags"
+ flavor data
+ no_define
+ default_value { "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" }
+ description "
+ This option controls the global linker flags. Individual
+ packages may define options which override these global
+ flags."
+ }
+ }
+
+ cdl_option CYGSEM_HAL_ROM_MONITOR {
+ display "Behave as a ROM monitor"
+ flavor bool
+ default_value 0
+ parent CYGPKG_HAL_ROM_MONITOR
+ requires { CYG_HAL_STARTUP == "ROM" }
+ requires { CYGDBG_HAL_CRCTABLE_LOCATION == "ROM" }
+ description "
+ Enable this option if this program is to be used as a
+ ROM monitor, i.e. applications will be loaded into RAM on
+ the board, and this ROM monitor may process exceptions or
+ interrupts generated from the application. This enables
+ features such as utilizing a separate interrupt stack when
+ exceptions are generated."
+ }
+
+ cdl_option CYGSEM_HAL_USE_ROM_MONITOR {
+ display "Work with a ROM monitor"
+ flavor booldata
+ legal_values { "Generic" "GDB_stubs" }
+ default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 }
+ parent CYGPKG_HAL_ROM_MONITOR
+ requires { CYG_HAL_STARTUP == "RAM" }
+ description "
+ Support can be enabled for different varieties of ROM
+ monitor. This support changes various eCos semantics such
+ as the encoding of diagnostic output, or the overriding of
+ hardware interrupt vectors.
+ Firstly there is \"Generic\" support which prevents the
+ HAL from overriding the hardware vectors that it does not
+ use, to instead allow an installed ROM monitor to handle
+ them. This is the most basic support which is likely to be
+ common to most implementations of ROM monitor.
+ \"GDB_stubs\" provides support when GDB stubs are included
+ in the ROM monitor or boot ROM."
+ }
+
+ cdl_component CYGBLD_HAL_CORTEXM_LM3S8XX_GDB_STUBS {
+ display "Create StubROM SREC and binary files"
+ active_if CYGBLD_BUILD_COMMON_GDB_STUBS
+ no_define
+ calculated 1
+ requires { CYG_HAL_STARTUP == "ROM" }
+ description "
+ This component causes the ELF image generated by the build
+ process to be converted to S-Record and binary files."
+
+ make -priority 325 {
+ <PREFIX>/bin/stubrom.srec : <PREFIX>/bin/gdb_module.img
+ $(OBJCOPY) -O srec $< $@
+ }
+ make -priority 325 {
+ <PREFIX>/bin/stubrom.bin : <PREFIX>/bin/gdb_module.img
+ $(OBJCOPY) -O binary $< $@
+ }
+ }
+
+ cdl_option CYGPKG_HAL_CORTEXM_LM3S8XX_TESTS {
+ display "Stellaris Cortex-M3 800 Series tests"
+ active_if CYGPKG_KERNEL
+ flavor data
+ no_define
+ calculated { "tests/timers" }
+ description "
+ This option specifies the set of tests for the Stellaris
+ Cortex-M3 800 Series HAL."
+ }
+}
+
+# EOF hal_cortex_lm3s8xx.cdl
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.h b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.h
new file mode 100644
index 0000000..555211f
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.h
@@ -0,0 +1,19 @@
+// eCos memory layout
+
+#ifndef __ASSEMBLER__
+#include <cyg/infra/cyg_type.h>
+#include <stddef.h>
+
+#endif
+#define CYGMEM_REGION_sram (0x20000000)
+#define CYGMEM_REGION_sram_SIZE (0x00002000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE)
+#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
+#define CYGMEM_REGION_flash (0x00000000)
+#define CYGMEM_REGION_flash_SIZE (0x00010000)
+#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
+#define CYGMEM_REGION_ram_SIZE (0x00000000)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__heap1) [];
+#endif
+#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
+#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_sram+CYGMEM_REGION_sram_SIZE - (size_t) CYG_LABEL_NAME (__heap1))
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.ldi b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.ldi
new file mode 100644
index 0000000..3a1d61d
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/pkgconf/mlt_cortexm_lm3s8xx_rom.ldi
@@ -0,0 +1,34 @@
+// eCos memory layout
+
+#include <pkgconf/hal.h>
+#include <cyg/infra/cyg_type.inc>
+
+MEMORY
+{
+ sram : ORIGIN = 0x20000000, LENGTH = 0x00002000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
+ flash : ORIGIN = 0x00000000, LENGTH = 0x00010000
+}
+
+SECTIONS
+{
+ SECTIONS_BEGIN
+ SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA)
+ SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_sram (sram, 0x20000400, FOLLOWING (.got))
+ SECTION_data (sram, ALIGN (0x8), FOLLOWING (.sram))
+ SECTION_bss (sram, ALIGN (0x8), LMA_EQ_VMA)
+ CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
+ SECTIONS_END
+}
+
+hal_vsr_table = 0x20000000;
+hal_virtual_vector_table = hal_vsr_table + 128*4;
+hal_startup_stack = 0x20000000 + 1024*8;
+
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_arch.h b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_arch.h
new file mode 100644
index 0000000..5e8f85b
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_arch.h
@@ -0,0 +1,60 @@
+#ifndef CYGONCE_HAL_PLF_ARCH_H
+#define CYGONCE_HAL_PLF_ARCH_H
+//=============================================================================
+//
+// plf_arch.h
+//
+// Platform specific architecture overrides
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Purpose: Stellaris Cortex-M3 800 Series specific interrupt overrides
+// Description:
+// Usage: #include <cyg/hal/plf_arch.h>
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/hal.h>
+#include <pkgconf/hal_cortexm_lm3s8xx.h>
+
+
+//-----------------------------------------------------------------------------
+#endif // CYGONCE_HAL_PLF_ARCH_H
+// EOF plf_arch.h
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_intr.h b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_intr.h
new file mode 100644
index 0000000..2246e67
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_intr.h
@@ -0,0 +1,61 @@
+#ifndef CYGONCE_HAL_PLF_INTR_H
+#define CYGONCE_HAL_PLF_INTR_H
+//=============================================================================
+//
+// plf_intr.h
+//
+// Platform specific interrupt overrides
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Purpose: Stellaris Cortex-M3 800 Series specific interrupt overrides
+// Description:
+// Usage: #include <cyg/hal/plf_intr.h>
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/hal.h>
+#include <pkgconf/hal_cortexm_lm3s8xx.h>
+
+#define CYGNUM_HAL_INTERRUPT_NVIC_MAX (CYGNUM_HAL_INTERRUPT_FMS)
+
+//-----------------------------------------------------------------------------
+#endif // CYGONCE_HAL_PLF_INTR_H
+// EOF plf_intr.h
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_io.h b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_io.h
new file mode 100644
index 0000000..dabc676
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/include/plf_io.h
@@ -0,0 +1,153 @@
+#ifndef CYGONCE_HAL_PLF_IO_H
+#define CYGONCE_HAL_PLF_IO_H
+//=============================================================================
+//
+// plf_io.h
+//
+// Stellaris Cortex-M3 800 Series specific registers
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Purpose:
+// Description:
+// Usage: #include <cyg/hal/plf_io.h>
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+#include <pkgconf/hal_cortexm_lm3s8xx.h>
+
+// Number of IOs on port A / B and C
+#define CYGHWR_HAL_LM3S_GPIOA_IOs 6
+#define CYGHWR_HAL_LM3S_GPIOB_IOs 8
+#define CYGHWR_HAL_LM3S_GPIOC_IOs 8
+
+// Number of IOs on port D and E varies
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S800) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801)
+#define CYGHWR_HAL_LM3S_GPIOD_IOs 8
+#define CYGHWR_HAL_LM3S_GPIOE_IOs 6
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S828)
+#define CYGHWR_HAL_LM3S_GPIOD_IOs 4
+#define CYGHWR_HAL_LM3S_GPIOE_IOs 2
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811)
+#define CYGHWR_HAL_LM3S_GPIOD_IOs 8
+#define CYGHWR_HAL_LM3S_GPIOE_IOs 2
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S812) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815)
+#define CYGHWR_HAL_LM3S_GPIOD_IOs 8
+#define CYGHWR_HAL_LM3S_GPIOE_IOs 4
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S817)|| \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818)
+#define CYGHWR_HAL_LM3S_GPIOD_IOs 6
+#define CYGHWR_HAL_LM3S_GPIOE_IOs 2
+#endif
+
+// UART1
+#define CYGHWR_HAL_LM3S_UART1_TX CYGHWR_HAL_LM3S_GPIO( D, 2, PERIPH, NONE, NONE, DISABLE )
+#define CYGHWR_HAL_LM3S_UART1_RX CYGHWR_HAL_LM3S_GPIO( D, 3, PERIPH, NONE, NONE, DISABLE )
+#define CYGHWR_HAL_LM3S_P_UART1_GPIO CYGHWR_HAL_LM3S_P_GPIOD
+
+// Number of ADC channel
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S812) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815)
+#define CYGHWR_HAL_LM3S_ADC0_CHAN 2
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811)
+#define CYGHWR_HAL_LM3S_ADC0_CHAN 4
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S817) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818)
+#define CYGHWR_HAL_LM3S_ADC0_CHAN 6
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S828) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808)
+#define CYGHWR_HAL_LM3S_ADC0_CHAN 8
+#endif
+
+// Number of PWM channel
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S812)
+#define CYGHWR_HAL_LM3S_MAX_PWM_CHAN 2
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S817) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818)
+#define CYGHWR_HAL_LM3S_PWM_CHAN 6
+#endif
+
+// Number of I2C channels
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S800) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S828)
+#define CYGHWR_HAL_LM3S_I2C_CHAN 1
+// I2C
+#define CYGHWR_HAL_LM3S_I2C_SCL CYGHWR_HAL_LM3S_GPIO( B, 3, PERIPH, 2_MA, OP_PULLUP, DISABLE )
+#define CYGHWR_HAL_LM3S_I2C_SDA CYGHWR_HAL_LM3S_GPIO( B, 2, PERIPH, 2_MA, OP_PULLUP, DISABLE )
+#endif
+
+// Number of analog Comparator
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S800) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S815)
+#define CYGHWR_HAL_LM3S_AC_CHAN 3
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S808) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S811) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S812) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S817) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818)
+#define CYGHWR_HAL_LM3S_AC_CHAN 1
+#endif
+
+// Number of Quadrature Encoder Channel
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S801) || \
+ defined(CYGHWR_HAL_CORTEXM_LM3S8XX_LM3S818)
+#define CYGHWR_HAL_LM3S_QEI_CHAN 1
+#endif
+
+// SSI channel
+#define CYGHWR_HAL_LM3S_SSI_CHAN 1
+
+// Global timer channel
+#define CYGHWR_HAL_LM3S_GPTIM_CHAN 3
+
+//-----------------------------------------------------------------------------
+#endif //CYGONCE_HAL_PLF_IO_H
+// EOF plf_io.h
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/misc/default_ROM.ecm b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/misc/default_ROM.ecm
new file mode 100644
index 0000000..34dc97d
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/misc/default_ROM.ecm
@@ -0,0 +1,22 @@
+cdl_savefile_version 1;
+cdl_savefile_command cdl_savefile_version {};
+cdl_savefile_command cdl_savefile_command {};
+cdl_savefile_command cdl_configuration { description hardware template package };
+cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value };
+cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value };
+cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value };
+cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value };
+
+cdl_configuration eCos {
+ description "" ;
+ template minimal ;
+ package CYGPKG_KERNEL current ;
+};
+
+cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE {
+ user_value 1536
+};
+
+cdl_option CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE {
+ user_value 1536
+}; \ No newline at end of file
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/src/lm3s8xx_misc.c b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/src/lm3s8xx_misc.c
new file mode 100644
index 0000000..f611e6c
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/src/lm3s8xx_misc.c
@@ -0,0 +1,246 @@
+//==========================================================================
+//
+// lm3s8xx_misc.c
+//
+// Stellaris Cortex-M3 800 Series HAL functions
+//
+//==========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2010 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2010-11-21
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <pkgconf/hal.h>
+
+#ifdef CYGPKG_KERNEL
+#include <pkgconf/kernel.h>
+#endif
+
+#include <cyg/infra/diag.h>
+#include <cyg/infra/cyg_type.h>
+#include <cyg/infra/cyg_trac.h> // tracing macros
+#include <cyg/infra/cyg_ass.h> // assertion macros
+
+#include <cyg/hal/hal_arch.h> // HAL header
+#include <cyg/hal/hal_intr.h> // HAL header
+#include <cyg/hal/hal_if.h> // HAL header
+#include <cyg/hal/var_io.h>
+
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_PLL)
+#if CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 3579545
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(4)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 3686400
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(5)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 4000000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(6)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 4096000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(7)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 4915200
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(8)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 5000000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(9)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 5120000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(10)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 6000000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(11)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 6144000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(12)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 7372800
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(13)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 8000000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(14)
+#elif CYGHWR_HAL_CORTEXM_LM3S8XX_PLL_INPUT == 8192000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL CYGHWR_HAL_LM3S_SC_RCC_XTAL(15)
+#endif
+#endif
+
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT)
+#if CYGNUM_HAL_CORTEXM_LM3S8XX_CLOCK_INT_FREQ == 12000000
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_OSCSRC_FIELD CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_IOSC
+#else
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_OSCSRC_FIELD CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_IOSC_DIV4
+#endif
+#else
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_OSCSRC_FIELD CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_MOSC
+#endif
+
+#if CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV != 1
+#define CYGHWR_HAL_CORTEXM_LM3S8XX_SC_RCC_SYSDIV_VAL \
+ CYGHWR_HAL_LM3S_SC_RCC_SYSDIV( (CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV-1) );
+#endif
+
+//==========================================================================
+
+void hal_lm3s8xx_periph_set( cyg_uint32 periph, cyg_uint32 on_off );
+
+__externC cyg_uint32 hal_cortexm_systick_clock;
+__externC cyg_uint32 hal_lm3s_sysclk;
+
+//==========================================================================
+// System init
+//
+// This code runs before the DATA is copied from ROM and the BSS cleared,
+// hence it cannot make use of static variables or data tables.
+
+__externC void
+hal_system_init( void )
+{
+}
+
+
+//==========================================================================
+// Setup up system clocks
+//
+void
+hal_start_clocks( void )
+{
+ CYG_ADDRESS sc = CYGHWR_HAL_LM3S_SC;
+ cyg_uint32 rcc;
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_PLL)
+ cyg_uint32 plllmis = CYGHWR_HAL_LM3S_SC_MISC_PLLLMIS;
+ cyg_uint32 plllris = CYGHWR_HAL_LM3S_SC_RIS_PLLLRIS;
+ volatile cyg_uint16 wait;
+#endif
+
+ // At power up, the LM3S8xx is setup to use external oscillator.
+ // The PLL is powered down and bypass. Same goes for the system
+ // clock divider.
+
+ // For JTAG cold restart, first we make sure the PLL and system
+ // clock divider are bypassed, enable all clock source and shutdown
+ // the PLL.
+
+ HAL_READ_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc );
+
+ rcc &= ~( CYGHWR_HAL_LM3S_SC_RCC_USESYSDIV |
+ CYGHWR_HAL_LM3S_SC_RCC_MOSCDIS |
+ CYGHWR_HAL_LM3S_SC_RCC_IOSCDIS );
+
+ rcc |= CYGHWR_HAL_LM3S_SC_RCC_BYPASS;
+
+ HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc );
+
+ rcc |= ( CYGHWR_HAL_LM3S_SC_RCC_PWRDN | CYGHWR_HAL_LM3S_SC_RCC_OEN );
+
+ HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc );
+
+ // PLL is setup if in use
+ //
+ // The XTAL frequency is configured. The PLL is powered and
+ // its output is enable
+
+ // Setup Clock Source
+ rcc |= CYGHWR_HAL_CORTEXM_LM3S8XX_OSCSRC_FIELD;
+
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_PLL)
+
+ // Clear PLL lock bit
+ HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_MISC, plllmis );
+
+ rcc &= ~( CYGHWR_HAL_LM3S_SC_RCC_XTAL_MASK |
+ ( CYGHWR_HAL_LM3S_SC_RCC_PWRDN ) |
+ ( CYGHWR_HAL_LM3S_SC_RCC_OEN ) );
+
+ rcc |= CYGHWR_HAL_CORTEXM_LM3S8XX_XTAL;
+
+#endif
+
+ HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc );
+
+ //
+ // Setup System Clock divider
+ //
+
+#if CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK_DIV != 1
+
+ // Use system clock divider
+ rcc |= CYGHWR_HAL_LM3S_SC_RCC_USESYSDIV;
+
+ // Clear system clock divider bits
+ rcc &= ~CYGHWR_HAL_LM3S_SC_RCC_SYSDIV_MASK;
+
+ // Configure divider
+ rcc |= CYGHWR_HAL_CORTEXM_LM3S8XX_SC_RCC_SYSDIV_VAL;
+
+ HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc );
+
+#endif
+
+ // Wait for PLL lock before feeding the clock to the
+ // device
+
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_PLL)
+
+ // Wait for PLL lock, potentially a dead lock
+ plllris = 0;
+ while ( 0 == ( plllris & CYGHWR_HAL_LM3S_SC_RIS_PLLLRIS ) ) {
+ // Wait
+ for ( wait = 0; wait < ( ( 2 ^ 16 ) - 1 ); wait++ )
+ HAL_READ_UINT32( sc + CYGHWR_HAL_LM3S_SC_RIS, plllris );
+ }
+
+ // Clear bypass bit
+ rcc &= ~CYGHWR_HAL_LM3S_SC_RCC_BYPASS;
+
+ HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc );
+
+#endif
+
+ //
+ // Disable clock source not in use
+ //
+#if defined(CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_EXT)
+
+ rcc |= CYGHWR_HAL_LM3S_SC_RCC_IOSCDIS;
+
+#elif defined(CYGHWR_HAL_CORTEXM_LM3S8XX_CLOCK_INT)
+
+ rcc |= CYGHWR_HAL_LM3S_SC_RCC_MOSCDIS;
+
+#endif
+
+ HAL_WRITE_UINT32( sc + CYGHWR_HAL_LM3S_SC_RCC, rcc );
+
+ hal_cortexm_systick_clock = CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK;
+ hal_lm3s_sysclk = CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK;
+}
+
+//==========================================================================
+// EOF lm3s8xx_misc.c
diff --git a/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/tests/timers.c b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/tests/timers.c
new file mode 100644
index 0000000..e8a5a82
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/lm3s8xx/current/tests/timers.c
@@ -0,0 +1,359 @@
+//=============================================================================
+//
+// timers.c
+//
+// Test for Stellaris Cortex-M3 Device Timers
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2008, 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): nickg for STM32
+// ccoutand updated for Stellaris Cortex-M3 Devices
+// Date: 2011-01-18
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/system.h>
+#include <pkgconf/hal.h>
+
+#if defined(CYGPKG_KERNEL)
+#include <pkgconf/kernel.h>
+#endif
+
+#include <cyg/infra/testcase.h>
+
+//=============================================================================
+// Check all required packages and components are present
+
+#if !defined(CYGPKG_KERNEL) || !defined(CYGPKG_KERNEL_API)
+# define NA_MSG "Configuration insufficient"
+#endif
+
+//=============================================================================
+// If everything is present, compile the full test.
+
+#ifndef NA_MSG
+
+#include <cyg/hal/hal_arch.h>
+#include <cyg/hal/hal_io.h>
+#include <cyg/hal/hal_if.h>
+
+#include <cyg/kernel/kapi.h>
+#include <cyg/infra/diag.h>
+#include <string.h>
+
+//=============================================================================
+
+#define LOOPS 24 // 2 minutes
+#define SINGLE_TIMER 0 // Full / Single timer test
+
+static int test_stack[( CYGNUM_HAL_STACK_SIZE_MINIMUM / sizeof( int ) )];
+static cyg_thread test_thread;
+static cyg_handle_t main_thread;
+
+//=============================================================================
+
+struct timer {
+ cyg_uint32 timer;
+ cyg_uint32 base;
+ cyg_uint32 periph;
+ cyg_uint32 vector;
+ cyg_uint32 priority;
+ cyg_uint32 interval;
+
+ cyg_uint32 ticks;
+
+ cyg_uint32 preempt[10];
+
+ cyg_uint32 preempt_dsr[10];
+ cyg_uint32 dsr_count[10];
+
+ cyg_interrupt interrupt_object;
+ cyg_handle_t interrupt_handle;
+};
+
+struct timer timers[] = {
+#if SINGLE_TIMER
+ {1, CYGHWR_HAL_LM3S_GPTIM0, CYGHWR_HAL_LM3S_P_TIMER0,
+ CYGNUM_HAL_INTERRUPT_GTIM0_A, 0x20, 1000},
+#else
+ {1, CYGHWR_HAL_LM3S_GPTIM0, CYGHWR_HAL_LM3S_P_TIMER0,
+ CYGNUM_HAL_INTERRUPT_GTIM0_A, 0x20, 127},
+ {2, CYGHWR_HAL_LM3S_GPTIM1, CYGHWR_HAL_LM3S_P_TIMER1,
+ CYGNUM_HAL_INTERRUPT_GTIM1_A, 0x60, 355},
+ {3, CYGHWR_HAL_LM3S_GPTIM2, CYGHWR_HAL_LM3S_P_TIMER2,
+ CYGNUM_HAL_INTERRUPT_GTIM2_A, 0x80, 731},
+#endif
+ {0, 0, 0, 0}
+};
+
+
+//=============================================================================
+
+volatile cyg_uint32 ticks = 0;
+volatile cyg_uint32 nesting = 0;
+volatile cyg_uint32 max_nesting = 0;
+volatile cyg_uint32 max_nesting_seen = 0;
+volatile cyg_uint32 current = 0;
+volatile cyg_uint32 in_dsr = 0;
+
+
+//=============================================================================
+
+void
+init_timer( cyg_uint32 base, cyg_uint32 periph, cyg_uint32 interval )
+{
+ cyg_uint32 period = CYGHWR_HAL_CORTEXM_LM3S8XX_SYSCLK;
+
+ CYGHWR_HAL_LM3S_PERIPH_SET( periph, 1 );
+
+ HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_CTL, 0x0000 );
+
+ period = period / 1000000;
+
+ HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_TAPR, period );
+
+ HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_CFG,
+ CYGHWR_HAL_LM3S_GPTIM_CFG_16BIT );
+
+ HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_TAMR,
+ CYGHWR_HAL_LM3S_GPTIM_TAMR_PERIODIC );
+
+ HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_TAILR, interval );
+
+ HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_ICR,
+ CYGHWR_HAL_LM3S_GPTIM_ICR_TATOCINT );
+
+ HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_IMR,
+ CYGHWR_HAL_LM3S_GPTIM_IMR_TATOIM );
+
+ HAL_WRITE_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_CTL,
+ CYGHWR_HAL_LM3S_GPTIM_CTL_TAEN );
+}
+
+
+//=============================================================================
+
+cyg_uint32
+timer_isr( cyg_uint32 vector, CYG_ADDRWORD data )
+{
+ struct timer *t = ( struct timer * )data;
+ cyg_uint32 preempt = current;
+ CYG_ADDRWORD base = t->base;
+ cyg_uint32 cnt;
+
+ current = t->timer;
+ t->ticks++;
+ ticks++;
+ t->preempt[preempt]++;
+ nesting++;
+
+ // Count only first ISR to preempt a DSR
+ if( preempt == 0 )
+ t->preempt_dsr[in_dsr]++;
+
+ HAL_WRITE_UINT32( t->base + CYGHWR_HAL_LM3S_GPTIM_ICR,
+ CYGHWR_HAL_LM3S_GPTIM_ICR_TATOCINT );
+
+ if( nesting > max_nesting )
+ max_nesting = nesting;
+
+ // Loiter here for a proportion of the timer interval to give
+ // other timers the chance to preempt us.
+ do {
+ HAL_READ_UINT32( base + CYGHWR_HAL_LM3S_GPTIM_TAR, cnt );
+ } while( cnt < t->interval / 10 );
+
+ nesting--;
+ current = preempt;
+
+ if( ( t->ticks % 10 ) == 0 )
+ return 3;
+ else
+ return 1;
+}
+
+
+//=============================================================================
+
+void
+timer_dsr( cyg_uint32 vector, cyg_uint32 count, CYG_ADDRWORD data )
+{
+ struct timer *t = ( struct timer * )data;
+ int i;
+
+ in_dsr = t->timer;
+
+ if( count >= 8 )
+ count = 8;
+
+ t->dsr_count[count]++;
+
+ // Loiter for a while
+ for( i = 0; i < t->interval / 10; i++ )
+ continue;
+
+ in_dsr = 0;
+}
+
+
+//=============================================================================
+
+void
+timers_test( cyg_addrword_t data )
+{
+ int loops = LOOPS;
+ int i;
+ CYG_INTERRUPT_STATE istate;
+
+ CYG_TEST_INIT( );
+
+ CYG_TEST_INFO( "Start Timers test" );
+
+ for( i = 0; timers[i].timer != 0; i++ ) {
+ struct timer *t = &timers[i];
+
+ init_timer( t->base, t->periph, t->interval );
+
+ cyg_interrupt_create( t->vector,
+ t->priority,
+ ( cyg_addrword_t )t,
+ timer_isr,
+ timer_dsr,
+ &t->interrupt_handle, &t->interrupt_object );
+
+ cyg_interrupt_attach( t->interrupt_handle );
+ cyg_interrupt_unmask( t->vector );
+
+ }
+
+ while( loops-- ) {
+ int j;
+
+ // 5 second delay
+ cyg_thread_delay( 5 * 100 );
+
+ // Disable interrupts while we print details, otherwise it
+ // comes out very slowly.
+ HAL_DISABLE_INTERRUPTS( istate );
+
+ if( max_nesting > max_nesting_seen )
+ max_nesting_seen = max_nesting;
+
+ diag_printf( "\nISRs max_nesting %d max_nesting_seen %d\n",
+ max_nesting, max_nesting_seen );
+ max_nesting = 0;
+
+ diag_printf( " T Ticks " );
+
+ for( j = 0; j < 9; j++ )
+ diag_printf( "%9d ", j );
+ diag_printf( "\n" );
+
+ for( i = 0; timers[i].timer != 0; i++ ) {
+ struct timer *t = &timers[i];
+
+ diag_printf( "%2d: %9d ", t->timer, t->ticks );
+
+ for( j = 0; j < 9; j++ )
+ diag_printf( "%9d ", t->preempt[j] );
+ diag_printf( "\n" );
+
+ }
+
+ diag_printf( "DSRs\n" );
+
+ diag_printf( " T: " );
+
+ for( j = 0; j < 9; j++ )
+ diag_printf( "%9d ", j );
+ diag_printf( "\n" );
+
+ for( i = 0; timers[i].timer != 0; i++ ) {
+ struct timer *t = &timers[i];
+
+ diag_printf( "%2d: preempt: ", t->timer );
+
+ for( j = 0; j < 9; j++ )
+ diag_printf( "%9d ", t->preempt_dsr[j] );
+ diag_printf( "\n" );
+
+ diag_printf( " count: " );
+
+ for( j = 0; j < 9; j++ )
+ diag_printf( "%9d ", t->dsr_count[j] );
+ diag_printf( "\n" );
+ }
+
+ HAL_RESTORE_INTERRUPTS( istate );
+ }
+
+ CYG_TEST_PASS_FINISH( "Timers test" );
+}
+
+
+//=============================================================================
+
+void
+cyg_user_start( void )
+{
+ cyg_thread_create( 0, // Priority
+ timers_test, //
+ 0, //
+ "timers test", // Name
+ test_stack, // Stack
+ CYGNUM_HAL_STACK_SIZE_MINIMUM, // Stack size
+ &main_thread, // Handle
+ &test_thread // Thread data structure
+ );
+ cyg_thread_resume( main_thread );
+}
+
+//=============================================================================
+
+#else // NA_MSG
+
+void
+cyg_user_start( void )
+{
+ CYG_TEST_NA( NA_MSG );
+}
+
+#endif // NA_MSG
+
+//=============================================================================
+// EOF timers.c
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/ChangeLog b/ecos/packages/hal/cortexm/lm3s/var/current/ChangeLog
new file mode 100644
index 0000000..ef8b22a
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/ChangeLog
@@ -0,0 +1,38 @@
+2011-01-18 Christophe Coutand <ccoutand@stmi.com>
+
+ * cdl/hal_cortexm_lm3s.cdl
+ * include/hal_cache.h:
+ * include/hal_diag.h:
+ * include/plf_stub.h:
+ * include/var_arch.h:
+ * include/variant.inc:
+ * include/var_intr.h:
+ * include/var_io.h:
+ * src/hal_diag.c:
+ * src/lm3s_misc.c:
+ New package -- Stellaris Cortex M3 variant HAL.
+
+//===========================================================================
+// ####GPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This program 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 Software Foundation; either version 2 or (at your option) any
+// later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the
+// Free Software Foundation, Inc., 51 Franklin Street,
+// Fifth Floor, Boston, MA 02110-1301, USA.
+// -------------------------------------------
+// ####GPLCOPYRIGHTEND####
+//===========================================================================
+
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/cdl/hal_cortexm_lm3s.cdl b/ecos/packages/hal/cortexm/lm3s/var/current/cdl/hal_cortexm_lm3s.cdl
new file mode 100644
index 0000000..1953681
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/cdl/hal_cortexm_lm3s.cdl
@@ -0,0 +1,123 @@
+##==========================================================================
+##
+## hal_cortexm_lm3s.cdl
+##
+## Stellaris Cortex-M3 variant HAL configuration data
+##
+##==========================================================================
+## ####ECOSGPLCOPYRIGHTBEGIN####
+## -------------------------------------------
+## This file is part of eCos, the Embedded Configurable Operating System.
+## Copyright (C) 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
+## Software Foundation; either version 2 or (at your option) any later
+## version.
+##
+## eCos is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+## for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with eCos; if not, write to the Free Software Foundation, Inc.,
+## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+##
+## As a special exception, if other files instantiate templates or use
+## macros or inline functions from this file, or you compile this file
+## and link it with other works to produce a work based on this file,
+## this file does not by itself cause the resulting work to be covered by
+## the GNU General Public License. However the source code for this file
+## must still be made available in accordance with section (3) of the GNU
+## General Public License v2.
+##
+## This exception does not invalidate any other reasons why a work based
+## on this file might be covered by the GNU General Public License.
+## -------------------------------------------
+## ####ECOSGPLCOPYRIGHTEND####
+##==========================================================================
+#######DESCRIPTIONBEGIN####
+##
+## Author(s): ccoutand
+## Date: 2011-01-18
+##
+######DESCRIPTIONEND####
+##
+##==========================================================================
+
+cdl_package CYGPKG_HAL_CORTEXM_LM3S {
+ display "Stellaris Cortex-M3 from Luminary Micro variant HAL"
+ parent CYGPKG_HAL_CORTEXM
+ define_header hal_cortexm_lm3s.h
+ include_dir cyg/hal
+ hardware
+ description "
+ This package provides generic support for the Cortex-M3 based
+ Stellaris microcontroller family. It is also necessary to select
+ a variant and platform HAL package."
+
+ compile hal_diag.c lm3s_misc.c
+
+ implements CYGINT_HAL_DEBUG_GDB_STUBS
+ implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK
+ implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT
+ implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT
+
+ requires { CYGHWR_HAL_CORTEXM == "M3" }
+ requires { CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE == "INTERNAL" }
+
+ # Let the architectural HAL see this variant's files
+ define_proc {
+ puts $::cdl_system_header "#define CYGBLD_HAL_CORTEXM_VAR_IO_H"
+ puts $::cdl_system_header "#define CYGBLD_HAL_CORTEXM_VAR_ARCH_H"
+ }
+
+ cdl_option CYGHWR_HAL_CORTEXM_LM3S {
+ display "Stellaris Cortex-M3 variant in use"
+ flavor data
+ default_value { "LM3S8XX" }
+ legal_values { "LM3S8XX" }
+ description "
+ Currently only supported the Stellaris Cortex-M3 800 Series."
+ }
+
+ cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS {
+ display "CPU priority levels"
+ flavor data
+ calculated 3
+ description "
+ This option defines the number of bits used to encode the
+ exception priority levels that this variant of the Cortex-M3
+ CPU implements."
+ }
+
+ cdl_option CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY {
+ display "Clock interrupt ISR priority"
+ flavor data
+ calculated 0xC0
+ description "
+ Set clock ISR priority to lowest priority."
+ }
+
+ cdl_interface CYGINT_HAL_CORTEXM_LM3S_UART0 {
+ display "Platform has UART0 serial port"
+ description "
+ The platform has a socket on UART0."
+ }
+
+ cdl_interface CYGINT_HAL_CORTEXM_LM3S_UART1 {
+ display "Platform has UART1 serial port"
+ description "
+ The platform has a socket on UART1."
+ }
+
+ cdl_interface CYGINT_HAL_CORTEXM_LM3S_UART2 {
+ display "Platform has UART2 serial port"
+ description "
+ The platform has a socket on UART2."
+ }
+
+}
+
+# EOF hal_cortex_lm3s.cdl
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/include/hal_cache.h b/ecos/packages/hal/cortexm/lm3s/var/current/include/hal_cache.h
new file mode 100644
index 0000000..450f2bf
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/include/hal_cache.h
@@ -0,0 +1,66 @@
+#ifndef CYGONCE_HAL_CACHE_H
+#define CYGONCE_HAL_CACHE_H
+
+//=============================================================================
+//
+// hal_cache.h
+//
+// HAL cache control API
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Contributors:
+// Date: 2011-01-18
+// Purpose: Cache control API
+// Description: The Stellaris LM3S Cortex-M3 microcontroller does not require
+// cache control. File is kept empty.
+//
+// Usage:
+// #include <cyg/hal/hal_cache.h>
+// ...
+//
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <cyg/infra/cyg_type.h>
+
+
+//-----------------------------------------------------------------------------
+#endif // ifndef CYGONCE_HAL_CACHE_H
+// End of hal_cache.h
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/include/hal_diag.h b/ecos/packages/hal/cortexm/lm3s/var/current/include/hal_diag.h
new file mode 100644
index 0000000..9bf882f
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/include/hal_diag.h
@@ -0,0 +1,88 @@
+#ifndef CYGONCE_HAL_DIAG_H
+#define CYGONCE_HAL_DIAG_H
+//=============================================================================
+//
+// hal_diag.h
+//
+// HAL diagnostics
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Purpose: HAL diagnostics
+// Description:
+// Usage: #include <cyg/hal/var_io.h>
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/hal.h>
+#include <cyg/infra/cyg_type.h>
+#include <cyg/hal/hal_if.h>
+
+//-----------------------------------------------------------------------------
+
+#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG)
+
+# define HAL_DIAG_INIT() hal_if_diag_init()
+# define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_)
+# define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_)
+
+#else
+
+__externC void hal_lm3s_diag_init(void);
+__externC void hal_lm3s_diag_putc(char);
+__externC cyg_uint8 hal_lm3s_diag_getc(void);
+
+# ifndef HAL_DIAG_INIT
+# define HAL_DIAG_INIT() hal_lm3s_diag_init()
+# endif
+
+# ifndef HAL_DIAG_WRITE_CHAR
+# define HAL_DIAG_WRITE_CHAR(__c) hal_lm3s_diag_putc(__c)
+# endif
+
+# ifndef HAL_DIAG_READ_CHAR
+# define HAL_DIAG_READ_CHAR(__c) (__c) = hal_lm3s_diag_getc()
+# endif
+
+#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG
+
+//-----------------------------------------------------------------------------
+#endif // CYGONCE_HAL_DIAG_H
+// EOF of hal_diag.h
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/include/plf_stub.h b/ecos/packages/hal/cortexm/lm3s/var/current/include/plf_stub.h
new file mode 100644
index 0000000..0b5c216
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/include/plf_stub.h
@@ -0,0 +1,88 @@
+#ifndef CYGONCE_HAL_PLF_STUB_H
+#define CYGONCE_HAL_PLF_STUB_H
+
+//=============================================================================
+//
+// plf_stub.h
+//
+// Platform header for GDB stub support.
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Purpose: Platform HAL stub support for Stellaris Cortex-M3
+// variant boards.
+// Usage: #include <cyg/hal/plf_stub.h>
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/hal.h>
+#include CYGBLD_HAL_PLATFORM_H
+
+#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+
+#include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM
+
+#include <cyg/hal/cortexm_stub.h> // architecture stub support
+
+#include <cyg/hal/hal_io.h>
+
+//----------------------------------------------------------------------------
+// Define some platform specific communication details. This is mostly
+// handled by hal_if now, but we need to make sure the comms tables are
+// properly initialized.
+
+__externC void cyg_hal_plf_comms_init(void);
+
+#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init()
+
+#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud))
+#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0
+#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT
+
+//----------------------------------------------------------------------------
+// Stub initializer.
+
+#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT
+
+#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+
+//-----------------------------------------------------------------------------
+#endif // CYGONCE_HAL_PLF_STUB_H
+// End of plf_stub.h
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/include/var_arch.h b/ecos/packages/hal/cortexm/lm3s/var/current/include/var_arch.h
new file mode 100644
index 0000000..424f196
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/include/var_arch.h
@@ -0,0 +1,61 @@
+#ifndef CYGONCE_HAL_VAR_ARCH_H
+#define CYGONCE_HAL_VAR_ARCH_H
+//=============================================================================
+//
+// var_arch.h
+//
+// Stellaris Cortex-M3 variant architecture overrides
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Purpose: Stellaris Cortex-M3 variant architecture overrides
+// Description:
+// Usage: #include <cyg/hal/hal_arch.h>
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/hal.h>
+#include <cyg/hal/hal_io.h>
+
+#include <cyg/hal/plf_arch.h>
+
+//-----------------------------------------------------------------------------
+#endif // CYGONCE_HAL_VAR_ARCH_H
+// EOF of var_arch.h
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/include/var_intr.h b/ecos/packages/hal/cortexm/lm3s/var/current/include/var_intr.h
new file mode 100644
index 0000000..075b681
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/include/var_intr.h
@@ -0,0 +1,119 @@
+#ifndef CYGONCE_HAL_VAR_INTR_H
+#define CYGONCE_HAL_VAR_INTR_H
+//==========================================================================
+//
+// var_intr.h
+//
+// HAL Interrupt and clock assignments for Stellaris Cortex-M3 variants
+//
+//==========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Purpose: Define Interrupt support
+// Description: The interrupt specifics for Stellaris Cortex-M3
+// are defined here.
+//
+// Usage: #include <cyg/hal/var_intr.h>
+// However applications should include using <cyg/hal/hal_intr.h>
+// instead to allow for platform overrides.
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <cyg/hal/plf_intr.h>
+
+//==========================================================================
+
+#define CYGNUM_HAL_INTERRUPT_GPIOA (0+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GPIOB (1+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GPIOC (2+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GPIOD (3+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GPIOE (4+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_UART0 (5+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_UART1 (6+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_SSI0 (7+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_I2C (8+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_PWM0 (10+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_PWM1 (11+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_PWM2 (12+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_QIE (13+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_ADC0_S0 (14+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_ADC0_S1 (15+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_ADC0_S2 (16+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_ADC0_S3 (17+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_WDT (18+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GTIM0_A (19+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GTIM0_B (20+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GTIM1_A (21+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GTIM1_B (22+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GTIM2_A (23+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GTIM2_B (24+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_AC0 (25+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_AC1 (26+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_AC2 (27+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_SCTL (28+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_FMS (29+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GPIOF (30+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GPIOG (31+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GPIOH (32+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GTIM3_A (35+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_GTIM3_B (36+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_CAN0 (39+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_ETH0 (42+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+#define CYGNUM_HAL_INTERRUPT_HIM (43+CYGNUM_HAL_INTERRUPT_EXTERNAL)
+
+#ifndef CYGNUM_HAL_INTERRUPT_NVIC_MAX
+# define CYGNUM_HAL_INTERRUPT_NVIC_MAX (CYGNUM_HAL_INTERRUPT_HIM)
+#endif
+
+#define CYGNUM_HAL_ISR_MIN 0
+#ifndef CYGNUM_HAL_ISR_MAX
+# define CYGNUM_HAL_ISR_MAX (CYGNUM_HAL_INTERRUPT_NVIC_MAX)
+#endif
+#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1)
+
+#define CYGNUM_HAL_VSR_MIN 0
+#ifndef CYGNUM_HAL_VSR_MAX
+# define CYGNUM_HAL_VSR_MAX (CYGNUM_HAL_VECTOR_SYS_TICK+CYGNUM_HAL_INTERRUPT_NVIC_MAX)
+#endif
+#define CYGNUM_HAL_VSR_COUNT (CYGNUM_HAL_VSR_MAX+1)
+
+
+//----------------------------------------------------------------------------
+#endif // CYGONCE_HAL_VAR_INTR_H
+// EOF var_intr.h
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/include/var_io.h b/ecos/packages/hal/cortexm/lm3s/var/current/include/var_io.h
new file mode 100644
index 0000000..7e2ffc0
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/include/var_io.h
@@ -0,0 +1,1371 @@
+#ifndef CYGONCE_HAL_VAR_IO_H
+#define CYGONCE_HAL_VAR_IO_H
+//=============================================================================
+//
+// var_io.h
+//
+// Variant specific registers
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Purpose: Stellaris Cortex-M3 variant specific registers
+// Description:
+// Usage: #include <cyg/hal/var_io.h>
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/hal_cortexm_lm3s.h>
+
+#include <cyg/hal/plf_io.h>
+
+//=============================================================================
+// Peripherals
+
+#define CYGHWR_HAL_LM3S_FLASH 0x00000000
+#define CYGHWR_HAL_LM3S_SRAM 0x20000000
+
+#define CYGHWR_HAL_LM3S_WDT0 0x40000000
+#define CYGHWR_HAL_LM3S_GPIOA 0x40004000
+#define CYGHWR_HAL_LM3S_GPIOB 0x40005000
+#define CYGHWR_HAL_LM3S_GPIOC 0x40006000
+#define CYGHWR_HAL_LM3S_GPIOD 0x40007000
+#define CYGHWR_HAL_LM3S_SSI0 0x40008000
+#define CYGHWR_HAL_LM3S_SSI1 0x40009000
+#define CYGHWR_HAL_LM3S_UART0 0x4000C000
+#define CYGHWR_HAL_LM3S_UART1 0x4000D000
+#define CYGHWR_HAL_LM3S_UART2 0x4000E000
+#define CYGHWR_HAL_LM3S_I2C_M0 0x40020000
+#define CYGHWR_HAL_LM3S_I2C_S0 0x40020800
+#define CYGHWR_HAL_LM3S_GPIOE 0x40024000
+#define CYGHWR_HAL_LM3S_GPIOF 0x40025000
+#define CYGHWR_HAL_LM3S_GPIOG 0x40026000
+#define CYGHWR_HAL_LM3S_GPIOH 0x40027000
+#define CYGHWR_HAL_LM3S_PWM 0x40028000
+#define CYGHWR_HAL_LM3S_QEI0 0x4002C000
+#define CYGHWR_HAL_LM3S_GPTIM0 0x40030000
+#define CYGHWR_HAL_LM3S_GPTIM1 0x40031000
+#define CYGHWR_HAL_LM3S_GPTIM2 0x40032000
+#define CYGHWR_HAL_LM3S_GPTIM3 0x40033000
+#define CYGHWR_HAL_LM3S_ADC0 0x40038000
+#define CYGHWR_HAL_LM3S_AC 0x4003C000
+#define CYGHWR_HAL_LM3S_CAN0 0x40040000
+#define CYGHWR_HAL_LM3S_ETH0 0x40048000
+#define CYGHWR_HAL_LM3S_FMC 0x400FD000
+#define CYGHWR_HAL_LM3S_SC 0x400FE000
+
+#define CYGHWR_HAL_LM3S_ITM 0xE0000000
+#define CYGHWR_HAL_LM3S_DWT 0xE0001000
+#define CYGHWR_HAL_LM3S_FPB 0xE0002000
+#define CYGHWR_HAL_LM3S_CORTEXM3 0xE000E000
+#define CYGHWR_HAL_LM3S_TPIU 0xE0040000
+
+
+//=============================================================================
+// Device signature and ID registers
+
+#define CYGHWR_HAL_LM3S_MCU_ID (CYGHWR_HAL_LM3S_CORTEXM3 + 0xD00)
+#define CYGHWR_HAL_LM3S_MCU_ID_REV(__x) ((__x)&0xF)
+#define CYGHWR_HAL_LM3S_MCU_PART_NO(__x) (((__x)>>4)&0x0FFF)
+#define CYGHWR_HAL_LM3S_MCU_VAR_NO(__x) (((__x)>>20)&0xF)
+
+
+//=============================================================================
+// System Control
+
+#define CYGHWR_HAL_LM3S_SC_DID0 0x000
+#define CYGHWR_HAL_LM3S_SC_DID1 0x004
+#define CYGHWR_HAL_LM3S_SC_DIC0 0x008
+#define CYGHWR_HAL_LM3S_SC_DIC1 0x010
+#define CYGHWR_HAL_LM3S_SC_DIC2 0x014
+#define CYGHWR_HAL_LM3S_SC_DIC3 0x018
+#define CYGHWR_HAL_LM3S_SC_DIC4 0x01c
+#define CYGHWR_HAL_LM3S_SC_PBORCTL 0x030
+#define CYGHWR_HAL_LM3S_SC_LDORCTL 0x034
+#define CYGHWR_HAL_LM3S_SC_SRCR0 0x040
+#define CYGHWR_HAL_LM3S_SC_SRCR1 0x044
+#define CYGHWR_HAL_LM3S_SC_SRCR2 0x048
+#define CYGHWR_HAL_LM3S_SC_RIS 0x050
+#define CYGHWR_HAL_LM3S_SC_IMC 0x054
+#define CYGHWR_HAL_LM3S_SC_MISC 0x058
+#define CYGHWR_HAL_LM3S_SC_RESC 0x05C
+#define CYGHWR_HAL_LM3S_SC_RCC 0x060
+#define CYGHWR_HAL_LM3S_SC_PLLCFG 0x064
+#define CYGHWR_HAL_LM3S_SC_RCGC0 0x100
+#define CYGHWR_HAL_LM3S_SC_RCGC1 0x104
+#define CYGHWR_HAL_LM3S_SC_RCGC2 0x108
+#define CYGHWR_HAL_LM3S_SC_SCGC0 0x110
+#define CYGHWR_HAL_LM3S_SC_SCGC1 0x114
+#define CYGHWR_HAL_LM3S_SC_SCGC2 0x118
+#define CYGHWR_HAL_LM3S_SC_DCGC0 0x120
+#define CYGHWR_HAL_LM3S_SC_DCGC1 0x124
+#define CYGHWR_HAL_LM3S_SC_DCGC2 0x128
+#define CYGHWR_HAL_LM3S_SC_FMPRE 0x130
+#define CYGHWR_HAL_LM3S_SC_FMPPE 0x134
+#define CYGHWR_HAL_LM3S_SC_USECRL 0x140
+#define CYGHWR_HAL_LM3S_SC_DSLPCLKCFG 0x144
+#define CYGHWR_HAL_LM3S_SC_CLKVCLR 0x150
+#define CYGHWR_HAL_LM3S_SC_LDOARST 0x160
+
+// PBORCTL bits
+#define CYGHWR_HAL_LM3S_SC_PBORCTL_BORWT BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_PBORCTL_BORIOR BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_PBORCTL_BORTIM(__x) VALUE_(2,__x)
+
+// RIS bits
+#define CYGHWR_HAL_LM3S_SC_RIS_PLLFRIS BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_RIS_BORRIS BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_RIS_LDORIS BIT_(2)
+#define CYGHWR_HAL_LM3S_SC_RIS_MOFRIS BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_RIS_IOFRIS BIT_(4)
+#define CYGHWR_HAL_LM3S_SC_RIS_CLFRIS BIT_(5)
+#define CYGHWR_HAL_LM3S_SC_RIS_PLLLRIS BIT_(6)
+
+// IMC bits
+#define CYGHWR_HAL_LM3S_SC_IMC_PLLFIM BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_IMC_BORRIM BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_IMC_LDOIM BIT_(2)
+#define CYGHWR_HAL_LM3S_SC_IMC_MOFIM BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_IMC_IOFIM BIT_(4)
+#define CYGHWR_HAL_LM3S_SC_IMC_CLIM BIT_(5)
+#define CYGHWR_HAL_LM3S_SC_IMC_PLLLFIM BIT_(6)
+
+// MISC bits
+#define CYGHWR_HAL_LM3S_SC_MISC_BORMIS BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_MISC_LDOMIS BIT_(2)
+#define CYGHWR_HAL_LM3S_SC_MISC_MOFMIS BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_MISC_IOFMIS BIT_(4)
+#define CYGHWR_HAL_LM3S_SC_MISC_CLMIS BIT_(5)
+#define CYGHWR_HAL_LM3S_SC_MISC_PLLLMIS BIT_(6)
+
+// RESC bits
+#define CYGHWR_HAL_LM3S_SC_RESC_EXT BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_RESC_POR BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_RESC_BOR BIT_(2)
+#define CYGHWR_HAL_LM3S_SC_RESC_WDT BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_RESC_SW BIT_(4)
+#define CYGHWR_HAL_LM3S_SC_RESC_LDO BIT_(5)
+
+// RCC bits
+#define CYGHWR_HAL_LM3S_SC_RCC_MOSCDIS BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_RCC_IOSCDIS BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_RCC_MOSCVER BIT_(2)
+#define CYGHWR_HAL_LM3S_SC_RCC_IOSCVER BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_MOSC VALUE_(4,0)
+#define CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_IOSC VALUE_(4,1)
+#define CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_IOSC_DIV4 VALUE_(4,2)
+#define CYGHWR_HAL_LM3S_SC_RCC_OSCSRC_MASK 0x00000030
+#define CYGHWR_HAL_LM3S_SC_RCC_XTAL(__x) VALUE_(6,__x)
+#define CYGHWR_HAL_LM3S_SC_RCC_XTAL_MASK 0x000003C0
+#define CYGHWR_HAL_LM3S_SC_RCC_PLLVER BIT_(10)
+#define CYGHWR_HAL_LM3S_SC_RCC_BYPASS BIT_(11)
+#define CYGHWR_HAL_LM3S_SC_RCC_OEN BIT_(12)
+#define CYGHWR_HAL_LM3S_SC_RCC_PWRDN BIT_(13)
+#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV2 VALUE_(14, 0x0)
+#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV4 VALUE_(14, 0x1)
+#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV8 VALUE_(14, 0x2)
+#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV16 VALUE_(14, 0x3)
+#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV32 VALUE_(14, 0x4)
+#define CYGHWR_HAL_LM3S_SC_RCC_PWMDIV_DIV64 VALUE_(14, 0x5)
+#define CYGHWR_HAL_LM3S_SC_RCC_USEPWMDIV BIT_(20)
+#define CYGHWR_HAL_LM3S_SC_RCC_USESYSDIV BIT_(22)
+#define CYGHWR_HAL_LM3S_SC_RCC_SYSDIV(__x) VALUE_(23, __x)
+#define CYGHWR_HAL_LM3S_SC_RCC_SYSDIV_MASK 0x07800000
+#define CYGHWR_HAL_LM3S_SC_RCC_ACG BIT_(27)
+
+// DSLPCLKCFG bits
+#define CYGHWR_HAL_LM3S_SC_DSLPCLKCFG_IOSC BIT_(0)
+
+// CLKVCLR bits
+#define CYGHWR_HAL_LM3S_SC_CLKVCLR_VERCLR BIT_(0)
+
+// LDOARST bits
+#define CYGHWR_HAL_LM3S_SC_LDOARST_BIT BIT_(0)
+
+// RCGC0 bits
+#define CYGHWR_HAL_LM3S_SC_RCGC0_WDT0 BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_RCGC0_MAXADCSPD_125K VALUE_(8, 0x0)
+#define CYGHWR_HAL_LM3S_SC_RCGC0_MAXADCSPD_250K VALUE_(8, 0x1)
+#define CYGHWR_HAL_LM3S_SC_RCGC0_MAXADCSPD_500K VALUE_(8, 0x2)
+#define CYGHWR_HAL_LM3S_SC_RCGC0_ADC0 BIT_(16)
+#define CYGHWR_HAL_LM3S_SC_RCGC0_PWM0 BIT_(20)
+
+// SCGC0 bits
+#define CYGHWR_HAL_LM3S_SC_SCGC0_WDT0 BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_SCGC0_MAXADCSPD_125K VALUE_(8, 0x0)
+#define CYGHWR_HAL_LM3S_SC_SCGC0_MAXADCSPD_250K VALUE_(8, 0x1)
+#define CYGHWR_HAL_LM3S_SC_SCGC0_MAXADCSPD_500K VALUE_(8, 0x2)
+#define CYGHWR_HAL_LM3S_SC_SCGC0_ADC0 BIT_(16)
+#define CYGHWR_HAL_LM3S_SC_SCGC0_PWM0 BIT_(20)
+
+// DCGC0 bits
+#define CYGHWR_HAL_LM3S_SC_DCGC0_WDT0 BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_DCGC0_ADC0 BIT_(16)
+#define CYGHWR_HAL_LM3S_SC_DCGC0_PWM0 BIT_(20)
+
+// RCGC1 bits
+#define CYGHWR_HAL_LM3S_SC_RCGC1_UART0 BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_RCGC1_UART1 BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_RCGC1_SSI0 BIT_(4)
+#define CYGHWR_HAL_LM3S_SC_RCGC1_I2C0 BIT_(12)
+#define CYGHWR_HAL_LM3S_SC_RCGC1_TIMER0 BIT_(16)
+#define CYGHWR_HAL_LM3S_SC_RCGC1_TIMER1 BIT_(17)
+#define CYGHWR_HAL_LM3S_SC_RCGC1_TIMER2 BIT_(18)
+#define CYGHWR_HAL_LM3S_SC_RCGC1_COMP0 BIT_(24)
+
+// SCSG1 bits
+#define CYGHWR_HAL_LM3S_SC_SCGC1_UART0 BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_SCGC1_UART1 BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_SCGC1_SSI0 BIT_(4)
+#define CYGHWR_HAL_LM3S_SC_SCGC1_I2C0 BIT_(12)
+#define CYGHWR_HAL_LM3S_SC_SCGC1_TIMER0 BIT_(16)
+#define CYGHWR_HAL_LM3S_SC_SCGC1_TIMER1 BIT_(17)
+#define CYGHWR_HAL_LM3S_SC_SCGC1_TIMER2 BIT_(18)
+#define CYGHWR_HAL_LM3S_SC_SCGC1_COMP0 BIT_(24)
+
+// DCSG1 bits
+#define CYGHWR_HAL_LM3S_SC_DCGC1_UART0 BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_DCGC1_UART1 BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_DCGC1_SSI0 BIT_(4)
+#define CYGHWR_HAL_LM3S_SC_DCGC1_I2C0 BIT_(12)
+#define CYGHWR_HAL_LM3S_SC_DCGC1_TIMER0 BIT_(16)
+#define CYGHWR_HAL_LM3S_SC_DCGC1_TIMER1 BIT_(17)
+#define CYGHWR_HAL_LM3S_SC_DCGC1_TIMER2 BIT_(18)
+#define CYGHWR_HAL_LM3S_SC_DCGC1_COMP0 BIT_(24)
+
+// RCGC2 bits
+#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOA BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOB BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOC BIT_(2)
+#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOD BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_RCGC2_GPIOE BIT_(4)
+
+// SCSG2 bits
+#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOA BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOB BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOC BIT_(2)
+#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOD BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_SCGC2_GPIOE BIT_(4)
+
+// DCSG2 bits
+#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOA BIT_(0)
+#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOB BIT_(1)
+#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOC BIT_(2)
+#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOD BIT_(3)
+#define CYGHWR_HAL_LM3S_SC_DCGC2_GPIOE BIT_(4)
+
+// Define peripheral
+#define CYGHWR_HAL_LM3S_PERIPH_GC0 BIT_(31)
+#define CYGHWR_HAL_LM3S_P_WDT0 ( BIT_(31) | CYGHWR_HAL_LM3S_SC_SCGC0_WDT0 )
+#define CYGHWR_HAL_LM3S_P_ADC0 ( BIT_(31) | CYGHWR_HAL_LM3S_SC_SCGC0_ADC0 )
+#define CYGHWR_HAL_LM3S_P_PWM ( BIT_(31) | CYGHWR_HAL_LM3S_SC_SCGC0_PWM0 )
+#define CYGHWR_HAL_LM3S_PERIPH_GC1 BIT_(30)
+#define CYGHWR_HAL_LM3S_P_UART0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_UART0 )
+#define CYGHWR_HAL_LM3S_P_UART1 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_UART1 )
+#define CYGHWR_HAL_LM3S_P_SSI0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_SSI0 )
+#define CYGHWR_HAL_LM3S_P_I2C0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_I2C0 )
+#define CYGHWR_HAL_LM3S_P_TIMER0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_TIMER0 )
+#define CYGHWR_HAL_LM3S_P_TIMER1 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_TIMER1 )
+#define CYGHWR_HAL_LM3S_P_TIMER2 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_TIMER2 )
+#define CYGHWR_HAL_LM3S_P_COMP0 ( BIT_(30) | CYGHWR_HAL_LM3S_SC_SCGC1_COMP0 )
+#define CYGHWR_HAL_LM3S_PERIPH_GC2 BIT_(29)
+#define CYGHWR_HAL_LM3S_P_GPIOA ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOA )
+#define CYGHWR_HAL_LM3S_P_GPIOB ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOB )
+#define CYGHWR_HAL_LM3S_P_GPIOC ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOC )
+#define CYGHWR_HAL_LM3S_P_GPIOD ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOD )
+#define CYGHWR_HAL_LM3S_P_GPIOE ( BIT_(29) | CYGHWR_HAL_LM3S_SC_RCGC2_GPIOE )
+
+__externC void hal_lm3s_periph_set( cyg_uint32 periph, cyg_uint32 on_off );
+
+#define CYGHWR_HAL_LM3S_PERIPH_SET(__periph, __on_off ) hal_lm3s_periph_set( __periph, __on_off )
+
+//=============================================================================
+// Watchdog
+
+#define CYGHWR_HAL_LM3S_WDT_LOAD 0x000
+#define CYGHWR_HAL_LM3S_WDT_VALUE 0x004
+#define CYGHWR_HAL_LM3S_WDT_CTL 0x008
+#define CYGHWR_HAL_LM3S_WDT_ICR 0x00c
+#define CYGHWR_HAL_LM3S_WDT_RIS 0x010
+#define CYGHWR_HAL_LM3S_WDT_MIS 0x014
+#define CYGHWR_HAL_LM3S_WDT_TEST 0x418
+#define CYGHWR_HAL_LM3S_WDT_LOCK 0xc00
+#define CYGHWR_HAL_LM3S_WDT_PID4 0xfd0
+#define CYGHWR_HAL_LM3S_WDT_PID5 0xfd4
+#define CYGHWR_HAL_LM3S_WDT_PID6 0xfd8
+#define CYGHWR_HAL_LM3S_WDT_PID7 0xfdc
+#define CYGHWR_HAL_LM3S_WDT_PID0 0xfe0
+#define CYGHWR_HAL_LM3S_WDT_PID1 0xfe4
+#define CYGHWR_HAL_LM3S_WDT_PID2 0xfe8
+#define CYGHWR_HAL_LM3S_WDT_PID3 0xfec
+#define CYGHWR_HAL_LM3S_WDT_PCID0 0xff0
+#define CYGHWR_HAL_LM3S_WDT_PCID1 0xff4
+#define CYGHWR_HAL_LM3S_WDT_PCID2 0xff8
+#define CYGHWR_HAL_LM3S_WDT_PCID3 0xffc
+
+
+#define CYGHWR_HAL_LM3S_WDT_CTL_INTEN BIT_(0)
+#define CYGHWR_HAL_LM3S_WDT_CTL_RESEN BIT_(1)
+
+#define CYGHWR_HAL_LM3S_WDT_RIS_RIS BIT_(0)
+
+#define CYGHWR_HAL_LM3S_WDT_MIS_MIS BIT_(0)
+
+#define CYGHWR_HAL_LM3S_WDT_TEST_STALL BIT_(8)
+
+#define CYGHWR_HAL_LM3S_WDT_PID(__x) ((__x)&0xFF)
+#define CYGHWR_HAL_LM3S_WDT_PCID(__x) ((__x)&0xFF)
+
+
+//=============================================================================
+// GPIO ports
+
+#define CYGHWR_HAL_LM3S_GPIO_DATA 0x000
+#define CYGHWR_HAL_LM3S_GPIO_DIR 0x400
+#define CYGHWR_HAL_LM3S_GPIO_IS 0x404
+#define CYGHWR_HAL_LM3S_GPIO_IBE 0x408
+#define CYGHWR_HAL_LM3S_GPIO_IEV 0x40c
+#define CYGHWR_HAL_LM3S_GPIO_IM 0x410
+#define CYGHWR_HAL_LM3S_GPIO_RIS 0x414
+#define CYGHWR_HAL_LM3S_GPIO_MIS 0x418
+#define CYGHWR_HAL_LM3S_GPIO_ICR 0x41c
+#define CYGHWR_HAL_LM3S_GPIO_AFSEL 0x420
+#define CYGHWR_HAL_LM3S_GPIO_DR2R 0x500
+#define CYGHWR_HAL_LM3S_GPIO_DR4R 0x504
+#define CYGHWR_HAL_LM3S_GPIO_DR8R 0x508
+#define CYGHWR_HAL_LM3S_GPIO_ODR 0x50c
+#define CYGHWR_HAL_LM3S_GPIO_PUR 0x510
+#define CYGHWR_HAL_LM3S_GPIO_PDR 0x514
+#define CYGHWR_HAL_LM3S_GPIO_SLR 0x518
+#define CYGHWR_HAL_LM3S_GPIO_DEN 0x51c
+#define CYGHWR_HAL_LM3S_GPIO_PID4 0xfd0
+#define CYGHWR_HAL_LM3S_GPIO_PID5 0xfd4
+#define CYGHWR_HAL_LM3S_GPIO_PID6 0xfd8
+#define CYGHWR_HAL_LM3S_GPIO_PID7 0xfdc
+#define CYGHWR_HAL_LM3S_GPIO_PID0 0xfe0
+#define CYGHWR_HAL_LM3S_GPIO_PID1 0xfe4
+#define CYGHWR_HAL_LM3S_GPIO_PID2 0xfe8
+#define CYGHWR_HAL_LM3S_GPIO_PID3 0xfec
+#define CYGHWR_HAL_LM3S_GPIO_PCID0 0xff0
+#define CYGHWR_HAL_LM3S_GPIO_PCID1 0xff4
+#define CYGHWR_HAL_LM3S_GPIO_PCID2 0xff8
+#define CYGHWR_HAL_LM3S_GPIO_PCID3 0xffc
+
+#define CYGHWR_HAL_LM3S_GPIO_DIR_IN VALUE_(0,0) // Input mode
+#define CYGHWR_HAL_LM3S_GPIO_DIR_OUT VALUE_(0,1) // Output mode
+
+#define CYGHWR_HAL_LM3S_GPIO_IS_EDGE_SENSE VALUE_(0,0) // Interrupt edge sensitive
+#define CYGHWR_HAL_LM3S_GPIO_IS_LEV_SENSE VALUE_(0,1) // Interrupt level sensitive
+
+#define CYGHWR_HAL_LM3S_GPIO_IBE_GPIOIEV VALUE_(0,0) // Interrupt control from GPIOIEV
+#define CYGHWR_HAL_LM3S_GPIO_IBE_BOTH_EDGE VALUE_(0,1) // Both edges can trigger interrupt
+
+#define CYGHWR_HAL_LM3S_GPIO_IEV_LOW VALUE_(0,0) // Falling edge or low triggers interrupt
+#define CYGHWR_HAL_LM3S_GPIO_IEV_HIGH VALUE_(0,1) // Rising edge or low triggers interrupt
+
+#define CYGHWR_HAL_LM3S_GPIO_IM_MASK VALUE_(0,0) // Interrupt is masked
+#define CYGHWR_HAL_LM3S_GPIO_IM_UMASK VALUE_(0,1)
+
+// HAL definitions
+#define CYGHWR_HAL_LM3S_GPIO_MODE_IN VALUE_(0,0) // Input mode
+#define CYGHWR_HAL_LM3S_GPIO_MODE_OUT VALUE_(0,1) // Output mode
+#define CYGHWR_HAL_LM3S_GPIO_MODE_PERIPH VALUE_(0,2) // Peripheral function mode
+
+#define CYGHWR_HAL_LM3S_GPIO_STRENGTH_NONE VALUE_(2,0) // Strength not specified
+#define CYGHWR_HAL_LM3S_GPIO_STRENGTH_2_MA VALUE_(2,1) // Strength 2 mA
+#define CYGHWR_HAL_LM3S_GPIO_STRENGTH_4_MA VALUE_(2,2) // Strength 4 mA
+#define CYGHWR_HAL_LM3S_GPIO_STRENGTH_8_MA VALUE_(2,3) // Strength 8 mA
+
+#define CYGHWR_HAL_LM3S_GPIO_CNF_NONE VALUE_(4,0) // Configuration not specified
+#define CYGHWR_HAL_LM3S_GPIO_CNF_PULLUP VALUE_(4,1) // Pull-up
+#define CYGHWR_HAL_LM3S_GPIO_CNF_PULLDOWN VALUE_(4,2) // Pull-down
+#define CYGHWR_HAL_LM3S_GPIO_CNF_OP VALUE_(4,3) // Open-drain
+#define CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLUP VALUE_(4,4) // Open-drain / Pull-up
+#define CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLDOWN VALUE_(4,5) // Open-drain / Pull-down
+#define CYGHWR_HAL_LM3S_GPIO_CNF_AIN VALUE_(4,6) // Analog
+
+#define CYGHWR_HAL_LM3S_GPIO_IRQ_DISABLE VALUE_(9,0) // Interrupt disable
+#define CYGHWR_HAL_LM3S_GPIO_IRQ_FALLING_EDGE VALUE_(9,1) // Interrupt on falling edge
+#define CYGHWR_HAL_LM3S_GPIO_IRQ_RISING_EDGE VALUE_(9,2) // Interrupt on rising edge
+#define CYGHWR_HAL_LM3S_GPIO_IRQ_BOTH_EDGES VALUE_(9,3) // Interrupt on both edges
+#define CYGHWR_HAL_LM3S_GPIO_IRQ_LOW_LEVEL VALUE_(9,4) // Interrupt on low level
+#define CYGHWR_HAL_LM3S_GPIO_IRQ_HIGH_LEVEL VALUE_(9,5) // Interrupt on high level
+
+// This macro packs the port number, bit number, mode, strength, irq and
+// configuration for a GPIO pin into a single word.
+// The packing puts:
+
+#define CYGHWR_HAL_LM3S_GPIO( \
+ __port, \
+ __bit, \
+ __mode, \
+ __strength, \
+ __cnf, \
+ __irq) \
+( \
+ (CYGHWR_HAL_LM3S_GPIO ## __port - CYGHWR_HAL_LM3S_GPIOA) | \
+ (__bit << 24) | \
+ (CYGHWR_HAL_LM3S_GPIO_MODE_ ## __mode) | \
+ (CYGHWR_HAL_LM3S_GPIO_STRENGTH_ ## __strength) | \
+ (CYGHWR_HAL_LM3S_GPIO_IRQ_ ## __irq) | \
+ (CYGHWR_HAL_LM3S_GPIO_CNF_ ## __cnf) \
+)
+
+// Macros to extract encoded values
+#define CYGHWR_HAL_LM3S_GPIO_PORT(__pin) (CYGHWR_HAL_LM3S_GPIOA+((__pin)&0x000FF000))
+#define CYGHWR_HAL_LM3S_GPIO_BIT(__pin) (((__pin)>>24)&0x07)
+#define CYGHWR_HAL_LM3S_GPIO_MODE(__pin) ((__pin)&0x0003)
+#define CYGHWR_HAL_LM3S_GPIO_STRENGTH(__pin) ((__pin)&VALUE_(2,3))
+#define CYGHWR_HAL_LM3S_GPIO_CFG(__pin) ((__pin)&VALUE_(4,7))
+#define CYGHWR_HAL_LM3S_GPIO_IRQ(__pin) ((__pin)&VALUE_(9,7))
+
+#define CYGHWR_HAL_LM3S_GPIO_NONE (0xFFFFFFFF)
+
+
+// Functions and macros to configure GPIO ports.
+
+__externC void hal_lm3s_gpio_set( cyg_uint32 pin );
+__externC void hal_lm3s_gpio_out( cyg_uint32 pin, int val );
+__externC void hal_lm3s_gpio_in ( cyg_uint32 pin, int *val );
+
+#define CYGHWR_HAL_LM3S_GPIO_SET(__pin ) hal_lm3s_gpio_set( __pin )
+#define CYGHWR_HAL_LM3S_GPIO_OUT(__pin, __val ) hal_lm3s_gpio_out( __pin, __val )
+#define CYGHWR_HAL_LM3S_GPIO_IN(__pin, __val ) hal_lm3s_gpio_in( __pin, __val )
+
+
+//=============================================================================
+// UARTs
+
+#define CYGHWR_HAL_LM3S_UART_DR 0x000
+#define CYGHWR_HAL_LM3S_UART_SR 0x004
+#define CYGHWR_HAL_LM3S_UART_FR 0x018
+#define CYGHWR_HAL_LM3S_UART_IBRD 0x024
+#define CYGHWR_HAL_LM3S_UART_FBRD 0x028
+#define CYGHWR_HAL_LM3S_UART_LCRH 0x02c
+#define CYGHWR_HAL_LM3S_UART_CTL 0x030
+#define CYGHWR_HAL_LM3S_UART_IFLS 0x034
+#define CYGHWR_HAL_LM3S_UART_IM 0x038
+#define CYGHWR_HAL_LM3S_UART_RIS 0x03c
+#define CYGHWR_HAL_LM3S_UART_MIS 0x040
+#define CYGHWR_HAL_LM3S_UART_ICR 0x044
+#define CYGHWR_HAL_LM3S_UART_PID4 0xfd0
+#define CYGHWR_HAL_LM3S_UART_PID5 0xfd4
+#define CYGHWR_HAL_LM3S_UART_PID6 0xfd8
+#define CYGHWR_HAL_LM3S_UART_PID7 0xfdc
+#define CYGHWR_HAL_LM3S_UART_PID0 0xfe0
+#define CYGHWR_HAL_LM3S_UART_PID1 0xfe4
+#define CYGHWR_HAL_LM3S_UART_PID2 0xfe8
+#define CYGHWR_HAL_LM3S_UART_PID3 0xfec
+#define CYGHWR_HAL_LM3S_UART_PCID0 0xff0
+#define CYGHWR_HAL_LM3S_UART_PCID1 0xff4
+#define CYGHWR_HAL_LM3S_UART_PCID2 0xff8
+#define CYGHWR_HAL_LM3S_UART_PCID3 0xffc
+
+
+// DR Bits
+#define CYGHWR_HAL_LM3S_UART_DR_FE BIT_(8)
+#define CYGHWR_HAL_LM3S_UART_DR_PE BIT_(9)
+#define CYGHWR_HAL_LM3S_UART_DR_BE BIT_(10)
+#define CYGHWR_HAL_LM3S_UART_DR_OE BIT_(11)
+
+// SR Bits
+#define CYGHWR_HAL_LM3S_UART_SR_FE BIT_(0)
+#define CYGHWR_HAL_LM3S_UART_SR_PE BIT_(1)
+#define CYGHWR_HAL_LM3S_UART_SR_BE BIT_(2)
+#define CYGHWR_HAL_LM3S_UART_SR_OE BIT_(3)
+
+// FR bits
+#define CYGHWR_HAL_LM3S_UART_FR_BUSY BIT_(3)
+#define CYGHWR_HAL_LM3S_UART_FR_RXFE BIT_(4)
+#define CYGHWR_HAL_LM3S_UART_FR_TXFF BIT_(5)
+#define CYGHWR_HAL_LM3S_UART_FR_RXFF BIT_(6)
+#define CYGHWR_HAL_LM3S_UART_FR_TXFE BIT_(7)
+
+// LCRH bits
+#define CYGHWR_HAL_LM3S_UART_LCRH_BRK BIT_(0)
+#define CYGHWR_HAL_LM3S_UART_LCRH_PEN BIT_(1)
+#define CYGHWR_HAL_LM3S_UART_LCRH_EPS BIT_(2)
+#define CYGHWR_HAL_LM3S_UART_LCRH_STP2 BIT_(3)
+#define CYGHWR_HAL_LM3S_UART_LCRH_FEN BIT_(4)
+#define CYGHWR_HAL_LM3S_UART_LCRH_WLEN(__x) VALUE_(5,__x)
+#define CYGHWR_HAL_LM3S_UART_LCRH_WLEN_MASK 0x00000060
+#define CYGHWR_HAL_LM3S_UART_LCRH_SPS BIT_(7)
+
+// CTL bits
+#define CYGHWR_HAL_LM3S_UART_CTL_UARTEN BIT_(0)
+#define CYGHWR_HAL_LM3S_UART_CTL_LBE BIT_(7)
+#define CYGHWR_HAL_LM3S_UART_CTL_TXE BIT_(8)
+#define CYGHWR_HAL_LM3S_UART_CTL_RXE BIT_(9)
+
+// IFLS bits
+#define CYGHWR_HAL_LM3S_UART_IFLS_RXIFLSEL(__x) VALUE_(0,__x)
+#define CYGHWR_HAL_LM3S_UART_IFLS_RXIFLSEL_MASK 0x00000007
+#define CYGHWR_HAL_LM3S_UART_IFLS_TXIFLSEL(__x) VALUE_(3,__x)
+#define CYGHWR_HAL_LM3S_UART_IFLS_TXIFLSEL_MASK 0x00000038
+
+// IM bits
+#define CYGHWR_HAL_LM3S_UART_IM_RXIM BIT_(4)
+#define CYGHWR_HAL_LM3S_UART_IM_TXIM BIT_(5)
+#define CYGHWR_HAL_LM3S_UART_IM_RTIM BIT_(6)
+#define CYGHWR_HAL_LM3S_UART_IM_FEIM BIT_(7)
+#define CYGHWR_HAL_LM3S_UART_IM_PEIM BIT_(8)
+#define CYGHWR_HAL_LM3S_UART_IM_BEIM BIT_(9)
+#define CYGHWR_HAL_LM3S_UART_IM_OEIM BIT_(10)
+
+// RIS bits
+#define CYGHWR_HAL_LM3S_UART_RIS_RXRIS BIT_(4)
+#define CYGHWR_HAL_LM3S_UART_RIS_TXRIS BIT_(5)
+#define CYGHWR_HAL_LM3S_UART_RIS_RTRIS BIT_(6)
+#define CYGHWR_HAL_LM3S_UART_RIS_FERIS BIT_(7)
+#define CYGHWR_HAL_LM3S_UART_RIS_PERIS BIT_(8)
+#define CYGHWR_HAL_LM3S_UART_RIS_BERIS BIT_(9)
+#define CYGHWR_HAL_LM3S_UART_RIS_OERIS BIT_(10)
+
+// MIS bits
+#define CYGHWR_HAL_LM3S_UART_MIS_RXMIS BIT_(4)
+#define CYGHWR_HAL_LM3S_UART_MIS_TXMIS BIT_(5)
+#define CYGHWR_HAL_LM3S_UART_MIS_RTMIS BIT_(6)
+#define CYGHWR_HAL_LM3S_UART_MIS_FEMIS BIT_(7)
+#define CYGHWR_HAL_LM3S_UART_MIS_PEMIS BIT_(8)
+#define CYGHWR_HAL_LM3S_UART_MIS_BEMIS BIT_(9)
+#define CYGHWR_HAL_LM3S_UART_MIS_OEMIS BIT_(10)
+
+// ICR bits
+#define CYGHWR_HAL_LM3S_UART_ICR_RXIC BIT_(4)
+#define CYGHWR_HAL_LM3S_UART_ICR_TXIC BIT_(5)
+#define CYGHWR_HAL_LM3S_UART_ICR_RTIC BIT_(6)
+#define CYGHWR_HAL_LM3S_UART_ICR_FEIC BIT_(7)
+#define CYGHWR_HAL_LM3S_UART_ICR_PEIC BIT_(8)
+#define CYGHWR_HAL_LM3S_UART_ICR_BEIC BIT_(9)
+#define CYGHWR_HAL_LM3S_UART_ICR_OEIC BIT_(10)
+
+// UARTO shall be connected to PortA 0/1 on all device
+#ifndef CYGHWR_HAL_LM3S_UART0_TX
+# define CYGHWR_HAL_LM3S_UART0_TX CYGHWR_HAL_LM3S_GPIO( A, 0, PERIPH, NONE, NONE, DISABLE )
+#endif
+#ifndef CYGHWR_HAL_LM3S_UART0_RX
+# define CYGHWR_HAL_LM3S_UART0_RX CYGHWR_HAL_LM3S_GPIO( A, 1, PERIPH, NONE, NONE, DISABLE )
+#endif
+#ifndef CYGHWR_HAL_LM3S_P_UART0_GPIO
+# define CYGHWR_HAL_LM3S_P_UART0_GPIO CYGHWR_HAL_LM3S_P_GPIOA
+#endif
+
+#ifndef __ASSEMBLER__
+
+__externC void hal_lm3s_uart_setbaud( CYG_ADDRESS uart, cyg_uint32 baud );
+
+#endif
+
+//=============================================================================
+// ADCs
+
+#ifdef CYGHWR_HAL_LM3S_ADC0_CHAN
+
+#define CYGHWR_HAL_LM3S_ADC_ACTSS 0x0
+#define CYGHWR_HAL_LM3S_ADC_RIS 0x4
+#define CYGHWR_HAL_LM3S_ADC_IMR 0x8
+#define CYGHWR_HAL_LM3S_ADC_ISCR 0xc
+#define CYGHWR_HAL_LM3S_ADC_OSR 0x10
+#define CYGHWR_HAL_LM3S_ADC_EMUX 0x14
+#define CYGHWR_HAL_LM3S_ADC_USR 0x18
+#define CYGHWR_HAL_LM3S_ADC_SSPRI 0x20
+#define CYGHWR_HAL_LM3S_ADC_PSSI 0x28
+#define CYGHWR_HAL_LM3S_ADC_SAC 0x30
+#define CYGHWR_HAL_LM3S_ADC_SS_MUX0 0x40
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0 0x44
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO0 0x48
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO0_SR 0x4c
+#define CYGHWR_HAL_LM3S_ADC_SS_MUX1 0x60
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL1 0x64
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO1 0x68
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO1_SR 0x6c
+#define CYGHWR_HAL_LM3S_ADC_SS_MUX2 0x80
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL2 0x84
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO2 0x88
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO2_SR 0x8c
+#define CYGHWR_HAL_LM3S_ADC_SS_MUX3 0xa0
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL3 0xa4
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO3 0xa8
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO3_SR 0xac
+#define CYGHWR_HAL_LM3S_ADC_TMLB 0x100
+
+#define CYGHWR_HAL_LM3S_ADC_SAMPLE_SIZE 10
+
+// Active Sample Sequencer
+#define CYGHWR_HAL_LM3S_ADC_ACTSS_ASEN(__x) VALUE_(((__x)&3),1)
+
+// Raw Interrupt Status
+#define CYGHWR_HAL_LM3S_ADC_RIS_INR(__x) VALUE_(((__x)&3),1)
+
+// Interrupt Mask Register
+#define CYGHWR_HAL_LM3S_ADC_IMR_MASK(__x) VALUE_(((__x)&3),1)
+
+// Interrupt Status and Clear Register
+#define CYGHWR_HAL_LM3S_ADC_ISCR_IN(__x) VALUE_(((__x)&3),1)
+
+// Overflow Status Register
+#define CYGHWR_HAL_LM3S_ADC_OSR_OV(__x) VALUE_(((__x)&3),1)
+
+// Event Multiplexer Select
+#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_CTRL(__x) VALUE_((((__x)&3)<<2),0)
+#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_AC0(__x) VALUE_((((__x)&3)<<2),1)
+#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_EXT(__x) VALUE_((((__x)&3)<<2),4)
+#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_TIMER(__x) VALUE_((((__x)&3)<<2),5)
+#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_PWM0(__x) VALUE_((((__x)&3)<<2),6)
+#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_PWM1(__x) VALUE_((((__x)&3)<<2),7)
+#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_PWM2(__x) VALUE_((((__x)&3)<<2),8)
+#define CYGHWR_HAL_LM3S_ADC_EMUX_EM_ALWS(__x) VALUE_((((__x)&3)<<2),15)
+
+// Underflow Status
+#define CYGHWR_HAL_LM3S_ADC_USR_UV(__x) VALUE_(((__x)&3),1)
+
+// Sample Sequence Priority
+#define CYGHWR_HAL_LM3S_ADC_SSPRI_SS(__x, __y) VALUE_((((__x)&3)<<2),(__y)&3)
+
+// Processor Sample Sequence Initiate
+#define CYGHWR_HAL_LM3S_ADC_PSSI_SS(__x) VALUE_(((__x)&3),1)
+
+// Sample Averaging Control
+#define CYGHWR_HAL_LM3S_ADC_SAC_NO_OVER 0x0
+#define CYGHWR_HAL_LM3S_ADC_SAC_2X 0x1
+#define CYGHWR_HAL_LM3S_ADC_SAC_4X 0x2
+#define CYGHWR_HAL_LM3S_ADC_SAC_8X 0x3
+#define CYGHWR_HAL_LM3S_ADC_SAC_16X 0x4
+#define CYGHWR_HAL_LM3S_ADC_SAC_32X 0x5
+#define CYGHWR_HAL_LM3S_ADC_SAC_64X 0x6
+
+// Sample Sequence Input Multiplexer Select 0
+#define CYGHWR_HAL_LM3S_ADC_SS_MUX0_V(_p_, _x_) VALUE_((((_x_)&3)<<2),_p_)
+#define CYGHWR_HAL_LM3S_ADC_SS_MUX0_M(_x_) VALUE_((((_x_)&3)<<2), 0x3)
+
+// Sample Sequence Control 0
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D0 BIT_(0)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END0 BIT_(1)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE0 BIT_(2)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS0 BIT_(3)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D1 BIT_(4)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END1 BIT_(5)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE1 BIT_(6)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS1 BIT_(7)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D2 BIT_(8)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END2 BIT_(9)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE2 BIT_(10)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS2 BIT_(11)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D3 BIT_(12)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END3 BIT_(13)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE3 BIT_(14)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS3 BIT_(15)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D4 BIT_(16)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END4 BIT_(17)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE4 BIT_(18)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS4 BIT_(19)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D5 BIT_(20)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END5 BIT_(21)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE5 BIT_(22)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS5 BIT_(23)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D6 BIT_(24)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END6 BIT_(25)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE6 BIT_(26)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS6 BIT_(27)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D7 BIT_(28)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END7 BIT_(29)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE7 BIT_(30)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS7 BIT_(31)
+
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_MASK(_x_) VALUE_((((_x_)&3)<<2), 0x15)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_D(_x_) VALUE_((((_x_)&3)<<2), 0x1)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_END(_x_) VALUE_((((_x_)&3)<<2), 0x2)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_IE(_x_) VALUE_((((_x_)&3)<<2), 0x4)
+#define CYGHWR_HAL_LM3S_ADC_SS_CTL0_TS(_x_) VALUE_((((_x_)&3)<<2), 0x8)
+
+// Sequence FIFO Status
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_TPTR 0x0
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_HPTR 0x0
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_EMPTY BIT_(8)
+#define CYGHWR_HAL_LM3S_ADC_SS_FIFO_SR_FULL BIT_(12)
+
+#endif // CYGHWR_HAL_LM3S_ADC0_CHAN
+
+
+//=============================================================================
+// SSI interface register definitions.
+
+#ifdef CYGHWR_HAL_LM3S_SSI_CHAN
+
+#define CYGHWR_HAL_LM3S_SSI_CR0 0x000
+#define CYGHWR_HAL_LM3S_SSI_CR1 0x004
+#define CYGHWR_HAL_LM3S_SSI_DR 0x008
+#define CYGHWR_HAL_LM3S_SSI_SR 0x00C
+#define CYGHWR_HAL_LM3S_SSI_CPSR 0x010
+#define CYGHWR_HAL_LM3S_SSI_IM 0x014
+#define CYGHWR_HAL_LM3S_SSI_RIS 0x018
+#define CYGHWR_HAL_LM3S_SSI_MIS 0x01c
+#define CYGHWR_HAL_LM3S_SSI_ICR 0x020
+#define CYGHWR_HAL_LM3S_SSI_PID4 0xfd0
+#define CYGHWR_HAL_LM3S_SSI_PID5 0xfd4
+#define CYGHWR_HAL_LM3S_SSI_PID6 0xfd8
+#define CYGHWR_HAL_LM3S_SSI_PID7 0xfdc
+#define CYGHWR_HAL_LM3S_SSI_PID0 0xfe0
+#define CYGHWR_HAL_LM3S_SSI_PID1 0xfe4
+#define CYGHWR_HAL_LM3S_SSI_PID2 0xfe8
+#define CYGHWR_HAL_LM3S_SSI_PID3 0xfec
+#define CYGHWR_HAL_LM3S_SSI_PCID0 0xff0
+#define CYGHWR_HAL_LM3S_SSI_PCID1 0xff4
+#define CYGHWR_HAL_LM3S_SSI_PCID2 0xff8
+#define CYGHWR_HAL_LM3S_SSI_PCID3 0xffc
+
+
+// CR0 bits
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_4BIT VALUE_(0, 0x3)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_5BIT VALUE_(0, 0x4)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_6BIT VALUE_(0, 0x5)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_7BIT VALUE_(0, 0x6)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_8BIT VALUE_(0, 0x7)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_9BIT VALUE_(0, 0x8)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_10BIT VALUE_(0, 0x9)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_11BIT VALUE_(0, 0xa)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_12BIT VALUE_(0, 0xb)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_13BIT VALUE_(0, 0xc)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_14BIT VALUE_(0, 0xd)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_15BIT VALUE_(0, 0xe)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_16BIT VALUE_(0, 0xf)
+#define CYGHWR_HAL_LM3S_SSI_CR0_DSS_MASK 0x0000000f
+#define CYGHWR_HAL_LM3S_SSI_CR0_FRF_FSPIFF VALUE_(4, 0x0)
+#define CYGHWR_HAL_LM3S_SSI_CR0_FRF_TISSFF VALUE_(4, 0x1)
+#define CYGHWR_HAL_LM3S_SSI_CR0_FRF_MFF VALUE_(4, 0x2)
+#define CYGHWR_HAL_LM3S_SSI_CR0_FRF_MASK 0x00000030
+#define CYGHWR_HAL_LM3S_SSI_CR0_SPO BIT_(6)
+#define CYGHWR_HAL_LM3S_SSI_CR0_SPH BIT_(7)
+#define CYGHWR_HAL_LM3S_SSI_CR0_SCR(__x) VALUE_(8, ((__x)&0xff))
+
+// CR1 bits
+#define CYGHWR_HAL_LM3S_SSI_CR1_LBM BIT_(0)
+#define CYGHWR_HAL_LM3S_SSI_CR1_SSE BIT_(1)
+#define CYGHWR_HAL_LM3S_SSI_CR1_MS BIT_(2)
+#define CYGHWR_HAL_LM3S_SSI_CR1_SOD BIT_(3)
+
+// SR bits
+#define CYGHWR_HAL_LM3S_SSI_SR_TFE BIT_(0)
+#define CYGHWR_HAL_LM3S_SSI_SR_TNF BIT_(1)
+#define CYGHWR_HAL_LM3S_SSI_SR_RNE BIT_(2)
+#define CYGHWR_HAL_LM3S_SSI_SR_RFF BIT_(3)
+#define CYGHWR_HAL_LM3S_SSI_SR_BSY BIT_(4)
+
+// IM bits
+#define CYGHWR_HAL_LM3S_SSI_IM_RORIM BIT_(0)
+#define CYGHWR_HAL_LM3S_SSI_IM_RTIM BIT_(1)
+#define CYGHWR_HAL_LM3S_SSI_IM_RXIM BIT_(2)
+#define CYGHWR_HAL_LM3S_SSI_IM_TXIM BIT_(3)
+
+// RIS bits
+#define CYGHWR_HAL_LM3S_SSI_RIS_RORRIS BIT_(0)
+#define CYGHWR_HAL_LM3S_SSI_RIS_RTRIS BIT_(1)
+#define CYGHWR_HAL_LM3S_SSI_RIS_RXRIS BIT_(2)
+#define CYGHWR_HAL_LM3S_SSI_RIS_TXRIS BIT_(3)
+
+// MIS bits
+#define CYGHWR_HAL_LM3S_SSI_MIS_RORMIS BIT_(0)
+#define CYGHWR_HAL_LM3S_SSI_MIS_RTMIS BIT_(1)
+#define CYGHWR_HAL_LM3S_SSI_MIS_RXMIS BIT_(2)
+#define CYGHWR_HAL_LM3S_SSI_MIS_TXMIS BIT_(3)
+
+// ICR bits
+#define CYGHWR_HAL_LM3S_SSI_ICR_RORIC BIT_(0)
+#define CYGHWR_HAL_LM3S_SSI_ICR_RTIC BIT_(1)
+
+#endif // CYGHWR_HAL_LM3S_SSI_CHAN
+
+//=============================================================================
+// PWM register definitions.
+
+#ifdef CYGHWR_HAL_LM3S_PWM_CHAN
+
+#define CYGHWR_HAL_LM3S_PWM_CTL 0x000
+#define CYGHWR_HAL_LM3S_PWM_SYNC 0x004
+#define CYGHWR_HAL_LM3S_PWM_ENABLE 0x008
+#define CYGHWR_HAL_LM3S_PWM_INVERT 0x00c
+#define CYGHWR_HAL_LM3S_PWM_FAULT 0x010
+#define CYGHWR_HAL_LM3S_PWM_INTEN 0x014
+#define CYGHWR_HAL_LM3S_PWM_RIS 0x018
+#define CYGHWR_HAL_LM3S_PWM_ISC 0x01c
+#define CYGHWR_HAL_LM3S_PWM_STATUS 0x020
+
+#define CYGHWR_HAL_LM3S_PWM0_CTL 0x040
+#define CYGHWR_HAL_LM3S_PWM0_INTEN 0x044
+#define CYGHWR_HAL_LM3S_PWM0_RIS 0x048
+#define CYGHWR_HAL_LM3S_PWM0_ISC 0x04c
+#define CYGHWR_HAL_LM3S_PWM0_LOAD 0x050
+#define CYGHWR_HAL_LM3S_PWM0_COUNT 0x054
+#define CYGHWR_HAL_LM3S_PWM0_CMPA 0x058
+#define CYGHWR_HAL_LM3S_PWM0_CMPB 0x05c
+#define CYGHWR_HAL_LM3S_PWM0_GENA 0x060
+#define CYGHWR_HAL_LM3S_PWM0_GENB 0x064
+#define CYGHWR_HAL_LM3S_PWM0_DBCTL 0x068
+#define CYGHWR_HAL_LM3S_PWM0_DBRISE 0x06c
+#define CYGHWR_HAL_LM3S_PWM0_DBFALL 0x070
+
+#define CYGHWR_HAL_LM3S_PWM1_CTL 0x080
+#define CYGHWR_HAL_LM3S_PWM1_INTEN 0x084
+#define CYGHWR_HAL_LM3S_PWM1_RIS 0x088
+#define CYGHWR_HAL_LM3S_PWM1_ISC 0x08c
+#define CYGHWR_HAL_LM3S_PWM1_LOAD 0x090
+#define CYGHWR_HAL_LM3S_PWM1_COUNT 0x094
+#define CYGHWR_HAL_LM3S_PWM1_CMPA 0x098
+#define CYGHWR_HAL_LM3S_PWM1_CMPB 0x09c
+#define CYGHWR_HAL_LM3S_PWM1_GENA 0x0a0
+#define CYGHWR_HAL_LM3S_PWM1_GENB 0x0a4
+#define CYGHWR_HAL_LM3S_PWM1_DBCTL 0x0a8
+#define CYGHWR_HAL_LM3S_PWM1_DBRISE 0x0ac
+#define CYGHWR_HAL_LM3S_PWM1_DBFALL 0x0b0
+
+#define CYGHWR_HAL_LM3S_PWM2_CTL 0x0c0
+#define CYGHWR_HAL_LM3S_PWM2_INTEN 0x0c4
+#define CYGHWR_HAL_LM3S_PWM2_RIS 0x0c8
+#define CYGHWR_HAL_LM3S_PWM2_ISC 0x0cc
+#define CYGHWR_HAL_LM3S_PWM2_LOAD 0x0d0
+#define CYGHWR_HAL_LM3S_PWM2_COUNT 0x0d4
+#define CYGHWR_HAL_LM3S_PWM2_CMPA 0x0d8
+#define CYGHWR_HAL_LM3S_PWM2_CMPB 0x0dc
+#define CYGHWR_HAL_LM3S_PWM2_GENA 0x0e0
+#define CYGHWR_HAL_LM3S_PWM2_GENB 0x0e4
+#define CYGHWR_HAL_LM3S_PWM2_DBCTL 0x0e8
+#define CYGHWR_HAL_LM3S_PWM2_DBRISE 0x0ec
+#define CYGHWR_HAL_LM3S_PWM2_DBFALL 0x0f0
+
+
+// CTL bits
+#define CYGHWR_HAL_LM3S_PWM_CTL_GSYNC0 BIT_(0)
+#define CYGHWR_HAL_LM3S_PWM_CTL_GSYNC1 BIT_(1)
+#define CYGHWR_HAL_LM3S_PWM_CTL_GSYNC2 BIT_(2)
+
+// SYNC bits
+#define CYGHWR_HAL_LM3S_PWM_SYNC_SYNC0 BIT_(0)
+#define CYGHWR_HAL_LM3S_PWM_SYNC_SYNC1 BIT_(1)
+#define CYGHWR_HAL_LM3S_PWM_SYNC_SYNC2 BIT_(2)
+
+// ENABLE bits
+#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM0 BIT_(0)
+#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM1 BIT_(1)
+#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM2 BIT_(2)
+#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM3 BIT_(3)
+#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM4 BIT_(4)
+#define CYGHWR_HAL_LM3S_PWM_ENABLE_PWM5 BIT_(5)
+
+// INVERT bits
+#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM0 BIT_(0)
+#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM1 BIT_(1)
+#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM2 BIT_(2)
+#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM3 BIT_(3)
+#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM4 BIT_(4)
+#define CYGHWR_HAL_LM3S_PWM_INVERT_PWM5 BIT_(5)
+
+// FAULT bits
+#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM0 BIT_(0)
+#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM1 BIT_(1)
+#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM2 BIT_(2)
+#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM3 BIT_(3)
+#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM4 BIT_(4)
+#define CYGHWR_HAL_LM3S_PWM_FAULT_PWM5 BIT_(5)
+
+// INTEN bits
+#define CYGHWR_HAL_LM3S_PWM_INTEN_PWM0 BIT_(0)
+#define CYGHWR_HAL_LM3S_PWM_INTEN_PWM1 BIT_(1)
+#define CYGHWR_HAL_LM3S_PWM_INTEN_PWM2 BIT_(2)
+#define CYGHWR_HAL_LM3S_PWM_INTEN_FAULT BIT_(16)
+
+// RIS bits
+#define CYGHWR_HAL_LM3S_PWM_RIS_PWM0 BIT_(0)
+#define CYGHWR_HAL_LM3S_PWM_RIS_PWM1 BIT_(1)
+#define CYGHWR_HAL_LM3S_PWM_RIS_PWM2 BIT_(2)
+#define CYGHWR_HAL_LM3S_PWM_RIS_FAULT BIT_(16)
+
+// ISC bits
+#define CYGHWR_HAL_LM3S_PWM_ISC_PWM0 BIT_(0)
+#define CYGHWR_HAL_LM3S_PWM_ISC_PWM1 BIT_(1)
+#define CYGHWR_HAL_LM3S_PWM_ISC_PWM2 BIT_(2)
+#define CYGHWR_HAL_LM3S_PWM_ISC_FAULT BIT_(16)
+
+// STATUS bits
+#define CYGHWR_HAL_LM3S_PWM_STATUS_FAULT BIT_(0)
+
+// PWMx CTL Bits
+#define CYGHWR_HAL_LM3S_PWMx_CTL_ENABLE BIT_(0)
+#define CYGHWR_HAL_LM3S_PWMx_CTL_MODE BIT_(1)
+#define CYGHWR_HAL_LM3S_PWMx_CTL_DEBUG BIT_(2)
+#define CYGHWR_HAL_LM3S_PWMx_CTL_LOAD_UPD BIT_(3)
+#define CYGHWR_HAL_LM3S_PWMx_CTL_CMPA_UPD BIT_(4)
+#define CYGHWR_HAL_LM3S_PWMx_CTL_CMPB_UPD BIT_(5)
+
+// PWMx INTEN Bits
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_CNT_ZERO BIT_(0)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_CNT_LOAD BIT_(1)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_CMPA_UP BIT_(2)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_CMPA_DOWN BIT_(3)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_CMPB_UP BIT_(4)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_CMPB_DOWN BIT_(5)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CNT_ZERO BIT_(8)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CNT_LOAD BIT_(9)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CMPA_UP BIT_(10)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CMPA_DOWN BIT_(11)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CMPB_UP BIT_(12)
+#define CYGHWR_HAL_LM3S_PWMx_INTEN_TRIG_CMPB_DOWN BIT_(13)
+
+// PWMx RIS Bits
+#define CYGHWR_HAL_LM3S_PWMx_RIS_CNT_ZERO BIT_(0)
+#define CYGHWR_HAL_LM3S_PWMx_RIS_CNT_LOAD BIT_(1)
+#define CYGHWR_HAL_LM3S_PWMx_RIS_CMPA_UP BIT_(2)
+#define CYGHWR_HAL_LM3S_PWMx_RIS_CMPA_DOWN BIT_(3)
+#define CYGHWR_HAL_LM3S_PWMx_RIS_CMPB_UP BIT_(4)
+#define CYGHWR_HAL_LM3S_PWMx_RIS_CMPB_DOWN BIT_(5)
+
+// PWMx ISC Bits
+#define CYGHWR_HAL_LM3S_PWMx_ISC_CNT_ZERO BIT_(0)
+#define CYGHWR_HAL_LM3S_PWMx_ISC_CNT_LOAD BIT_(1)
+#define CYGHWR_HAL_LM3S_PWMx_ISC_CMPA_UP BIT_(2)
+#define CYGHWR_HAL_LM3S_PWMx_ISC_CMPA_DOWN BIT_(3)
+#define CYGHWR_HAL_LM3S_PWMx_ISC_CMPB_UP BIT_(4)
+#define CYGHWR_HAL_LM3S_PWMx_ISC_CMPB_DOWN BIT_(5)
+
+// PWMx GENA Bits
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_NONE VALUE_(0, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_INVS VALUE_(0, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_SET0 VALUE_(0, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_SET1 VALUE_(0, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_ZERO_MASK 0x00000003
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_NONE VALUE_(2, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_INVS VALUE_(2, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_SET0 VALUE_(2, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_SET1 VALUE_(2, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_ACT_LOAD_MASK 0x0000000c
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_NONE VALUE_(4, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_INVS VALUE_(4, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_SET0 VALUE_(4, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_SET1 VALUE_(4, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_UP_MASK 0x00000030
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_NONE VALUE_(6, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_INVS VALUE_(6, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_SET0 VALUE_(6, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_SET1 VALUE_(6, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPA_DOWN_MASK 0x000000c0
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_NONE VALUE_(8, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_INVS VALUE_(8, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_SET0 VALUE_(8, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_SET1 VALUE_(8, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_UP_MASK 0x00000300
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_NONE VALUE_(10, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_INVS VALUE_(10, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_SET0 VALUE_(10, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_SET1 VALUE_(10, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENA_CMPB_DOWN_MASK 0x00000c00
+
+// PWMx GENB Bits
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_NONE VALUE_(0, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_INVS VALUE_(0, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_SET0 VALUE_(0, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_SET1 VALUE_(0, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_ZERO_MASK 0x00000003
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_NONE VALUE_(2, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_INVS VALUE_(2, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_SET0 VALUE_(2, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_SET1 VALUE_(2, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_ACT_LOAD_MASK 0x0000000c
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_NONE VALUE_(4, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_INVS VALUE_(4, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_SET0 VALUE_(4, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_SET1 VALUE_(4, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_UP_MASK 0x00000030
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_NONE VALUE_(6, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_INVS VALUE_(6, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_SET0 VALUE_(6, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_SET1 VALUE_(6, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPA_DOWN_MASK 0x000000c0
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_NONE VALUE_(8, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_INVS VALUE_(8, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_SET0 VALUE_(8, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_SET1 VALUE_(8, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_UP_MASK 0x00000300
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_NONE VALUE_(10, 0x0)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_INVS VALUE_(10, 0x1)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_SET0 VALUE_(10, 0x2)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_SET1 VALUE_(10, 0x3)
+#define CYGHWR_HAL_LM3S_PWMx_GENB_CMPB_DOWN_MASK 0x00000c00
+
+// PWMx DBCTL Bits
+#define CYGHWR_HAL_LM3S_PWMx_DBCTL_ENABLE BIT_(0)
+
+#endif // CYGHWR_HAL_LM3S_PWM_CHAN
+
+
+//=============================================================================
+// Global Timers register definitions.
+
+#define CYGHWR_HAL_LM3S_GPTIM_CFG 0x000
+#define CYGHWR_HAL_LM3S_GPTIM_TAMR 0x004
+#define CYGHWR_HAL_LM3S_GPTIM_TBMR 0x008
+#define CYGHWR_HAL_LM3S_GPTIM_CTL 0x00c
+#define CYGHWR_HAL_LM3S_GPTIM_IMR 0x018
+#define CYGHWR_HAL_LM3S_GPTIM_RIS 0x01C
+#define CYGHWR_HAL_LM3S_GPTIM_MIS 0x020
+#define CYGHWR_HAL_LM3S_GPTIM_ICR 0x024
+#define CYGHWR_HAL_LM3S_GPTIM_TAILR 0x028
+#define CYGHWR_HAL_LM3S_GPTIM_TBILR 0x02c
+#define CYGHWR_HAL_LM3S_GPTIM_TAMATCHR 0x030
+#define CYGHWR_HAL_LM3S_GPTIM_TBMATCHR 0x034
+#define CYGHWR_HAL_LM3S_GPTIM_TAPR 0x038
+#define CYGHWR_HAL_LM3S_GPTIM_TBPR 0x03c
+#define CYGHWR_HAL_LM3S_GPTIM_TAPMR 0x040
+#define CYGHWR_HAL_LM3S_GPTIM_TBPMR 0x044
+#define CYGHWR_HAL_LM3S_GPTIM_TAR 0x048
+#define CYGHWR_HAL_LM3S_GPTIM_TBR 0x04c
+
+// CFG bits
+#define CYGHWR_HAL_LM3S_GPTIM_CFG_32BIT VALUE_(0, 0x0)
+#define CYGHWR_HAL_LM3S_GPTIM_CFG_32BIT_RTC VALUE_(0, 0x1)
+#define CYGHWR_HAL_LM3S_GPTIM_CFG_16BIT VALUE_(0, 0x4)
+#define CYGHWR_HAL_LM3S_GPTIM_CFG_MASK 0x00000007
+
+// TAMR bits
+#define CYGHWR_HAL_LM3S_GPTIM_TAMR_ONE_SHOT VALUE_(0, 0x1)
+#define CYGHWR_HAL_LM3S_GPTIM_TAMR_PERIODIC VALUE_(0, 0x2)
+#define CYGHWR_HAL_LM3S_GPTIM_TAMR_CAPTURE VALUE_(0, 0x3)
+#define CYGHWR_HAL_LM3S_GPTIM_TAMR_MASK 0x00000003
+#define CYGHWR_HAL_LM3S_GPTIM_TAMR_TACMR BIT_(2)
+#define CYGHWR_HAL_LM3S_GPTIM_TAMR_TAAMS BIT_(3)
+
+// TBMR bits
+#define CYGHWR_HAL_LM3S_GPTIM_TBMR_ONE_SHOT VALUE_(0, 0x1)
+#define CYGHWR_HAL_LM3S_GPTIM_TBMR_PERIODIC VALUE_(0, 0x2)
+#define CYGHWR_HAL_LM3S_GPTIM_TBMR_CAPTURE VALUE_(0, 0x3)
+#define CYGHWR_HAL_LM3S_GPTIM_TBMR_MASK 0x00000003
+#define CYGHWR_HAL_LM3S_GPTIM_TBMR_TBCMR BIT_(2)
+#define CYGHWR_HAL_LM3S_GPTIM_TBMR_TBAMS BIT_(3)
+
+// CTL bits
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAEN BIT_(0)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TASTALL BIT_(1)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAEVENT_POS VALUE_(2, 0x0)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAEVENT_NEG VALUE_(2, 0x1)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAEVENT_BOTH VALUE_(2, 0x3)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_RTCEN BIT_(4)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAOTE BIT_(5)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TAPWML BIT_(6)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBEN BIT_(8)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBSTALL BIT_(9)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBEVENT_POS VALUE_(10, 0x0)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBEVENT_NEG VALUE_(10, 0x1)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBEVENT_BOTH VALUE_(10, 0x3)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBOTE BIT_(13)
+#define CYGHWR_HAL_LM3S_GPTIM_CTL_TBPWML BIT_(14)
+
+// IMR bits
+#define CYGHWR_HAL_LM3S_GPTIM_IMR_TATOIM BIT_(0)
+#define CYGHWR_HAL_LM3S_GPTIM_IMR_CAMIM BIT_(1)
+#define CYGHWR_HAL_LM3S_GPTIM_IMR_CAEIM BIT_(2)
+#define CYGHWR_HAL_LM3S_GPTIM_IMR_RTCIM BIT_(3)
+#define CYGHWR_HAL_LM3S_GPTIM_IMR_TBTOIM BIT_(8)
+#define CYGHWR_HAL_LM3S_GPTIM_IMR_CBMIM BIT_(9)
+#define CYGHWR_HAL_LM3S_GPTIM_IMR_CBEIM BIT_(10)
+
+// RIS bits
+#define CYGHWR_HAL_LM3S_GPTIM_RIS_TATORIS BIT_(0)
+#define CYGHWR_HAL_LM3S_GPTIM_RIS_CAMRIS BIT_(1)
+#define CYGHWR_HAL_LM3S_GPTIM_RIS_CAERIS BIT_(2)
+#define CYGHWR_HAL_LM3S_GPTIM_RIS_RTCRIS BIT_(3)
+#define CYGHWR_HAL_LM3S_GPTIM_RIS_TBTORIS BIT_(8)
+#define CYGHWR_HAL_LM3S_GPTIM_RIS_CBMRIS BIT_(9)
+#define CYGHWR_HAL_LM3S_GPTIM_RIS_CBERIS BIT_(10)
+
+// MIS bits
+#define CYGHWR_HAL_LM3S_GPTIM_MIS_TATOMIS BIT_(0)
+#define CYGHWR_HAL_LM3S_GPTIM_MIS_CAMMIS BIT_(1)
+#define CYGHWR_HAL_LM3S_GPTIM_MIS_CAEMIS BIT_(2)
+#define CYGHWR_HAL_LM3S_GPTIM_MIS_RTCMIS BIT_(3)
+#define CYGHWR_HAL_LM3S_GPTIM_MIS_TBTOMIS BIT_(8)
+#define CYGHWR_HAL_LM3S_GPTIM_MIS_CBMMIS BIT_(9)
+#define CYGHWR_HAL_LM3S_GPTIM_MIS_CBEMIS BIT_(10)
+
+// ICR bits
+#define CYGHWR_HAL_LM3S_GPTIM_ICR_TATOCINT BIT_(0)
+#define CYGHWR_HAL_LM3S_GPTIM_ICR_CAMCINT BIT_(1)
+#define CYGHWR_HAL_LM3S_GPTIM_ICR_CAECINT BIT_(2)
+#define CYGHWR_HAL_LM3S_GPTIM_ICR_RTCCINT BIT_(3)
+#define CYGHWR_HAL_LM3S_GPTIM_ICR_TBTOCINT BIT_(8)
+#define CYGHWR_HAL_LM3S_GPTIM_ICR_CBMCINT BIT_(9)
+#define CYGHWR_HAL_LM3S_GPTIM_ICR_CBECINT BIT_(10)
+
+cyg_uint32 hal_lm3s_timer_clock( void );
+
+#ifndef __ASSEMBLER__
+
+__externC cyg_uint32 hal_stellaris_lm3s_timer_clock( CYG_ADDRESS base );
+
+#endif
+
+
+//=============================================================================
+// I2C register definitions.
+
+#ifdef CYGHWR_HAL_LM3S_I2C_CHAN
+
+#define CYGHWR_HAL_LM3S_I2C_MSA 0x000
+#define CYGHWR_HAL_LM3S_I2C_MCS 0x004
+#define CYGHWR_HAL_LM3S_I2C_MDR 0x008
+#define CYGHWR_HAL_LM3S_I2C_MTPR 0x00c
+#define CYGHWR_HAL_LM3S_I2C_MIMR 0x010
+#define CYGHWR_HAL_LM3S_I2C_MRIS 0x014
+#define CYGHWR_HAL_LM3S_I2C_MMIS 0x018
+#define CYGHWR_HAL_LM3S_I2C_MICR 0x01c
+#define CYGHWR_HAL_LM3S_I2C_MCR 0x020
+
+#define CYGHWR_HAL_LM3S_I2C_SOAR 0x000
+#define CYGHWR_HAL_LM3S_I2C_SCSR 0x004
+#define CYGHWR_HAL_LM3S_I2C_SDR 0x008
+#define CYGHWR_HAL_LM3S_I2C_SIMR 0x00c
+#define CYGHWR_HAL_LM3S_I2C_SRIS 0x010
+#define CYGHWR_HAL_LM3S_I2C_SMIS 0x014
+#define CYGHWR_HAL_LM3S_I2C_SICR 0x018
+
+// MSA bits
+#define CYGHWR_HAL_LM3S_I2C_MSA_RS BIT_(0)
+#define CYGHWR_HAL_LM3S_I2C_MSA_SA(__x) VALUE_(1, __x)
+
+// MCS bits
+#define CYGHWR_HAL_LM3S_I2C_MCS_BUSY BIT_(0)
+#define CYGHWR_HAL_LM3S_I2C_MCS_ERR BIT_(1)
+#define CYGHWR_HAL_LM3S_I2C_MCS_ADRACK BIT_(2)
+#define CYGHWR_HAL_LM3S_I2C_MCS_DATACK BIT_(3)
+#define CYGHWR_HAL_LM3S_I2C_MCS_ARBLST BIT_(4)
+#define CYGHWR_HAL_LM3S_I2C_MCS_IDLE BIT_(5)
+#define CYGHWR_HAL_LM3S_I2C_MCS_BUSBSY BIT_(6)
+
+#define CYGHWR_HAL_LM3S_I2C_MCS_RUN BIT_(0)
+#define CYGHWR_HAL_LM3S_I2C_MCS_START BIT_(1)
+#define CYGHWR_HAL_LM3S_I2C_MCS_STOP BIT_(2)
+#define CYGHWR_HAL_LM3S_I2C_MCS_ACK BIT_(3)
+
+// MIMR bits
+#define CYGHWR_HAL_LM3S_I2C_MIMR_IM BIT_(0)
+
+// MRIS bits
+#define CYGHWR_HAL_LM3S_I2C_MRIS_RIS BIT_(0)
+
+// MMIS bits
+#define CYGHWR_HAL_LM3S_I2C_MMIS_MIS BIT_(0)
+
+// MICR bits
+#define CYGHWR_HAL_LM3S_I2C_MICR_IC BIT_(0)
+
+// MCR bits
+#define CYGHWR_HAL_LM3S_I2C_MCR_LPBK BIT_(0)
+#define CYGHWR_HAL_LM3S_I2C_MCR_MFE BIT_(4)
+#define CYGHWR_HAL_LM3S_I2C_MCR_SFE BIT_(5)
+
+// SCSR bits
+#define CYGHWR_HAL_LM3S_I2C_SCSR_READ_RREQ BIT_(0)
+#define CYGHWR_HAL_LM3S_I2C_SCSR_READ_TREQ BIT_(1)
+#define CYGHWR_HAL_LM3S_I2C_SCSR_READ_FBR BIT_(2)
+
+#define CYGHWR_HAL_LM3S_I2C_SCSR_WRITE_DA BIT_(0)
+
+// SIMR bits
+#define CYGHWR_HAL_LM3S_I2C_SIMR_DATAIM BIT_(0)
+
+// SRIS bits
+#define CYGHWR_HAL_LM3S_I2C_SRIS_DATARIS BIT_(0)
+
+// SMIS bits
+#define CYGHWR_HAL_LM3S_I2C_SMIS_DATAMIS BIT_(0)
+
+// SICR bits
+#define CYGHWR_HAL_LM3S_I2C_SICR_DATAMIC BIT_(0)
+
+__externC cyg_uint32 hal_lm3s_i2c_clock( void );
+
+#endif // CYGHWR_HAL_LM3S_I2C_CHAN
+
+
+//=============================================================================
+// AC register definitions.
+
+#ifdef CYGHWR_HAL_LM3S_AC_CHAN
+
+#define CYGHWR_HAL_LM3S_AC_MIS 0x000
+#define CYGHWR_HAL_LM3S_AC_RIS 0x004
+#define CYGHWR_HAL_LM3S_AC_INTEN 0x008
+#define CYGHWR_HAL_LM3S_AC_REFCTL 0x010
+#define CYGHWR_HAL_LM3S_AC_STAT0 0x020
+#define CYGHWR_HAL_LM3S_AC_CTL0 0x024
+#define CYGHWR_HAL_LM3S_AC_STAT1 0x040
+#define CYGHWR_HAL_LM3S_AC_CTL1 0x044
+#define CYGHWR_HAL_LM3S_AC_STAT2 0x060
+#define CYGHWR_HAL_LM3S_AC_CTL2 0x064
+
+// MIS bits
+#define CYGHWR_HAL_LM3S_AC_MIS_IN0 BIT_(0)
+#define CYGHWR_HAL_LM3S_AC_MIS_IN1 BIT_(1)
+#define CYGHWR_HAL_LM3S_AC_MIS_IN2 BIT_(2)
+
+// RIS bits
+#define CYGHWR_HAL_LM3S_AC_RIS_IN0 BIT_(0)
+#define CYGHWR_HAL_LM3S_AC_RIS_IN1 BIT_(1)
+#define CYGHWR_HAL_LM3S_AC_RIS_IN2 BIT_(2)
+
+// INTEN bits
+#define CYGHWR_HAL_LM3S_AC_INTEN_IN0 BIT_(0)
+#define CYGHWR_HAL_LM3S_AC_INTEN_IN1 BIT_(1)
+#define CYGHWR_HAL_LM3S_AC_INTEN_IN2 BIT_(2)
+
+// REFCTL bits
+#define CYGHWR_HAL_LM3S_AC_REFCTL_RNG BIT_(8)
+#define CYGHWR_HAL_LM3S_AC_REFCTL_EN BIT_(9)
+
+// STAT0, STAT1 and STAT2 bits
+#define CYGHWR_HAL_LM3S_AC_STATx_OVAL BIT_(1)
+
+// CTL0, CTL1 anf CTL2 bits
+#define CYGHWR_HAL_LM3S_AC_CTLx_CINV BIT_(1)
+#define CYGHWR_HAL_LM3S_AC_CTLx_ISEN_LEV_SENSE VALUE_(2, 0x0)
+#define CYGHWR_HAL_LM3S_AC_CTLx_ISEN_FALL_EDGE VALUE_(2, 0x1)
+#define CYGHWR_HAL_LM3S_AC_CTLx_ISEN_RISE_EDGE VALUE_(2, 0x2)
+#define CYGHWR_HAL_LM3S_AC_CTLx_ISEN_BOTH_EDGE VALUE_(2, 0x3)
+#define CYGHWR_HAL_LM3S_AC_CTLx_ISLVAL BIT_(4)
+#define CYGHWR_HAL_LM3S_AC_CTLx_ASRCP_PIN_VAL VALUE_(9, 0x0)
+#define CYGHWR_HAL_LM3S_AC_CTLx_ASRCP_PIN_VAL_C0 VALUE_(9, 0x1)
+#define CYGHWR_HAL_LM3S_AC_CTLx_ASRCP_IVOLTREF VALUE_(9, 0x2)
+
+#endif // CYGHWR_HAL_LM3S_AC_CHAN
+
+
+//=============================================================================
+// QEI register definitions.
+
+#ifdef CYGHWR_HAL_LM3S_QEI_CHAN
+
+#define CYGHWR_HAL_LM3S_QEI_CTL 0x000
+#define CYGHWR_HAL_LM3S_QEI_STAT 0x004
+#define CYGHWR_HAL_LM3S_QEI_POS 0x008
+#define CYGHWR_HAL_LM3S_QEI_MAXPOS 0x00c
+#define CYGHWR_HAL_LM3S_QEI_LOAD 0x010
+#define CYGHWR_HAL_LM3S_QEI_TIME 0x014
+#define CYGHWR_HAL_LM3S_QEI_COUNT 0x018
+#define CYGHWR_HAL_LM3S_QEI_SPEED 0x01c
+#define CYGHWR_HAL_LM3S_QEI_INTEN 0x020
+#define CYGHWR_HAL_LM3S_QEI_RIS 0x024
+#define CYGHWR_HAL_LM3S_QEI_ISC 0x028
+
+// CTL bits
+#define CYGHWR_HAL_LM3S_QEI_CTL_EN BIT_(0)
+#define CYGHWR_HAL_LM3S_QEI_CTL_SWAP BIT_(1)
+#define CYGHWR_HAL_LM3S_QEI_CTL_SIGMODE BIT_(2)
+#define CYGHWR_HAL_LM3S_QEI_CTL_CAPMODE BIT_(3)
+#define CYGHWR_HAL_LM3S_QEI_CTL_RESMODE BIT_(4)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELEN BIT_(5)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_1 VALUE_(6, 0x0)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_2 VALUE_(6, 0x1)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_4 VALUE_(6, 0x2)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_8 VALUE_(6, 0x3)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_16 VALUE_(6, 0x4)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_32 VALUE_(6, 0x5)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_64 VALUE_(6, 0x6)
+#define CYGHWR_HAL_LM3S_QEI_CTL_VELDIV_128 VALUE_(6, 0x7)
+#define CYGHWR_HAL_LM3S_QEI_CTL_INVA BIT_(9)
+#define CYGHWR_HAL_LM3S_QEI_CTL_INVB BIT_(10)
+#define CYGHWR_HAL_LM3S_QEI_CTL_INVI BIT_(11)
+#define CYGHWR_HAL_LM3S_QEI_CTL_SATLLEN BIT_(12)
+
+// STAT bits
+#define CYGHWR_HAL_LM3S_QEI_STAT_ERR BIT_(0)
+#define CYGHWR_HAL_LM3S_QEI_STAT_DIR BIT_(1)
+
+// INTEN bits
+#define CYGHWR_HAL_LM3S_QEI_INTEN_INTINDEX BIT_(0)
+#define CYGHWR_HAL_LM3S_QEI_INTEN_INTTIMER BIT_(1)
+#define CYGHWR_HAL_LM3S_QEI_INTEN_INTDIR BIT_(2)
+#define CYGHWR_HAL_LM3S_QEI_INTEN_INTERROR BIT_(3)
+
+// RIS bits
+#define CYGHWR_HAL_LM3S_QEI_RIS_INTINDEX BIT_(0)
+#define CYGHWR_HAL_LM3S_QEI_RIS_INTTIMER BIT_(1)
+#define CYGHWR_HAL_LM3S_QEI_RIS_INTDIR BIT_(2)
+#define CYGHWR_HAL_LM3S_QEI_RIS_INTERROR BIT_(3)
+
+// ISC bits
+#define CYGHWR_HAL_LM3S_QEI_ISC_INTINDEX BIT_(0)
+#define CYGHWR_HAL_LM3S_QEI_ISC_INTTIMER BIT_(1)
+#define CYGHWR_HAL_LM3S_QEI_ISC_INTDIR BIT_(2)
+#define CYGHWR_HAL_LM3S_QEI_ISC_INTERROR BIT_(3)
+
+#endif // CYGHWR_HAL_LM3S_QEI_CHAN
+
+
+//=============================================================================
+// Flash controller
+
+#define CYGHWR_HAL_LM3S_FMC_FMA 0x000
+#define CYGHWR_HAL_LM3S_FMC_FMD 0x004
+#define CYGHWR_HAL_LM3S_FMC_FMC 0x008
+#define CYGHWR_HAL_LM3S_FMC_FCRIS 0x00c
+#define CYGHWR_HAL_LM3S_FMC_FCIM 0x010
+#define CYGHWR_HAL_LM3S_FMC_FCMISC 0x014
+
+// Key value
+#define CYGHWR_HAL_LM3S_FMC_WRKEY 0xA4420000
+
+// FMC bits
+#define CYGHWR_HAL_LM3S_FMC_FMC_WRITE BIT_(0)
+#define CYGHWR_HAL_LM3S_FMC_FMC_ERASE BIT_(1)
+#define CYGHWR_HAL_LM3S_FMC_FMC_MERASE BIT_(2)
+#define CYGHWR_HAL_LM3S_FMC_FMC_COMT BIT_(3)
+
+// RIS bits
+#define CYGHWR_HAL_LM3S_FMC_FCRIS_ARIS BIT_(0)
+#define CYGHWR_HAL_LM3S_FMC_FCRIS_PRIS BIT_(1)
+
+// IM bits
+#define CYGHWR_HAL_LM3S_FMC_FCIM_AMASK BIT_(0)
+#define CYGHWR_HAL_LM3S_FMC_FCIM_PMASK BIT_(1)
+
+// MISC bits
+#define CYGHWR_HAL_LM3S_FMC_FCMISC_AMASK BIT_(0)
+#define CYGHWR_HAL_LM3S_FMC_FCMISC_PMASK BIT_(0)
+
+
+//-----------------------------------------------------------------------------
+#endif // CYGONCE_HAL_VAR_IO_H
+// EOF of var_io.h
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/include/variant.inc b/ecos/packages/hal/cortexm/lm3s/var/current/include/variant.inc
new file mode 100644
index 0000000..415ebf5
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/include/variant.inc
@@ -0,0 +1,54 @@
+/*==========================================================================
+//
+// variant.inc
+//
+// Variant specific asm definitions
+//
+//==========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2010 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2010-11-23
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+//========================================================================*/
+
+#include <pkgconf/hal_cortexm_lm3s.h>
+
+//==========================================================================
+// EOF variant.inc
+
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/src/hal_diag.c b/ecos/packages/hal/cortexm/lm3s/var/current/src/hal_diag.c
new file mode 100644
index 0000000..2ddb570
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/src/hal_diag.c
@@ -0,0 +1,406 @@
+//=============================================================================
+//
+// hal_diag.c
+//
+// HAL diagnostic output code
+//
+//=============================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2008, 2010
+// 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): original: nickg, ccoutand: updated for Stellaris HAL
+// Date: 2011-01-18
+// Purpose: HAL diagnostic output
+// Description: Implementations of HAL diagnostic output support.
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+#include <pkgconf/hal.h>
+#include CYGBLD_HAL_PLATFORM_H
+
+#include <cyg/infra/cyg_type.h> // Base types
+#include <cyg/infra/cyg_trac.h> // Tracing
+
+#include <cyg/hal/hal_arch.h> // SAVE/RESTORE GP macros
+#include <cyg/hal/hal_io.h> // IO macros
+#include <cyg/hal/hal_if.h> // interface API
+#include <cyg/hal/hal_intr.h> // HAL_ENABLE/MASK/UNMASK_INTERRUPTS
+#include <cyg/hal/hal_misc.h> // Helper functions
+#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED
+
+#include <cyg/hal/var_io.h> // USART registers
+
+//-----------------------------------------------------------------------------
+typedef struct {
+ cyg_uint32 uart;
+ CYG_ADDRESS base;
+ cyg_int32 msec_timeout;
+ int isr_vector;
+ cyg_uint32 rxpin;
+ cyg_uint32 txpin;
+ cyg_uint32 baud_rate;
+ int irq_state;
+} channel_data_t;
+
+static channel_data_t lm3s_ser_channels[] = {
+#if CYGINT_HAL_CORTEXM_LM3S_UART0>0
+ {0, CYGHWR_HAL_LM3S_UART0, 1000, CYGNUM_HAL_INTERRUPT_UART0,
+ CYGHWR_HAL_LM3S_UART0_RX, CYGHWR_HAL_LM3S_UART0_TX},
+#endif
+#if CYGINT_HAL_CORTEXM_LM3S_UART1>0
+ {1, CYGHWR_HAL_LM3S_UART1, 1000, CYGNUM_HAL_INTERRUPT_UART1,
+ CYGHWR_HAL_LM3S_UART1_RX, CYGHWR_HAL_LM3S_UART1_TX},
+#endif
+};
+
+//-----------------------------------------------------------------------------
+
+static void
+hal_lm3s_serial_init_channel(void *__ch_data)
+{
+ channel_data_t *chan = (channel_data_t *) __ch_data;
+ CYG_ADDRESS base = chan->base;
+ cyg_uint32 lcrh,
+ ctl;
+
+ // Disable UART
+ HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_CTL, ctl);
+ ctl &= ~(CYGHWR_HAL_LM3S_UART_CTL_UARTEN |
+ CYGHWR_HAL_LM3S_UART_CTL_TXE | CYGHWR_HAL_LM3S_UART_CTL_RXE);
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_CTL, ctl);
+
+ // Enable the PIO lines for the serial channel
+ CYGHWR_HAL_LM3S_GPIO_SET(chan->rxpin);
+ CYGHWR_HAL_LM3S_GPIO_SET(chan->txpin);
+
+ // Set up Baud rate
+ chan->baud_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD;
+ hal_lm3s_uart_setbaud(base, chan->baud_rate);
+
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_FR, 0);
+
+ // 8 bits - 1 stop - Enable FIFO
+ lcrh = CYGHWR_HAL_LM3S_UART_LCRH_WLEN(3) | CYGHWR_HAL_LM3S_UART_LCRH_FEN;
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_LCRH, lcrh);
+
+ // Enable the UART
+ ctl = (CYGHWR_HAL_LM3S_UART_CTL_UARTEN |
+ CYGHWR_HAL_LM3S_UART_CTL_TXE | CYGHWR_HAL_LM3S_UART_CTL_RXE);
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_CTL, ctl);
+}
+
+void
+hal_lm3s_serial_putc(void *__ch_data, char c)
+{
+ CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base;
+ cyg_uint32 sr;
+
+ CYGARC_HAL_SAVE_GP();
+
+ do {
+ HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_FR, sr);
+ } while ((sr & CYGHWR_HAL_LM3S_UART_FR_TXFE) == 0);
+
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_DR, c);
+
+ CYGARC_HAL_RESTORE_GP();
+}
+
+static cyg_bool
+hal_lm3s_serial_getc_nonblock(void *__ch_data, cyg_uint8 *ch)
+{
+ CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base;
+ cyg_uint32 fr;
+ cyg_uint32 c;
+
+ CYGARC_HAL_SAVE_GP();
+
+ HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_FR, fr);
+
+ if ((fr & CYGHWR_HAL_LM3S_UART_FR_RXFE))
+ return false;
+
+ HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_DR, c);
+
+ *ch = (cyg_uint8)c;
+
+ CYGARC_HAL_RESTORE_GP();
+
+ return true;
+}
+
+cyg_uint8
+hal_lm3s_serial_getc(void *__ch_data)
+{
+ cyg_uint8 ch;
+
+ CYGARC_HAL_SAVE_GP();
+
+ while (!hal_lm3s_serial_getc_nonblock(__ch_data, &ch))
+ continue;
+
+ CYGARC_HAL_RESTORE_GP();
+
+ return ch;
+}
+
+//=============================================================================
+// Virtual vector HAL diagnostics
+
+#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG)
+
+static void
+hal_lm3s_serial_write(void *__ch_data, const cyg_uint8 *__buf,
+ cyg_uint32 __len)
+{
+ CYGARC_HAL_SAVE_GP();
+
+ while (__len-- > 0)
+ hal_lm3s_serial_putc(__ch_data, *__buf++);
+
+ CYGARC_HAL_RESTORE_GP();
+}
+
+static void
+hal_lm3s_serial_read(void *__ch_data, cyg_uint8 *__buf, cyg_uint32 __len)
+{
+ CYGARC_HAL_SAVE_GP();
+
+ while (__len-- > 0)
+ *__buf++ = hal_lm3s_serial_getc(__ch_data);
+
+ CYGARC_HAL_RESTORE_GP();
+}
+
+cyg_bool
+hal_lm3s_serial_getc_timeout(void *__ch_data, cyg_uint8 *ch)
+{
+ int delay_count;
+ channel_data_t *chan = (channel_data_t *) __ch_data;
+ cyg_bool res;
+
+ CYGARC_HAL_SAVE_GP();
+
+ delay_count = chan->msec_timeout * 100; // delay in 10 us steps
+
+ for (;;) {
+ res = hal_lm3s_serial_getc_nonblock(__ch_data, ch);
+ if (res || 0 == delay_count--)
+ break;
+
+ CYGACC_CALL_IF_DELAY_US(10);
+ }
+
+ CYGARC_HAL_RESTORE_GP();
+
+ return res;
+}
+
+static int
+hal_lm3s_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...)
+{
+ channel_data_t *chan = (channel_data_t *) __ch_data;
+ CYG_ADDRESS base = ((channel_data_t *) __ch_data)->base;
+ int ret = 0;
+ cyg_uint32 im;
+
+ va_list ap;
+
+ CYGARC_HAL_SAVE_GP();
+
+ va_start(ap, __func);
+
+ switch (__func) {
+ case __COMMCTL_IRQ_ENABLE:
+ chan->irq_state = 1;
+ HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector);
+ HAL_INTERRUPT_UNMASK(chan->isr_vector);
+ HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_IM, im);
+ im |= CYGHWR_HAL_LM3S_UART_IM_RXIM;
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_IM, im);
+ break;
+ case __COMMCTL_IRQ_DISABLE:
+ ret = chan->irq_state;
+ chan->irq_state = 0;
+ HAL_INTERRUPT_MASK(chan->isr_vector);
+ HAL_READ_UINT32(base + CYGHWR_HAL_LM3S_UART_IM, im);
+ im &= ~CYGHWR_HAL_LM3S_UART_IM_RXIM;
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_IM, im);
+ break;
+ case __COMMCTL_DBG_ISR_VECTOR:
+ ret = chan->isr_vector;
+ break;
+ case __COMMCTL_SET_TIMEOUT:
+ {
+ va_list ap;
+
+ va_start(ap, __func);
+
+ ret = chan->msec_timeout;
+ chan->msec_timeout = va_arg(ap, cyg_uint32);
+
+ va_end(ap);
+ }
+ case __COMMCTL_GETBAUD:
+ ret = chan->baud_rate;
+ break;
+ case __COMMCTL_SETBAUD:
+ chan->baud_rate = va_arg(ap, cyg_int32);
+ // Should we verify this value here?
+ hal_lm3s_uart_setbaud(base, chan->baud_rate);
+ ret = 0;
+ break;
+ default:
+ break;
+ }
+
+ va_end(ap);
+
+ CYGARC_HAL_RESTORE_GP();
+
+ return ret;
+}
+
+static int
+hal_lm3s_serial_isr(void *__ch_data, int *__ctrlc,
+ CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
+{
+ channel_data_t *chan = (channel_data_t *) __ch_data;
+ cyg_uint8 ch;
+
+ CYGARC_HAL_SAVE_GP();
+
+ *__ctrlc = 0;
+
+ if (hal_lm3s_serial_getc_nonblock(__ch_data, &ch)) {
+ if (cyg_hal_is_break((char *)&ch, 1))
+ *__ctrlc = 1;
+ }
+
+ HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector);
+
+ CYGARC_HAL_RESTORE_GP();
+
+ return 1;
+}
+
+static void
+hal_lm3s_serial_init(void)
+{
+ hal_virtual_comm_table_t *comm;
+ int cur;
+ int i;
+
+ cur =
+ CYGACC_CALL_IF_SET_CONSOLE_COMM
+ (CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
+
+ for (i = 0; i < CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS; i++) {
+ hal_lm3s_serial_init_channel(&lm3s_ser_channels[i]);
+
+ CYGACC_CALL_IF_SET_CONSOLE_COMM(i);
+ comm = CYGACC_CALL_IF_CONSOLE_PROCS();
+ CYGACC_COMM_IF_CH_DATA_SET(*comm, &lm3s_ser_channels[i]);
+ CYGACC_COMM_IF_WRITE_SET(*comm, hal_lm3s_serial_write);
+ CYGACC_COMM_IF_READ_SET(*comm, hal_lm3s_serial_read);
+ CYGACC_COMM_IF_PUTC_SET(*comm, hal_lm3s_serial_putc);
+ CYGACC_COMM_IF_GETC_SET(*comm, hal_lm3s_serial_getc);
+ CYGACC_COMM_IF_CONTROL_SET(*comm, hal_lm3s_serial_control);
+ CYGACC_COMM_IF_DBG_ISR_SET(*comm, hal_lm3s_serial_isr);
+ CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, hal_lm3s_serial_getc_timeout);
+ }
+
+ // Restore original console
+ CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
+
+# if (CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD != CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD)
+ // Set debug channel baud rate if different
+ lm3s_ser_channels[CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL]->baud_rate =
+ CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD;
+ update_baud_rate(&lm3s_ser_channels
+ [CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL]);
+# endif
+
+}
+
+void
+cyg_hal_plf_comms_init(void)
+{
+ static int initialized = 0;
+
+ if (initialized)
+ return;
+
+ initialized = 1;
+
+ hal_lm3s_serial_init();
+}
+
+#endif // ifdef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG
+
+
+//=============================================================================
+// Non-Virtual vector HAL diagnostics
+
+#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG)
+
+void
+hal_lm3s_diag_init(void)
+{
+ hal_lm3s_serial_init(&lm3s_ser_channels
+ [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL]);
+}
+
+void
+hal_lm3s_diag_putc(char c)
+{
+ hal_lm3s_serial_putc(&lm3s_ser_channels
+ [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL], c);
+}
+
+cyg_uint8
+hal_lm3s_diag_getc(void)
+{
+ return
+ hal_lm3s_serial_getc(&lm3s_ser_channels
+ [CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL]);
+}
+
+#endif // ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG
+
+//-----------------------------------------------------------------------------
+// EOF hal_diag.c
diff --git a/ecos/packages/hal/cortexm/lm3s/var/current/src/lm3s_misc.c b/ecos/packages/hal/cortexm/lm3s/var/current/src/lm3s_misc.c
new file mode 100644
index 0000000..291b3e5
--- /dev/null
+++ b/ecos/packages/hal/cortexm/lm3s/var/current/src/lm3s_misc.c
@@ -0,0 +1,328 @@
+//==========================================================================
+//
+// lm3s_misc.c
+//
+// Stellaris Cortex-M3 variant HAL functions
+//
+//==========================================================================
+// ####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 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
+// Software Foundation; either version 2 or (at your option) any later
+// version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with eCos; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// As a special exception, if other files instantiate templates or use
+// macros or inline functions from this file, or you compile this file
+// and link it with other works to produce a work based on this file,
+// this file does not by itself cause the resulting work to be covered by
+// the GNU General Public License. However the source code for this file
+// must still be made available in accordance with section (3) of the GNU
+// General Public License v2.
+//
+// This exception does not invalidate any other reasons why a work based
+// on this file might be covered by the GNU General Public License.
+// -------------------------------------------
+// ####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): ccoutand
+// Date: 2011-01-18
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <pkgconf/hal.h>
+
+#ifdef CYGPKG_KERNEL
+# include <pkgconf/kernel.h>
+#endif
+
+#include <cyg/infra/diag.h>
+#include <cyg/infra/cyg_type.h>
+#include <cyg/infra/cyg_trac.h> // Tracing macros
+#include <cyg/infra/cyg_ass.h> // Assertion macros
+
+#include <cyg/hal/hal_arch.h>
+#include <cyg/hal/hal_intr.h>
+#include <cyg/hal/hal_if.h>
+
+//==========================================================================
+// Initialization
+//
+__externC void hal_start_clocks(void);
+
+// Clock computation must be done per Variant basis
+cyg_uint32 hal_cortexm_systick_clock;
+cyg_uint32 hal_lm3s_sysclk;
+
+
+void
+hal_variant_init(void)
+{
+#if !defined(CYG_HAL_STARTUP_RAM)
+ hal_start_clocks();
+#endif
+
+ // All LM3S devices use PORTA 0/1 for UART0
+#if CYGINT_HAL_CORTEXM_LM3S_UART0>0
+ CYGHWR_HAL_LM3S_PERIPH_SET(CYGHWR_HAL_LM3S_P_UART0, 1);
+ CYGHWR_HAL_LM3S_PERIPH_SET(CYGHWR_HAL_LM3S_P_UART0_GPIO, 1);
+#endif
+
+#if CYGINT_HAL_CORTEXM_LM3S_UART1>0
+
+# ifdef CYGHWR_HAL_LM3S_P_UART1_GPIO
+ CYGHWR_HAL_LM3S_PERIPH_SET(CYGHWR_HAL_LM3S_P_UART1, 1);
+ CYGHWR_HAL_LM3S_PERIPH_SET(CYGHWR_HAL_LM3S_P_UART1_GPIO, 1);
+# else
+# error "Variant/Platform does not specify UART1 GPIO Port"
+# endif
+
+#endif
+
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+ hal_if_init();
+#endif
+}
+
+//==========================================================================
+// GPIO support
+//
+// These functions provide configuration and IO for GPIO pins.
+//
+
+__externC void
+hal_lm3s_gpio_set(cyg_uint32 pin)
+{
+ cyg_uint32 port = CYGHWR_HAL_LM3S_GPIO_PORT(pin);
+ cyg_uint32 bit = (1 << CYGHWR_HAL_LM3S_GPIO_BIT(pin));
+ cyg_uint32 cm = CYGHWR_HAL_LM3S_GPIO_CFG(pin);
+ cyg_uint32 mode = CYGHWR_HAL_LM3S_GPIO_MODE(pin);
+ cyg_uint32 irq = CYGHWR_HAL_LM3S_GPIO_IRQ(pin);
+ cyg_uint32 st = CYGHWR_HAL_LM3S_GPIO_STRENGTH(pin);
+ cyg_uint32 reg,
+ dir,
+ im,
+ dr2r,
+ dr4r,
+ dr8r;
+
+ if (pin == CYGHWR_HAL_LM3S_GPIO_NONE)
+ return;
+
+ /*
+ * Handle IO mode settings
+ */
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_AFSEL, reg);
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DIR, dir);
+
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_AFSEL, (reg & ~(bit)));
+ if (mode == CYGHWR_HAL_LM3S_GPIO_MODE_IN)
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DIR, (dir & ~(bit)));
+ else if (mode == CYGHWR_HAL_LM3S_GPIO_MODE_OUT)
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DIR, (dir | bit));
+ else
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_AFSEL, (reg | bit));
+
+ /*
+ * Handle IO configuration
+ */
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_ODR, reg);
+ if (cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP ||
+ cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLUP ||
+ cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLDOWN) {
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_ODR, (reg | bit));
+ } else
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_ODR, (reg & ~(bit)));
+
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PUR, reg);
+ if (cm == CYGHWR_HAL_LM3S_GPIO_CNF_PULLUP ||
+ cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLUP) {
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PUR, (reg | bit));
+ } else
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PUR, (reg & ~(bit)));
+
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PDR, reg);
+ if (cm == CYGHWR_HAL_LM3S_GPIO_CNF_PULLDOWN ||
+ cm == CYGHWR_HAL_LM3S_GPIO_CNF_OP_PULLDOWN) {
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PDR, (reg | bit));
+ } else
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_PDR, (reg & ~(bit)));
+
+ /*
+ * Handle IO strength
+ */
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR2R, dr2r);
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR4R, dr4r);
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR8R, dr8r);
+ if (st == CYGHWR_HAL_LM3S_GPIO_STRENGTH_2_MA) {
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR4R, (dr4r & ~(bit)));
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR8R, (dr8r & ~(bit)));
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR2R, (dr2r | bit));
+ } else if (st == CYGHWR_HAL_LM3S_GPIO_STRENGTH_4_MA) {
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR2R, (dr2r & ~(bit)));
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR8R, (dr8r & ~(bit)));
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR4R, (dr4r | bit));
+ } else if (st == CYGHWR_HAL_LM3S_GPIO_STRENGTH_8_MA) {
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR2R, (dr2r & ~(bit)));
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR4R, (dr4r & ~(bit)));
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_DR8R, (dr8r | bit));
+ }
+
+ /*
+ * Handle interrupt settings
+ */
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IM, im);
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IM, (im & ~(bit)));
+ if (irq != CYGHWR_HAL_LM3S_GPIO_IRQ_DISABLE) {
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IS, reg);
+
+ if (irq == CYGHWR_HAL_LM3S_GPIO_IRQ_LOW_LEVEL ||
+ irq == CYGHWR_HAL_LM3S_GPIO_IRQ_HIGH_LEVEL)
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IS, (reg | bit));
+ else
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IS, (reg & ~(bit)));
+
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IBE, reg);
+ if (irq == CYGHWR_HAL_LM3S_GPIO_IRQ_BOTH_EDGES) {
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IBE, (reg | bit));
+ } else {
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IBE, (reg & ~(bit)));
+
+ HAL_READ_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IEV, reg);
+ if (irq == CYGHWR_HAL_LM3S_GPIO_IRQ_LOW_LEVEL ||
+ irq == CYGHWR_HAL_LM3S_GPIO_IRQ_FALLING_EDGE)
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IEV,
+ (reg & ~(bit)));
+ else
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IEV,
+ (reg | bit));
+ }
+
+ HAL_WRITE_UINT32(port + CYGHWR_HAL_LM3S_GPIO_IM, (im | bit));
+ }
+}
+
+__externC void
+hal_lm3s_gpio_out(cyg_uint32 pin, int val)
+{
+ cyg_uint32 port = CYGHWR_HAL_LM3S_GPIO_PORT(pin);
+ int bit = (1 << CYGHWR_HAL_LM3S_GPIO_BIT(pin));
+
+ port += (CYGHWR_HAL_LM3S_GPIO_DATA + (bit << 2));
+
+ HAL_WRITE_UINT32(port, (val ? bit : 0));
+}
+
+__externC void
+hal_lm3s_gpio_in(cyg_uint32 pin, int *val)
+{
+ cyg_uint32 port = CYGHWR_HAL_LM3S_GPIO_PORT(pin);
+ int bit = (1 << CYGHWR_HAL_LM3S_GPIO_BIT(pin));
+ cyg_uint32 pd;
+
+ port += (CYGHWR_HAL_LM3S_GPIO_DATA + (bit << 2));
+
+ HAL_READ_UINT32(port, pd);
+ *val = pd;
+}
+
+
+//==========================================================================
+// Peripheral support
+//
+
+__externC void
+hal_lm3s_periph_set(cyg_uint32 periph, cyg_uint32 on_off)
+{
+ cyg_uint32 reg;
+
+ if (CYGHWR_HAL_LM3S_PERIPH_GC0 & periph) {
+ HAL_READ_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC0, reg);
+ if (on_off)
+ reg |= (periph & ~CYGHWR_HAL_LM3S_PERIPH_GC0);
+ else
+ reg &= ~(periph & ~CYGHWR_HAL_LM3S_PERIPH_GC0);
+ HAL_WRITE_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC0, reg);
+ }
+
+ if (CYGHWR_HAL_LM3S_PERIPH_GC1 & periph) {
+ HAL_READ_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC1, reg);
+ if (on_off)
+ reg |= (periph & ~CYGHWR_HAL_LM3S_PERIPH_GC1);
+ else
+ reg &= ~(periph & ~CYGHWR_HAL_LM3S_PERIPH_GC1);
+ HAL_WRITE_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC1, reg);
+ }
+
+ if (CYGHWR_HAL_LM3S_PERIPH_GC2 & periph) {
+ HAL_READ_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC2, reg);
+ if (on_off)
+ reg |= (periph & ~CYGHWR_HAL_LM3S_PERIPH_GC2);
+ else
+ reg &= ~(periph & ~CYGHWR_HAL_LM3S_PERIPH_GC2);
+ HAL_WRITE_UINT32(CYGHWR_HAL_LM3S_SC + CYGHWR_HAL_LM3S_SC_RCGC2, reg);
+ }
+
+}
+
+
+//==========================================================================
+// UART baud rate
+//
+// Set the baud rate divider of a UART based on the requested rate and
+// the current APB clock settings.
+//
+
+__externC void
+hal_lm3s_uart_setbaud(cyg_uint32 base, cyg_uint32 baud)
+{
+ cyg_uint32 int_div,
+ frac_div;
+
+ int_div = ((((hal_cortexm_systick_clock << 3) / baud) + 1) >> 1);
+
+ frac_div = int_div % 64;
+ int_div = int_div >> 6;
+
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_IBRD, int_div);
+ HAL_WRITE_UINT32(base + CYGHWR_HAL_LM3S_UART_FBRD, frac_div);
+}
+
+
+//==========================================================================
+// I2C clock rate
+//
+__externC cyg_uint32
+hal_lm3s_i2c_clock(void)
+{
+ return hal_lm3s_sysclk;
+}
+
+//==========================================================================
+// Timer clock rate
+//
+__externC cyg_uint32
+hal_lm3s_timer_clock(void)
+{
+ return hal_lm3s_sysclk;
+}
+
+//==========================================================================
+// EOF lm3s_misc_misc.c