FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/L1/cfile/l1_api_hisr.c @ 544:96a96ec34139
gsm-fw/L1/cfile: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 03 Aug 2014 06:06:45 +0000 |
parents | |
children | 32f7494783db |
comparison
equal
deleted
inserted
replaced
543:2dccd2b4e5a2 | 544:96a96ec34139 |
---|---|
1 /************* Revision Controle System Header ************* | |
2 * GSM Layer 1 software | |
3 * L1_API_HISR.C | |
4 * | |
5 * Filename l1_api_hisr.c | |
6 * Copyright 2003 (C) Texas Instruments | |
7 * | |
8 ************* Revision Controle System Header *************/ | |
9 | |
10 #include "l1_confg.h" | |
11 #include "nucleus.h" | |
12 #include "sys_types.h" | |
13 #include "l1_types.h" | |
14 #include "l1audio_cust.h" | |
15 #include "l1audio_defty.h" | |
16 #include "l1audio_const.h" | |
17 #include "l1_const.h" | |
18 #include "cust_os.h" | |
19 #include "l1tm_defty.h" | |
20 #if (L1_GTT == 1) | |
21 #include "l1gtt_const.h" | |
22 #include "l1gtt_defty.h" | |
23 #endif | |
24 #if (L1_MP3 == 1) | |
25 #include "l1mp3_const.h" | |
26 #include "l1mp3_signa.h" | |
27 #include "l1mp3_defty.h" | |
28 #include "l1mp3_proto.h" | |
29 #endif | |
30 #if (L1_MIDI == 1) | |
31 #include "l1midi_const.h" | |
32 #include "l1midi_signa.h" | |
33 #include "l1midi_defty.h" | |
34 #include "l1midi_proto.h" | |
35 #endif | |
36 #if (L1_AAC == 1) | |
37 #include "l1aac_const.h" | |
38 #include "l1aac_signa.h" | |
39 #include "l1aac_defty.h" | |
40 #include "l1aac_proto.h" | |
41 #endif | |
42 #if (L1_DYN_DSP_DWNLD==1) | |
43 #include "l1_dyn_dwl_defty.h" | |
44 #include "l1_dyn_dwl_msgty.h" | |
45 #include "l1_dyn_dwl_const.h" | |
46 #include "l1_dyn_dwl_signa.h" | |
47 #include "l1_dyn_dwl_error.h" | |
48 #include "l1_dyn_dwl_proto.h" | |
49 #include "l1_api_hisr.h" | |
50 #endif | |
51 #include "l1_defty.h" | |
52 #include "l1_api_hisr.h" | |
53 #include "l1audio_signa.h" | |
54 #include "l1_varex.h" | |
55 #include "l1_macro.h" | |
56 #include "mem.h" | |
57 | |
58 | |
59 /*-------------------------------------------------------------*/ | |
60 /* l1_api_handler() */ | |
61 /*-------------------------------------------------------------*/ | |
62 /* */ | |
63 /* Parameters : none */ | |
64 /* */ | |
65 /* Return : n/a */ | |
66 /* */ | |
67 /* Description : API interrupt handler, multiplexed for: */ | |
68 /* 1) audio sources: MP3 or AAC */ | |
69 /* 2) modem sources: USF */ | |
70 /* */ | |
71 // The API Interrupt is multiplexed between (DYN DWNLD, MP3 ,AAC) and FAST USF. | |
72 // DYN DWNLD, MP3 and AAC are mutually exclusive and hence only one would be | |
73 // active at one time. But FAST USF would co-exist with any of the them and hence | |
74 // there needs to be a way to distinguish the two sources of the API Interrupt. A flag | |
75 // d_dsp_hint_flag is used by the DSP to signify the source of the interrupt. The bit | |
76 // configuration of d_dsp_hint_flag is | |
77 // 15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0 | |
78 // | |____> Fast USF | |
79 // |______> (DYN DWNLD, MP3, AAC) | |
80 | |
81 | |
82 void l1_api_handler() | |
83 { | |
84 #if (FF_L1_IT_DSP_USF == 1) || (FF_L1_IT_DSP_DTX == 1) || (FF_L1_FAST_DECODING == 1) | |
85 extern NU_HISR api_modemHISR; | |
86 #endif | |
87 | |
88 #if ( (L1_MP3 == 1) || (L1_AAC == 1) || (L1_MIDI == 1) || (L1_DYN_DSP_DWNLD == 1) ) | |
89 extern NU_HISR apiHISR; | |
90 #endif | |
91 | |
92 #if (FF_L1_IT_DSP_USF == 1) || (FF_L1_IT_DSP_DTX == 1) || (FF_L1_FAST_DECODING == 1) | |
93 #if (FF_L1_FAST_DECODING == 1) | |
94 if (l1s_dsp_com.dsp_ndb_ptr->d_dsp_hint_flag & (1 << B_FAST_DECODING_FLAG)) | |
95 { | |
96 // Flag HISR to be scheduled | |
97 l1a_apihisr_com.fast_decoding.pending = TRUE; | |
98 // Clear API ISR condition | |
99 l1s_dsp_com.dsp_ndb_ptr->d_dsp_hint_flag &= ~(1 << B_FAST_DECODING_FLAG); | |
100 l1a_apihisr_com.fast_decoding.crc_error = | |
101 l1s_dsp_com.dsp_ndb_ptr->d_fast_paging_data & (C_FAST_DECODING_CRC_FIRE1); | |
102 NU_Activate_HISR(&api_modemHISR); // activate API modem HISR | |
103 } | |
104 #endif /* FF_L1_FAST_DECODING */ | |
105 #if (FF_L1_IT_DSP_USF == 1) | |
106 if (l1s_dsp_com.dsp_ndb_ptr->d_dsp_hint_flag & (1 << B_USF_HINT_ISSUED)) | |
107 { | |
108 // Flag HISR to be scheduled | |
109 l1a_apihisr_com.usf.pending = TRUE; | |
110 // Clear API ISR condition | |
111 l1s_dsp_com.dsp_ndb_ptr->d_dsp_hint_flag &= ~(1 << B_USF_HINT_ISSUED); | |
112 NU_Activate_HISR(&api_modemHISR); // activate API modem HISR | |
113 } | |
114 #endif //(FF_L1_IT_DSP_USF == 1) | |
115 #if (FF_L1_IT_DSP_DTX == 1) | |
116 | |
117 if ((l1s_dsp_com.dsp_ndb_ptr->d_dsp_hint_flag & 0x4 ) != 0) // DTX interrupt set by 3rd bit position from left | |
118 { | |
119 // Flag HISR to be scheduled | |
120 l1a_apihisr_com.dtx.pending = TRUE; | |
121 // Clear API ISR condition | |
122 | |
123 l1s_dsp_com.dsp_ndb_ptr->d_dsp_hint_flag &= 0xFB; //reset the 3rd bit position | |
124 NU_Activate_HISR(&api_modemHISR); // activate API modem HISR | |
125 } | |
126 #endif //(FF_L1_IT_DSP_DTX == 1) | |
127 // Call the API HISR when MP3, AAC, DYN DWNLD comes | |
128 #if ( (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_AAC == 1) || (L1_DYN_DSP_DWNLD == 1) ) | |
129 | |
130 | |
131 | |
132 | |
133 if (l1s_dsp_com.dsp_ndb_ptr->d_dsp_aud_hint_flag & (1 << B_NON_USF_HINT_ISSUED)) | |
134 { | |
135 // Clear API ISR condition | |
136 l1s_dsp_com.dsp_ndb_ptr->d_dsp_aud_hint_flag = 0; | |
137 //Activate the API HISR | |
138 NU_Activate_HISR(&apiHISR); | |
139 } | |
140 #endif // (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_DYN_DSP_DWNLD == 1) | |
141 #endif //(FF_L1_IT_DSP_USF == 1) || //(FF_L1_IT_DSP_DTX == 1) | |
142 | |
143 | |
144 //When Fast USF is not enabled, then the API HISR needs to be called every time the DSP | |
145 //sends a HINT interrupt. | |
146 #if (!FF_L1_IT_DSP_USF) && (!FF_L1_IT_DSP_DTX) | |
147 #if ( (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_AAC == 1) || (L1_DYN_DSP_DWNLD == 1) ) | |
148 NU_Activate_HISR(&apiHISR); | |
149 #endif | |
150 #endif | |
151 //NU_Activate_HISR(&apiHISR); //hack remove | |
152 return; | |
153 } | |
154 | |
155 /*-------------------------------------------------------------*/ | |
156 /* api_hisr() */ | |
157 /*-------------------------------------------------------------*/ | |
158 /* */ | |
159 /* Parameters : none */ | |
160 /* */ | |
161 /* Return : n/a */ | |
162 /* */ | |
163 /* Description : main function dealing with DSP->MCU interrupt */ | |
164 /* */ | |
165 /*-------------------------------------------------------------*/ | |
166 void api_hisr(void) | |
167 { | |
168 #if (L1_MP3 == 1) | |
169 if(l1a_apihisr_com.mp3.running==TRUE) | |
170 { | |
171 l1mp3_apihisr(); | |
172 } | |
173 #endif | |
174 #if (L1_MIDI == 1) | |
175 if(l1_apihisr.midi.running==TRUE) | |
176 { | |
177 l1midi_apihisr(); | |
178 } | |
179 #endif | |
180 #if (L1_AAC == 1) | |
181 if(l1a_apihisr_com.aac.running==TRUE) | |
182 { | |
183 l1aac_apihisr(); | |
184 } | |
185 #endif | |
186 #if (L1_DYN_DSP_DWNLD == 1) | |
187 if( l1_apihisr.dyn_dwnld.running == TRUE ) | |
188 { | |
189 l1_dyn_dwnld_apihisr(); | |
190 } | |
191 #endif | |
192 | |
193 } | |
194 | |
195 /*-------------------------------------------------------------*/ | |
196 /* api_modem_hisr() */ | |
197 /*-------------------------------------------------------------*/ | |
198 /* */ | |
199 /* Parameters : none */ | |
200 /* */ | |
201 /* Return : n/a */ | |
202 /* */ | |
203 /* Description : main function dealing with DSP->MCU interrupt */ | |
204 /* */ | |
205 /*-------------------------------------------------------------*/ | |
206 void api_modem_hisr(void) | |
207 { | |
208 #if (FF_L1_FAST_DECODING == 1) | |
209 if(l1a_apihisr_com.fast_decoding.pending == TRUE) | |
210 { | |
211 extern void l1_fast_decoding_apihisr(void); | |
212 l1_fast_decoding_apihisr(); | |
213 } | |
214 | |
215 #endif /* FF_L1_FAST_DECODING */ | |
216 #if (FF_L1_IT_DSP_USF == 1) | |
217 if(l1a_apihisr_com.usf.pending == TRUE) | |
218 { | |
219 extern void l1usf_apihisr(void); | |
220 l1usf_apihisr(); | |
221 } | |
222 #endif | |
223 #if (FF_L1_IT_DSP_DTX == 1) | |
224 if(l1a_apihisr_com.dtx.pending == TRUE) | |
225 { | |
226 extern void l1dtx_apihisr(void); | |
227 l1dtx_apihisr(); | |
228 } | |
229 #endif | |
230 } | |
231 | |
232 /*-------------------------------------------------------------*/ | |
233 /* l1_trigger_api_interrupt() */ | |
234 /*-------------------------------------------------------------*/ | |
235 /* */ | |
236 /* Parameters : none */ | |
237 /* */ | |
238 /* Return : n/a */ | |
239 /* */ | |
240 /* Description : Trigger an MCU->DSP interrupt */ | |
241 /* */ | |
242 /*-------------------------------------------------------------*/ | |
243 void l1_trigger_api_interrupt() | |
244 { | |
245 #if (CODE_VERSION == SIMULATION) | |
246 extern void sim_it_mcu_to_dsp(); | |
247 sim_it_mcu_to_dsp(); | |
248 #else | |
249 #if (L1_DYN_DSP_DWNLD == 1) | |
250 *((volatile UWORD32 *)MEM_APIC_REG)|=ID_API_INT; | |
251 #else | |
252 *((volatile UWORD32 *)MEM_APIC_REG)|=0x4; | |
253 #endif | |
254 #endif | |
255 | |
256 } |