[PATCH] BSP for TMS570LS31x Hercules Development Kit from TI (TMS570LS3137)

Daniel Gutson daniel.gutson at tallertechnologies.com
Wed Aug 13 21:38:56 UTC 2014


On Wed, Aug 13, 2014 at 4:48 PM, Premysl Houdek <kom541000 at gmail.com> wrote:
> Included variants:
>   tms570ls3137_hdk_intram - place code and data into internal SRAM
>   tms570ls3137_hdk_sdram - place code into external SDRAM and data to SRAM
>   tms570ls3137_hdk - variant prepared for stand-alone RTEMS aplication
>                       stored and running directly from flash. Not working yet.
>
> Chip initialization code not included in BSP.
> External startup generated by TI's HalCoGen was used    for
> testing and debugging.
>
> More information about TMS570 BSP can be found at
>   http://www.rtems.org/wiki/index.php/Tms570
> ---
>  c/src/lib/libbsp/arm/tms570/Makefile.am            |  148 ++++++
>  c/src/lib/libbsp/arm/tms570/README                 |   64 +++
>  c/src/lib/libbsp/arm/tms570/bsp_specs              |   13 +
>  c/src/lib/libbsp/arm/tms570/clock/tms570-rti.c     |  205 ++++++++
>  c/src/lib/libbsp/arm/tms570/configure.ac           |   45 ++
>  .../lib/libbsp/arm/tms570/console/printk-support.c |   68 +++
>  c/src/lib/libbsp/arm/tms570/console/tms570-sci.c   |  546 ++++++++++++++++++++
>  c/src/lib/libbsp/arm/tms570/include/bsp.h          |  101 ++++
>  c/src/lib/libbsp/arm/tms570/include/irq.h          |  134 +++++
>  c/src/lib/libbsp/arm/tms570/include/tms570-pom.h   |  101 ++++
>  c/src/lib/libbsp/arm/tms570/include/tms570-rti.h   |   95 ++++
>  .../libbsp/arm/tms570/include/tms570-sci-driver.h  |   39 ++
>  c/src/lib/libbsp/arm/tms570/include/tms570-sci.h   |   75 +++
>  c/src/lib/libbsp/arm/tms570/include/tms570-vim.h   |   74 +++
>  c/src/lib/libbsp/arm/tms570/include/tms570.h       |   29 ++
>  c/src/lib/libbsp/arm/tms570/irq/irq.c              |  182 +++++++
>  .../make/custom/tms570ls3137_hdk-testsuite.tcfg    |   19 +
>  .../arm/tms570/make/custom/tms570ls3137_hdk.cfg    |   19 +
>  .../tms570/make/custom/tms570ls3137_hdk_intram.cfg |   20 +
>  .../tms570/make/custom/tms570ls3137_hdk_sdram.cfg  |   19 +
>  c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c       |  100 ++++
>  c/src/lib/libbsp/arm/tms570/startup/bspreset.c     |   37 ++
>  c/src/lib/libbsp/arm/tms570/startup/bspstart.c     |   46 ++
>  .../lib/libbsp/arm/tms570/startup/bspstarthooks.c  |   42 ++
>  .../arm/tms570/startup/linkcmds.tms570ls3137_hdk   |   27 +
>  .../startup/linkcmds.tms570ls3137_hdk_intram       |   28 +
>  .../tms570/startup/linkcmds.tms570ls3137_hdk_sdram |   27 +
>  27 files changed, 2303 insertions(+)
>  create mode 100644 c/src/lib/libbsp/arm/tms570/Makefile.am
>  create mode 100644 c/src/lib/libbsp/arm/tms570/README
>  create mode 100644 c/src/lib/libbsp/arm/tms570/bsp_specs
>  create mode 100644 c/src/lib/libbsp/arm/tms570/clock/tms570-rti.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/configure.ac
>  create mode 100644 c/src/lib/libbsp/arm/tms570/console/printk-support.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/console/tms570-sci.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/include/bsp.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/include/irq.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/include/tms570-pom.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/include/tms570-rti.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/include/tms570-sci-driver.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/include/tms570-sci.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/include/tms570-vim.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/include/tms570.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/irq/irq.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk-testsuite.tcfg
>  create mode 100644 c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk.cfg
>  create mode 100644 c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_intram.cfg
>  create mode 100644 c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_sdram.cfg
>  create mode 100644 c/src/lib/libbsp/arm/tms570/network/tms570-ethernet.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/network/tms570-ethernet.h
>  create mode 100644 c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/startup/bspreset.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/startup/bspstart.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/startup/bspstarthooks.c
>  create mode 100644 c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk
>  create mode 100644 c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk_intram
>  create mode 100644 c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk_sdram
>
> diff --git a/c/src/lib/libbsp/arm/tms570/Makefile.am b/c/src/lib/libbsp/arm/tms570/Makefile.am
> new file mode 100644
> index 0000000..6ded6af
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/Makefile.am
> @@ -0,0 +1,148 @@
> +##
> +#
> +# @file makefile.am
> +#
> +# @brief Makefile of LibBSP for the TMS570 boards.
> +#
> +
> +ACLOCAL_AMFLAGS = -I ../../../../aclocal
> +
> +include $(top_srcdir)/../../../../automake/compile.am
> +
> +include_bspdir = $(includedir)/bsp
> +
> +dist_project_lib_DATA = bsp_specs
> +
> +
> +# ----------------------------
> +# ------  Headers
> +# ----------------------------
> +
> +include_HEADERS = include/bsp.h
> +
> +nodist_include_HEADERS = ../../shared/include/coverhd.h
> +nodist_include_HEADERS += include/bspopts.h
> +
> +nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h
> +
> +include_bsp_HEADERS =
> +include_bsp_HEADERS += ../../shared/include/utility.h
> +include_bsp_HEADERS += ../../shared/include/irq-generic.h
> +include_bsp_HEADERS += ../../shared/include/irq-info.h
> +include_bsp_HEADERS += ../../shared/include/stackalloc.h
> +include_bsp_HEADERS += ../../shared/include/uart-output-char.h
> +include_bsp_HEADERS += ../../shared/tod.h
> +include_bsp_HEADERS += ../shared/include/start.h
> +include_bsp_HEADERS += include/tms570.h
> +include_bsp_HEADERS += include/tms570-sci.h
> +include_bsp_HEADERS += include/irq.h
> +include_bsp_HEADERS += include/tms570-rti.h
> +include_bsp_HEADERS += include/tms570-vim.h
> +include_bsp_HEADERS += include/tms570-pom.h
> +include_bsp_HEADERS += include/tms570-sci-driver.h
> +
> +include_HEADERS += ../../shared/include/tm27.h
> +
> +
> +# ----------------------------
> +# ------  Data
> +# ----------------------------
> +
> +noinst_LIBRARIES = libbspstart.a
> +
> +libbspstart_a_SOURCES = ../shared/start/start.S
> +
> +project_lib_DATA = start.$(OBJEXT)
> +project_lib_DATA += startup/linkcmds
> +
> +EXTRA_DIST =
> +EXTRA_DIST += startup/linkcmds.tms570ls3137_hdk
> +EXTRA_DIST += startup/linkcmds.tms570ls3137_hdk_sdram
> +EXTRA_DIST += startup/linkcmds.tms570ls3137_hdk_intram
> +
> +
> +# ----------------------------
> +# ------  LibBSP
> +# ----------------------------
> +
> +noinst_LIBRARIES += libbsp.a
> +
> +libbsp_a_SOURCES =
> +libbsp_a_CPPFLAGS =
> +libbsp_a_LIBADD =
> +
> +# Shared
> +libbsp_a_SOURCES += ../../shared/bootcard.c
> +libbsp_a_SOURCES += ../../shared/bspclean.c
> +libbsp_a_SOURCES += ../../shared/bspgetworkarea.c
> +libbsp_a_SOURCES += ../../shared/bsplibc.c
> +libbsp_a_SOURCES += ../../shared/bsppost.c
> +libbsp_a_SOURCES += ../../shared/bsppredriverhook.c
> +libbsp_a_SOURCES += ../../shared/gnatinstallhandler.c
> +libbsp_a_SOURCES += ../../shared/sbrk.c
> +libbsp_a_SOURCES += ../../shared/src/stackalloc.c
> +libbsp_a_SOURCES += ../../shared/src/uart-output-char.c
> +
> +# Startup
> +libbsp_a_SOURCES += ../shared/startup/bsp-start-memcpy.S
> +libbsp_a_SOURCES += startup/bspreset.c
> +libbsp_a_SOURCES += startup/bspstart.c
> +
> +# POM
> +libbsp_a_SOURCES += pom/tms570-pom.c
> +
> +# IRQ
> +libbsp_a_SOURCES += ../../shared/src/irq-default-handler.c
> +libbsp_a_SOURCES += ../../shared/src/irq-generic.c
> +libbsp_a_SOURCES += ../../shared/src/irq-info.c
> +libbsp_a_SOURCES += ../../shared/src/irq-legacy.c
> +libbsp_a_SOURCES += ../../shared/src/irq-server.c
> +libbsp_a_SOURCES += ../../shared/src/irq-shell.c
> +libbsp_a_SOURCES += irq/irq.c
> +
> +# Console
> +libbsp_a_SOURCES += ../../shared/console-termios.c
> +libbsp_a_SOURCES += console/printk-support.c
> +libbsp_a_SOURCES += console/tms570-sci.c
> +
> +
> +# Clock
> +libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
> +libbsp_a_SOURCES += clock/tms570-rti.c
> +
> +# RTC
> +
> +# GPIO
> +
> +# Timer
> +
> +# Benchmark Timer
> +
> +# Misc
> +
> +# Watchdog
> +
> +# Start hooks
> +libbsp_a_SOURCES += startup/bspstarthooks.c
> +
> +# Network
> +
> +if HAS_NETWORKING
> +
> +noinst_PROGRAMS = network.rel
> +
> +network_rel_CPPFLAGS = $(AM_CPPFLAGS) -D__INSIDE_RTEMS_BSD_TCPIP_STACK__ -D__BSD_VISIBLE
> +network_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
> +
> +libbsp_a_LIBADD += network.rel
> +
> +endif
> +
> +# ----------------------------
> +# ------  Special Rules
> +# ----------------------------
> +
> +DISTCLEANFILES = include/bspopts.h
> +
> +include $(srcdir)/preinstall.am
> +include $(top_srcdir)/../../../../automake/local.am
> diff --git a/c/src/lib/libbsp/arm/tms570/README b/c/src/lib/libbsp/arm/tms570/README
> new file mode 100644
> index 0000000..3150626
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/README
> @@ -0,0 +1,64 @@
> +Development Board: TMS570LS31x Hercules Development Kit from TI
> +
> +http://www.ti.com/tool/tmds570ls31hdk
> +
> +Drivers:
> +
> +       o Console
> +       o Clock
> +  o Ethernet - work in progress
> +
> +BSP variants:
> +  tms570ls3137_hdk_intram - place code and data into internal SRAM
> +  tms570ls3137_hdk_sdram - place code into external SDRAM and data to SRAM
> +  tms570ls3137_hdk - variant prepared for stand-alone RTEMS aplication
> +                      stored and running directly from flash. Not working yet.
> +
> +Tool-chain
> +  GCC 4.9.0 + Newlib 2.1.0 + Binutils 2.24 configuration:
> +
> +  CFLAGS="-O2 -pipe" LDFLAGS=-s \
> +  ../../../src/gcc-4.9/configure --target=arm-rtems4.11 --prefix=/usr \
> +               --enable-languages=c,c++ \
> +               --disable-libstdcxx-pch \
> +               --with-gnu-ld \
> +               --with-gnu-as \
> +               --enable-threads \
> +               --enable-target-optspace \
> +               --with-system-zlib \
> +               --verbose \
> +               --disable-nls --without-included-gettext \
> +               --disable-win32-registry \
> +               --with-newlib \
> +               --enable-plugin \
> +               --enable-newlib-io-c99-formats \
> +               --enable-version-specific-runtime-libs \
> +               --enable-newlib-iconv \
> +               --disable-lto \
> +
> +Patches required for Cortex-R and big-endian ARM support are already
> +accepted by mainline.
> +
> +Execution
> +
> +  There is not used any generic bootloader. Initial complex CPU and peripherals
> +  initialization and self test are not implemented and included in RTEMS BSP
> +  right now. For testing and debuging purposes is used simple Ti's HalCoGen
> +  generated application to setup board and then download RTEMS image over
> +  OpenOCD to internal EEC SRAM or external SDRAM.
> +
> +  Setup application code is available there:
> +          https://github.com/hornmich/tms570ls3137-hdk-sdram
> +
> +Howto setup TMDS570LS31HDK?
> +
> +       o Unpack board.
> +       o Verify that demo application runs.
> +  o Upload bootloader specified above
> +  o write BSP aplication either to sdram or intram and jump to RTEMS start code
> +
> +Additional information about the board can be found at
> +  http://www.rtems.org/wiki/index.php/Tms570
> +
> +Additional information about the CPU can be found at
> +  http://www.ti.com/product/tms570ls3137
> diff --git a/c/src/lib/libbsp/arm/tms570/bsp_specs b/c/src/lib/libbsp/arm/tms570/bsp_specs
> new file mode 100644
> index 0000000..1afa2ba
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/bsp_specs
> @@ -0,0 +1,13 @@
> +%rename endfile old_endfile
> +%rename startfile old_startfile
> +%rename link old_link
> +
> +*startfile:
> +%{!qrtems: %(old_startfile)} \
> +%{!nostdlib: %{qrtems: start.o%s crti.o%s crtbegin.o%s -e _start}}
> +
> +*link:
> +%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -EB }
> +
> +*endfile:
> +%{!qrtems: *(old_endfiles)} %{qrtems: crtend.o%s crtn.o%s }
> diff --git a/c/src/lib/libbsp/arm/tms570/clock/tms570-rti.c b/c/src/lib/libbsp/arm/tms570/clock/tms570-rti.c
> new file mode 100644
> index 0000000..3f8278c
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/clock/tms570-rti.c
> @@ -0,0 +1,205 @@
> +/**
> + * @file tms570-rti.c
> + *
> + * @ingroup tms570
> + *
> + * @brief clock functions definitions.
> + */
> +
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + * by embedded brains GmbH and others
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#include <stdlib.h>
> +
> +#include <rtems.h>
> +#include <bsp.h>
> +#include <bsp/irq.h>
> +#include <bsp/tms570-rti.h>
> +
> +void Clock_exit( void );
> +rtems_isr Clock_isr( rtems_vector_number vector );
> +void Install_clock( rtems_isr_entry );
> +
> +/*
> + *  Clock_driver_ticks is a monotonically increasing counter of the
> + *  number of clock ticks since the driver was initialized.
> + */
> +
> +volatile uint32_t         Clock_driver_ticks;
> +
> +/*
> + *  Clock_isrs is the number of clock ISRs until the next invocation of
> + *  the RTEMS clock tick routine.  The clock tick device driver
> + *  gets an interrupt once a millisecond and counts down until the
> + *  length of time between the user configured microseconds per tick
> + *  has passed.
> + */
> +
> +uint32_t         Clock_isrs;              /* ISRs until next tick */
> +
> +/*
> + * These are set by clock driver during its init
> + */
> +
> +rtems_device_major_number rtems_clock_major = ~0;
> +rtems_device_minor_number rtems_clock_minor;
> +
> +/*
> + *  The previous ISR on this clock tick interrupt vector.
> + */
> +
> +rtems_isr_entry  Old_ticker;
> +
> +/**
> + * @brief Clock isr handler
> + *
> + * bump the number of clock driver ticks since initialization
> + *
> + * determine if it is time to announce the passing of tick as configured
> + * to RTEMS through the rtems_clock_tick directive
> + *
> + * @param[in] vector interrupt vector
> + *
> + * @retval Void
> + */
> +rtems_isr Clock_isr(
> +  rtems_vector_number vector
> +)
> +{
> +   TMS570_RTI.RTIINTFLAG = 0x00000001;
> +   ++Clock_driver_ticks;
> +   /* TMS570_RTI.RTICOMP0 += 1000; */
> +
> +   if ( Clock_isrs <= 1 ) {
> +     rtems_clock_tick();
> +     Clock_isrs = rtems_configuration_get_microseconds_per_tick() / 1000;
> +   }
> +   else
> +     Clock_isrs -= 1;
> +}
> +
> +/**
> + * @brief Installs clock handler
> + *
> + * determine if it is time to announce the passing of tick as configured
> + * to RTEMS through the rtems_clock_tick directive *
> + *
> + * @retval Void
> + */
> +static void tms570_clock_handler_install(rtems_isr_entry clock_isr)
> +{
> +  rtems_status_code sc = RTEMS_SUCCESSFUL;
> +
> +  sc = rtems_interrupt_handler_install(
> +    TMS570_IRQ_TIMER_0,
> +    "Clock",
> +    RTEMS_INTERRUPT_UNIQUE,
> +    (rtems_interrupt_handler) Clock_isr,
> +    NULL
> +  );
> +  if (sc != RTEMS_SUCCESSFUL) {
> +    rtems_fatal_error_occurred(0xdeadbeef);
> +  }
> +}
> +
> +/**
> + *  @brief Installs clock
> + *
> + *  Install a clock tick handler and reprograms the chip.  This
> + *  is used to initially establish the clock tick.
> + *
> + * @retval Void
> + */
> +void Install_clock(
> +  rtems_isr_entry clock_isr
> +)
> +{
> +  /*
> +   *  Initialize the clock tick device driver variables
> +   */
> +
> +  Clock_driver_ticks = 0;
> +  Clock_isrs = rtems_configuration_get_microseconds_per_tick() / 1000;
> +
> +  tms570_clock_handler_install(clock_isr);
> +
> +  /* Hardware specific initialize */
> +  TMS570_RTI.RTIGCTRL = 0;
> +  TMS570_RTI.RTICPUC0 = BSP_PLL_OUT_CLOCK /1000000 / 2; /* prescaler */
> +  TMS570_RTI.RTITBCTRL = 2;
> +  TMS570_RTI.RTICAPCTRL = 0;
> +  TMS570_RTI.RTICOMPCTRL = 0;
> +  /* set counter to zero */
> +  TMS570_RTI.RTIUC0 = 0;
> +  TMS570_RTI.RTIFRC0 = 0;
> +  /* clear interrupts*/
> +  TMS570_RTI.RTICLEARINTENA = 0x00070f0f;
> +  TMS570_RTI.RTIINTFLAG = 0x0007000f;
> +  /* set timer */
> +  TMS570_RTI.RTICOMP0 = TMS570_RTI.RTIFRC0 + 1000;
> +  TMS570_RTI.RTICOMP0CLR = TMS570_RTI.RTICOMP0 + 500;
> +  TMS570_RTI.RTIUDCP0 = 1000;
> +  /* enable interupt */
> +  TMS570_RTI.RTISETINTENA = 0x1;
> +  /* enable timer */
> +  TMS570_RTI.RTIGCTRL = 1;
> +
> +
> +  /*
> +   *  Schedule the clock cleanup routine to execute if the application exits.
> +   */
> +  atexit( Clock_exit );
> +}
> +
> +/**
> + * @brief Clock exit
> + * Called by aplication exit
> + * Clean up before the application exits
> + *
> + * @retval Void
> + */
> +void Clock_exit( void )
> +{
> +  /* turn off the timer interrupts */
> +  TMS570_RTI.RTICLEARINTENA = 0x20000;
> +}
> +
> +/**
> + *  @brief Initialize the clock driver
> + *
> + *  Device driver entry point for clock tick driver initialization.
> + *  Calls Install_clock
> + *
> + * @retval RTEMS_SUCCESSFUL
> + */
> +rtems_device_driver Clock_initialize(
> +  rtems_device_major_number major,
> +  rtems_device_minor_number minor,
> +  void *pargp
> +)
> +{
> +  Install_clock( Clock_isr );
> +
> +  /*
> +   * make major/minor avail to others such as shared memory driver
> +   */
> +
> +  rtems_clock_major = major;
> +  rtems_clock_minor = minor;
> +
> +  return RTEMS_SUCCESSFUL;
> +}
> diff --git a/c/src/lib/libbsp/arm/tms570/configure.ac b/c/src/lib/libbsp/arm/tms570/configure.ac
> new file mode 100644
> index 0000000..952c7a4
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/configure.ac
> @@ -0,0 +1,45 @@
> +##
> +#
> +# @file configure.ac
> +#
> +# @brief Configure script of LibBSP for the TMS570 board.
> +#
> +
> +AC_PREREQ([2.69])
> +AC_INIT([rtems-c-src-lib-libbsp-arm-tms570],[_RTEMS_VERSION],
> +                               [http://www.rtems.org/bugzilla])
> +AC_CONFIG_SRCDIR([bsp_specs])
> +RTEMS_TOP(../../../../../..)
> +
> +RTEMS_CANONICAL_TARGET_CPU
> +AM_INIT_AUTOMAKE([no-define nostdinc foreign 1.12.2])
> +RTEMS_BSP_CONFIGURE
> +
> +RTEMS_PROG_CC_FOR_TARGET
> +RTEMS_CANONICALIZE_TOOLS
> +RTEMS_PROG_CCAS
> +
> +RTEMS_CHECK_NETWORKING
> +AM_CONDITIONAL(HAS_NETWORKING,test "$HAS_NETWORKING" = "no")
> +
> +RTEMS_BSPOPTS_SET([ARM_TMS570LS3137],[*],[0])
> +RTEMS_BSPOPTS_HELP([ARM_TMS570LS3137],[target used for identify TMS570LS3137 board])
> +
> +RTEMS_BSPOPTS_SET([BSP_MINIMUM_TASK_STACK_SIZE],[*],[1024])
> +RTEMS_BSPOPTS_HELP([BSP_MINIMUM_TASK_STACK_SIZE],[Suggested minimum task stack
> +                       size in bytes])
> +
> +RTEMS_BSPOPTS_SET([TMS570_OSCILLATOR_MAIN],[*],[12000000U])
> +RTEMS_BSPOPTS_HELP([TMS570_OSCILLATOR_MAIN],[main oscillator frequency in Hz])
> +
> +RTEMS_BSPOPTS_SET([TMS570_OSCILLATOR_RTC],[*],[32768U])
> +RTEMS_BSPOPTS_HELP([TMS570_OSCILLATOR_RTC],[RTC oscillator frequency in Hz])
> +
> +RTEMS_BSPOPTS_SET([TMS570_CCLK],[*],[96000000U])
> +RTEMS_BSPOPTS_HELP([TMS570_CCLK],[CPU clock in Hz])
> +
> +RTEMS_BSP_CLEANUP_OPTIONS(0, 1)
> +RTEMS_BSP_LINKCMDS
> +
> +AC_CONFIG_FILES([Makefile])
> +AC_OUTPUT
> diff --git a/c/src/lib/libbsp/arm/tms570/console/printk-support.c b/c/src/lib/libbsp/arm/tms570/console/printk-support.c
> new file mode 100644
> index 0000000..39baf04
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/console/printk-support.c
> @@ -0,0 +1,68 @@
> +/**
> + * @file printk-support.c
> + *
> + * @ingroup tms570
> + *
> + * @brief definitions of serial line for debugging.
> + */
> +
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + * by embedded brains GmbH and others
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#include <rtems/bspIo.h>
> +#include <stdint.h>
> +#include <bsp/tms570-sci.h>
> +#include <bsp/tms570-sci-driver.h>
> +
> +extern const tms570_sci_context driver_context_table[];
> +
> +/**
> + * @brief Puts chars into peripheral
> + *
> + * debug functions always use serial dev 0 peripheral
> + *
> + * @retval Void
> + */
> +static void tms570_putc(char ch)
> +{
> +  rtems_interrupt_level level;
> +
> +  rtems_interrupt_disable(level);
> +  while ((driver_context_table[0].regs->SCIFLR & 0x100) == 0) {

May I suggest to avoid magic numbers?

> +    rtems_interrupt_flash(level);
> +  }
> +  driver_context_table[0].regs->SCITD = ch;
> +  rtems_interrupt_enable(level);
> +}
> +
> +/**
> + * @brief debug console output
> + *
> + * debug functions always use serial dev 0 peripheral
> + *
> + * @retval Void
> + */
> +static void console_output(char c)
> +{
> +  if (c == '\n') {
> +    char r = '\r';
> +    tms570_putc(r);
> +  }
> +  tms570_putc(c);
> +}
> +
> +BSP_output_char_function_type BSP_output_char = console_output;
> diff --git a/c/src/lib/libbsp/arm/tms570/console/tms570-sci.c b/c/src/lib/libbsp/arm/tms570/console/tms570-sci.c
> new file mode 100644
> index 0000000..4815263
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/console/tms570-sci.c
> @@ -0,0 +1,546 @@
> +/**
> + * @file tms570-sci.c
> + *
> + * @ingroup tms570
> + *
> + * @brief Serial communication interface (SCI) functions definitions.
> + */
> +
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + * by embedded brains GmbH and others
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#include <bspopts.h>
> +
> +#include <libchip/sersupp.h>
> +#include <bsp/tms570-sci.h>
> +#include <bsp/tms570-sci-driver.h>
> +#include <rtems/console.h>
> +#include <bsp.h>
> +#include <bsp/fatal.h>
> +#include <bsp/irq.h>
> +
> +#define TMS570_SCI_BUFFER_SIZE 10
> +#define TMS570_CONTEXT_TABLE_SIZE 2
> +#define TMS570_USE_INTERRUPTS
> +
> +/**
> + * @brief Table including all serial drivers
> + *
> + * Definitions of all serial drivers
> + */
> +const tms570_sci_context driver_context_table[] = {
> +  {
> +    .device_name = "/dev/console",
> +    .regs = &TMS570_SCI,
> +    .irq = TMS570_IRQ_SCI_LEVEL_0,
> +  },
> +  {
> +    .device_name = "/dev/ttyS1",
> +    .regs = &TMS570_SCI2,
> +    .irq = TMS570_IRQ_SCI2_LEVEL_0,
> +  }
> +};
> +
> +/**
> + * @brief Serial drivers init function
> + *
> + * Initialize all serial drivers specified in driver_context_table
> + *
> + * @param[in] major
> + * @param[in] minor
> + * @param[in] arg
> + * @retval RTEMS_SUCCESSFUL Initialization completed
> + */
> +rtems_device_driver console_initialize(
> +  rtems_device_major_number  major,
> +  rtems_device_minor_number  minor,
> +  void                      *arg
> +)
> +{
> +  rtems_status_code sc;
> +#ifdef TMS570_USE_INTERRUPTS
> +  const rtems_termios_device_handler *handler = &tms570_sci_handler_interrupt;
> +#else
> +  const rtems_termios_device_handler *handler = &tms570_sci_handler_polled;
> +#endif
> +
> +  /*
> +   * Initialize the Termios infrastructure.  If Termios has already
> +   * been initialized by another device driver, then this call will
> +   * have no effect.
> +   */
> +  rtems_termios_initialize();
> +
> +  /* Initialize each device */
> +  for (
> +    minor = 0;
> +    minor < RTEMS_ARRAY_SIZE(driver_context_table);
> +    ++minor
> +  ) {
> +    tms570_sci_context *ctx = (tms570_sci_context *) &driver_context_table[minor];
> +
> +    /*
> +     * Install this device in the file system and Termios.  In order
> +     * to use the console (i.e. being able to do printf, scanf etc.
> +     * on stdin, stdout and stderr), one device must be registered as
> +     * "/dev/console" (CONSOLE_DEVICE_NAME).
> +     */
> +    sc = rtems_termios_device_install(
> +      ctx->device_name,
> +      major,
> +      minor,
> +      handler,
> +      ctx
> +    );
> +    if (sc != RTEMS_SUCCESSFUL) {
> +      bsp_fatal(BSP_FATAL_CONSOLE_NO_DEV);
> +    }
> +  }
> +  return RTEMS_SUCCESSFUL;
> +}
> +
> +
> +/**
> + * @brief Reads chars from HW
> + *
> + * Reads chars from HW peripheral specified in driver context.
> + * TMS570 does not have HW buffer for serial line so this function can
> + * return only 0 or 1 char
> + *
> + * @param[in] ctx context of the driver
> + * @param[out] buf read data buffer
> + * @param[in] N size of buffer
> + * @retval x Number of read chars from peripherals
> + */
> +static int tms570_sci_read_received_chars(
> +  tms570_sci_context * ctx,
> +  char * buf,
> +  int N)
> +{
> +  if(N<1)return 0;
> +  if(ctx->regs->SCIRD != 0){
> +     buf[0] = ctx->regs->SCIRD;
> +    return 1;
> +  }
> +  return 0;
> +}
> +
> +/**
> + * @brief Enables RX interrupt
> + *
> + * Enables RX interrupt source of SCI peripheral
> + * specified in the driver context.
> + *
> + * @param[in] ctx context of the driver
> + * @retval Void
> + */
> +static void tms570_sci_enable_interrupts(tms570_sci_context * ctx){
> +  ctx->regs->SCISETINT = (1<<9);
> +}
> +
> +/**
> + * @brief Disables RX interrupt
> + *
> + * Disables RX interrupt source of SCI peripheral specified in the driver context.
> + *
> + * @param[in] ctx context of the driver
> + * @retval Void
> + */
> +static void tms570_sci_disable_interrupts(tms570_sci_context * ctx){
> +  ctx->regs->SCICLEARINT = (1<<9);
> +}
> +
> +/**
> + * @brief Check whether driver has put char in HW
> + *
> + * Check whether driver has put char in HW.
> + * This information is read from the driver context not from a peripheral.
> + * TMS570 does not have write data buffer asociated with SCI
> + * so the return can be only 0 or 1.
> + *
> + * @param[in] ctx context of the driver
> + * @retval x
> + */
> +static int tms570_sci_transmitted_chars(tms570_sci_context * ctx)
> +{
> +  int ret;
> +  ret = ctx->tx_chars_in_hw;
> +  if(ret == 1){
> +    ctx->tx_chars_in_hw = 0;
> +    return 1;
> +  }
> +  return ret;
> +}
> +
> +/**
> + * @brief Set attributes of the HW peripheral
> + *
> + * Sets attributes of the HW peripheral (parity, baud rate, etc.)
> + * TODO: untested function
> + *
> + * @param[in] tty rtems_termios_tty
> + * @param[in] t termios driver
> + * @retval true peripheral setting is changed
> + */
> +static bool tms570_sci_set_attributes(
> +  rtems_termios_tty    *tty,
> +  const struct termios *t
> +)
> +{
> +  tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
> +  rtems_interrupt_lock_context lock_context;
> +
> +  rtems_termios_interrupt_lock_acquire(tty, &lock_context);
> +
> +  switch (t->c_cflag & (PARENB|PARODD)) {
> +    case (PARENB|PARODD):
> +      /* Odd parity */
> +      ctx->regs->SCIGCR1 &= !(1<<3);
> +      ctx->regs->SCIGCR1 |= (1<<2);
> +      break;
> +
> +    case PARENB:
> +      /* Even parity */
> +      ctx->regs->SCIGCR1 |= (1<<3);
> +      ctx->regs->SCIGCR1 |= (1<<2);
> +      break;
> +
> +    default:
> +    case 0:
> +    case PARODD:
> +      /* No Parity */
> +      ctx->regs->SCIGCR1 &= !(1<<2);
> +  }
> +
> +  /* Baud rate */
> +  ctx->regs->BRS |= 0xFF00001A;

ditto; e.g. what other values could be used?

> +
> +  rtems_termios_interrupt_lock_release(tty, &lock_context);
> +
> +  return true;
> +}
> +
> +/**
> + * @brief sci interrupt handler
> + *
> + * Handler checks which interrupt occured and provides nessesary maintenance
> + * dequeue characters in termios driver whether character is send succesfully
> + * enqueue characters in termios driver whether character is recieved
> + *
> + * @param[in] arg rtems_termios_tty
> + * @retval Void
> + */
> +static void tms570_sci_interrupt_handler(void * arg){
> +  rtems_termios_tty *tty = arg;
> +  tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
> +  char buf[TMS570_SCI_BUFFER_SIZE];
> +  size_t n;
> +
> +  /*
> +   * Check if we have received something.
> +   */
> +   if((ctx->regs->SCIFLR & (1<<9)) == (1<<9)){
> +      n = tms570_sci_read_received_chars(ctx, buf, TMS570_SCI_BUFFER_SIZE);
> +      if (n > 0) {
> +        /* Hand the data over to the Termios infrastructure */
> +        rtems_termios_enqueue_raw_characters(tty, buf, n);
> +      }
> +    }
> +  /*
> +   * Check if we have something transmitted.
> +   */
> +  if((ctx->regs->SCIFLR & (1<<8)) == (1<<8)){
> +    n = tms570_sci_transmitted_chars(ctx);
> +    if (n > 0) {
> +      /*
> +       * Notify Termios that we have transmitted some characters.  It
> +       * will call now the interrupt write function if more characters
> +       * are ready for transmission.
> +       */
> +      rtems_termios_dequeue_characters(tty, n);
> +    }
> +  }
> +}
> +
> +/**
> + * @brief sci write function called from interrupt
> + *
> + * Nonblocking write function. Writes characters to HW peripheral
> + * TMS570 does not have write data buffer asociated with SCI
> + * so only one character can be written.
> + *
> + * @param[in] tty rtems_termios_tty
> + * @param[in] buf buffer of characters pending to send
> + * @param[in] len size of the buffer
> + * @retval Void
> + */
> +static void tms570_sci_interrupt_write(
> +  rtems_termios_tty *tty,
> +  const char *buf,
> +  size_t len
> +)
> +{
> +  tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
> +
> +  if (len > 0) {
> +    /* start UART TX, this will result in an interrupt when done */
> +    ctx->regs->SCITD = *buf;
> +    /* character written - raise count*/
> +    ctx->tx_chars_in_hw = 1;
> +    /* Enable TX interrupt (interrupt is edge-triggered) */
> +    ctx->regs->SCISETINT = (1<<8);
> +
> +  } else {
> +    /* No more to send, disable TX interrupts */
> +    ctx->regs->SCICLEARINT = (1<<8);
> +    /* Tell close that we sent everything */
> +  }
> +}
> +
> +/**
> + * @brief sci write function
> + *
> + * Blocking write function. Waits until HW peripheral is ready and then writes
> + * character to HW peripheral. Writes all characters in the buffer.
> + *
> + * @param[in] tty rtems_termios_tty
> + * @param[in] buf buffer of characters pending to send
> + * @param[in] len size of the buffer
> + * @retval Void
> + */
> +static void tms570_sci_poll_write(
> +  rtems_termios_tty *tty,
> +  const char        *buf,
> +  size_t             n
> +)
> +{
> +  tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
> +  size_t i;
> +
> +  /* Write */
> +
> +  for (i = 0; i < n; ++i) {
> +    while ((ctx->regs->SCIFLR & (1<<11)) == 0) {
> +      ;
> +    }
> +    ctx->regs->SCITD = buf[i];
> +  }
> +}
> +
> +/**
> + * @brief See if there is recieved charakter to read
> + *
> + * read the RX flag from peripheral specified in context
> + *
> + * @param[in] ctx context of the driver
> + * @retval 0 No character to read
> + * @retval x Character ready to read
> + */
> +static int TMS570_sci_can_read_char(
> +  tms570_sci_context * ctx
> +)
> +{
> +  return ctx->regs->SCIFLR & (1<<9);
> +}
> +
> +/**
> + * @brief reads character from peripheral
> + *
> + * reads the recieved character from peripheral specified in context
> + *
> + * @param[in] ctx context of the driver
> + * @retval x Character
> + */
> +static char TMS570_sci_read_char(
> +  tms570_sci_context * ctx
> +)
> +{
> +  return ctx->regs->SCIRD;
> +}
> +
> +/**
> + * @brief sci read function
> + *
> + * check if there is recieved character to be read and reads it.
> + *
> + * @param[in] tty rtems_termios_tty (context of the driver)
> + * @retval -1 No character to be read
> + * @retval x Read character
> + */
> +static int tms570_sci_poll_read(rtems_termios_tty *tty)
> +{
> +  tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
> +
> +  /* Check if a character is available */
> +  if (TMS570_sci_can_read_char(ctx)) {
> +    return TMS570_sci_read_char(ctx);
> +  } else {
> +    return -1;
> +  }
> +}
> +
> +/**
> + * @brief inicialization of the driver
> + *
> + * inicialization of the HW peripheral specified in contex of the driver.
> + * This function is called only once when opening the driver.
> + *
> + * @param[in] tty context of the driver
> + * @param[in] args
> + * @retval false Error occured during inicialization
> + * @retval true Driver is open and ready
> + */
> +static bool tms570_sci_poll_first_open(
> +  rtems_termios_tty             *tty,
> +  rtems_libio_open_close_args_t *args
> +)
> +{
> +  bool ok;
> +  /* TODO: test peripheral startup code below
> +    tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
> +    ctx->regs->SCIGCR1 |= (1<<25) | (1<<24) | (1<<4);
> +    ctx->regs->SCIFORMAT |= 0x7;
> +    ctx->regs->SCIPIO0 |= (1<<1) | (1<<2);
> +    ctx->regs->SCISETINTLVL = 0;
> +    ok = tms570_sci_set_attributes(tty, rtems_termios_get_termios(tty));
> +  */
> +  ok = true;
> +  if (!ok) {
> +    return false;
> +  }
> +  return true;
> +}
> +
> +/**
> + * @brief inicialization of the interrupt driven driver
> + *
> + * calls tms570_sci_poll_first_open function.
> + * install and enables interrupts.
> + *
> + * @param[in] tty context of the driver
> + * @param[in] args
> + * @retval false Error occured during inicialization
> + * @retval true Driver is open and ready
> + */
> +static bool tms570_sci_interrupt_first_open(
> +  rtems_termios_tty             *tty,
> +  rtems_libio_open_close_args_t *args
> +){
> +  tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
> +  rtems_status_code sc;
> +  bool ret;
> +  ret = tms570_sci_poll_first_open(tty,args);
> +  if (ret == false)
> +    return false;
> +  /* Register Interrupt handler */
> +  sc = rtems_interrupt_handler_install(ctx->irq,
> +                                       ctx->device_name,
> +                                       RTEMS_INTERRUPT_SHARED,
> +                                       tms570_sci_interrupt_handler,
> +                                       tty);
> +  if (sc != RTEMS_SUCCESSFUL)
> +    return false;
> +  tms570_sci_enable_interrupts(rtems_termios_get_device_context(tty));
> +  return true;
> +}
> +
> +/**
> + * @brief deinicializes sci peripheral
> + *
> + * @param[in] tty context of the driver
> + * @param[in] args
> + * @retval false Error occured during inicialization
> + * @retval true Driver is open and ready
> + */
> +static void tms570_sci_poll_last_close(
> +  rtems_termios_tty             *tty,
> +  rtems_libio_open_close_args_t *args
> +)
> +{
> +  /*tms570_sci_context *ctx = rtems_termios_get_device_context(tty);*/
> +
> +  /* TODO: Here shall be peripheral HW reset, someday */
> +
> +}
> +
> +/**
> + * @brief deinicializes sci peripheral of interrupt driven driver
> + *
> + * calls tms570_sci_poll_last_close and disables interrupts
> + *
> + * @param[in] tty context of the driver
> + * @param[in] args
> + * @retval false Error occured during inicialization
> + * @retval true Driver is open and ready
> + */
> +static void tms570_sci_interrupt_last_close(
> +  rtems_termios_tty             *tty,
> +  rtems_libio_open_close_args_t *args
> +)
> +{
> +  tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
> +  rtems_interrupt_lock_context lock_context;
> +
> +  /* Turn off RX interrupts */
> +  rtems_termios_interrupt_lock_acquire(tty, &lock_context);
> +  tms570_sci_disable_interrupts(ctx);
> +  rtems_termios_interrupt_lock_release(tty, &lock_context);
> +
> +  /* Flush device */
> +  while ((ctx->regs->SCIFLR & (1<<11)) > 0) {
> +    ;/* Wait until all data has been sent */
> +  }
> +
> +  /* uninstall ISR */
> +  rtems_interrupt_handler_remove(ctx->irq, tms570_sci_interrupt_handler, tty);
> +
> +  tms570_sci_poll_last_close(tty,args);
> +}
> +
> +/**
> + * @brief Struct containing definitions of polled driver functions.
> + *
> + * Encapsulates polled driver functions.
> + * Use of this table is determited by not defining TMS570_USE_INTERRUPTS
> + */
> +const rtems_termios_device_handler tms570_sci_handler_polled = {
> +  .first_open = tms570_sci_poll_first_open,
> +  .last_close = tms570_sci_poll_last_close,
> +  .poll_read = tms570_sci_poll_read,
> +  .write = tms570_sci_poll_write,
> +  .set_attributes = tms570_sci_set_attributes,
> +  .stop_remote_tx = NULL,
> +  .start_remote_tx = NULL,
> +  .mode = TERMIOS_POLLED
> +};
> +
> +/**
> + * @brief Struct containing definitions of interrupt driven driver functions.
> + *
> + * Encapsulates interrupt driven driver functions.
> + * Use of this table is determited by defining TMS570_USE_INTERRUPTS
> + */
> +const rtems_termios_device_handler tms570_sci_handler_interrupt  = {
> +  .first_open = tms570_sci_interrupt_first_open,
> +  .last_close = tms570_sci_interrupt_last_close,
> +  .poll_read = NULL,
> +  .write = tms570_sci_interrupt_write,
> +  .set_attributes = tms570_sci_set_attributes,
> +  .stop_remote_tx = NULL,
> +  .start_remote_tx = NULL,
> +  .mode = TERMIOS_IRQ_DRIVEN
> +};
> diff --git a/c/src/lib/libbsp/arm/tms570/include/bsp.h b/c/src/lib/libbsp/arm/tms570/include/bsp.h
> new file mode 100644
> index 0000000..450ca68
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/include/bsp.h
> @@ -0,0 +1,101 @@
> +/**
> + * @file bsp.h
> + *
> + * @ingroup tms570
> + *
> + * @brief Global BSP definitions.
> + */
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifndef LIBBSP_ARM_TMS570_BSP_H
> +#define LIBBSP_ARM_TMS570_BSP_H
> +
> +#include <bspopts.h>
> +
> +#define TMS570_PCLK ( TMS570_CCLK / TMS570_PCLKDIV )
> +#define TMS570_MPU_REGION_COUNT 8u
> +
> +#define BSP_FEATURE_IRQ_EXTENSION
> +
> +#ifndef ASM
> +
> +#include <rtems.h>
> +#include <rtems/console.h>
> +#include <rtems/clockdrv.h>
> +#include <bsp/default-initial-extension.h>
> +
> +#define BSP_OSCILATOR_CLOCK 8000000
> +#define BSP_PLL_OUT_CLOCK 160000000
> +
> +/** Define operation count for Tests */
> +#define OPERATION_COUNT 4
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */
> +
> +struct rtems_bsdnet_ifconfig;
> +
> +/**
> + * @defgroup tms570 TMS570 Support
> + *
> + * @ingroup bsp_arm
> + *
> + * @brief TMS570 support package.
> + *
> + * @{
> + */
> +
> +/**
> + * @brief Optimized idle task.
> + *
> + * This idle task sets the power mode to idle.  This causes the processor
> + * clock to be stopped, while on-chip peripherals remain active.
> + * Any enabled interrupt from a peripheral or an external interrupt source
> + *  will cause the processor to resume execution.
> + *
> + * To enable the idle task use the following in the system configuration:
> + *
> + * @code
> + * #include <bsp.h>
> + *
> + * #define CONFIGURE_INIT
> + *
> + * #define CONFIGURE_IDLE_TASK_BODY bsp_idle_thread
> + *
> + * #include <confdefs.h>
> + * @endcode
> + */
> +void*bsp_idle_thread( uintptr_t ignored );
> +
> +#define BSP_CONSOLE_UART_BASE 0x4000C000U
> +
> +/**
> + * @brief Restarts the bsp with "addr" address
> + * @param addr Address used to restart the bsp
> + */
> +void bsp_restart( const void *addr );
> +
> +/** @} */
> +
> +#ifdef __cplusplus
> +}
> +#endif /* __cplusplus */
> +
> +#endif /* ASM */
> +
> +#endif /* LIBBSP_ARM_TMS570_BSP_H */
> diff --git a/c/src/lib/libbsp/arm/tms570/include/irq.h b/c/src/lib/libbsp/arm/tms570/include/irq.h
> new file mode 100644
> index 0000000..718abad
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/include/irq.h
> @@ -0,0 +1,134 @@
> +/**
> + * @file irq.h
> + *
> + * @ingroup tms570
> + *
> + * @brief TMS570 interrupt definitions.
> + */
> +
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + * by embedded brains GmbH and others
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifndef LIBBSP_ARM_TMS570_IRQ_H
> +#define LIBBSP_ARM_TMS570_IRQ_H
> +
> +#ifndef ASM
> +#include <rtems.h>
> +#include <rtems/irq.h>
> +#include <rtems/irq-extension.h>
> +#endif
> +
> +#define BSP_INTERRUPT_VECTOR_MIN 0U
> +#define TMS570_IRQ_ESM_HIGH 0
> +#define TMS570_IRQ_RESERVED 1
> +#define TMS570_IRQ_TIMER_0 2
> +#define TMS570_IRQ_TIMER_1 3
> +#define TMS570_IRQ_TIMER_2 4
> +#define TMS570_IRQ_TIMER_3 5
> +#define TMS570_IRQ_RTI_OVERFLOW_0 6
> +#define TMS570_IRQ_RTI_OVERFLOW_1 7
> +#define TMS570_IRQ_RTI_TIMEBASE 8
> +#define TMS570_IRQ_GIO_HIGH 9
> +#define TMS570_IRQ_HET_HIGH 10
> +#define TMS570_IRQ_HET_TU_HIGH 11
> +#define TMS570_IRQ_MIBSPI1_HIGH 12
> +#define TMS570_IRQ_SCI_LEVEL_0 13
> +#define TMS570_IRQ_ADC1_EVENT 14
> +#define TMS570_IRQ_ADC1_GROUP_1 15
> +#define TMS570_IRQ_CAN1_HIGH 16
> +#define TMS570_IRQ_RESERVED 17
> +#define TMS570_IRQ_FLEXRAY_HIGH 18
> +#define TMS570_IRQ_CRC_1 19
> +#define TMS570_IRQ_ESM_LOW 20
> +#define TMS570_IRQ_SSI 21
> +#define TMS570_IRQ_PMU 22
> +#define TMS570_IRQ_GIO_LOW 23
> +#define TMS570_IRQ_HET_LOW 24
> +#define TMS570_IRQ_HET_TU_LOW 25
> +#define TMS570_IRQ_MIBSPI1_LOW 26
> +#define TMS570_IRQ_SCI_LEVEL_1 27
> +#define TMS570_IRQ_ADC1_GROUP_2 28
> +#define TMS570_IRQ_CAN1_LOW 29
> +#define TMS570_IRQ_RESERVED
> +#define TMS570_IRQ_ADC1_MAG 31
> +#define TMS570_IRQ_FLEXRAY_LOW 32
> +#define TMS570_IRQ_DMA_FTCA 33
> +#define TMS570_IRQ_DMA_LFSA 34
> +#define TMS570_IRQ_CAN2_HIGH 35
> +#define TMS570_IRQ_DMM_HIGH 36
> +#define TMS570_IRQ_MIBSPI3_HIGH 37
> +#define TMS570_IRQ_MIBSPI3_LOW 38
> +#define TMS570_IRQ_DMA_HBCA 39
> +#define TMS570_IRQ_DMA_BTCA 40
> +#define TMS570_IRQ_DMA_BERA 41
> +#define TMS570_IRQ_CAN2_LOW 42
> +#define TMS570_IRQ_DMM_LOW 43
> +#define TMS570_IRQ_CAN1_IF3 44
> +#define TMS570_IRQ_CAN3_HIGH 45
> +#define TMS570_IRQ_CAN2_IF3 46
> +#define TMS570_IRQ_FPU 47
> +#define TMS570_IRQ_FLEXRAY_TU 48
> +#define TMS570_IRQ_SPI4_HIGH 49
> +#define TMS570_IRQ_ADC2_EVENT 50
> +#define TMS570_IRQ_ADC2_GROUP_1 51
> +#define TMS570_IRQ_FLEXRAY_T0C 52
> +#define TMS570_IRQ_MIBSPIP5_HIGH 53
> +#define TMS570_IRQ_SPI4_LOW 54
> +#define TMS570_IRQ_CAN3_LOW 55
> +#define TMS570_IRQ_MIBSPIP5_LOW 56
> +#define TMS570_IRQ_ADC2_GROUP_2 57
> +#define TMS570_IRQ_FLEXRAY_TU_ERROR 58
> +#define TMS570_IRQ_ADC2_MAG 59
> +#define TMS570_IRQ_CAN3_IF3 60
> +#define TMS570_IRQ_FSM_DONE 61
> +#define TMS570_IRQ_FLEXRAY_T1C 62
> +#define TMS570_IRQ_HET2_LEVEL_0 63
> +#define TMS570_IRQ_SCI2_LEVEL_0 64
> +#define TMS570_IRQ_HET_TU2_LEVEL_0 65
> +#define TMS570_IRQ_IC2_INTERRUPT 66
> +#define TMS570_IRQ_HET2_LEVEL_1 73
> +#define TMS570_IRQ_SCI2_LEVEL_1 74
> +#define TMS570_IRQ_HET_TU2_LEVEL_1 75
> +#define TMS570_IRQ_HWA_INT_REQ_H 80
> +#define TMS570_IRQ_HWA_INT_REQ_H 81
> +#define TMS570_IRQ_DCC_DONE_INTERRUPT 82
> +#define TMS570_IRQ_DCC2_DONE_INTERRUPT 83
> +#define TMS570_IRQ_HWAG1_INT_REQ_L 88
> +#define TMS570_IRQ_HWAG2_INT_REQ_L 89
> +#define BSP_INTERRUPT_VECTOR_MAX 94
> +
> +#define TMS570_IRQ_PRIORITY_VALUE_MIN 0U
> +#define TMS570_IRQ_PRIORITY_VALUE_MAX 0U
> +
> +#define TMS570_IRQ_PRIORITY_COUNT ( TMS570_IRQ_PRIORITY_VALUE_MAX + 1U )
> +#define TMS570_IRQ_PRIORITY_HIGHEST TMS570_IRQ_PRIORITY_VALUE_MIN
> +#define TMS570_IRQ_PRIORITY_LOWEST TMS570_IRQ_PRIORITY_VALUE_MAX
> +
> +#ifndef ASM
> +
> +void tms570_irq_set_priority(
> +  rtems_vector_number vector,
> +  unsigned            priority
> +);
> +
> +unsigned tms570_irq_get_priority( rtems_vector_number vector );
> +
> +#endif /* ASM */
> +
> +/** @} */
> +
> +#endif /* LIBBSP_ARM_TMS570_IRQ_H */
> diff --git a/c/src/lib/libbsp/arm/tms570/include/tms570-pom.h b/c/src/lib/libbsp/arm/tms570/include/tms570-pom.h
> new file mode 100644
> index 0000000..810c5c8
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/include/tms570-pom.h
> @@ -0,0 +1,101 @@
> +/**
> + * @file tms570-pom.h
> + * @ingroup tms570
> + * @brief Parameter Overlay Module (POM) header file
> + */
> +
> +/*
> + * Copyright (c) 2014 Pavel Pisa <pisa at cmp.felk.cvut.cz>
> + *
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +
> +#ifndef LIBBSP_ARM_TMS570_POM_H
> +#define LIBBSP_ARM_TMS570_POM_H
> +
> +#include <stdint.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */
> +
> +#define TMS570_POM_REGIONS 32
> +#define TMS570_POM_GLBCTRL_ENABLE 0x000000a0a
> +
> +#define TMS570_POM_REGSIZE_DISABLED 0
> +#define TMS570_POM_REGSIZE_64B      1
> +#define TMS570_POM_REGSIZE_128B     2
> +#define TMS570_POM_REGSIZE_256B     3
> +#define TMS570_POM_REGSIZE_5120B    4
> +#define TMS570_POM_REGSIZE_1KB      5
> +#define TMS570_POM_REGSIZE_2KB      6
> +#define TMS570_POM_REGSIZE_4KB      7
> +#define TMS570_POM_REGSIZE_8KB      8
> +#define TMS570_POM_REGSIZE_16KB     9
> +#define TMS570_POM_REGSIZE_32KB   0xa
> +#define TMS570_POM_REGSIZE_64KB   0xb
> +#define TMS570_POM_REGSIZE_128KB  0xc
> +#define TMS570_POM_REGSIZE_256KB  0xd
> +
> +#define TMS570_POM_REGADDRMASK    ((1<<23)-1)
> +
> +typedef struct tms570_pom_region_t {
> +  uint32_t PROGSTART;
> +  uint32_t OVLSTART;
> +  uint32_t REGSIZE;
> +  uint32_t res0;
> +} tms570_pom_region_t;
> +
> +typedef struct tms570_pom_t {
> +  uint32_t GLBCTRL;     /* 000h Global Control Register */
> +  uint32_t REV;         /* 004h Revision ID */
> +  uint32_t CLKCTRL;     /* 008h Clock Gate Control Register */
> +  uint32_t FLG;         /* 00Ch Status Register */
> +  uint32_t res0[0x1f0/4];
> +  tms570_pom_region_t REG[TMS570_POM_REGIONS]; /* 200h Program Regions */
> +  uint32_t res1[0xb00/4];
> +  uint32_t ITCTRL;     /* F00h Integration Control Register */
> +  uint32_t res2[0x09c/4];
> +  uint32_t CLAIMSET;   /* FA0h Claim Set Register */
> +  uint32_t CLAIMCLR;   /* FA4h Claim Clear Register */
> +  uint32_t res3[0x008/4];
> +  uint32_t LOCKACCESS; /* FB0h Lock Access Register */
> +  uint32_t LOCKSTATUS; /* FB4h Lock Status Register */
> +  uint32_t AUTHSTATUS; /* FB8h Authentication Status Register */
> +  uint32_t res4[0x00c/4];
> +  uint32_t DEVID;      /* FC8h Device ID Register */
> +  uint32_t DEVTYPE;    /* FCCh Device Type Register */
> +  uint32_t PERIPHERALID4;      /* FD0h Peripheral ID 4 Register */
> +  uint32_t PERIPHERALID5;      /* FD4h Peripheral ID 5 Register */
> +  uint32_t PERIPHERALID6;      /* FD8h Peripheral ID 6 Register */
> +  uint32_t PERIPHERALID7;      /* FDCh Peripheral ID 7 Register */
> +  uint32_t PERIPHERALID0;      /* FE0h Peripheral ID 0 Register */
> +  uint32_t PERIPHERALID1;      /* FE4h Peripheral ID 1 Register */
> +  uint32_t PERIPHERALID2;      /* FE8h Peripheral ID 2 Register */
> +  uint32_t PERIPHERALID3;      /* FECh Peripheral ID 3 Register */
> +  uint32_t COMPONENTID0;       /* FF0h Component ID 0 Register */
> +  uint32_t COMPONENTID1;       /* FF4h Component ID 1 Register */
> +  uint32_t COMPONENTID2;       /* FF8h Component ID 2 Register */
> +  uint32_t COMPONENTID3;       /* FFCh Component ID 3 Register */
> +} tms570_pom_t;
> +
> +#define TMS570_POM (*(volatile tms570_pom_t*)0xffa04000)
> +
> +int mem_dump(void *buf, unsigned long start, unsigned long len, int blen);
> +void tms570_pom_remap(void);
> +
> +/** @} */
> +
> +#ifdef __cplusplus
> +}
> +#endif /* __cplusplus */
> +
> +#endif /* LIBBSP_ARM_TMS570_POM_H */
> diff --git a/c/src/lib/libbsp/arm/tms570/include/tms570-rti.h b/c/src/lib/libbsp/arm/tms570/include/tms570-rti.h
> new file mode 100644
> index 0000000..379d4e1
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/include/tms570-rti.h
> @@ -0,0 +1,95 @@
> +/**
> + * @file tms570-rti.h
> + *
> + * @ingroup tms570
> + *
> + * @brief Real Time Interrupt module (RTI) header file.
> + */
> +
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + * by embedded brains GmbH and others
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifndef LIBBSP_ARM_TMS570_RTI_H
> +#define LIBBSP_ARM_TMS570_RTI_H
> +
> +#ifndef ASM
> +
> +#include <stdint.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */
> +
> + typedef struct {
> +    uint32_t RTIGCTRL;   //RTIGlobalControlRegister
> +    uint32_t RTITBCTRL;  //RTITimebaseControlRegister
> +    uint32_t RTICAPCTRL;   //RTICaptureControlRegister
> +    uint32_t RTICOMPCTRL;  //RTICompareControlRegister
> +    uint32_t RTIFRC0;  //RTIFreeRunningCounter0Register
> +    uint32_t RTIUC0;   //RTIUpCounter0Register
> +    uint32_t RTICPUC0;   //RTICompareUpCounter0Register
> +    uint32_t reserved1 [0x4/4];
> +    uint32_t RTICAFRC0;  //RTICaptureFreeRunningCounter0Register
> +    uint32_t RTICAUC0;   //RTICaptureUpCounter0Register
> +    uint32_t reserved2 [0x8/4];
> +    uint32_t RTIFRC1;  //RTIFreeRunningCounter1Register
> +    uint32_t RTIUC1;   //RTIUpCounter1Register
> +    uint32_t RTICPUC1;   //RTICompareUpCounter1Register
> +    uint32_t reserved3 [0x4/4];
> +    uint32_t RTICAFRC1;  //RTICaptureFreeRunningCounter1Register
> +    uint32_t RTICAUC1;   //RTICaptureUpCounter1Register
> +    uint32_t reserved4 [0x8/4];
> +    uint32_t RTICOMP0;   //RTICompare0Register
> +    uint32_t RTIUDCP0;   //RTIUpdateCompare0Register
> +    uint32_t RTICOMP1;   //RTICompare1Register
> +    uint32_t RTIUDCP1;   //RTIUpdateCompare1Register
> +    uint32_t RTICOMP2;   //RTICompare2Register
> +    uint32_t RTIUDCP2;   //RTIUpdateCompare2Register
> +    uint32_t RTICOMP3;   //RTICompare3Register
> +    uint32_t RTIUDCP3;   //RTIUpdateCompare3Register
> +    uint32_t RTITBLCOMP;   //RTITimebaseLowCompareRegister
> +    uint32_t RTITBHCOMP;   //RTITimebaseHighCompareRegister
> +    uint32_t reserved5 [0x8/4];
> +    uint32_t RTISETINTENA;   //RTISetInterruptEnableRegister
> +    uint32_t RTICLEARINTENA;   //RTIClearInterruptEnableRegister
> +    uint32_t RTIINTFLAG;   //RTIInterruptFlagRegister
> +    uint32_t reserved6 [0x4/4];
> +    uint32_t RTIDWDCTRL;   //DigitalWatchdogControlRegister
> +    uint32_t RTIDWDPRLD;   //DigitalWatchdogPreloadRegister
> +    uint32_t RTIWDSTATUS;  //WatchdogStatusRegister
> +    uint32_t RTIWDKEY;   //RTIWatchdogKeyRegister
> +    uint32_t RTIDWDCNTR;   //RTIDigitalWatchdogDownCounterRegister
> +    uint32_t RTIWWDRXNCTRL;  //DigitalWindowedWatchdogReactionControlRegister
> +    uint32_t RTIWWDSIZECTRL;   //DigitalWindowedWatchdogWindowSizeControlRegister
> +    uint32_t RTIINTCLRENABLE;  //RTICompareInterruptClearEnableRegister
> +    uint32_t RTICOMP0CLR;  //RTICompare0ClearRegister
> +    uint32_t RTICOMP1CLR;  //RTICompare1ClearRegister
> +    uint32_t RTICOMP2CLR;  //RTICompare2ClearRegister
> +    uint32_t RTICOMP3CLR;  //RTICompare3ClearRegister
> +}tms570_rti_t;
> +
> +#define TMS570_RTI (*(volatile tms570_rti_t*)0xFFFFFC00)
> +
> +/** @} */
> +
> +#ifdef __cplusplus
> +}
> +#endif /* __cplusplus */
> +
> +#endif /* ASM */
> +
> +#endif /* LIBBSP_ARM_TMS570_IRQ_H */
> diff --git a/c/src/lib/libbsp/arm/tms570/include/tms570-sci-driver.h b/c/src/lib/libbsp/arm/tms570/include/tms570-sci-driver.h
> new file mode 100644
> index 0000000..37ea8ce
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/include/tms570-sci-driver.h
> @@ -0,0 +1,39 @@
> +/**
> + * @file tms570-sci-driver.h
> + *
> + * @ingroup tms570
> + *
> + * @brief Declaration of serial's driver inner structure.
> + */
> +#ifndef TMS570_SCI_DRIVER
> +#define TMS570_SCI_DRIVER
> +
> +#include <rtems/termiostypes.h>
> +#include <rtems/irq.h>
> +#include <bsp/tms570-sci.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */
> +
> +/* Low-level driver specific data structure */
> +typedef struct {
> +  const char *device_name;
> +  volatile tms570_sci_t *regs;
> +  int tx_chars_in_hw;
> +  rtems_vector_number irq;
> +} tms570_sci_context;
> +
> +extern const rtems_termios_device_handler tms570_sci_handler_polled;
> +
> +extern const rtems_termios_device_handler tms570_sci_handler_interrupt;
> +
> +extern const tms570_sci_context driver_context_table[];
> +
> +/** @} */
> +
> +#ifdef __cplusplus
> +}
> +#endif /* __cplusplus */
> +
> +#endif /* TMS570_SCI_DRIVER */
> diff --git a/c/src/lib/libbsp/arm/tms570/include/tms570-sci.h b/c/src/lib/libbsp/arm/tms570/include/tms570-sci.h
> new file mode 100644
> index 0000000..da37c4d
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/include/tms570-sci.h
> @@ -0,0 +1,75 @@
> +/**
> + * @file tms570-sci.h
> + *
> + * @ingroup tms570
> + *
> + * @brief Serial Communication Interface (SCI) header file.
> + */
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + * by embedded brains GmbH and others
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifndef LIBBSP_ARM_TMS570_SCI_H
> +#define LIBBSP_ARM_TMS570_SCI_H
> +
> +#include <libchip/serial.h>
> +
> +#include <rtems.h>
> +#include <stdint.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */
> +
> +typedef struct {
> +  uint32_t SCIGCR0;    /*SCIGlobalControlRegister0*/
> +  uint32_t SCIGCR1;    /*SCIGlobalControlRegister1*/
> +  uint32_t reserved1 [0x4/4];
> +  uint32_t SCISETINT;  /*SCISetInterruptRegister*/
> +  uint32_t SCICLEARINT;        /*SCIClearInterruptRegister*/
> +  uint32_t SCISETINTLVL;       /*SCISetInterruptLevelRegister*/
> +  uint32_t SCICLEARINTLVL;     /*SCIClearInterruptLevelRegister*/
> +  uint32_t SCIFLR;     /*SCIFlagsRegister*/
> +  uint32_t SCIINTVECT0;        /*SCIInterruptVectorOffset0*/
> +  uint32_t SCIINTVECT1;        /*SCIInterruptVectorOffset1*/
> +  uint32_t SCIFORMAT;  /*SCIFormatControlRegister*/
> +  uint32_t BRS;        /*BaudRateSelectionRegister*/
> +  uint32_t SCIED;      /*ReceiverEmulationDataBuffer*/
> +  uint32_t SCIRD;      /*ReceiverDataBuffer*/
> +  uint32_t SCITD;      /*TransmitDataBuffer*/
> +  uint32_t SCIPIO0;    /*SCIPinI/OControlRegister0*/
> +  uint32_t SCIPIO1;    /*SCIPinI/OControlRegister1*/
> +  uint32_t SCIPIO2;    /*SCIPinI/OControlRegister2*/
> +  uint32_t SCIPIO3;    /*SCIPinI/OControlRegister3*/
> +  uint32_t SCIPIO4;    /*SCIPinI/OControlRegister4*/
> +  uint32_t SCIPIO5;    /*SCIPinI/OControlRegister5*/
> +  uint32_t SCIPIO6;    /*SCIPinI/OControlRegister6*/
> +  uint32_t SCIPIO7;    /*SCIPinI/OControlRegister7*/
> +  uint32_t SCIPIO8;    /*SCIPinI/OControlRegister8*/
> +  uint32_t reserved2 [0x30/4];
> +  uint32_t IODFTCTRL;  /*Input/OutputErrorEnableRegister*/
> +}tms570_sci_t;
> +
> +#define TMS570_SCI (*(volatile tms570_sci_t*)0xFFF7E400U)
> +#define TMS570_SCI2 (*(volatile tms570_sci_t*)0xFFF7E500U)
> +
> +/** @} */
> +
> +#ifdef __cplusplus
> +}
> +#endif /* __cplusplus */
> +
> +#endif
> diff --git a/c/src/lib/libbsp/arm/tms570/include/tms570-vim.h b/c/src/lib/libbsp/arm/tms570/include/tms570-vim.h
> new file mode 100644
> index 0000000..6d3bb54
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/include/tms570-vim.h
> @@ -0,0 +1,74 @@
> +/**
> + * @file tms570-vim.h
> + *
> + * @ingroup tms570
> + *
> + * @brief Vectored Interrupt Module (VIM) header file.
> + */
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + * by embedded brains GmbH and others
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifndef LIBBSP_ARM_TMS570_VIM_H
> +#define LIBBSP_ARM_TMS570_VIM_H
> +
> +#ifndef ASM
> +#include <rtems.h>
> +#include <stdint.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */
> +
> +typedef struct{
> +    uint32_t PARFLG;   /* InterruptVectorTableParityFlagRegister */
> +    uint32_t PARCTL;   /* InterruptVectorTableParityControlRegister */
> +    uint32_t ADDERR;   /* AddressParityErrorRegister */
> +    uint32_t FBPARERR;         /* Fall-BackAddressParityErrorRegister */
> +    uint32_t reserved1 [0x4/4];
> +    uint32_t IRQINDEX;         /* IRQIndexOffsetVectorRegister */
> +    uint32_t FIQINDEX;         /* FIQIndexOffsetVectorRegister */
> +    uint32_t reserved2 [0x8/4];
> +    uint32_t FIRQPR[3];        /* FIQ/IRQProgramControlRegister0 */
> +    uint32_t reserved3 [0x4/4];
> +    uint32_t INTREQ[3];        /* PendingInterruptReadLocationRegister0 */
> +    uint32_t reserved4 [0x4/4];
> +    uint32_t REQENASET[3];     /* InterruptEnableSetRegister0 */
> +    uint32_t reserved5 [0x4/4];
> +    uint32_t REQENACLR[3];     /* InterruptEnableClearRegister0 */
> +    uint32_t reserved6 [0x4/4];
> +    uint32_t WAKEENASET[3];    /* Wake-upEnableSetRegister0 */
> +    uint32_t reserved7 [0x4/4];
> +    uint32_t WAKEENACLR[3];    /* Wake-upEnableClearRegister0 */
> +    uint32_t reserved8 [0x4/4];
> +    uint32_t IRQVECREG;        /* IRQInterruptVectorRegister */
> +    uint32_t FIQVECREG;        /* FIQInterruptVectorRegister */
> +    uint32_t CAPEVT;   /* CaptureEventRegister */
> +    uint32_t reserved9 [0x4/4];
> +    uint32_t CHANCTRL [0x5c/4]; /* VIM Interrupt Control Register (PARSER ERROR) */
> +}tms570_vim_t;
> +
> +#define TMS570_VIM (*(volatile tms570_vim_t*)0xFFFFFDEC)
> +
> +#endif
> +
> +/** @} */
> +
> +#ifdef __cplusplus
> +}
> +#endif /* __cplusplus */
> +
> +#endif /* LIBBSP_ARM_TMS570_IRQ_H */
> diff --git a/c/src/lib/libbsp/arm/tms570/include/tms570.h b/c/src/lib/libbsp/arm/tms570/include/tms570.h
> new file mode 100644
> index 0000000..e7f43f2
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/include/tms570.h
> @@ -0,0 +1,29 @@
> +/**
> + * @file tms570.h
> + *
> + * @ingroup tms570
> + *
> + * @brief Specific register definitions according to tms570 family boards.
> + */
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifndef LIBBSP_ARM_TMS570_H
> +#define LIBBSP_ARM_TMS570_H
> +
> +
> +
> +#endif /* LIBBSP_ARM_TMS570_H */
> diff --git a/c/src/lib/libbsp/arm/tms570/irq/irq.c b/c/src/lib/libbsp/arm/tms570/irq/irq.c
> new file mode 100644
> index 0000000..5f72356
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/irq/irq.c
> @@ -0,0 +1,182 @@
> +/**
> + * @file irq.c
> + *
> + * @ingroup tms570
> + *
> + * @brief TMS570 interrupt support functions definitions.
> + */
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#include <rtems/score/armv4.h>
> +
> +#include <bsp.h>
> +#include <bsp/irq-generic.h>
> +#include <bsp/tms570-vim.h>
> +#include <bsp/irq.h>
> +#include <rtems/score/armv4.h>
> +
> +/**
> + * @brief Check if isr vector is valid
> + *
> + * Check if isr vector is valid by using BSP_INTERRUPT_VECTOR_MAX and
> + * BSP_INTERRUPT_VECTOR_MIN defined in irq.h
> + *
> + * @param[in] vector interrupt vector to be checked.
> + * @retval TRUE vector is valid.
> + * @retval FALSE vector is invalid
> + */
> +static inline bool tms570_irq_is_valid(rtems_vector_number vector)
> +{
> +  return (vector <= BSP_INTERRUPT_VECTOR_MAX) &&
> +         (vector > BSP_INTERRUPT_VECTOR_MIN);
> +}
> +
> +unsigned int priorityTable[BSP_INTERRUPT_VECTOR_MAX+1];
> +
> +/**
> + * @brief Set priority of the interrupt vector.
> + *
> + * This function is here because of compability. It should set
> + * priority of the interrupt vector.
> + * !!!WARNING!!!
> + * It does not set any priority at HW layer. It is nearly imposible to set
> + * priority of the interrupt on TMS570 in the nice way.
> + *
> + * @param[in] vector vector of isr
> + * @param[in] priority new priority assigned to the vector
> + * @return Void
> + */
> +void tms570_irq_set_priority(rtems_vector_number vector, unsigned priority){
> +  if (tms570_irq_is_valid(vector)) {
> +    priorityTable[vector] = priority;
> +  }
> +}
> +
> +/**
> + * @brief Gets priority of the interrupt vector.
> + *
> + * This function is here because of compability. It returns priority
> + * of the isr vector last set by tms570_irq_set_priority function.
> + * !!!WARNING!!!
> + * It does not return any priority of the HW layer.
> + *
> + * @param[in] vector vector of isr
> + * @retval 0 vector is invalid.
> + * @retval priority priority of the interrupt
> + */
> +unsigned tms570_irq_get_priority(rtems_vector_number vector){
> +  if (tms570_irq_is_valid(vector)) {
> +   return priorityTable[vector];
> + }
> + return 0;
> +}
> +
> +/**
> + * @brief Interrupt dispatch
> + *
> + * Called by OS to determine which interrupt occured.
> + * Function passes control to interrupt handler.
> + *
> + * @return Void
> + */
> +void bsp_interrupt_dispatch(void)
> +{
> +
> +  rtems_vector_number vector = TMS570_VIM.IRQINDEX-1;
> +
> +  bsp_interrupt_handler_dispatch(vector);
> +}
> +
> +/**
> + * @brief enables interrupt vector in the HW
> + *
> + * Enables HW interrupt for specified vector
> + *
> + * @param[in] vector vector of the isr which needs to be enabled.
> + * @retval RTEMS_INVALID_ID vector is invalid.
> + * @retval RTEMS_SUCCESSFUL interrupt source enabled.
> + */
> +rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
> +{
> +  if(!tms570_irq_is_valid(vector))
> +    return RTEMS_INVALID_ID;
> +
> +  TMS570_VIM.REQENASET[vector >> 5] = 1 << (vector & 0x1f);
> +
> +  return RTEMS_SUCCESSFUL;
> +}
> +
> +/**
> + * @brief disables interrupt vector in the HW
> + *
> + * Disables HW interrupt for specified vector
> + *
> + * @param[in] vector vector of the isr which needs to be disabled.
> + * @retval RTEMS_INVALID_ID vector is invalid.
> + * @retval RTEMS_SUCCESSFUL interrupt source disabled.
> + */
> +rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
> +{
> +  if(!tms570_irq_is_valid(vector))
> +    return RTEMS_INVALID_ID;
> +
> +  TMS570_VIM.REQENACLR[vector >> 5] = 1 << (vector & 0x1f);
> +
> +  return RTEMS_SUCCESSFUL;
> +}
> +
> +/**
> + * @brief Init function of interrupt module
> + *
> + * Resets vectored interrupt interface to default state.
> + * Disables all interrupts.
> + * Set all sources as IRQ (not FIR).
> + *
> + * @retval RTEMS_SUCCESSFUL All is set
> + */
> +rtems_status_code bsp_interrupt_facility_initialize(void)
> +{
> +  void (**vim_vec)(void) = (void (**)(void)) 0xFFF82000;
> +  unsigned int value = 0x00010203;
> +  unsigned int i = 0;
> +  uint32_t sctlr;
> +
> +  /* Disable interrupts */
> +  for(i = 0; i < 3; i++)
> +    TMS570_VIM.REQENACLR[i] = 0xffffffff;
> +  /* Map default events on interrupt vectors */
> +  for(i=0;i<24;i+=1,value += 0x04040404)
> +    TMS570_VIM.CHANCTRL[i] = value;
> +  /* Set all vectors as IRQ (not FIR) */
> +  TMS570_VIM.FIRQPR[0] = 3;
> +  TMS570_VIM.FIRQPR[1] = 0;
> +  TMS570_VIM.FIRQPR[2] = 0;
> +
> +  /*_CPU_ISR_install_vector(ARM_EXCEPTION_IRQ, _ARMV4_Exception_interrupt, NULL);*/
> +  for(i = 0; i <= 94; i++)
> +    vim_vec[i] = _ARMV4_Exception_interrupt;
> +
> +  /* Clear bit VE in SCTLR register to not use VIM IRQ exception bypass*/
> +  asm volatile ("mrc p15, 0, %0, c1, c0, 0\n": "=r" (sctlr));
> +  sctlr &= ~(1 << 24);
> +  asm volatile ("mcr p15, 0, %0, c1, c0, 0\n": : "r" (sctlr));
> +
> +  return RTEMS_SUCCESSFUL;
> +}
> +
> +
> +
> diff --git a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk-testsuite.tcfg b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk-testsuite.tcfg
> new file mode 100644
> index 0000000..6f722bc
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk-testsuite.tcfg
> @@ -0,0 +1,19 @@
> +#
> +# tms570ls3137 mbed RTEMS Test Database.
> +#
> +# Format is one line per test that is _NOT_ built.
> +#
> +
> +flashdisk01
> +utf8proc01
> +spstkalloc02
> +fsdosfsname01
> +jffs2_fserror
> +jffs2_fslink
> +jffs2_fspatheval
> +jffs2_fspermission
> +jffs2_fsrdwr
> +jffs2_fssymlink
> +jffs2_fstime
> +pppd
> +mghttpd01
> diff --git a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk.cfg b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk.cfg
> new file mode 100644
> index 0000000..ed43811
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk.cfg
> @@ -0,0 +1,19 @@
> +#
> +# Config file for mbed TMS570LS3137 board.
> +#
> +
> +include $(RTEMS_ROOT)/make/custom/default.cfg
> +
> +RTEMS_CPU = arm
> +
> +CPU_CFLAGS = -march=armv7-r -mthumb -mbig-endian
> +
> +CFLAGS_OPTIMIZE_V = -O2 -ggdb3 -DNDEBUG
> +BINEXT?=.bin
> +# This defines the operations performed on the linked executable.
> +# is currently required.
> +define bsp-post-link
> +    $(OBJCOPY) -O binary --strip-all \
> +        $(basename $@)$(EXEEXT) $(basename $@)$(BINEXT)
> +    $(SIZE) $(basename $@)$(EXEEXT)
> +endef
> diff --git a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_intram.cfg b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_intram.cfg
> new file mode 100644
> index 0000000..d4a7b44
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_intram.cfg
> @@ -0,0 +1,20 @@
> +#
> +# Config file for mbed TMS570LS3137 board.
> +#
> +
> +include $(RTEMS_ROOT)/make/custom/default.cfg
> +
> +RTEMS_CPU = arm
> +
> +CPU_CFLAGS = -march=armv7-r -mthumb -mbig-endian
> +
> +#CFLAGS_OPTIMIZE_V = -O2 -ggdb3 -DNDEBUG
> +CFLAGS_OPTIMIZE_V = -O0 -ggdb3
> +BINEXT?=.bin
> +# This defines the operations performed on the linked executable.
> +# is currently required.
> +define bsp-post-link
> +    $(OBJCOPY) -O binary --strip-all \
> +        $(basename $@)$(EXEEXT) $(basename $@)$(BINEXT)
> +    $(SIZE) $(basename $@)$(EXEEXT)
> +endef
> diff --git a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_sdram.cfg b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_sdram.cfg
> new file mode 100644
> index 0000000..ed43811
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_sdram.cfg
> @@ -0,0 +1,19 @@
> +#
> +# Config file for mbed TMS570LS3137 board.
> +#
> +
> +include $(RTEMS_ROOT)/make/custom/default.cfg
> +
> +RTEMS_CPU = arm
> +
> +CPU_CFLAGS = -march=armv7-r -mthumb -mbig-endian
> +
> +CFLAGS_OPTIMIZE_V = -O2 -ggdb3 -DNDEBUG
> +BINEXT?=.bin
> +# This defines the operations performed on the linked executable.
> +# is currently required.
> +define bsp-post-link
> +    $(OBJCOPY) -O binary --strip-all \
> +        $(basename $@)$(EXEEXT) $(basename $@)$(BINEXT)
> +    $(SIZE) $(basename $@)$(EXEEXT)
> +endef
> diff --git a/c/src/lib/libbsp/arm/tms570/network/tms570-ethernet.c b/c/src/lib/libbsp/arm/tms570/network/tms570-ethernet.c
> new file mode 100644
> index 0000000..e69de29
> diff --git a/c/src/lib/libbsp/arm/tms570/network/tms570-ethernet.h b/c/src/lib/libbsp/arm/tms570/network/tms570-ethernet.h
> new file mode 100644
> index 0000000..e69de29
> diff --git a/c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c b/c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c
> new file mode 100644
> index 0000000..0b7ff79
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/pom/tms570-pom.c
> @@ -0,0 +1,100 @@
> +/**
> + * @file tms570-pom.c
> + *
> + * @ingroup tms570
> + *
> + * @brief TMS570 Parameter Overlay Module functions definitions.
> + */
> +
> + /*
> + * Copyright (c) 2014 Pavel Pisa <pisa at cmp.felk.cvut.cz>
> + *
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#include <stdint.h>
> +#include <bsp/tms570-pom.h>
> +#include <bsp/linker-symbols.h>
> +#include <bsp.h>
> +
> +/**
> + * @brief Prints part of the memory
> + *
> + * debug function
> + *
> + * @retval 0
> + */
> +int mem_dump(void *buf, unsigned long start, unsigned long len, int blen)
> +{
> +  unsigned long addr=start;
> +  volatile unsigned char *p=buf;
> +  int i;
> +
> +  while(len){
> +    printk("%08lX:",addr);
> +    i=len>16?16:len;
> +    addr+=i;
> +    len-=i;
> +    while(i>0){
> +      i -= blen;
> +      switch(blen){
> +        case 4:
> +          printk("%08lX%c",(unsigned long)*(volatile uint32_t*)p,i>0?' ':'\n');
> +          break;
> +        case 2:
> +          printk("%04X%c",*(volatile uint16_t*)p,i>0?' ':'\n');
> +          break;
> +        default:
> +          printk("%02X%c",*(volatile uint8_t*)(p),i>0?' ':'\n');
> +          break;
> +      }
> +      p += blen;
> +    }
> +  }
> +  return 0;
> +}
> +
> +/**
> + * @brief remaps vector table
> + *
> + * transfer the rtems start vector table to address 0x0
> + *
> + * @retval Void
> + */
> +void tms570_pom_remap(void)
> +{
> +
> +    int i;
> +    uint32_t vec_overlay_start = 0x08000000;
> +
> +    memcpy((void*)vec_overlay_start, bsp_start_vector_table_begin, 64);
> +
> +    TMS570_POM.GLBCTRL = 0;
> +
> +    for (i = 0; i < TMS570_POM_REGIONS; i++)
> +        TMS570_POM.REG[i].REGSIZE = TMS570_POM_REGSIZE_DISABLED;
> +
> +    TMS570_POM.REG[0].PROGSTART = 0x0 & TMS570_POM_REGADDRMASK;
> +    TMS570_POM.REG[0].OVLSTART = vec_overlay_start & TMS570_POM_REGADDRMASK;
> +    TMS570_POM.REG[0].REGSIZE = TMS570_POM_REGSIZE_64B;
> +
> +    TMS570_POM.GLBCTRL = TMS570_POM_GLBCTRL_ENABLE |
> +                         (vec_overlay_start & ~TMS570_POM_REGADDRMASK);
> +
> +  #ifdef POM_REMAP_TEST
> +    p32[1] = 0xe12fff1e;
> +
> +    mem_dump((uint8_t *)0x00000000, 0x00000000, 256, 1);
> +
> +    printk("Probing call to address 0x00000004\n");
> +    ((void(*)(void))4)();
> +    printk("POM call really returned\n");
> +  #endif /*POM_REMAP_TEST*/
> +}
> diff --git a/c/src/lib/libbsp/arm/tms570/startup/bspreset.c b/c/src/lib/libbsp/arm/tms570/startup/bspreset.c
> new file mode 100644
> index 0000000..6a043f5
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/startup/bspreset.c
> @@ -0,0 +1,37 @@
> +/**
> + * @file bspreset.c
> + *
> + * @ingroup tms570
> + *
> + * @brief Reset code.
> + */
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +
> +#include <rtems.h>
> +
> +#include <bsp/bootcard.h>
> +#include <bsp/tms570.h>
> +#include <bsp/start.h>
> +
> +BSP_START_TEXT_SECTION __attribute__( ( flatten ) ) void bsp_reset( void )
> +{
> +
> +  while ( true ) {
> +    /* Do nothing */
> +  }
> +}
> diff --git a/c/src/lib/libbsp/arm/tms570/startup/bspstart.c b/c/src/lib/libbsp/arm/tms570/startup/bspstart.c
> new file mode 100644
> index 0000000..9a7e434
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/startup/bspstart.c
> @@ -0,0 +1,46 @@
> +/**
> + * @file bspstart.c
> + *
> + * @ingroup tms570
> + *
> + * @brief Startup code.
> + */
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#include <bsp.h>
> +#include <bsp/tms570-pom.h>
> +#include <bsp/irq-generic.h>
> +#include <bsp/start.h>
> +#include <bsp/bootcard.h>
> +
> +void bsp_pretasking_hook( void )
> +{
> +
> +}
> +
> +void bsp_start( void )
> +{
> +
> +    /* set the cpu mode to supervisor and big endian */
> +    arm_cpu_mode = 0x213;
> +
> +    tms570_pom_remap();
> +
> +    /* Interrupts */
> +    bsp_interrupt_initialize();
> +
> +}
> diff --git a/c/src/lib/libbsp/arm/tms570/startup/bspstarthooks.c b/c/src/lib/libbsp/arm/tms570/startup/bspstarthooks.c
> new file mode 100644
> index 0000000..45a6903
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/startup/bspstarthooks.c
> @@ -0,0 +1,42 @@
> +/**
> + * @file bspstarthooks.c
> + *
> + * @ingroup tms570
> + *
> + * @brief First configurations and initializations to the correct
> + *              functionality of the board.
> + */
> +
> +/*
> + * Copyright (c) 2014 Premysl Houdek <kom541000 at gmail.com>
> + *
> + * Google Summer of Code 2014 at
> + * Czech Technical University in Prague
> + * Zikova 1903/4
> + * 166 36 Praha 6
> + * Czech Republic
> + *
> + * Based on LPC24xx and LPC1768 BSP
> + * by embedded brains GmbH and others
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#include <bsp.h>
> +#include <bsp/start.h>
> +
> +
> +BSP_START_TEXT_SECTION void bsp_start_hook_0( void )
> +{
> +
> +}
> +
> +BSP_START_TEXT_SECTION void bsp_start_hook_1( void )
> +{
> +  bsp_start_copy_sections();
> +  bsp_start_clear_bss();
> +
> +  /* At this point we can use objects outside the .start section  */
> +}
> diff --git a/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk b/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk
> new file mode 100644
> index 0000000..e02dcd6
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk
> @@ -0,0 +1,27 @@
> +
> +MEMORY {
> +       ROM_INT (RX)  : ORIGIN = 0x00000000, LENGTH = 3M
> +       RAM_INT (AIW) : ORIGIN = 0x08000000, LENGTH = 256k
> +       RAM_EXT (AIWX) : ORIGIN = 0x80000000, LENGTH = 8M
> +}
> +
> +REGION_ALIAS ("REGION_START", ROM_INT);
> +REGION_ALIAS ("REGION_VECTOR", RAM_INT);
> +REGION_ALIAS ("REGION_TEXT", ROM_INT);
> +REGION_ALIAS ("REGION_TEXT_LOAD", ROM_INT);
> +REGION_ALIAS ("REGION_RODATA", ROM_INT);
> +REGION_ALIAS ("REGION_RODATA_LOAD", ROM_INT);
> +REGION_ALIAS ("REGION_DATA", RAM_INT);
> +REGION_ALIAS ("REGION_DATA_LOAD", ROM_INT);
> +REGION_ALIAS ("REGION_FAST_TEXT", RAM_INT);
> +REGION_ALIAS ("REGION_FAST_TEXT_LOAD", ROM_INT);
> +REGION_ALIAS ("REGION_FAST_DATA", RAM_INT);
> +REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
> +REGION_ALIAS ("REGION_BSS", RAM_INT);
> +REGION_ALIAS ("REGION_WORK", RAM_INT);
> +REGION_ALIAS ("REGION_STACK", RAM_INT);
> +
> +bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
> +bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);
> +
> +INCLUDE linkcmds.armv4
> diff --git a/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk_intram b/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk_intram
> new file mode 100644
> index 0000000..19bb7b2
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk_intram
> @@ -0,0 +1,28 @@
> +
> +MEMORY {
> +       ROM_INT (RX) :   ORIGIN = 0x00000000, LENGTH = 3M
> +       RAM_INT_VEC :    ORIGIN = 0x08000000, LENGTH = 1k
> +       RAM_INT (AIWX) : ORIGIN = 0x08000400, LENGTH = 256k - 1k
> +       RAM_EXT (AIW) :  ORIGIN = 0x80000000, LENGTH = 8M
> +}
> +
> +REGION_ALIAS ("REGION_START", RAM_INT);
> +REGION_ALIAS ("REGION_VECTOR", RAM_INT);
> +REGION_ALIAS ("REGION_TEXT", RAM_INT);
> +REGION_ALIAS ("REGION_TEXT_LOAD", RAM_INT);
> +REGION_ALIAS ("REGION_RODATA", RAM_INT);
> +REGION_ALIAS ("REGION_RODATA_LOAD", RAM_INT);
> +REGION_ALIAS ("REGION_DATA", RAM_INT);
> +REGION_ALIAS ("REGION_DATA_LOAD", RAM_INT);
> +REGION_ALIAS ("REGION_FAST_TEXT", RAM_INT);
> +REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM_INT);
> +REGION_ALIAS ("REGION_FAST_DATA", RAM_INT);
> +REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_INT);
> +REGION_ALIAS ("REGION_BSS", RAM_INT);
> +REGION_ALIAS ("REGION_WORK", RAM_INT);
> +REGION_ALIAS ("REGION_STACK", RAM_INT);
> +
> +bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
> +bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);
> +
> +INCLUDE linkcmds.armv4
> diff --git a/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk_sdram b/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk_sdram
> new file mode 100644
> index 0000000..110179f
> --- /dev/null
> +++ b/c/src/lib/libbsp/arm/tms570/startup/linkcmds.tms570ls3137_hdk_sdram
> @@ -0,0 +1,27 @@
> +
> +MEMORY {
> +       ROM_INT (RX)  : ORIGIN = 0x00000000, LENGTH = 3M
> +       RAM_INT (AIW) : ORIGIN = 0x08000000, LENGTH = 256k
> +       RAM_EXT (AIWX) : ORIGIN = 0x80000000, LENGTH = 8M
> +}
> +
> +REGION_ALIAS ("REGION_START", RAM_EXT);
> +REGION_ALIAS ("REGION_VECTOR", RAM_EXT);
> +REGION_ALIAS ("REGION_TEXT", RAM_EXT);
> +REGION_ALIAS ("REGION_TEXT_LOAD", RAM_EXT);
> +REGION_ALIAS ("REGION_RODATA", RAM_EXT);
> +REGION_ALIAS ("REGION_RODATA_LOAD", RAM_EXT);
> +REGION_ALIAS ("REGION_DATA", RAM_EXT);
> +REGION_ALIAS ("REGION_DATA_LOAD", RAM_EXT);
> +REGION_ALIAS ("REGION_FAST_TEXT", RAM_EXT);
> +REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM_EXT);
> +REGION_ALIAS ("REGION_FAST_DATA", RAM_EXT);
> +REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
> +REGION_ALIAS ("REGION_BSS", RAM_EXT);
> +REGION_ALIAS ("REGION_WORK", RAM_EXT);
> +REGION_ALIAS ("REGION_STACK", RAM_EXT);
> +
> +bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
> +bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);
> +
> +INCLUDE linkcmds.armv4
> --
> 1.7.10.4
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel



-- 

Daniel F. Gutson
Chief Engineering Officer, SPD


San Lorenzo 47, 3rd Floor, Office 5

Córdoba, Argentina


Phone: +54 351 4217888 / +54 351 4218211

Skype: dgutson



More information about the devel mailing list