/[PAMELA software]/quicklook/dataToXML/Data/compilationInfo/src/BasicSW/CrimeaDriver/CD_CrimeaDriver_op.c
ViewVC logotype

Annotation of /quicklook/dataToXML/Data/compilationInfo/src/BasicSW/CrimeaDriver/CD_CrimeaDriver_op.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Tue Apr 25 09:00:20 2006 UTC (19 years, 2 months ago) by kusanagi
Branch point for: MAIN
File MIME type: text/plain
Initial revision

1 kusanagi 1.1 /****************************************************************************
2     /* F i l e D a t a
3     /*
4     /* Module : BasicSW
5     /* C.I. No. :
6     /* $Revision: 1.3 $
7     /* $Date: 2004/03/10 16:21:40 $
8     /* Belonging to :
9     /* :
10     /* $RCSfile: CD_CrimeaDriver_op.c,v $
11     /* Program Type :
12     /* Sub-modules :
13     /*
14     /****************************************************************************
15     /* S W D e v e l o p m e n t E n v i r o n m e n t
16     /*
17     /* Host system :
18     /* SW Compiler :
19     /* $Author: faber $
20     /* :
21     /****************************************************************************
22     /* U p d a t i n g
23     /*
24     /* $Log: CD_CrimeaDriver_op.c,v $
25     /* Revision 1.3 2004/03/10 16:21:40 faber
26     /* more powered bugfixing about new implementation of TMTC task. In the simulator looks now to be stable.
27     /*
28     /* Revision 1.2 2003/11/18 09:01:14 alfarano
29     /* laben patch fixes some problems
30     /*
31     /* Revision 1.1.1.1 2003/08/04 09:40:21 sebastiani
32     /* Imported sources laben rel. 19.06.2003 integrated with pam2
33     /*
34     /* Revision 1.6 2002/11/14 09:41:58 zulia
35     /* Removed unused "status" variable
36     /*
37     /* Revision 1.5 2002/05/09 08:16:34 zulia
38     /* * acceptance release
39     /*
40     /*
41     /*****************************************************************************/
42    
43    
44     /*============================= Include File ================================*/
45    
46     #include <src/BasicSW/CrimeaDriver/CD_CrimeaDriver_op.h>
47    
48     /*****************************************************************************/
49     /*============================= Object variables ============================*/
50    
51     /*****************************************************************************/
52     /* @Constant: CD_CrimeaReg */
53     /* @Purpose : */
54     /* Array of unsigned short pointer. */
55     /* Physical addresses of the component CRIMEA. */
56     /* @@ */
57     /*****************************************************************************/
58     const unsigned short* CD_CrimeaReg[] ={(unsigned short* )(BASE_CRIMEA + 0x0004),
59     (unsigned short* )(BASE_CRIMEA + 0x0008),
60     (unsigned short* )(BASE_CRIMEA + 0x000c),
61     (unsigned short* )(BASE_CRIMEA + 0x0010),
62     (unsigned short* )(BASE_CRIMEA + 0x0014),
63     (unsigned short* )(BASE_CRIMEA + 0x0018),
64     (unsigned short* )(BASE_CRIMEA + 0x001c),
65     (unsigned short* )(BASE_CRIMEA + 0x0020),
66     (unsigned short* )(BASE_CRIMEA + 0x0024),
67     (unsigned short* )(BASE_CRIMEA + 0x0028),
68     (unsigned short* )(BASE_CRIMEA + 0x002c),
69     (unsigned short* )(BASE_CRIMEA + 0x0030),
70     (unsigned short* )(BASE_CRIMEA + 0x0034),
71     (unsigned short* )(BASE_CRIMEA + 0x0038),
72     (unsigned short* )(BASE_CRIMEA + 0x0040),
73     (unsigned short* )(BASE_CRIMEA + 0x0044),
74     (unsigned short* )(BASE_CRIMEA + 0x004c),
75     (unsigned short* )(BASE_CRIMEA + 0x0050),
76     (unsigned short* )(BASE_CRIMEA + 0x0054),
77     (unsigned short* )(BASE_CRIMEA + 0x0058),
78     (unsigned short* )(BASE_CRIMEA + 0x005c),
79     (unsigned short* )(BASE_CRIMEA + 0x0060),
80     (unsigned short* )(BASE_CRIMEA + 0x0064),
81     (unsigned short* )(BASE_CRIMEA + 0x0068),
82     (unsigned short* )(BASE_CRIMEA + 0x0100),
83     (unsigned short* )(BASE_CRIMEA + 0x0104),
84     (unsigned short* )(BASE_CRIMEA + 0x0108),
85     (unsigned short* )(BASE_CRIMEA + 0x010c),
86     (unsigned short* )(BASE_CRIMEA + 0x0110),
87     (unsigned short* )(BASE_CRIMEA + 0x0114),
88     (unsigned short* )(BASE_CRIMEA + 0x0118),
89     (unsigned short* )(BASE_CRIMEA + 0x011c),
90     (unsigned short* )(BASE_CRIMEA + 0x0120),
91     (unsigned short* )(BASE_CRIMEA + 0x0124),
92     (unsigned short* )(BASE_CRIMEA + 0x0128),
93     (unsigned short* )(BASE_CRIMEA + 0x012c),
94     (unsigned short* )(BASE_CRIMEA + 0x0130),
95     (unsigned short* )(BASE_CRIMEA + 0x0134),
96     (unsigned short* )(BASE_CRIMEA + 0x0138),
97     (unsigned short* )(BASE_CRIMEA + 0x013c),
98     (unsigned short* )(BASE_CRIMEA + 0x0140),
99     (unsigned short* )(BASE_CRIMEA + 0x0144),
100     (unsigned short* )(BASE_CRIMEA + 0x0300),
101     (unsigned short* )(BASE_CRIMEA + 0x0304),
102     (unsigned short* )(BASE_CRIMEA + 0x0310),
103     (unsigned short* )(BASE_CRIMEA + 0x0320),
104     (unsigned short* )(BASE_CRIMEA + 0x0340)
105     };
106    
107     /*****************************************************************************/
108    
109     /*= C D _ C r i m e a D r i v e r O P E R A T I O N A L F U N C T I O N S =*/
110    
111     /*****************************************************************************/
112     /* @Function: CD_opInitCrimeaDriver */
113     /* @Purpose : */
114     /* Initialialization function of the CRIMEA component. */
115     /* The following register are initialized: */
116     /* Exchange Memory Area Select register used to configure the memory access */
117     /* by CPU and by SuMMIT. */
118     /* PCMCIA Mode register, PCMCIA B Command register, PCMCIA B Configuration */
119     /* register used to configure the PCMCIA port B for MMSU operation. */
120     /* */
121     /* @@ */
122     /* @Parameter Name @Mode @Description */
123     /* status_code OUT Return code */
124     /* @@ */
125     /*****************************************************************************/
126    
127     status_code CD_opInitCrimeaDriver(void)
128     {
129     #ifndef SIMULATOR
130     void* p;
131     unsigned short* pC;
132    
133    
134     /* Program Exchange Memory Area Selection register */
135     p =(void* )CD_CrimeaReg[EXC_MEM_AREA_SEL_REG];
136     pC =(unsigned short* )p;
137     *pC =(unsigned short)CD_EXCHANG_MEMORY_AREA_CONF;
138    
139     /*===== Program PCMCIA port for MMSU operation ========*/
140     /* Setting CRIMEA wait state to zero */
141     p = (void* )CD_CrimeaReg[WAIT_STATE_1553_MEM];
142     pC = (unsigned short*)p;
143     *pC = (unsigned short)0;
144     /* PCMCIA Mode register */
145     p =(void* )CD_CrimeaReg[PCMCIA_MODE_REG];
146     pC =(unsigned short* )p;
147     *pC =(unsigned short)CD_CARD_CONFIG;
148     /* PCMCIA B Command register */
149     p =(void* )CD_CrimeaReg[PCMCIA_B_COMMAND_REG_0];
150     pC =(unsigned short* )p;
151     *pC =(unsigned short)CD_TIMING_REGISTER_VALUE;
152     /* PCMCIA B Configuration register */
153     p =(void* )CD_CrimeaReg[PCMCIA_B_CONFIG_REG];
154     pC =(unsigned short* )p;
155     *pC =(unsigned short)CD_ADDRESS_SPACE_ENABLE;
156    
157     /* Program Interrupt Sensitivity Register CRIMEA */
158     p =(void* )CD_CrimeaReg[INTER_SENSITIVITY_REG];
159     pC =(unsigned short* )p;
160     *pC =(unsigned short)CD_SENSITIVITY_VALUE;
161    
162     /* Program Interrupt Mask Register CRIMEA */
163     p =(void* )CD_CrimeaReg[INTER_MASK_REG_HIGH];
164     pC =(unsigned short* )p;
165     *pC =(unsigned short)CD_INTERRUPT_MASK;
166    
167     /* Program SBUS90 first 64 kbytes page */
168     p =(void* )CD_CrimeaReg[SBUS90_ADDR_PAGE_REG];
169     pC =(unsigned short* )p;
170     *pC =(unsigned short)CD_SBUS90_ADDR_PAGE;
171    
172     /* Program EEPROM wait state */
173     p =(void* )CD_CrimeaReg[EEPROM_WS_REG];
174     pC =(unsigned short* )p;
175     *pC =(unsigned short)CD_EEPROM_WAIT_STATE;
176    
177     /* Program increase time between two PCMCIA access */
178     p =(void* )CD_CrimeaReg[PCMCIA_B_RECOVERY_REG_0];
179     pC =(unsigned short* )p;
180     *pC =(unsigned short)CD_INCREASE_TIME;
181     #endif // SIMULATOR
182     return (SUCCESSFUL);
183    
184     }
185    
186    
187     /*****************************************************************************/
188     /* @Function: CD_opWrCrimeaReg */
189     /* @Purpose : */
190     /* The function writes a generic CRIMEA register. A parameter value is */
191     /* written into specified CRIMEA register. */
192     /* */
193     /* @@ */
194     /* @Parameter Name @Mode @Description */
195     /* Reg IN Crimea register (CD_CRIMEA_REG type) */
196     /* Value IN Value to write into the register */
197     /* status_code OUT Return code */
198     /* @@ */
199     /*****************************************************************************/
200    
201     status_code CD_opWrCrimeaReg (unsigned int Reg, unsigned int Value)
202     {
203     status_code status;
204     void* p;
205     unsigned short* pC;
206    
207     /* Check CRIMEA register validity */
208     if (Reg < MAX_CRIMEA_REG)
209     {
210     /* Write CRIMEA register */
211     p =(void* )CD_CrimeaReg[Reg];
212     pC =(unsigned short* )p;
213     *pC =(unsigned short)Value;
214     status =SUCCESSFUL;
215     }
216     else
217     {
218     status =INVALID_ADDRESS;
219     }
220    
221     return (status);
222    
223     }
224    
225    
226    
227     /*****************************************************************************/
228     /* @Function: CD_opRdCrimeaReg */
229     /* @Purpose : */
230     /* The function reads a generic CRIMEA register. A parameter value is read */
231     /* form the specified CRIMEA register. */
232     /* */
233     /* @@ */
234     /* @Parameter Name @Mode @Description */
235     /* Reg IN Crimea register (CD_CRIMEA_REG type) */
236     /* Value OUT Value read */
237     /* status_code OUT Return code */
238     /* @@ */
239     /*****************************************************************************/
240    
241     status_code CD_opRdCrimeaReg (unsigned int Reg, unsigned int* Value)
242     {
243     status_code status;
244    
245     /* Check CRIMEA register validity */
246     if (Reg < MAX_CRIMEA_REG)
247     {
248     /* Read CRIMEA register */
249     *Value =(unsigned int)*CD_CrimeaReg[Reg];
250     status =SUCCESSFUL;
251     }
252     else
253     {
254     status =INVALID_ADDRESS;
255     }
256     return (status);
257    
258     }
259    
260    
261    
262     /*****************************************************************************/
263     /* @Function: CD_opGetCrimeaInterPending */
264     /* @Purpose : */
265     /* The function reads the CRIMEA Interrupt Pending value. Two register are */
266     /* read Interrupt Pending High and Interrupt Pending Low for returning a */
267     /* 32 bit value. */
268     /* */
269     /* @@ */
270     /* @Parameter Name @Mode @Description */
271     /* InterPending OUT Interrupt Pending value read */
272     /* status_code OUT Return code (always SUCCESSFUL) */
273     /* @@ */
274     /*****************************************************************************/
275    
276     status_code CD_opGetCrimeaInterPending (unsigned int* InterPending)
277     {
278     unsigned int tmpInterPending;
279    
280     /* Read Interrupt Pending High register */
281     tmpInterPending =(unsigned int)*CD_CrimeaReg[INTER_PENDING_REG_HIGH];
282     tmpInterPending <<=16;
283     /* Read Interrupt Pending Low register */
284     tmpInterPending |=(unsigned int)*CD_CrimeaReg[INTER_PENDING_REG_LOW];
285     *InterPending =tmpInterPending;
286     return (SUCCESSFUL);
287    
288     }
289    
290    
291     /*****************************************************************************/
292     /* @Function: CD_opSetCrimeaInterClear */
293     /* @Purpose : */
294     /* The function writes a 32 bit value in two register. The MSW is written */
295     /* into the CRIMEA Interrupt Clear High and the LSW into the CRIMEA */
296     /* Interrupt Clear Low register. */
297     /* */
298     /* @@ */
299     /* @Parameter Name @Mode @Description */
300     /* InterClear IN Interrupt Clear value */
301     /* status_code OUT Return code */
302     /* @@ */
303     /*****************************************************************************/
304    
305     status_code CD_opSetCrimeaInterClear (unsigned int InterClear)
306     {
307     void* p;
308     unsigned short* pC;
309    
310     /* Write CRIMEA Interrupt Clear Low register */
311     p =(void* )CD_CrimeaReg[INTER_CLEAR_REG_LOW];
312     pC =(unsigned short* )p;
313     *pC =(unsigned short)InterClear;
314    
315     /* Write CRIMEA Interrupt Clear High register */
316     p =(void* )CD_CrimeaReg[INTER_CLEAR_REG_HIGH];
317     pC =(unsigned short* )p;
318     *pC =(unsigned short)(InterClear >> 16);
319    
320     return (SUCCESSFUL);
321    
322     }
323    
324    
325    
326     /*****************************************************************************/
327     /* @Function: CD_opSetCrimeaInterMask */
328     /* @Purpose : */
329     /* The function writes a 32 bit value in two register. The MSW is written */
330     /* into the CRIMEA Interrupt Mask High and the LSW into the CRIMEA */
331     /* Interrupt Mask Low register. */
332     /* */
333     /* @@ */
334     /* @Parameter Name @Mode @Description */
335     /* InterMask IN Interrupt mask value */
336     /* status_code OUT Return code */
337     /* @@ */
338     /*****************************************************************************/
339    
340     status_code CD_opSetCrimeaInterMask (unsigned int InterMask)
341     {
342     void* p;
343     unsigned short* pC;
344    
345     /* Write CRIMEA Interrupt Mask Low register */
346     p =(void* )CD_CrimeaReg[INTER_MASK_REG_LOW];
347     pC =(unsigned short*)p;
348     *pC =(unsigned short)InterMask;
349    
350     /* Write CRIMEA Interrupt Mask High register */
351     p =(void* )CD_CrimeaReg[INTER_MASK_REG_HIGH];
352     pC =(unsigned short* )p;
353     *pC =(unsigned short)(InterMask >> 16);
354    
355     return (SUCCESSFUL);
356    
357     }
358    
359    
360    
361     /*****************************************************************************/
362     /* @Function: CD_opGetCrimeaInterMask */
363     /* @Purpose : */
364     /* The function reads a 32 bit value in two register. The MSW is read */
365     /* from the CRIMEA Interrupt Mask High and the LSW from the CRIMEA */
366     /* Interrupt Mask Low register. */
367     /* */
368     /* @@ */
369     /* @Parameter Name @Mode @Description */
370     /* InterMask OUT Interrupt mask value */
371     /* status_code OUT Return code */
372     /* @@ */
373     /*****************************************************************************/
374    
375     status_code CD_opGetCrimeaInterMask (unsigned int* InterMask)
376     {
377     void* p;
378     unsigned short* pC;
379    
380     /* Write CRIMEA Interrupt Mask High register */
381     p =(void* )CD_CrimeaReg[INTER_MASK_REG_HIGH];
382     pC =(unsigned short* )p;
383     *InterMask =*pC;
384     *InterMask <<=16;
385    
386     /* Write CRIMEA Interrupt Mask Low register */
387     p =(void* )CD_CrimeaReg[INTER_MASK_REG_LOW];
388     pC =(unsigned short* )p;
389     *InterMask |=(*pC & 0x0000ffff);
390    
391     return (SUCCESSFUL);
392    
393     }
394    

  ViewVC Help
Powered by ViewVC 1.1.23