diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-08-15 20:21:00 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-08-15 20:21:00 +0000 |
commit | 61f8fb0e3d35c1da13d6a429d68cc694517095de (patch) | |
tree | 05b9f933d56e6e362a55aa9ac85722093eeb6450 /c/src/lib/libbsp/bfin | |
parent | 2008-08-15 Joel Sherrill <joel.sherrill@OARcorp.com> (diff) | |
download | rtems-61f8fb0e3d35c1da13d6a429d68cc694517095de.tar.bz2 |
2008-08-15 Allan Hessenflow <allanh@kallisti.com>
* ChangeLog, Makefile.am, README, bsp_specs, configure.ac,
preinstall.am, console/console.c, include/bsp.h,
network/networkconfig.c, start/start.S, startup/bspstart.c,
startup/linkcmds: New files.
Diffstat (limited to 'c/src/lib/libbsp/bfin')
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/ChangeLog | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/Makefile.am | 69 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/README | 41 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/bsp_specs | 10 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/configure.ac | 29 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/console/console.c | 132 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/include/bsp.h | 139 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/network/networkconfig.c | 71 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/preinstall.am | 58 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/start/start.S | 102 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c | 241 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/bf537Stamp/startup/linkcmds | 170 |
12 files changed, 1069 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/ChangeLog b/c/src/lib/libbsp/bfin/bf537Stamp/ChangeLog new file mode 100644 index 0000000000..d08f1a70f1 --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/ChangeLog @@ -0,0 +1,7 @@ +2008-08-15 Allan Hessenflow <allanh@kallisti.com> + + * ChangeLog, Makefile.am, README, bsp_specs, configure.ac, + preinstall.am, console/console.c, include/bsp.h, + network/networkconfig.c, start/start.S, startup/bspstart.c, + startup/linkcmds: New files. + diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/Makefile.am b/c/src/lib/libbsp/bfin/bf537Stamp/Makefile.am new file mode 100644 index 0000000000..8d2c667e04 --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/Makefile.am @@ -0,0 +1,69 @@ +## +## $Id$ +## + +ACLOCAL_AMFLAGS = -I ../../../../aclocal + +include $(top_srcdir)/../../../../automake/compile.am +include $(top_srcdir)/../../bsp.am + +dist_project_lib_DATA = bsp_specs + +include_HEADERS = include/bsp.h +include_HEADERS += ../../shared/include/tm27.h + +nodist_include_HEADERS = include/bspopts.h +DISTCLEANFILES = include/bspopts.h + +noinst_PROGRAMS = + +include_HEADERS += ../../shared/include/coverhd.h + +EXTRA_DIST = start/start.S +start.$(OBJEXT): start/start.S + $(CPPASCOMPILE) -DASM -o $@ -c $< +project_lib_DATA = start.$(OBJEXT) + +dist_project_lib_DATA += startup/linkcmds + +noinst_PROGRAMS += startup.rel +startup_rel_SOURCES = ../../shared/bsplibc.c ../../shared/bsppost.c \ + ../../shared/bsppredriverhook.c startup/bspstart.c \ + ../../shared/bspclean.c ../../shared/sbrk.c ../../shared/setvec.c \ + ../../shared/bootcard.c ../../shared/gnatinstallhandler.c +startup_rel_CPPFLAGS = $(AM_CPPFLAGS) +startup_rel_LDFLAGS = $(RTEMS_RELLDFLAGS) + +noinst_PROGRAMS += console.rel +console_rel_SOURCES = console/console.c +console_rel_CPPFLAGS = $(AM_CPPFLAGS) +console_rel_LDFLAGS = $(RTEMS_RELLDFLAGS) + +if HAS_NETWORKING +networkconfig_CPPFLAGS = -D__INSIDE_RTEMS_BSD_TCPIP_STACK__ +noinst_PROGRAMS += networkconfig.rel +networkconfig_rel_SOURCES = network/networkconfig.c +networkconfig_rel_CPPFLAGS = $(AM_CPPFLAGS) $(networkconfig_CPPFLAGS) +networkconfig_rel_LDFLAGS = $(RTEMS_RELLDFLAGS) +endif + +noinst_LIBRARIES = libbsp.a +libbsp_a_SOURCES = +libbsp_a_LIBADD = startup.rel console.rel +if HAS_NETWORKING +libbsp_a_LIBADD += networkconfig.rel +libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/network.rel +endif + +libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/mmu.rel +libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/interrupt.rel +libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/cache.rel +libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/uart.rel +libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/clock.rel +libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/rtc.rel +libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/timer.rel + +EXTRA_DIST += times + +include $(srcdir)/preinstall.am +include $(top_srcdir)/../../../../automake/local.am diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/README b/c/src/lib/libbsp/bfin/bf537Stamp/README new file mode 100644 index 0000000000..08a119a7bd --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/README @@ -0,0 +1,41 @@ +# +# $Id$ +# + +BSP NAME: bf537Stamp +BOARD: ADZS-BF537-STAMP +CPU FAMILY: Blackfin +CPU: Blackfin 537 +MODE: 32 bit mode + +DEBUG MONITOR: ICEBear +SIMULATOR: Skyeye + +PERIPHERALS +=========== +TIMERS: internal + RESOLUTION: 1 milisecond +SERIAL PORTS: internal UART (polled/interrupt) +REAL-TIME CLOCK: internal +DMA: internal +VIDEO: none +SCSI: none +NETWORKING: internal + +DRIVER INFORMATION +================== +CLOCK DRIVER: internal +TIMER DRIVER: internal + +STDIO +===== +PORT: Console port 0 +ELECTRICAL: RS-232 +BAUD: 57600 +BITS PER CHARACTER: 8 +PARITY: None +STOP BITS: 1 + +NOTES +===== + diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/bsp_specs b/c/src/lib/libbsp/bfin/bf537Stamp/bsp_specs new file mode 100644 index 0000000000..3f55bc6636 --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/bsp_specs @@ -0,0 +1,10 @@ +%rename endfile old_endfile +%rename startfile old_startfile +%rename link old_link + +*startfile: +%{!qrtems: %(old_startfile)} \ +%{!nostdlib: %{qrtems: start.o%s}} + +*link: +%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -e __start} diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/configure.ac b/c/src/lib/libbsp/bfin/bf537Stamp/configure.ac new file mode 100644 index 0000000000..37c5e05c0d --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/configure.ac @@ -0,0 +1,29 @@ +## Process this file with autoconf to produce a configure script. +## +## $Id$ +## + +AC_PREREQ(2.60) +AC_INIT([rtems-c-src-lib-libbsp-bfin-bf537Stamp],[_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.10]) +RTEMS_BSP_CONFIGURE + +RTEMS_PROG_CC_FOR_TARGET([-ansi -fasm]) +RTEMS_CANONICALIZE_TOOLS +RTEMS_PROG_CCAS + +RTEMS_CHECK_NETWORKING +AM_CONDITIONAL(HAS_NETWORKING,test "$HAS_NETWORKING" = "yes") + +## bsp-specific options +RTEMS_BSPOPTS_SET([CONSOLE_USE_INTERRUPTS],[*],[0]) +RTEMS_BSPOPTS_HELP([CONSOLE_USE_INTERRUPTS], +[The console driver can operate in either polled or interrupt mode.]) + +# Explicitly list all Makefiles here +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/console/console.c b/c/src/lib/libbsp/bfin/bf537Stamp/console/console.c new file mode 100644 index 0000000000..66d76d534f --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/console/console.c @@ -0,0 +1,132 @@ +/* Console driver for bf537Stamp + * + * Copyright (c) 2008 Kallisti Labs, Los Gatos, CA, USA + * written by Allan Hessenflow <allanh@kallisti.com> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + + +#include <rtems.h> +#include <rtems/libio.h> +#include <bsp.h> +#include <rtems/bspIo.h> + +#include <libcpu/bf537.h> +#include <libcpu/interrupt.h> +#include <libcpu/uart.h> + +/* +#undef CONSOLE_USE_INTERRUPTS +#define CONSOLE_USE_INTERRUPTS 1 +*/ + +static bfin_uart_channel_t channels[] = { + {"/dev/console", + (char *) UART0_BASE_ADDRESS, + CONSOLE_USE_INTERRUPTS, +#ifdef CONSOLE_FORCE_BAUD + CONSOLE_FORCE_BAUD, +#else + 0, +#endif + NULL, + 0}, + {"/dev/tty1", + (char *) UART1_BASE_ADDRESS, + CONSOLE_USE_INTERRUPTS, + 0, + NULL, + 0} +}; + +static bfin_uart_config_t config = { + SCLK, + sizeof(channels) / sizeof(channels[0]), + channels +}; + +#if CONSOLE_USE_INTERRUPTS +static bfin_isr_t bfinUARTISRs[] = { + {SIC_DMA8_UART0_RX_VECTOR, bfin_uart_isr, 0, 0, NULL}, + {SIC_DMA10_UART1_RX_VECTOR, bfin_uart_isr, 0, 0, NULL}, + {SIC_DMA9_UART0_TX_VECTOR, bfin_uart_isr, 0, 0, NULL}, + {SIC_DMA11_UART1_TX_VECTOR, bfin_uart_isr, 0, 0, NULL} +}; +#endif + + +static void bf537Stamp_BSP_output_char(char c) { + + bfin_uart_poll_write(0, c); +} + +static char bf537Stamp_BSP_poll_char(void) { + + return bfin_uart_poll_read(0); +} + +BSP_output_char_function_type BSP_output_char = bf537Stamp_BSP_output_char; +BSP_polling_getchar_function_type BSP_poll_char = bf537Stamp_BSP_poll_char; + +rtems_device_driver console_initialize(rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg) { + rtems_status_code status; +#if CONSOLE_USE_INTERRUPTS + int i; +#endif + + status = bfin_uart_initialize(major, &config); +#if CONSOLE_USE_INTERRUPTS + for (i = 0; i < sizeof(bfinUARTISRs) / sizeof(bfinUARTISRs[0]); i++) { + bfin_interrupt_register(&bfinUARTISRs[i]); + bfin_interrupt_enable(&bfinUARTISRs[i], TRUE); + } +#endif + + if (status != RTEMS_SUCCESSFUL) + rtems_fatal_error_occurred(status); + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver console_open(rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg) { + + return bfin_uart_open(major, minor, arg); +} + +rtems_device_driver console_close(rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg) { + + return rtems_termios_close(arg); +} + +rtems_device_driver console_read(rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg) { + + return rtems_termios_read(arg); +} + +rtems_device_driver console_write(rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg) { + + return rtems_termios_write(arg); +} + +rtems_device_driver console_control(rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg) { + + return rtems_termios_ioctl(arg); +} + diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/include/bsp.h b/c/src/lib/libbsp/bfin/bf537Stamp/include/bsp.h new file mode 100644 index 0000000000..0fd1f64acb --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/include/bsp.h @@ -0,0 +1,139 @@ +/* bsp.h + * + * This include file contains all board IO definitions for bf537Stamp. + * + * Copyright (c) 2006 by Atos Automacao Industrial Ltda. + * written by Alain Schaefer <alain.schaefer@easc.ch> + * and Antonio Giovanini <antonio@atos.com.br> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + + +#ifndef _BSP_H +#define _BSP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <bspopts.h> + +#include <rtems.h> +#include <rtems/console.h> +#include <rtems/clockdrv.h> + +#include <libcpu/bf537.h> +#include <libcpu/memoryRegs.h> + + +/* #define CLOCK_DRIVER_USE_FAST_IDLE */ + + +/* configure data cache to use 16K of each SRAM bank when enabled */ +#define BSP_DATA_CACHE_CONFIG (3 << DMEM_CONTROL_DMC_SHIFT) + + +/* + * PLL and clock setup values: + */ + +/* + * PLL configuration for bf533Stamp + * + * XTL = 27 MHz + * CLKIN = 13 MHz + * VCO = 391 MHz + * CCLK = 391 MHz + * SCLK = 130 MHz + */ + +#define PLL_CSEL 0x0000 /* CCLK = VCO */ +#define PLL_SSEL 0x0003 /* SCLK = CCLK/3 */ +#define PLL_MSEL 0x3A00 /* VCO = 29xCLKIN */ +#define PLL_DF 0x0001 /* CLKIN = XTL/2 */ + +#define CCLK 500000000 /* CORE CLOCK */ +#define SCLK 100000000 /* SYSTEM CLOCK */ + +#define CONSOLE_FORCE_BAUD 57600 + +/* + * Blackfin environment memory map + */ +#define L1_DATA_SRAM_A 0xff800000L + +#define FIFOLENGTH 0x100 + +/* + * confdefs.h overrides for this BSP: + * - number of termios serial ports (defaults to 1) + */ + +#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 2 + +/* + * Simple spin delay in microsecond units for device drivers. + * This is very dependent on the clock speed of the target. + */ + +#define rtems_bsp_delay( microseconds ) \ + { \ + } + +/* Constants */ + +#define RAM_START 0 +#define RAM_END 0x4000000 + +/* miscellaneous stuff assumed to exist */ + +/* + * Device Driver Table Entries + */ + +/* + * NOTE: Use the standard Console driver entry + */ + +/* + * NOTE: Use the standard Clock driver entry + */ + +/* functions */ + +/* + * Helper Function to use the EzKits LEDS. + * Can be used by the Application. + */ +void setLED(uint8_t value); + +/* + * Helper Function to use the EzKits LEDS + */ +uint8_t getLED(void); + +rtems_isr_entry set_vector( /* returns old vector */ + rtems_isr_entry handler, /* isr routine */ + rtems_vector_number vector, /* vector number */ + int type /* RTEMS or RAW intr */ +); + +/* + * Network driver configuration + */ +struct rtems_bsdnet_ifconfig; +extern int bf537Stamp_network_driver_attach(struct rtems_bsdnet_ifconfig *, int); + +#define RTEMS_BSP_NETWORK_DRIVER_NAME "eth1" +#define RTEMS_BSP_NETWORK_DRIVER_ATTACH bf537Stamp_network_driver_attach + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/network/networkconfig.c b/c/src/lib/libbsp/bfin/bf537Stamp/network/networkconfig.c new file mode 100644 index 0000000000..08f8a09927 --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/network/networkconfig.c @@ -0,0 +1,71 @@ +/* networkconfig.c + * + * This file contains the network driver attach function and configuration + * for the bf537Stamp. + * + * Copyright (c) 2008 Kallisti Labs, Los Gatos, CA, USA + * written by Allan Hessenflow <allanh@kallisti.com> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + + + +#include <bsp.h> +#include <rtems/rtems_bsdnet.h> +#include <libcpu/interrupt.h> +#include <libcpu/ethernet.h> + + +static bfin_ethernet_configuration_t ethConfig = { + SCLK, + (void *) EMAC_BASE_ADDRESS, + (void *) DMA1_BASE_ADDRESS, /* ethernet receive */ + (void *) DMA2_BASE_ADDRESS, /* ethernet transmit */ + 16, /* receive descriptors */ + 16, /* transmit descriptors */ + mii, /* phy type */ + 1 /* phy address */ +}; + +static bfin_isr_t ethISRs[] = { + /* careful - shared with a bunch of things */ +/* + {SIC_MAC_ERROR_VECTOR, + bfin_ethernet_mac_isr, + 0, + 0, + NULL}, +*/ + /* careful - shared with porth irqa */ + {SIC_DMA1_MAC_RX_VECTOR, + bfin_ethernet_rxdma_isr, + 0, + 0, + NULL}, + /* careful - shared with porth irqb */ + {SIC_DMA2_MAC_TX_VECTOR, + bfin_ethernet_txdma_isr, + 0, + 0, + NULL} +}; + +int bf537Stamp_network_driver_attach(struct rtems_bsdnet_ifconfig *config, + int attaching) { + int result; + int i; + + result = bfin_ethernet_driver_attach(config, attaching, ðConfig); + for (i = 0; i < sizeof(ethISRs) / sizeof(ethISRs[0]); i++) { + bfin_interrupt_register(ðISRs[i]); + bfin_interrupt_enable(ðISRs[i], TRUE); + } + + return result; +} + diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/preinstall.am b/c/src/lib/libbsp/bfin/bf537Stamp/preinstall.am new file mode 100644 index 0000000000..d4812f6c8d --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/preinstall.am @@ -0,0 +1,58 @@ +## Automatically generated by ampolish3 - Do not edit + +if AMPOLISH3 +$(srcdir)/preinstall.am: Makefile.am + $(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am +endif + +PREINSTALL_DIRS = +DISTCLEANFILES += $(PREINSTALL_DIRS) + +all-local: $(TMPINSTALL_FILES) + +TMPINSTALL_FILES = +CLEANFILES = $(TMPINSTALL_FILES) + +all-am: $(PREINSTALL_FILES) + +PREINSTALL_FILES = +CLEANFILES += $(PREINSTALL_FILES) + +$(PROJECT_LIB)/$(dirstamp): + @$(MKDIR_P) $(PROJECT_LIB) + @: > $(PROJECT_LIB)/$(dirstamp) +PREINSTALL_DIRS += $(PROJECT_LIB)/$(dirstamp) + +$(PROJECT_INCLUDE)/$(dirstamp): + @$(MKDIR_P) $(PROJECT_INCLUDE) + @: > $(PROJECT_INCLUDE)/$(dirstamp) +PREINSTALL_DIRS += $(PROJECT_INCLUDE)/$(dirstamp) + +$(PROJECT_LIB)/bsp_specs: bsp_specs $(PROJECT_LIB)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_LIB)/bsp_specs +PREINSTALL_FILES += $(PROJECT_LIB)/bsp_specs + +$(PROJECT_INCLUDE)/bsp.h: include/bsp.h $(PROJECT_INCLUDE)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h + +$(PROJECT_INCLUDE)/tm27.h: ../../shared/include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h + +$(PROJECT_INCLUDE)/bspopts.h: include/bspopts.h $(PROJECT_INCLUDE)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bspopts.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bspopts.h + +$(PROJECT_INCLUDE)/coverhd.h: ../../shared/include/coverhd.h $(PROJECT_INCLUDE)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h + +$(PROJECT_LIB)/start.$(OBJEXT): start.$(OBJEXT) $(PROJECT_LIB)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_LIB)/start.$(OBJEXT) +TMPINSTALL_FILES += $(PROJECT_LIB)/start.$(OBJEXT) + +$(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds +PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds + diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/start/start.S b/c/src/lib/libbsp/bfin/bf537Stamp/start/start.S new file mode 100644 index 0000000000..38f1a42a12 --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/start/start.S @@ -0,0 +1,102 @@ +/* + * $Id$ + */ + +#include <libcpu/bf537.h> +#include <libcpu/sicRegs.h> +#include <libcpu/cecRegs.h> +#include <libcpu/coreTimerRegs.h> + +#ifndef LO +#define LO(con32) ((con32) & 0xFFFF) +#endif +#ifndef HI +#define HI(con32) (((con32) >> 16) & 0xFFFF) +#endif + + + .section .init + .globl __init + .type __init,@function +__init: + .section .fini + .globl __fini + .type __fini,@function +__fini: + + + .section .start + .align 4 + + .global __start +__start: + cli r0; + + /* setup an initial stack */ + sp.h = 0xFFB0; + sp.l = 0x0F00; + + /* disable timer interrupts */ + p0.h = HI(TCNTL); + p0.l = LO(TCNTL); + r0 = 0; + [p0] = r0; + + /* disable all interrupts routed through sic */ + p0.h = HI(SIC_IMASK); + p0.l = LO(SIC_IMASK); + [p0] = r0; + + /* this is so we can stay in supervisor mode and still be able to + accept interrupts later. */ + p0.h = start; + p0.l = start; + p1.h = HI(CEC_EVT15); + p1.l = LO(CEC_EVT15); + + [p1] = p0; + + r0 = 0x8000 (z); + sti r0; + + raise 15; + + p0.h = wait; + p0.l = wait; + + reti = p0; + rti; + + /* wait for event 15 */ +wait: + jump wait; + +start: + [--sp] = reti; /* allow us to process interrupts later */ + + /* mask interrupts for now */ + cli r0; + + p0.h = _bss_start; + p0.l = _bss_start; + p1.h = _end; + p1.l = _end; + r0 = p0; + r1 = p1; + r1 = r1 - r0; + p1 = r1; + r0 = 0; + + /* Set _bss_start until _end to zero */ + lsetup(loop1,loop2) lc0 = p1; +loop1: b[p0] = r0; +loop2: p0 +=1; + + p0.h = _boot_card; + p0.l = _boot_card; + call (p0); + + p0.h = _exit; + p0.l = _exit; + jump (p0); + diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c b/c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c new file mode 100644 index 0000000000..46c3ecb241 --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c @@ -0,0 +1,241 @@ +/* bspstart.c for bf537Stamp + * + * This routine starts the application. It includes application, + * board, and monitor specific initialization and configuration. + * The generic CPU dependent initialization has been performed + * before this routine is invoked. + * + * Copyright (c) 2006 by Atos Automacao Industrial Ltda. + * written by Alain Schaefer <alain.schaefer@easc.ch> + * and Antonio Giovanini <antonio@atos.com.br> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + + +#include <string.h> + +#include <rtems/libio.h> +#include <rtems/libcsupport.h> +#include <libcpu/bf537.h> +#include <libcpu/gpioRegs.h> +#include <libcpu/mmu.h> +#include <libcpu/interrupt.h> +#include <bsp.h> + + +#if 0 +static bfin_mmu_region_t mmuRegions[] = { +}; +#endif + +/* + * Use the shared implementations of the following routines + */ + +void bsp_postdriver_hook(void); +void bsp_libc_init(void *, uint32_t, int); + +void Init_RTC(void); + +static void initPLL(void); +static void initEBIU(void); +static void initGPIO(void); + +/* + * Function: bsp_pretasking_hook + * Created: 95/03/10 + * + * Description: + * BSP pretasking hook. Called just before drivers are initialized. + * Used to setup libc and install any BSP extensions. + * + * NOTES: + * Must not use libc (to do io) from here, since drivers are + * not yet initialized. + * + */ + +void bsp_pretasking_hook(void) { + extern int HeapBase; + extern int RamBase; + extern int RamSize; + unsigned long heapSize; + void *heapStart; + + bfin_interrupt_init(); + + heapStart = &HeapBase; + heapSize = (unsigned long) &RamBase; + heapSize += (unsigned long) &RamSize; + heapSize -= (unsigned long) &HeapBase; + + bsp_libc_init(heapStart, heapSize, 0); + +} + +/* + * bsp_start + * + * This routine does the bulk of the system initialization. + */ +void bsp_start(void) { + + extern void *_WorkspaceBase; + + /* BSP Hardware Initialization*/ + + /*bfin_mmu_init(sizeof(mmuRegions) / sizeof(mmuRegions[0]), mmuRegions);*/ + + Init_RTC(); /* Blackfin Real Time Clock initialization */ + + initPLL(); /* PLL initialization */ + initEBIU(); /* EBIU initialization */ + initGPIO(); /* GPIO initialization */ + + /* + * Allocate the memory for the RTEMS Work Space. This can come from + * a variety of places: hard coded address, malloc'ed from outside + * RTEMS world (e.g. simulator or primitive memory manager), or (as + * typically done by stock BSPs) by subtracting the required amount + * of work space from the last physical address on the CPU board. + */ + + /* + * Need to "allocate" the memory for the RTEMS Workspace and + * tell the RTEMS configuration where it is. This memory is + * not malloc'ed. It is just "pulled from the air". + */ + + Configuration.work_space_start = (void *) &_WorkspaceBase; + +} + + /* + * initPLL + * + * Routine to initialize the PLL. The BF537 Stamp uses a 27 Mhz XTAL. BISON + * See "../bf537Stamp/include/bsp.h" for more information. + */ + +static void initPLL(void) { + +#ifdef BISON + unsigned int n; + + /* Configure PLL registers */ + *((uint16_t*)PLL_LOCKCNT) = 0x1000; + *((uint16_t*)PLL_DIV) = PLL_CSEL|PLL_SSEL; + *((uint16_t*)PLL_CTL) = PLL_MSEL|PLL_DF; + + /* Commands to set PLL values */ + asm("cli r0;"); + asm("idle;"); + asm("sti r0;"); + + /* Delay for PLL stabilization */ + for (n=0; n<200; n++) {} +#endif + +} + + /* + * initEBIU + * + * Configure extern memory + */ + +static void initEBIU(void) { +#ifdef BISON + /* Configure FLASH */ + *((uint32_t*)EBIU_AMBCTL0) = 0x7bb07bb0L; + *((uint32_t*)EBIU_AMBCTL1) = 0x7bb07bb0L; + *((uint16_t*)EBIU_AMGCTL) = 0x000f; + + /* Configure SDRAM + *((uint32_t*)EBIU_SDGCTL) = 0x0091998d; + *((uint16_t*)EBIU_SDBCTL) = 0x0013; + *((uint16_t*)EBIU_SDRRC) = 0x0817; + */ +#endif +} + + /* + * initGPIO + * + * Enable LEDs port + */ +static void initGPIO(void) { + + *(uint16_t volatile *) PORT_MUX = 0; + + /* port f bits 0, 1: uart0 tx, rx */ + /* bits 2 - 5: buttons */ + /* bits 6 - 11: leds */ + *(uint16_t volatile *) PORTF_FER = 0x0003; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_INEN_OFFSET) = 0x003c; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_POLAR_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_EDGE_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_BOTH_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_MASKA_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_MASKB_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_DIR_OFFSET) = 0x0fc0; + + *(uint16_t volatile *) PORTG_FER = 0x0000; + *(uint16_t volatile *) (PORTGIO_BASE_ADDRESS + PORTIO_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTGIO_BASE_ADDRESS + PORTIO_INEN_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTGIO_BASE_ADDRESS + PORTIO_POLAR_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTGIO_BASE_ADDRESS + PORTIO_EDGE_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTGIO_BASE_ADDRESS + PORTIO_BOTH_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTGIO_BASE_ADDRESS + PORTIO_MASKA_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTGIO_BASE_ADDRESS + PORTIO_MASKB_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTGIO_BASE_ADDRESS + PORTIO_DIR_OFFSET) = 0x0000; + + /* port h bits 0 - 15: ethernet */ + *(uint16_t volatile *) PORTH_FER = 0xffff; + *(uint16_t volatile *) (PORTHIO_BASE_ADDRESS + PORTIO_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTHIO_BASE_ADDRESS + PORTIO_INEN_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTHIO_BASE_ADDRESS + PORTIO_POLAR_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTHIO_BASE_ADDRESS + PORTIO_EDGE_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTHIO_BASE_ADDRESS + PORTIO_BOTH_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTHIO_BASE_ADDRESS + PORTIO_MASKA_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTHIO_BASE_ADDRESS + PORTIO_MASKB_OFFSET) = 0x0000; + *(uint16_t volatile *) (PORTHIO_BASE_ADDRESS + PORTIO_DIR_OFFSET) = 0x0000; +} + +/* + * Helper Function to use the EzKits LEDS. + * Can be used by the Application. + */ +void setLEDs(uint8_t value) { + + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_CLEAR_OFFSET) = + (uint16_t) (~value & 0x3f) << 6; + *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_SET_OFFSET) = + (uint16_t) (value & 0x3f) << 6; +} + +/* + * Helper Function to use the EzKits LEDS + */ +uint8_t getLEDs(void) { + uint16_t r; + + r = *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_OFFSET); + return (uint8_t) ((r >> 6) & 0x3f); +} + +uint8_t getButtons(void) { + uint16_t r; + + r = *(uint16_t volatile *) (PORTFIO_BASE_ADDRESS + PORTIO_OFFSET); + + return (uint8_t) ((r >> 2) & 0x0f); +} + + diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/startup/linkcmds b/c/src/lib/libbsp/bfin/bf537Stamp/startup/linkcmds new file mode 100644 index 0000000000..3902df4c64 --- /dev/null +++ b/c/src/lib/libbsp/bfin/bf537Stamp/startup/linkcmds @@ -0,0 +1,170 @@ +/* + * $Id$ + */ + +OUTPUT_FORMAT("elf32-bfin", "elf32-bfin", + "elf32-bfin") + +OUTPUT_ARCH(bfin) +ENTRY(__start) + +/* + * Declare some sizes. + */ +_RamBase = DEFINED(_RamBase) ? _RamBase : 0x0; +_RamSize = DEFINED(_RamSize) ? _RamSize : 0x04000000; +/*_HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0x0200000;*/ +_StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000; + +MEMORY +{ + sdram(rwx) : ORIGIN = 0x00001000, LENGTH = 0x03fff000 +/* + l1code(rwx) : ORIGIN = 0xffa08000, LENGTH = 0x00008000 + l1data(rwx) : ORIGIN = 0xff804000, LENGTH = 0x00004000 +*/ +} + +SECTIONS +{ + +/* + .l1code : + { +*/ + /*jump.o (.text)*/ +/* + } > l1code +*/ + + .init : + { + *(.start) + KEEP (*(.init)) + } > sdram /*=0*/ + + .text : + { + CREATE_OBJECT_SYMBOLS + *(.text) + *(.rodata*) + *(.gnu.linkonce.r*) + + /* + * Special FreeBSD sysctl sections. + */ + . = ALIGN (16); + ___start_set_sysctl_set = .; + *(set_sysctl_*); + ___stop_set_sysctl_set = ABSOLUTE(.); + *(set_domain_*); + *(set_pseudo_*); + + _etext = .; + + ___CTOR_LIST__ = .; + LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2) + *(.ctors) + LONG(0) + ___CTOR_END__ = .; + ___DTOR_LIST__ = .; + LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2) + *(.dtors) + LONG(0) + ___DTOR_END__ = .; + } > sdram + + .fini : + { + KEEP (*(.fini)) + } > sdram /*=0*/ + + .data : + { + *(.data) + *(.jcr) + *(.gnu.linkonce.d*) + CONSTRUCTORS + _edata = .; + } > sdram + + .eh_frame : { *(.eh_frame) } > sdram + .data1 : { *(.data1) } > sdram + .eh_frame : { *(.eh_frame) } > sdram + .gcc_except_table : { *(.gcc_except_table*) } > sdram + + .rodata : + { + *(.rodata) + *(.rodata.*) + *(.gnu.linkonce.r*) + } > sdram + + + .bss : + { + _bss_start = .; + _clear_start = .; + *(.bss) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN (64); + _stack_init = .; + . += _StackSize; + _clear_end = .; + _WorkspaceBase = .; + . += 512K; /* reserve some memory for workspace */ + _HeapBase = .; +/* + . += _HeapSize; +*/ + _end = .; + __end = .; + } > sdram + +/* Debugging stuff follows */ + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /*.stack 0x80000 : { _stack = .; *(.stack) }*/ + /* These must appear regardless of . */ +} + +__RamBase = _RamBase; +__RamSize = _RamSize; +__HeapBase = _HeapBase; +/*__HeapSize = _HeapSize;*/ +__WorkspaceBase = _WorkspaceBase; +__edata = _edata; +__etext = _etext; |