Subversion Repositories NaviCtrl

Rev

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

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