Subversion Repositories NaviCtrl

Rev

Rev 41 | Details | Compare with Previous | Last modification | View Log | RSS feed

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