Subversion Repositories NaviCtrl

Rev

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 */