OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems-20020807/] [c/] [src/] [lib/] [libbsp/] [mips/] [genmongoosev/] [startup/] [bspstart.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1026 ivang
/*
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
 *  bspstart.c,v 1.10 2002/03/08 17:35:39 joel Exp
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
 
36
extern rtems_configuration_table Configuration;
37
 
38
rtems_configuration_table  BSP_Configuration;
39
 
40
rtems_cpu_table Cpu_table;
41
 
42
char *rtems_progname;
43
 
44
/*
45
 *  Use the shared implementations of the following routines
46
 */
47
 
48
void bsp_postdriver_hook(void);
49
void 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
 
65
void 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
 
88
void 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
 
156
void 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
 
173
struct s_mem
174
{
175
  unsigned int size;
176
  unsigned int icsize;
177
  unsigned int dcsize;
178
};
179
 
180
 
181
extern unsigned32 _RamSize;
182
 
183
void 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
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.