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 }