source: rtems/c/src/lib/libbsp/m68k/mcf5206elite/startup/init5206e.c @ e56c3546

4.104.114.84.95
Last change on this file since e56c3546 was e56c3546, checked in by Joel Sherrill <joel.sherrill@…>, on 10/26/01 at 19:30:11

2001-10-26 Victor V. Vengerov <vvv@…>

  • New BSP for MCF5206eLITE evaluation board BSP.
  • ChangeLog?, README, bsp_specs, configure.ac, console/console.c, console/.cvsignore, i2c/i2c.c, i2c/i2cdrv.c, i2c/.cvsignore, include/bsp.h, include/bspopts.h.in, include/coverhd.h, include/ds1307.h, include/i2c.h, include/i2cdrv.h, include/nvram.h, include/.cvsignore, nvram/nvram.c, nvram/.cvsignore, start/start.S, start/.cvsignore, startup/bspclean.c, startup/bspstart.c, startup/gdbinit, startup/init5206e.c, startup/linkcmds, startup/linkcmds.flash, startup/.cvsignore, times, tod/ds1307.c, tod/todcfg.c, tod/.cvsignore, tools/.cvsignore, tools/configure.ac, tools/runtest, tools/changes, wrapup/.cvsignore, .cvsignore: New files.
  • Property mode set to 100644
