source: rtems/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c @ 9d64bc73

4.104.114.84.95
Last change on this file since 9d64bc73 was 9d64bc73, checked in by Joel Sherrill <joel.sherrill@…>, on Mar 8, 2002 at 5:35:39 PM

2001-03-08 Joel Sherrill <joel@…>

  • start/start.S, startup/bspstart.c: Removed warnings.
  • Property mode set to 100644
File size: 4.8 KB
Line 
1/*
2 *  This routine starts the application.  It includes application,
3 *  board, and monitor specific initialization and configuration.
4 *  The generic CPU dependent initialization has been performed
5 *  before this routine is invoked.
6 *
7 *  COPYRIGHT (c) 1989-2001.
8 *  On-Line Applications Research Corporation (OAR).
9 *
10 *  The license and distribution terms for this file may be
11 *  found in the file LICENSE in this distribution or at
12 *  http://www.OARcorp.com/rtems/license.html.
13 *
14 *  $Id$
15 *
16 * Modification History:
17 *        12/10/01  A.Ferrer, NASA/GSFC, Code 582
18 *           Set interrupt mask to 0xAF00 (Line 139).
19 */
20
21#include <string.h>
22
23#include <bsp.h>
24#include <rtems/libio.h>
25#include <rtems/libcsupport.h>
26#include <libcpu/mongoose-v.h>
27
28
29
30
31/*
32 *  The original table from the application and our copy of it with
33 *  some changes.
34 */
35
36extern rtems_configuration_table Configuration;
37
38rtems_configuration_table  BSP_Configuration;
39
40rtems_cpu_table Cpu_table;
41
42char *rtems_progname;
43
44/*
45 *  Use the shared implementations of the following routines
46 */
47
48void bsp_postdriver_hook(void);
49void bsp_libc_init( void *, unsigned32, int );
50
51/*
52 *  Function:   bsp_pretasking_hook
53 *  Created:    95/03/10
54 *
55 *  Description:
56 *      BSP pretasking hook.  Called just before drivers are initialized.
57 *      Used to setup libc and install any BSP extensions.
58 *
59 *  NOTES:
60 *      Must not use libc (to do io) from here, since drivers are
61 *      not yet initialized.
62 *
63 */
64
65void bsp_pretasking_hook(void)
66{
67    extern int HeapBase;
68    extern int HeapSize;
69    void         *heapStart = &HeapBase;
70    unsigned long heapSize = (unsigned long)&HeapSize;
71
72    bsp_libc_init(heapStart, (unsigned32) heapSize, 0);
73
74#ifdef RTEMS_DEBUG
75    rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
76#endif
77
78}
79
80
81
82/*
83 *  bsp_start
84 *
85 *  This routine does the bulk of the system initialization.
86 */
87
88void bsp_start( void )
89{
90   extern void _sys_exit(int);
91   extern int WorkspaceBase;
92   extern void mips_install_isr_entries();
93   extern void mips_gdb_stub_install(void);
94   
95   /* Configure Number of Register Caches */
96
97   Cpu_table.pretasking_hook = bsp_pretasking_hook;  /* init libc, etc. */
98   Cpu_table.postdriver_hook = bsp_postdriver_hook;
99   Cpu_table.interrupt_stack_size = 4096;
100
101   /* HACK -- tied to value linkcmds */
102   if ( BSP_Configuration.work_space_size > (4096*1024) )
103      _sys_exit( 1 );
104
105   BSP_Configuration.work_space_start = (void *) &WorkspaceBase;
106
107   /* mask off any interrupts */
108   MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_MASK_REGISTER, 0 );
109
110   /* reset the config register & clear any pending peripheral interrupts */
111   MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_COMMAND_REGISTER, 0 );
112   MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_COMMAND_REGISTER, MONGOOSEV_UART_CMD_RESET_BOTH_PORTS );
113   MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_COMMAND_REGISTER, 0 );
114
115   /* reset both timers */
116   MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER1_BASE, MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER, 0xffffffff );
117   MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER1_BASE, MONGOOSEV_TIMER_CONTROL_REGISTER, 0);
118
119   MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER2_BASE, MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER, 0xffffffff );
120   MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER2_BASE, MONGOOSEV_TIMER_CONTROL_REGISTER, 0);
121
122   /* clear any pending interrupts */
123   MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_STATUS_REGISTER, 0xffffffff );
124
125   /* clear any writable bits in the cause register */
126   mips_set_cause( 0 );
127
128   /* set interrupt mask, but globally off. */
129
130   /*
131   **  Bit 15 | Bit 14 | Bit 13 | Bit 12 | Bit 11 | Bit 10 | Bit  9 | Bit  8 |
132   **  periph | unused |  FPU   | unused | timer2 | timer1 | swint1 | swint2 |
133   **  extern |        |        |        |        |        |        |        |
134   **
135   **    1        0        1        0        0        1        0        0
136   **
137   **    0x8C00   Enable only internal Mongoose V timers.
138   **    0xA400   Enable Peripherial ints, FPU and timer1
139   **    0x0400   Timer1 only
140   */
141
142   /* mips_set_sr( (SR_CU0 | SR_CU1 | 0xA400) ); */
143
144   /* to start up, only enable coprocessor 0 & timer int. per-task
145   ** processor settings will be applied as they are created, this
146   ** is just to configure the processor for startup
147   */
148   mips_set_sr( (SR_CU0 | 0x400) );
149
150   mips_install_isr_entries();
151}
152
153
154
155
156void clear_cache( void )
157{
158   extern void promCopyIcacheFlush(void);       /* from start.S */
159   extern void promCopyDcacheFlush(void);
160
161   promCopyIcacheFlush();
162   promCopyDcacheFlush();
163}
164
165
166
167
168/*
169 
170//Structure filled in by get_mem_info.
171
172
173struct s_mem
174{
175  unsigned int size;
176  unsigned int icsize;
177  unsigned int dcsize;
178};
179
180
181extern unsigned32 _RamSize;
182
183void get_mem_info ( struct s_mem *mem )
184{
185   mem->size = (unsigned32)&_RamSize;
186   mem->icsize = MONGOOSEV_IC_SIZE;
187   mem->dcsize = MONGOOSEV_DC_SIZE;
188}
189
190*/
191
Note: See TracBrowser for help on using the repository browser.