Rev 41 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 41 | Rev 275 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /******************** (C) COPYRIGHT 2006 STMicroelectronics ******************** |
1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** |
2 | * File Name : usb_istr.c |
2 | * File Name : usb_istr.c |
3 | * Author : MCD Application Team |
3 | * Author : MCD Application Team |
4 | * Date First Issued : 10/01/2006 : V1.0 |
4 | * Date First Issued : 10/01/2008 : V1.0 |
5 | * Description : ISTR events interrupt service routines |
5 | * Description : ISTR events interrupt service routines |
6 | ******************************************************************************** |
6 | ******************************************************************************** |
7 | * History: |
7 | * History: |
8 | * 10/01/2006 : V1.0 |
8 | * 10/01/2008 : V1.0 |
9 | ******************************************************************************** |
9 | ******************************************************************************** |
10 | * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS |
10 | * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS |
11 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. |
11 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. |
12 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, |
12 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, |
13 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE |
13 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE |
14 | * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING |
14 | * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING |
15 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. |
15 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. |
16 | *******************************************************************************/ |
16 | *******************************************************************************/ |
17 | /* Includes ------------------------------------------------------------------*/ |
17 | /* Includes ------------------------------------------------------------------*/ |
- | 18 | #include "91x_lib.h" |
|
18 | #include "usb_lib.h" |
19 | #include "usb_lib.h" |
- | 20 | #include "usb_conf.h" |
|
- | 21 | #include "usb_prop.h" |
|
19 | #include "usb_pwr.h" |
22 | #include "usb_pwr.h" |
20 | /* Private typedef -----------------------------------------------------------*/ |
23 | /* Private typedef -----------------------------------------------------------*/ |
21 | /* Private define ------------------------------------------------------------*/ |
24 | /* Private define ------------------------------------------------------------*/ |
22 | /* Private macro -------------------------------------------------------------*/ |
25 | /* Private macro -------------------------------------------------------------*/ |
23 | /* Private variables ---------------------------------------------------------*/ |
26 | /* Private variables ---------------------------------------------------------*/ |
Line 27... | Line 30... | ||
27 | /* Extern function prototypes ------------------------------------------------*/ |
30 | /* Extern function prototypes ------------------------------------------------*/ |
28 | /* Private functions ---------------------------------------------------------*/ |
31 | /* Private functions ---------------------------------------------------------*/ |
29 | /* function prototypes */ |
32 | /* function prototypes */ |
30 | /* automatically built defining related macros */ |
33 | /* automatically built defining related macros */ |
31 | #ifdef CTR_Callback |
34 | #ifdef CTR_Callback |
32 | void CTR_Callback(void); |
35 | void CTR_Callback(void); |
33 | #endif |
36 | #endif |
34 | #ifdef DOVR_Callback |
37 | #ifdef DOVR_Callback |
35 | void DOVR_Callback(void); |
38 | void DOVR_Callback(void); |
36 | #endif |
39 | #endif |
37 | #ifdef ERR_Callback |
40 | #ifdef ERR_Callback |
38 | void ERR_Callback(void); |
41 | void ERR_Callback(void); |
39 | #endif |
42 | #endif |
40 | #ifdef WKUP_Callback |
43 | #ifdef WKUP_Callback |
41 | void WKUP_Callback(void); |
44 | void WKUP_Callback(void); |
42 | #endif |
45 | #endif |
43 | #ifdef SUSP_Callback |
46 | #ifdef SUSP_Callback |
44 | void SUSP_Callback(void); |
47 | void SUSP_Callback(void); |
45 | #endif |
48 | #endif |
46 | #ifdef RESET_Callback |
49 | #ifdef RESET_Callback |
47 | void RESET_Callback(void); |
50 | void RESET_Callback(void); |
48 | #endif |
51 | #endif |
49 | #ifdef SOF_Callback |
52 | #ifdef SOF_Callback |
50 | void SOF_Callback(void); |
53 | void SOF_Callback(void); |
51 | #endif |
54 | #endif |
52 | #ifdef ESOF_Callback |
55 | #ifdef ESOF_Callback |
53 | void ESOF_Callback(void); |
56 | void ESOF_Callback(void); |
54 | #endif |
57 | #endif |
Line 55... | Line 58... | ||
55 | 58 | ||
56 | extern void EP1_IN_Callback(void); |
59 | extern void EP1_IN_Callback(void); |
57 | extern void EP2_IN_Callback(void); |
60 | extern void EP2_IN_Callback(void); |
Line 85... | Line 88... | ||
85 | extern void EP13_OUT_Callback(void); |
88 | extern void EP13_OUT_Callback(void); |
86 | extern void EP14_OUT_Callback(void); |
89 | extern void EP14_OUT_Callback(void); |
87 | extern void EP15_OUT_Callback(void); |
90 | extern void EP15_OUT_Callback(void); |
Line 88... | Line 91... | ||
88 | 91 | ||
89 | /* function pointers to non-control endpoints service routines */ |
92 | /* function pointers to non-control endpoints service routines */ |
- | 93 | void (*pEpInt_IN[15])(void) = |
|
90 | void (*pEpInt_IN[15])(void)={ |
94 | { |
91 | EP1_IN_Callback, |
95 | EP1_IN_Callback, |
92 | EP2_IN_Callback, |
96 | EP2_IN_Callback, |
93 | EP3_IN_Callback, |
97 | EP3_IN_Callback, |
94 | EP4_IN_Callback, |
98 | EP4_IN_Callback, |
95 | EP5_IN_Callback, |
99 | EP5_IN_Callback, |
96 | EP6_IN_Callback, |
100 | EP6_IN_Callback, |
97 | EP7_IN_Callback, |
101 | EP7_IN_Callback, |
98 | EP8_IN_Callback, |
102 | EP8_IN_Callback, |
99 | EP9_IN_Callback,// only 9 endpoint in the STR9 |
103 | EP9_IN_Callback,// only 9 endpoint in the STR9 |
100 | EP10_IN_Callback, |
104 | EP10_IN_Callback, |
101 | EP11_IN_Callback, |
105 | EP11_IN_Callback, |
102 | EP12_IN_Callback, |
106 | EP12_IN_Callback, |
103 | EP13_IN_Callback, |
107 | EP13_IN_Callback, |
104 | EP14_IN_Callback, |
108 | EP14_IN_Callback, |
105 | EP15_IN_Callback |
109 | EP15_IN_Callback |
106 | }; |
110 | }; |
107 | 111 | ||
- | 112 | void (*pEpInt_OUT[15])(void) = |
|
108 | void (*pEpInt_OUT[15])(void)={ |
113 | { |
109 | EP1_OUT_Callback, |
114 | EP1_OUT_Callback, |
110 | EP2_OUT_Callback, |
115 | EP2_OUT_Callback, |
111 | EP3_OUT_Callback, |
116 | EP3_OUT_Callback, |
112 | EP4_OUT_Callback, |
117 | EP4_OUT_Callback, |
113 | EP5_OUT_Callback, |
118 | EP5_OUT_Callback, |
114 | EP6_OUT_Callback, |
119 | EP6_OUT_Callback, |
115 | EP7_OUT_Callback, |
120 | EP7_OUT_Callback, |
116 | EP8_OUT_Callback, |
121 | EP8_OUT_Callback, |
117 | EP9_OUT_Callback, |
122 | EP9_OUT_Callback, |
118 | EP10_OUT_Callback,// only 9 endpoint in the STR9 |
123 | EP10_OUT_Callback,// only 9 endpoint in the STR9 |
119 | EP11_OUT_Callback, |
124 | EP11_OUT_Callback, |
120 | EP12_OUT_Callback, |
125 | EP12_OUT_Callback, |
121 | EP13_OUT_Callback, |
126 | EP13_OUT_Callback, |
122 | EP14_OUT_Callback, |
127 | EP14_OUT_Callback, |
123 | EP15_OUT_Callback |
128 | EP15_OUT_Callback |
124 | }; |
129 | }; |
125 | /******************************************************************************* |
130 | /******************************************************************************* |
126 | * Function Name : USB_Istr |
131 | * Function Name : USB_Istr |
127 | * Description : handle the usb interrupt routines |
132 | * Description : handle the usb interrupt routines |
128 | * Input : None. |
133 | * Input : None. |
129 | * Output : None. |
134 | * Output : None. |
130 | * Return : None. |
135 | * Return : None. |
131 | *******************************************************************************/ |
136 | *******************************************************************************/ |
132 | void USB_Istr(void) |
137 | void USB_Istr(void) |
133 | { |
138 | { |
134 | wIstr = _GetISTR(); |
139 | wIstr = _GetISTR(); |
135 | #if (IMR_MSK & ISTR_RESET) |
140 | #if (IMR_MSK & ISTR_RESET) |
136 | if (wIstr & ISTR_RESET & wInterrupt_Mask) |
141 | if (wIstr & ISTR_RESET & wInterrupt_Mask) |
137 | { |
142 | { |
138 | _SetISTR((u16)CLR_RESET); |
143 | _SetISTR((u16)CLR_RESET); |
139 | Device_Property.Reset(); |
144 | Device_Property.Reset(); |
140 | #ifdef RESET_Callback |
145 | #ifdef RESET_Callback |
141 | RESET_Callback(); |
146 | RESET_Callback(); |
142 | #endif |
147 | #endif |
143 | } |
148 | } |
144 | #endif |
149 | #endif |
145 | 150 | ||
146 | #if (IMR_MSK & ISTR_DOVR) |
151 | #if (IMR_MSK & ISTR_DOVR) |
147 | if (wIstr & ISTR_DOVR & wInterrupt_Mask) |
152 | if (wIstr & ISTR_DOVR & wInterrupt_Mask) |
148 | { |
153 | { |
149 | _SetISTR((u16)CLR_DOVR); |
154 | _SetISTR((u16)CLR_DOVR); |
150 | #ifdef DOVR_Callback |
155 | #ifdef DOVR_Callback |
151 | DOVR_Callback(); |
156 | DOVR_Callback(); |
152 | #endif |
157 | #endif |
153 | } |
158 | } |
154 | #endif |
159 | #endif |
155 | 160 | ||
156 | #if (IMR_MSK & ISTR_ERR) |
161 | #if (IMR_MSK & ISTR_ERR) |
157 | if (wIstr & ISTR_ERR & wInterrupt_Mask) |
162 | if (wIstr & ISTR_ERR & wInterrupt_Mask) |
158 | { |
163 | { |
159 | _SetISTR((u16)CLR_ERR); |
164 | _SetISTR((u16)CLR_ERR); |
160 | #ifdef ERR_Callback |
165 | #ifdef ERR_Callback |
161 | ERR_Callback(); |
166 | ERR_Callback(); |
162 | #endif |
167 | #endif |
163 | } |
168 | } |
164 | #endif |
169 | #endif |
165 | 170 | ||
166 | #if (IMR_MSK & ISTR_WKUP) |
171 | #if (IMR_MSK & ISTR_WKUP) |
167 | if (wIstr & ISTR_WKUP & wInterrupt_Mask) |
172 | if (wIstr & ISTR_WKUP & wInterrupt_Mask) |
168 | { |
173 | { |
169 | _SetISTR((u16)CLR_WKUP); |
174 | _SetISTR((u16)CLR_WKUP); |
170 | Resume(RESUME_EXTERNAL); |
175 | Resume(RESUME_EXTERNAL); |
171 | #ifdef WKUP_Callback |
176 | #ifdef WKUP_Callback |
172 | WKUP_Callback(); |
177 | WKUP_Callback(); |
173 | #endif |
178 | #endif |
174 | } |
179 | } |
175 | #endif |
180 | #endif |
176 | 181 | ||
177 | #if (IMR_MSK & ISTR_SUSP) |
182 | #if (IMR_MSK & ISTR_SUSP) |
178 | if (wIstr & ISTR_SUSP & wInterrupt_Mask) |
183 | if (wIstr & ISTR_SUSP & wInterrupt_Mask) |
179 | { |
184 | { |
180 | /* check if SUSPEND is possible */ |
185 | /* check if SUSPEND is possible */ |
181 | if(fSuspendEnabled) |
186 | if (fSuspendEnabled) |
182 | { |
187 | { |
183 | Suspend(); |
188 | Suspend(); |
184 | } |
189 | } |
185 | else |
190 | else |
186 | { |
191 | { |
187 | /* if not possible then resume after xx ms */ |
192 | /* if not possible then resume after xx ms */ |
188 | Resume(RESUME_LATER); |
193 | Resume(RESUME_LATER); |
189 | } |
194 | } |
190 | /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */ |
195 | /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */ |
191 | _SetISTR((u16)CLR_SUSP); |
196 | _SetISTR((u16)CLR_SUSP); |
192 | #ifdef SUSP_Callback |
197 | #ifdef SUSP_Callback |
193 | SUSP_Callback(); |
198 | SUSP_Callback(); |
194 | #endif |
199 | #endif |
195 | } |
200 | } |
196 | #endif |
201 | #endif |
197 | 202 | ||
198 | #if (IMR_MSK & ISTR_SOF) |
203 | #if (IMR_MSK & ISTR_SOF) |
199 | if (wIstr & ISTR_SOF & wInterrupt_Mask) |
204 | if (wIstr & ISTR_SOF & wInterrupt_Mask) |
200 | { |
205 | { |
201 | _SetISTR((u16)CLR_SOF); |
206 | _SetISTR((u16)CLR_SOF); |
202 | #ifdef SOF_Callback |
207 | #ifdef SOF_Callback |
203 | SOF_Callback(); |
208 | SOF_Callback(); |
204 | #endif |
209 | #endif |
205 | } |
210 | } |
206 | #endif |
211 | #endif |
207 | 212 | ||
208 | #if (IMR_MSK & ISTR_ESOF) |
213 | #if (IMR_MSK & ISTR_ESOF) |
209 | if (wIstr & ISTR_ESOF & wInterrupt_Mask) |
214 | if (wIstr & ISTR_ESOF & wInterrupt_Mask) |
210 | { |
215 | { |
211 | _SetISTR((u16)CLR_ESOF); |
216 | _SetISTR((u16)CLR_ESOF); |
212 | /* resume handling timing is made with ESOFs */ |
217 | /* resume handling timing is made with ESOFs */ |
213 | Resume(RESUME_ESOF); /* request without change of the machine state */ |
218 | Resume(RESUME_ESOF); /* request without change of the machine state */ |
214 | #ifdef ESOF_Callback |
219 | #ifdef ESOF_Callback |
215 | ESOF_Callback(); |
220 | ESOF_Callback(); |
216 | #endif |
221 | #endif |
217 | } |
222 | } |
218 | #endif |
223 | #endif |
219 | 224 | ||
220 | #if (IMR_MSK & ISTR_CTR) |
225 | #if (IMR_MSK & ISTR_CTR) |
221 | if (wIstr & ISTR_CTR & wInterrupt_Mask) |
226 | if (wIstr & ISTR_CTR & wInterrupt_Mask) |
222 | { |
227 | { |
223 | /* servicing of the endpoint correct transfer interrupt */ |
228 | /* servicing of the endpoint correct transfer interrupt */ |
224 | /* clear of the CTR flag into the sub */ |
229 | /* clear of the CTR flag into the sub */ |
225 | CTR_LP(); |
230 | CTR_LP(); |
226 | #ifdef CTR_Callback |
231 | #ifdef CTR_Callback |
227 | CTR_Callback(); |
232 | CTR_Callback(); |
228 | #endif |
233 | #endif |
229 | } |
234 | } |
230 | #endif |
235 | #endif |
231 | }/* USB_Istr */ |
236 | }/* USB_Istr */ |