summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c')
-rw-r--r--c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c229
1 files changed, 0 insertions, 229 deletions
diff --git a/c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c b/c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c
deleted file mode 100644
index ffc2d950c7..0000000000
--- a/c/src/lib/libbsp/bfin/bf537Stamp/startup/bspstart.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* bspstart.c for bf537Stamp
- *
- * This routine does the bulk of the system initialisation.
- */
-
-/*
- * 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.org/license/LICENSE.
- */
-
-
-#include <bsp.h>
-#include <bsp/bootcard.h>
-#include <libcpu/bf537.h>
-#include <libcpu/ebiuRegs.h>
-#include <libcpu/gpioRegs.h>
-#include <libcpu/mmu.h>
-#include <libcpu/mmuRegs.h>
-#include <libcpu/interrupt.h>
-#include <rtems/sysinit.h>
-
-static bfin_mmu_config_t mmuRegions = {
- /* instruction */
- {
- {(void *) 0x00000000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x00400000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x00800000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x00c00000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x01000000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x01400000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x01800000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x01c00000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x02000000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x02400000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x02800000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x02c00000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x03000000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0x20000000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_CACHEABLE},
- {(void *) 0xff800000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_NOCACHE},
- {(void *) 0xffc00000, ICPLB_DATA_PAGE_SIZE_4MB | INSTR_NOCACHE}
- },
- /* data */
- {
- {(void *) 0x00000000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x00400000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x00800000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x00c00000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x01000000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x01400000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x01800000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x01c00000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x02000000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x02400000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x02800000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x02c00000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x03000000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0x20000000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_WRITEBACK},
- {(void *) 0xff800000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_NOCACHE},
- {(void *) 0xffc00000, DCPLB_DATA_PAGE_SIZE_4MB | DATA_NOCACHE}
- }
-};
-
-static void initPLL(void);
-static void initEBIU(void);
-static void initGPIO(void);
-
-RTEMS_SYSINIT_ITEM(
- bfin_interrupt_init,
- RTEMS_SYSINIT_BSP_PRE_DRIVERS,
- RTEMS_SYSINIT_ORDER_MIDDLE
-);
-
-void bsp_start(void)
-{
- /* BSP Hardware Initialization*/
-
- *(uint32_t volatile *) DMEM_CONTROL |= DMEM_CONTROL_PORT_PREF0;
- *(uint32_t volatile *) DMEM_CONTROL &= ~DMEM_CONTROL_PORT_PREF1;
- bfin_mmu_init(&mmuRegions);
- rtems_cache_enable_instruction();
- rtems_cache_enable_data();
-
- Init_RTC(); /* Blackfin Real Time Clock initialization */
-
- initPLL(); /* PLL initialization */
- initEBIU(); /* EBIU initialization */
- initGPIO(); /* GPIO initialization */
-}
-
- /*
- * 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) {
-
- /* by default the processor has priority over dma channels for access to
- external memory. this has been seen to result in dma unerruns on
- ethernet transmit; it seems likely it could cause dma overruns on
- ethernet receive as well. setting the following bit gives the dma
- channels priority over the cpu, fixing that problem. unfortunately
- we don't have finer grain control than that; all dma channels now
- have priority over the cpu. */
- *(uint16_t volatile *) EBIU_AMGCTL |= EBIU_AMGCTL_CDPRIO;
-
-#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) {
-#if (!BFIN_ON_SKYEYE)
- *(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;
-#endif
-}
-
-/*
- * 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);
-}
-
-