File size: 9.3 KB
Line 
1/*
2 *  MCF5206e hardware startup routines
3 *
4 *  This is where the real hardware setup is done. A minimal stack
5 *  has been provided by the start.S code. No normal C or RTEMS
6 *  functions can be called from here.
7 *
8 *  This initialization code based on hardware settings of dBUG
9 *  monitor. This must be changed if you like to run it immediately
10 *  after reset.
11 *
12 *  Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia
13 *  Author: Victor V. Vengerov <vvv@oktet.ru>
14 *
15 *  Based on work:
16 *  Author:
17 *    David Fiddes, D.J@fiddes.surfaid.org
18 *    http://www.calm.hw.ac.uk/davidf/coldfire/
19 *
20 *  COPYRIGHT (c) 1989-1998.
21 *  On-Line Applications Research Corporation (OAR).
22 *  Copyright assigned to U.S. Government, 1994.
23 *
24 *  The license and distribution terms for this file may be
25 *  found in the file LICENSE in this distribution or at
26 *
27 *  http://www.OARcorp.com/rtems/license.html.
28 *
29 *  $Id$
30 */
31
32#include <rtems.h>
33#include <bsp.h>
34#include "mcf5206/mcf5206e.h"
35
36#define m68k_set_cacr( _cacr ) \
37  asm volatile ( "movec %0,%%cacr\n\t" \
38                 "nop\n" \
39                 : : "d" (_cacr) )
40
41#define m68k_set_acr0( _acr0 ) \
42  asm volatile (  "movec %0,%%acr0\n\t" \
43                  "nop\n\t" \
44                  : : "d" (_acr0) )
45
46#define m68k_set_acr1( _acr1 ) \
47  asm volatile (  "movec %0,%%acr1\n\t" \
48                  "nop\n\t" \
49                  : : "d" (_acr1) )
50
51#define m68k_set_srambar( _rambar0 ) \
52  asm volatile (  "movec %0,%%rambar0\n\t" \
53                  "nop\n\t" \
54                  : : "d" (_rambar0) )
55
56#define m68k_set_mbar( _mbar ) \
57  asm volatile (  "movec %0,%%mbar\n\t" \
58                  "nop\n\t" \
59                  : : "d" (_mbar) )
60
61#define mcf5206e_enable_cache() \
62  m68k_set_cacr( MCF5206E_CACR_CENB )
63
64
65#define mcf5206e_disable_cache() \
66  asm volatile (  "nop\n\t"    \
67                  "movec %0,%%cacr\n\t" \
68                  "nop\n\t" \
69                  "movec %0,%%cacr\n\t" \
70                  "nop\n\t" \
71                  : : "d" (MCF5206E_CACR_CINV) )
72
73/* Init5206e --
74 *     Initialize MCF5206e on-chip modules
75 *
76 * PARAMETERS:
77 *     none
78 *
79 * RETURNS:
80 *     none
81 */
82void
83Init5206e(void)
84{
85    extern void CopyDataClearBSSAndStart(unsigned long ramsize);
86 
87    /* Set Module Base Address register */
88    m68k_set_mbar((MBAR & MCF5206E_MBAR_BA) | MCF5206E_MBAR_V);
89   
90    /* Set System Protection Control Register (SYPCR):
91     * Bus Monitor Enable, Bus Monitor Timing = 1024 clocks,
92     * Software watchdog disabled
93     */
94    *MCF5206E_SYPCR(MBAR) = MCF5206E_SYPCR_BME |
95                            MCF5206E_SYPCR_BMT_1024;
96   
97    /* Set Pin Assignment Register (PAR):
98     *     Output Timer 0 (not DREQ) on *TOUT[0] / *DREQ[1]
99     *     Input Timer 0 (not DREQ) on *TIN[0] / *DREQ[0]
100     *     IRQ, not IPL
101     *     UART2 RTS signal (not \RSTO)
102     *     PST/DDATA (not PPIO)
103     *     *WE (not CS/A)
104     */
105    *MCF5206E_PAR(MBAR) = MCF5206E_PAR_PAR9_TOUT |
106                          MCF5206E_PAR_PAR8_TIN0 |
107                          MCF5206E_PAR_PAR7_UART2 |
108                          MCF5206E_PAR_PAR6_IRQ |
109                          MCF5206E_PAR_PAR5_PST |
110                          MCF5206E_PAR_PAR4_DDATA |
111                          MCF5206E_PAR_WE0_WE1_WE2_WE3;
112   
113    /* Set SIM Configuration Register (SIMR):
114     * Disable software watchdog timer and bus timeout monitor when
115     * internal freeze signal is asserted.
116     */
117    *MCF5206E_SIMR(MBAR) = MCF5206E_SIMR_FRZ0 | MCF5206E_SIMR_FRZ1;
118
119    /* Set Interrupt Mask Register: Disable all interrupts */
120    *MCF5206E_IMR(MBAR) = 0xFFFF;
121   
122    /* Assign Interrupt Control Registers as it is defined in bsp.h */
123    *MCF5206E_ICR(MBAR,MCF5206E_INTR_EXT_IPL1) =
124                            (BSP_INTLVL_AVEC1 << MCF5206E_ICR_IL_S) |
125                            (BSP_INTPRIO_AVEC1 << MCF5206E_ICR_IP_S) |
126                            MCF5206E_ICR_AVEC;
127    *MCF5206E_ICR(MBAR,MCF5206E_INTR_EXT_IPL2) =
128                            (BSP_INTLVL_AVEC2 << MCF5206E_ICR_IL_S) |
129                            (BSP_INTPRIO_AVEC2 << MCF5206E_ICR_IP_S) |
130                            MCF5206E_ICR_AVEC;
131    *MCF5206E_ICR(MBAR,MCF5206E_INTR_EXT_IPL3) =
132                            (BSP_INTLVL_AVEC3 << MCF5206E_ICR_IL_S) |
133                            (BSP_INTPRIO_AVEC3 << MCF5206E_ICR_IP_S) |
134                            MCF5206E_ICR_AVEC;
135    *MCF5206E_ICR(MBAR,MCF5206E_INTR_EXT_IPL4) =
136                            (BSP_INTLVL_AVEC4 << MCF5206E_ICR_IL_S) |
137                            (BSP_INTPRIO_AVEC4 << MCF5206E_ICR_IP_S) |
138                            MCF5206E_ICR_AVEC;
139    *MCF5206E_ICR(MBAR,MCF5206E_INTR_EXT_IPL5) =
140                            (BSP_INTLVL_AVEC5 << MCF5206E_ICR_IL_S) |
141                            (BSP_INTPRIO_AVEC5 << MCF5206E_ICR_IP_S) |
142                            MCF5206E_ICR_AVEC;
143    *MCF5206E_ICR(MBAR,MCF5206E_INTR_EXT_IPL6) =
144                            (BSP_INTLVL_AVEC6 << MCF5206E_ICR_IL_S) |
145                            (BSP_INTPRIO_AVEC6 << MCF5206E_ICR_IP_S) |
146                            MCF5206E_ICR_AVEC;
147    *MCF5206E_ICR(MBAR,MCF5206E_INTR_EXT_IPL7) =
148                            (BSP_INTLVL_AVEC7 << MCF5206E_ICR_IL_S) |
149                            (BSP_INTPRIO_AVEC7 << MCF5206E_ICR_IP_S) |
150                            MCF5206E_ICR_AVEC;
151    *MCF5206E_ICR(MBAR,MCF5206E_INTR_TIMER_1) =
152                            (BSP_INTLVL_TIMER1 << MCF5206E_ICR_IL_S) |
153                            (BSP_INTPRIO_TIMER1 << MCF5206E_ICR_IP_S) |
154                            MCF5206E_ICR_AVEC;
155    *MCF5206E_ICR(MBAR,MCF5206E_INTR_TIMER_2) =
156                            (BSP_INTLVL_TIMER2 << MCF5206E_ICR_IL_S) |
157                            (BSP_INTPRIO_TIMER2 << MCF5206E_ICR_IP_S) |
158                            MCF5206E_ICR_AVEC;
159    *MCF5206E_ICR(MBAR,MCF5206E_INTR_MBUS) =
160                            (BSP_INTLVL_MBUS << MCF5206E_ICR_IL_S) |
161                            (BSP_INTPRIO_MBUS << MCF5206E_ICR_IP_S) |
162                            MCF5206E_ICR_AVEC;
163    *MCF5206E_ICR(MBAR,MCF5206E_INTR_UART_1) =
164                            (BSP_INTLVL_UART1 << MCF5206E_ICR_IL_S) |
165                            (BSP_INTPRIO_UART1 << MCF5206E_ICR_IP_S);
166    *MCF5206E_ICR(MBAR,MCF5206E_INTR_UART_2) =
167                            (BSP_INTLVL_UART2 << MCF5206E_ICR_IL_S) |
168                            (BSP_INTPRIO_UART2 << MCF5206E_ICR_IP_S);
169    *MCF5206E_ICR(MBAR,MCF5206E_INTR_DMA_0) =
170                            (BSP_INTLVL_DMA0 << MCF5206E_ICR_IL_S) |
171                            (BSP_INTPRIO_DMA0 << MCF5206E_ICR_IP_S) |
172                            MCF5206E_ICR_AVEC;
173    *MCF5206E_ICR(MBAR,MCF5206E_INTR_DMA_1) =
174                            (BSP_INTLVL_DMA1 << MCF5206E_ICR_IL_S) |
175                            (BSP_INTPRIO_DMA1 << MCF5206E_ICR_IP_S) |
176                            MCF5206E_ICR_AVEC;
177
178    /* Software Watchdog timer (not used now) */
179    *MCF5206E_SWIVR(MBAR) = 0x0F; /* Uninitialized interrupt */
180    *MCF5206E_SWSR(MBAR) = MCF5206E_SWSR_KEY1;
181    *MCF5206E_SWSR(MBAR) = MCF5206E_SWSR_KEY2;
182   
183    /* Configuring Chip Selects */
184    /* CS2: SRAM memory */
185    *MCF5206E_CSAR(MBAR,2) = BSP_MEM_ADDR_ESRAM >> 16;
186    *MCF5206E_CSMR(MBAR,2) = BSP_MEM_MASK_ESRAM;
187    *MCF5206E_CSCR(MBAR,2) = MCF5206E_CSCR_WS1 |
188                             MCF5206E_CSCR_PS_32 |
189                             MCF5206E_CSCR_AA |
190                             MCF5206E_CSCR_EMAA |
191                             MCF5206E_CSCR_WR |
192                             MCF5206E_CSCR_RD;
193   
194    /* CS3: GPIO on eLITE board */
195    *MCF5206E_CSAR(MBAR,3) = BSP_MEM_ADDR_GPIO >> 16;
196    *MCF5206E_CSMR(MBAR,3) = BSP_MEM_MASK_GPIO;
197    *MCF5206E_CSCR(MBAR,3) = MCF5206E_CSCR_WS15 |
198                             MCF5206E_CSCR_PS_16 |
199                             MCF5206E_CSCR_AA |
200                             MCF5206E_CSCR_EMAA |
201                             MCF5206E_CSCR_WR |
202                             MCF5206E_CSCR_RD;
203   
204    {
205        extern void INTERRUPT_VECTOR();
206        rtems_unsigned32 *inttab = (rtems_unsigned32 *)&INTERRUPT_VECTOR;
207        rtems_unsigned32 *intvec = (rtems_unsigned32 *)BSP_MEM_ADDR_ESRAM;
208        register int i;
209        for (i = 0; i < 256; i++)
210        {
211            *(intvec++) = *(inttab++);
212        }
213    }
214    m68k_set_vbr(BSP_MEM_ADDR_ESRAM);
215   
216    /* CS0: Flash EEPROM */
217    *MCF5206E_CSAR(MBAR,0) = BSP_MEM_ADDR_FLASH >> 16;
218    *MCF5206E_CSCR(MBAR,0) = MCF5206E_CSCR_WS3 |
219                             MCF5206E_CSCR_AA |
220                             MCF5206E_CSCR_PS_16 |
221                             MCF5206E_CSCR_EMAA |
222                             MCF5206E_CSCR_WR |
223                             MCF5206E_CSCR_RD;
224    *MCF5206E_CSMR(MBAR,0) = BSP_MEM_MASK_FLASH;
225   
226    /*
227     * Invalidate the cache and disable it
228     */
229    mcf5206e_disable_cache();
230
231    /*
232     * Setup ACRs so that if cache turned on, periphal accesses
233     * are not messed up.  (Non-cacheable, serialized)
234     */
235    m68k_set_acr0 ( 0
236        | MCF5206E_ACR_BASE(BSP_MEM_ADDR_ESRAM)
237        | MCF5206E_ACR_MASK(BSP_MEM_MASK_ESRAM)
238        | MCF5206E_ACR_EN
239        | MCF5206E_ACR_SM_ANY
240    );
241    m68k_set_acr1 ( 0
242        | MCF5206E_ACR_BASE(BSP_MEM_ADDR_FLASH)
243        | MCF5206E_ACR_MASK(BSP_MEM_MASK_FLASH)
244        | MCF5206E_ACR_EN
245        | MCF5206E_ACR_SM_ANY
246    );
247
248    mcf5206e_enable_cache();
249 
250  /*
251   * Copy data, clear BSS, switch stacks and call boot_card()
252   */
253  CopyDataClearBSSAndStart (BSP_MEM_SIZE_ESRAM - 0x400);
254}
Note: See TracBrowser for help on using the repository browser.