Subversion Repositories NaviCtrl

Rev

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