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          : 91x_vic.c
3
* Author             : MCD Application Team
4
* Date First Issued  : 05/18/2006 : Version 1.0
5
* Description        : This file provides all the VIC software functions.
6
********************************************************************************
7
* History:
8
* 05/22/2007 : Version 1.2
9
* 05/24/2006 : Version 1.1
10
* 05/18/2006 : Version 1.0
11
********************************************************************************
12
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
13
* CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS
14
* A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT
15
* OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
16
* OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
17
* CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
18
*******************************************************************************/
19
 
20
 
21
/* Standard include ----------------------------------------------------------*/
22
#include "91x_vic.h"
23
 
24
/* Include of other module interface headers ---------------------------------*/
25
/* Local includes ------------------------------------------------------------*/
26
/* Private typedef -----------------------------------------------------------*/
27
/* Private define ------------------------------------------------------------*/
28
 
29
#define VIC_REGISTER_NUMBER              16
30
#define VIC_PROTECTION_ENABLE_MASK       0x1
31
#define VIC_PROTECTION_DISABLE_MASK      0xFFFFFFFE
32
#define VIC_VECTOR_ENABLE_MASK           0x20
33
#define VIC_IT_SOURCE_MASK               0xFFFFFFE0
34
/* Private macro -------------------------------------------------------------*/
35
/* Private variables ---------------------------------------------------------*/
36
/* Private function prototypes -----------------------------------------------*/
37
 
38
static void VIC_ITModeConfig(u16 VIC_Source, VIC_ITLineMode VIC_LineMode);
39
static void VIC_ISRVectAddConfig(u16 VIC_Source, u16 VIC_Priority, \
40
                                 void (*VIC_VectAddress)(void));
41
static void VIC_VectEnableConfig(u16 VIC_Source, u16 VIC_Priority);
42
static void VIC_ITSourceConfig(u16 VIC_Source, u16 VIC_Priority);
43
 
44
/* Interface functions -------------------------------------------------------*/
45
/* Private functions ---------------------------------------------------------*/
46
 
47
/*******************************************************************************
48
* Function Name  : VIC_DeInit
49
* Description    : Deinitialize the VIC module registers to their default reset
50
*                  values.
51
* Input          : None
52
* Output         : None
53
* Return         : None
54
*******************************************************************************/
55
void VIC_DeInit(void)
56
{
57
  SCU_AHBPeriphReset(__VIC, ENABLE);     /* VIC peripheral is under Reset */
58
  SCU_AHBPeriphReset(__VIC, DISABLE);    /* VIC peripheral Reset off */
59
}
60
 
61
/*******************************************************************************
62
* Function Name  : VIC_GetIRQStatus
63
* Description    : Get the status of interrupts after IRQ masking.
64
* Input          : VIC_Source: specifies the number of the source line.
65
*                  This parameter can be one of the following values:
66
*                     - WDG_ITLine   : VIC source 0
67
*                     - SW_ITLine    : VIC source 1
68
*                     - ARMRX_ITLine : VIC source 2
69
*                     - ARMTX_ITLine : VIC source 3
70
*                     - TIM0_ITLine  : VIC source 4
71
*                     - TIM1_ITLine  : VIC source 5
72
*                     - TIM2_ITLine  : VIC source 6
73
*                     - TIM3_ITLine  : VIC source 7
74
*                     - USBHP_ITLine : VIC source 8
75
*                     - USBLP_ITLine : VIC source 9
76
*                     - SCU_ITLine   : VIC source 10
77
*                     - ENET_ITLine : VIC source 11
78
*                     - DMA_ITLine   : VIC source 12
79
*                     - CAN_ITLine   : VIC source 13
80
*                     - MC_ITLine    : VIC source 14
81
*                     - ADC_ITLine   : VIC source 15
82
*                     - UART0_ITLine : VIC source 16
83
*                     - UART1_ITLine : VIC source 17
84
*                     - UART2_ITLine : VIC source 18
85
*                     - I2C0_ITLine  : VIC source 19
86
*                     - I2C1_ITLine  : VIC source 20
87
*                     - SSP0_ITLine  : VIC source 21
88
*                     - SSP1_ITLine  : VIC source 22
89
*                     - LVD_ITLine   : VIC source 23
90
*                     - RTC_ITLine   : VIC source 24
91
*                     - WIU_ITLine   : VIC source 25
92
*                     - EXTIT0_ITLine: VIC source 26
93
*                     - EXTIT1_ITLine: VIC source 27
94
*                     - EXTIT2_ITLine: VIC source 28
95
*                     - EXTIT3_ITLine: VIC source 29
96
*                     - USBWU_ITLine : VIC source 30
97
*                     - PFQBC_ITLine : VIC source 31
98
* Output         : None
99
* Return         : The status of the IRQ interrupt after masking (SET or RESET).
100
*******************************************************************************/
101
FlagStatus VIC_GetIRQStatus(u16 VIC_Source)
102
{
103
  u32 VIC_Mask = 1;
104
  if (VIC_Source < VIC_REGISTER_NUMBER)
105
  {
106
    if ((VIC0->ISR | VIC_Mask << VIC_Source) != RESET)
107
      return SET;
108
    else
109
      return RESET;
110
  }
111
  else
112
  {
113
    if ((VIC1->ISR | VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER)) != RESET)
114
      return SET;
115
    else
116
      return RESET;
117
  }
118
}
119
 
120
/*******************************************************************************
121
* Function Name  : VIC_GetFIQStatus
122
* Description    : Get the status of interrupts after FIQ masking
123
* Input          : VIC_Source: specifies the number of the source line.
124
*                  This parameter can be one of the following values:
125
*                     - WDG_ITLine   : VIC source 0
126
*                     - SW_ITLine    : VIC source 1
127
*                     - ARMRX_ITLine : VIC source 2
128
*                     - ARMTX_ITLine : VIC source 3
129
*                     - TIM0_ITLine  : VIC source 4
130
*                     - TIM1_ITLine  : VIC source 5
131
*                     - TIM2_ITLine  : VIC source 6
132
*                     - TIM3_ITLine  : VIC source 7
133
*                     - USBHP_ITLine : VIC source 8
134
*                     - USBLP_ITLine : VIC source 9
135
*                     - SCU_ITLine   : VIC source 10
136
*                     - ENET_ITLine : VIC source 11
137
*                     - DMA_ITLine   : VIC source 12
138
*                     - CAN_ITLine   : VIC source 13
139
*                     - MC_ITLine    : VIC source 14
140
*                     - ADC_ITLine   : VIC source 15
141
*                     - UART0_ITLine : VIC source 16
142
*                     - UART1_ITLine : VIC source 17
143
*                     - UART2_ITLine : VIC source 18
144
*                     - I2C0_ITLine  : VIC source 19
145
*                     - I2C1_ITLine  : VIC source 20
146
*                     - SSP0_ITLine  : VIC source 21
147
*                     - SSP1_ITLine  : VIC source 22
148
*                     - LVD_ITLine   : VIC source 23
149
*                     - RTC_ITLine   : VIC source 24
150
*                     - WIU_ITLine   : VIC source 25
151
*                     - EXTIT0_ITLine: VIC source 26
152
*                     - EXTIT1_ITLine: VIC source 27
153
*                     - EXTIT2_ITLine: VIC source 28
154
*                     - EXTIT3_ITLine: VIC source 29
155
*                     - USBWU_ITLine : VIC source 30
156
*                     - PFQBC_ITLine : VIC source 31
157
* Output         : None
158
* Return         : The status of the FIQ interrupt after masking (SET or RESET)
159
*******************************************************************************/
160
FlagStatus VIC_GetFIQStatus(u16 VIC_Source)
161
{
162
  u32 VIC_Mask = 1;
163
  if (VIC_Source < VIC_REGISTER_NUMBER)
164
  {
165
    if ((VIC0->RINTSR | VIC_Mask << VIC_Source) != RESET)
166
      return SET;
167
    else
168
      return RESET;
169
  }
170
  else
171
  {
172
    if ((VIC1->RINTSR | VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER)) != RESET)
173
      return SET;
174
    else
175
      return RESET;
176
  }
177
}
178
 
179
/*******************************************************************************
180
* Function Name  : VIC_GetSourceITStatus
181
* Description    : Get the status of the source interrupts before masking.
182
* Input          : VIC_Source: specifies the number of the source line.
183
*                  This parameter can be one of the following values:
184
*                     - WDG_ITLine   : VIC source 0
185
*                     - SW_ITLine    : VIC source 1
186
*                     - ARMRX_ITLine : VIC source 2
187
*                     - ARMTX_ITLine : VIC source 3
188
*                     - TIM0_ITLine  : VIC source 4
189
*                     - TIM1_ITLine  : VIC source 5
190
*                     - TIM2_ITLine  : VIC source 6
191
*                     - TIM3_ITLine  : VIC source 7
192
*                     - USBHP_ITLine : VIC source 8
193
*                     - USBLP_ITLine : VIC source 9
194
*                     - SCU_ITLine   : VIC source 10
195
*                     - ENET_ITLine : VIC source 11
196
*                     - DMA_ITLine   : VIC source 12
197
*                     - CAN_ITLine   : VIC source 13
198
*                     - MC_ITLine    : VIC source 14
199
*                     - ADC_ITLine   : VIC source 15
200
*                     - UART0_ITLine : VIC source 16
201
*                     - UART1_ITLine : VIC source 17
202
*                     - UART2_ITLine : VIC source 18
203
*                     - I2C0_ITLine  : VIC source 19
204
*                     - I2C1_ITLine  : VIC source 20
205
*                     - SSP0_ITLine  : VIC source 21
206
*                     - SSP1_ITLine  : VIC source 22
207
*                     - LVD_ITLine   : VIC source 23
208
*                     - RTC_ITLine   : VIC source 24
209
*                     - WIU_ITLine   : VIC source 25
210
*                     - EXTIT0_ITLine: VIC source 26
211
*                     - EXTIT1_ITLine: VIC source 27
212
*                     - EXTIT2_ITLine: VIC source 28
213
*                     - EXTIT3_ITLine: VIC source 29
214
*                     - USBWU_ITLine : VIC source 30
215
*                     - PFQBC_ITLine : VIC source 31
216
* Output         : None
217
* Return         : The status of the source interrupt before masking
218
*******************************************************************************/
219
FlagStatus VIC_GetSourceITStatus(u16 VIC_Source)
220
{
221
  u32 VIC_Mask = 1;
222
  if (VIC_Source < VIC_REGISTER_NUMBER)
223
  {
224
    if ((VIC0->FSR | VIC_Mask << VIC_Source) != RESET)
225
      return SET;
226
    else
227
      return RESET;
228
  }
229
  else
230
  {
231
    if ((VIC1->FSR | VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER)) != RESET)
232
      return SET;
233
    else
234
      return RESET;
235
  }
236
}
237
 
238
/*******************************************************************************
239
* Function Name  : VIC_ITModeConfig
240
* Description    : Select the type of interrupt (IRQ or FIQ)
241
* Input1         : VIC_Source: specifies the number of the source line.
242
*                  This parameter can be one of the following values:
243
*                     - WDG_ITLine   : VIC source 0
244
*                     - SW_ITLine    : VIC source 1
245
*                     - ARMRX_ITLine : VIC source 2
246
*                     - ARMTX_ITLine : VIC source 3
247
*                     - TIM0_ITLine  : VIC source 4
248
*                     - TIM1_ITLine  : VIC source 5
249
*                     - TIM2_ITLine  : VIC source 6
250
*                     - TIM3_ITLine  : VIC source 7
251
*                     - USBHP_ITLine : VIC source 8
252
*                     - USBLP_ITLine : VIC source 9
253
*                     - SCU_ITLine   : VIC source 10
254
*                     - ENET_ITLine : VIC source 11
255
*                     - DMA_ITLine   : VIC source 12
256
*                     - CAN_ITLine   : VIC source 13
257
*                     - MC_ITLine    : VIC source 14
258
*                     - ADC_ITLine   : VIC source 15
259
*                     - UART0_ITLine : VIC source 16
260
*                     - UART1_ITLine : VIC source 17
261
*                     - UART2_ITLine : VIC source 18
262
*                     - I2C0_ITLine  : VIC source 19
263
*                     - I2C1_ITLine  : VIC source 20
264
*                     - SSP0_ITLine  : VIC source 21
265
*                     - SSP1_ITLine  : VIC source 22
266
*                     - LVD_ITLine   : VIC source 23
267
*                     - RTC_ITLine   : VIC source 24
268
*                     - WIU_ITLine   : VIC source 25
269
*                     - EXTIT0_ITLine: VIC source 26
270
*                     - EXTIT1_ITLine: VIC source 27
271
*                     - EXTIT2_ITLine: VIC source 28
272
*                     - EXTIT3_ITLine: VIC source 29
273
*                     - USBWU_ITLine : VIC source 30
274
*                     - PFQBC_ITLine : VIC source 31
275
* Input2         : VIC_LineMode :specifies the type of interrupt of the source
276
*                  line. This parameter can be one of the following values:
277
*                     - VIC_IRQ: the correspondent line is configured as IRQ.
278
*                     - VIC_FIQ: the correspondent line is configured as FIQ.
279
* Output         : None
280
* Return         : None
281
*******************************************************************************/
282
static void VIC_ITModeConfig(u16 VIC_Source, VIC_ITLineMode VIC_LineMode)
283
{
284
  u32 VIC_Mask = 1;
285
 
286
  if (VIC_Source < VIC_REGISTER_NUMBER) /* VIC0 */
287
  {
288
    if (VIC_LineMode == VIC_IRQ)
289
      VIC0->INTSR &= ~(VIC_Mask << VIC_Source);
290
    else /* VIC_LineMode == VIC_FIQ */
291
      VIC0->INTSR |= (VIC_Mask << VIC_Source);
292
  }
293
  else /* VIC1 */
294
  {
295
    if (VIC_LineMode == VIC_IRQ)
296
      VIC1->INTSR &= ~(VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER));
297
    else /* VIC_LineMode == VIC_FIQ */
298
      VIC1->INTSR |= (VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER));
299
  }
300
}
301
 
302
/*******************************************************************************
303
* Function Name  : VIC_ITCmd
304
* Description    : Enable or disable the interrupt request lines.
305
* Input1         : VIC_Source: specifies the number of the source line.
306
*                  This parameter can be one of the following values:
307
*                     - WDG_ITLine   : VIC source 0
308
*                     - SW_ITLine    : VIC source 1
309
*                     - ARMRX_ITLine : VIC source 2
310
*                     - ARMTX_ITLine : VIC source 3
311
*                     - TIM0_ITLine  : VIC source 4
312
*                     - TIM1_ITLine  : VIC source 5
313
*                     - TIM2_ITLine  : VIC source 6
314
*                     - TIM3_ITLine  : VIC source 7
315
*                     - USBHP_ITLine : VIC source 8
316
*                     - USBLP_ITLine : VIC source 9
317
*                     - SCU_ITLine   : VIC source 10
318
*                     - ENET_ITLine : VIC source 11
319
*                     - DMA_ITLine   : VIC source 12
320
*                     - CAN_ITLine   : VIC source 13
321
*                     - MC_ITLine    : VIC source 14
322
*                     - ADC_ITLine   : VIC source 15
323
*                     - UART0_ITLine : VIC source 16
324
*                     - UART1_ITLine : VIC source 17
325
*                     - UART2_ITLine : VIC source 18
326
*                     - I2C0_ITLine  : VIC source 19
327
*                     - I2C1_ITLine  : VIC source 20
328
*                     - SSP0_ITLine  : VIC source 21
329
*                     - SSP1_ITLine  : VIC source 22
330
*                     - LVD_ITLine   : VIC source 23
331
*                     - RTC_ITLine   : VIC source 24
332
*                     - WIU_ITLine   : VIC source 25
333
*                     - EXTIT0_ITLine: VIC source 26
334
*                     - EXTIT1_ITLine: VIC source 27
335
*                     - EXTIT2_ITLine: VIC source 28
336
*                     - EXTIT3_ITLine: VIC source 29
337
*                     - USBWU_ITLine : VIC source 30
338
*                     - PFQBC_ITLine : VIC source 31
339
* Input2         : FMI_NewState: specifies the line status.
340
*                  This parameter can be one of the following values:
341
*                     - ENABLE:  The line is enabled.
342
*                     - DISABLE: The line is disabled.
343
* Output         : None
344
* Return         : None
345
*******************************************************************************/
346
void VIC_ITCmd(u16 VIC_Source, FunctionalState VIC_NewState)
347
{
348
  u32 VIC_Mask = 1;
349
 
350
  if (VIC_NewState == ENABLE)
351
  {
352
    if (VIC_Source < VIC_REGISTER_NUMBER)  /* VIC0 */
353
      VIC0->INTER |= (VIC_Mask << VIC_Source);
354
    else /* VIC1 */
355
      VIC1->INTER |= (VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER));
356
  }
357
  else /* VIC_NewState == DISABLE */
358
  {
359
    if (VIC_Source < VIC_REGISTER_NUMBER)  /* VIC0 */
360
      VIC0->INTECR |= (VIC_Mask << VIC_Source);
361
    else /* VIC1 */
362
      VIC1->INTECR |= (VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER));
363
  }
364
}
365
 
366
/*******************************************************************************
367
* Function Name  : VIC_SWITCmd
368
* Description    : Generate a software interrupt for the specific source
369
*                  interrupt.
370
* Input1         : VIC_Source: specifies the number of the source line.
371
*                  This parameter can be one of the following values:
372
*                     - WDG_ITLine   : VIC source 0
373
*                     - SW_ITLine    : VIC source 1
374
*                     - ARMRX_ITLine : VIC source 2
375
*                     - ARMTX_ITLine : VIC source 3
376
*                     - TIM0_ITLine  : VIC source 4
377
*                     - TIM1_ITLine  : VIC source 5
378
*                     - TIM2_ITLine  : VIC source 6
379
*                     - TIM3_ITLine  : VIC source 7
380
*                     - USBHP_ITLine : VIC source 8
381
*                     - USBLP_ITLine : VIC source 9
382
*                     - SCU_ITLine   : VIC source 10
383
*                     - ENET_ITLine : VIC source 11
384
*                     - DMA_ITLine   : VIC source 12
385
*                     - CAN_ITLine   : VIC source 13
386
*                     - MC_ITLine    : VIC source 14
387
*                     - ADC_ITLine   : VIC source 15
388
*                     - UART0_ITLine : VIC source 16
389
*                     - UART1_ITLine : VIC source 17
390
*                     - UART2_ITLine : VIC source 18
391
*                     - I2C0_ITLine  : VIC source 19
392
*                     - I2C1_ITLine  : VIC source 20
393
*                     - SSP0_ITLine  : VIC source 21
394
*                     - SSP1_ITLine  : VIC source 22
395
*                     - LVD_ITLine   : VIC source 23
396
*                     - RTC_ITLine   : VIC source 24
397
*                     - WIU_ITLine   : VIC source 25
398
*                     - EXTIT0_ITLine: VIC source 26
399
*                     - EXTIT1_ITLine: VIC source 27
400
*                     - EXTIT2_ITLine: VIC source 28
401
*                     - EXTIT3_ITLine: VIC source 29
402
*                     - USBWU_ITLine : VIC source 30
403
*                     - PFQBC_ITLine : VIC source 31
404
* Input2         : FMI_NewState: specifies the software interrupt status.
405
*                  This parameter can be one of the following values:
406
*                     - ENABLE:  The software interrupt is enabled.
407
*                     - DISABLE: The software interrupt is disabled.
408
* Output         : None
409
* Return         : None
410
*******************************************************************************/
411
void VIC_SWITCmd(u16 VIC_Source, FunctionalState VIC_NewState)
412
{
413
  u32 VIC_Mask = 1;
414
 
415
  if (VIC_NewState == ENABLE)
416
  {
417
    if (VIC_Source < VIC_REGISTER_NUMBER)  /* VIC0 */
418
      VIC0->SWINTR |= (VIC_Mask << VIC_Source);
419
    else /* VIC1 */
420
      VIC1->SWINTR |= (VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER));
421
  }
422
  else /* VIC_NewState == DISABLE */
423
  {
424
    if (VIC_Source < VIC_REGISTER_NUMBER)  /* VIC0 */
425
      VIC0->SWINTCR = (VIC_Mask << VIC_Source);
426
    else /* VIC1 */
427
      VIC1->SWINTCR = (VIC_Mask << (VIC_Source - VIC_REGISTER_NUMBER));
428
  }
429
}
430
 
431
/*******************************************************************************
432
* Function Name  : VIC_ProtectionCmd
433
* Description    : Enable or Disable the register access protection.
434
* Input          : FMI_NewState: specifies the protection status.
435
*                  This parameter can be one of the following values:
436
*                     - ENABLE:  The protection is enabled.
437
*                     - DISABLE: The protection is disabled.
438
* Output         : None
439
* Return         : None
440
*******************************************************************************/
441
void VIC_ProtectionCmd(FunctionalState VIC_NewState)
442
{
443
  if (VIC_NewState == ENABLE)
444
  {
445
    VIC0->PER |= VIC_PROTECTION_ENABLE_MASK;
446
    VIC1->PER |= VIC_PROTECTION_ENABLE_MASK;
447
  }
448
  else
449
  {
450
    VIC0->PER &= VIC_PROTECTION_DISABLE_MASK;
451
    VIC1->PER &= VIC_PROTECTION_DISABLE_MASK;
452
  }
453
}
454
 
455
/*******************************************************************************
456
* Function Name  : VIC_GetCurrentISRAdd
457
* Description    : Get the address of the current active ISR.
458
* Input          : VICx: specifies the VIC peripheral
459
*                  This parameter can be one of the following values:
460
*                     - VIC0: To select VIC0.
461
*                     - VIC1: To select VIC1.
462
* Output         : None
463
* Return         : The Address of the active ISR.
464
*******************************************************************************/
465
u32 VIC_GetCurrentISRAdd(VIC_TypeDef* VICx)
466
{
467
  return VICx->VAR;
468
}
469
 
470
/*******************************************************************************
471
* Function Name  : VIC_ISRVectAddConfig
472
* Description    : Configuration of the ISR vector address.
473
* Input1         : VIC_Source: specifies the number of the source line.
474
*                  This parameter can be one of the following values:
475
*                     - WDG_ITLine   : VIC source 0
476
*                     - SW_ITLine    : VIC source 1
477
*                     - ARMRX_ITLine : VIC source 2
478
*                     - ARMTX_ITLine : VIC source 3
479
*                     - TIM0_ITLine  : VIC source 4
480
*                     - TIM1_ITLine  : VIC source 5
481
*                     - TIM2_ITLine  : VIC source 6
482
*                     - TIM3_ITLine  : VIC source 7
483
*                     - USBHP_ITLine : VIC source 8
484
*                     - USBLP_ITLine : VIC source 9
485
*                     - SCU_ITLine   : VIC source 10
486
*                     - ENET_ITLine : VIC source 11
487
*                     - DMA_ITLine   : VIC source 12
488
*                     - CAN_ITLine   : VIC source 13
489
*                     - MC_ITLine    : VIC source 14
490
*                     - ADC_ITLine   : VIC source 15
491
*                     - UART0_ITLine : VIC source 16
492
*                     - UART1_ITLine : VIC source 17
493
*                     - UART2_ITLine : VIC source 18
494
*                     - I2C0_ITLine  : VIC source 19
495
*                     - I2C1_ITLine  : VIC source 20
496
*                     - SSP0_ITLine  : VIC source 21
497
*                     - SSP1_ITLine  : VIC source 22
498
*                     - LVD_ITLine   : VIC source 23
499
*                     - RTC_ITLine   : VIC source 24
500
*                     - WIU_ITLine   : VIC source 25
501
*                     - EXTIT0_ITLine: VIC source 26
502
*                     - EXTIT1_ITLine: VIC source 27
503
*                     - EXTIT2_ITLine: VIC source 28
504
*                     - EXTIT3_ITLine: VIC source 29
505
*                     - USBWU_ITLine : VIC source 30
506
*                     - PFQBC_ITLine : VIC source 31
507
* Input2         : VIC_Priority: specifies the priority of the interrupt.
508
*                  It can be a value from 0 to 15. 0 is the highest priority.
509
* Input3         : void (*VIC_VectAddress)(void): specifies the ISR vector
510
*                  address pointer.
511
* Output         : None
512
* Return         : None
513
*******************************************************************************/
514
static void VIC_ISRVectAddConfig(u16 VIC_Source, u16 VIC_Priority, \
515
                          void (*VIC_VectAddress)(void))
516
{
517
  if (VIC_Source < VIC_REGISTER_NUMBER) /* VIC0 */
518
    VIC0->VAiR[VIC_Priority] = (u32)VIC_VectAddress;
519
  else /* VIC1 */
520
    VIC1->VAiR[VIC_Priority] = (u32)VIC_VectAddress;
521
}
522
 
523
/*******************************************************************************
524
* Function Name  : VIC_GetISRVectAdd
525
* Description    : Get the ISR vector address of the correspondent line.
526
* Input          : VIC_Source: specifies the number of the source line.
527
*                  This parameter can be one of the following values:
528
*                     - WDG_ITLine   : VIC source 0
529
*                     - SW_ITLine    : VIC source 1
530
*                     - ARMRX_ITLine : VIC source 2
531
*                     - ARMTX_ITLine : VIC source 3
532
*                     - TIM0_ITLine  : VIC source 4
533
*                     - TIM1_ITLine  : VIC source 5
534
*                     - TIM2_ITLine  : VIC source 6
535
*                     - TIM3_ITLine  : VIC source 7
536
*                     - USBHP_ITLine : VIC source 8
537
*                     - USBLP_ITLine : VIC source 9
538
*                     - SCU_ITLine   : VIC source 10
539
*                     - ENET_ITLine : VIC source 11
540
*                     - DMA_ITLine   : VIC source 12
541
*                     - CAN_ITLine   : VIC source 13
542
*                     - MC_ITLine    : VIC source 14
543
*                     - ADC_ITLine   : VIC source 15
544
*                     - UART0_ITLine : VIC source 16
545
*                     - UART1_ITLine : VIC source 17
546
*                     - UART2_ITLine : VIC source 18
547
*                     - I2C0_ITLine  : VIC source 19
548
*                     - I2C1_ITLine  : VIC source 20
549
*                     - SSP0_ITLine  : VIC source 21
550
*                     - SSP1_ITLine  : VIC source 22
551
*                     - LVD_ITLine   : VIC source 23
552
*                     - RTC_ITLine   : VIC source 24
553
*                     - WIU_ITLine   : VIC source 25
554
*                     - EXTIT0_ITLine: VIC source 26
555
*                     - EXTIT1_ITLine: VIC source 27
556
*                     - EXTIT2_ITLine: VIC source 28
557
*                     - EXTIT3_ITLine: VIC source 29
558
*                     - USBWU_ITLine : VIC source 30
559
*                     - PFQBC_ITLine : VIC source 31
560
* Output         : None
561
* Return         : The correspondent ISR vector address.
562
*******************************************************************************/
563
u32 VIC_GetISRVectAdd(u16 VIC_Source)
564
{
565
  if (VIC_Source < VIC_REGISTER_NUMBER) /* VIC0 */
566
    return VIC0->VAiR[VIC_Source];
567
  else /* VIC1 */
568
    return VIC1->VAiR[VIC_Source - VIC_REGISTER_NUMBER];
569
}
570
 
571
/*******************************************************************************
572
* Function Name  : VIC_VectEnableConfig
573
* Description    : Enable the vector interrupt.
574
* Input1         : VIC_Source: specifies the number of the source line.
575
*                  This parameter can be one of the following values:
576
*                     - WDG_ITLine   : VIC source 0
577
*                     - SW_ITLine    : VIC source 1
578
*                     - ARMRX_ITLine : VIC source 2
579
*                     - ARMTX_ITLine : VIC source 3
580
*                     - TIM0_ITLine  : VIC source 4
581
*                     - TIM1_ITLine  : VIC source 5
582
*                     - TIM2_ITLine  : VIC source 6
583
*                     - TIM3_ITLine  : VIC source 7
584
*                     - USBHP_ITLine : VIC source 8
585
*                     - USBLP_ITLine : VIC source 9
586
*                     - SCU_ITLine   : VIC source 10
587
*                     - ENET_ITLine : VIC source 11
588
*                     - DMA_ITLine   : VIC source 12
589
*                     - CAN_ITLine   : VIC source 13
590
*                     - MC_ITLine    : VIC source 14
591
*                     - ADC_ITLine   : VIC source 15
592
*                     - UART0_ITLine : VIC source 16
593
*                     - UART1_ITLine : VIC source 17
594
*                     - UART2_ITLine : VIC source 18
595
*                     - I2C0_ITLine  : VIC source 19
596
*                     - I2C1_ITLine  : VIC source 20
597
*                     - SSP0_ITLine  : VIC source 21
598
*                     - SSP1_ITLine  : VIC source 22
599
*                     - LVD_ITLine   : VIC source 23
600
*                     - RTC_ITLine   : VIC source 24
601
*                     - WIU_ITLine   : VIC source 25
602
*                     - EXTIT0_ITLine: VIC source 26
603
*                     - EXTIT1_ITLine: VIC source 27
604
*                     - EXTIT2_ITLine: VIC source 28
605
*                     - EXTIT3_ITLine: VIC source 29
606
*                     - USBWU_ITLine : VIC source 30
607
*                     - PFQBC_ITLine : VIC source 31
608
* Input2         : VIC_Priority: specifies the priority of the interrupt.
609
*                  It can be a value from 0 to 15. 0 is the highest priority.
610
* Output         : None
611
* Return         : None
612
*******************************************************************************/
613
static void VIC_VectEnableConfig(u16 VIC_Source, u16 VIC_Priority)
614
{
615
  if (VIC_Source < VIC_REGISTER_NUMBER) /* VIC0 */
616
    VIC0->VCiR[VIC_Priority] |= VIC_VECTOR_ENABLE_MASK;
617
  else /* VIC1 */
618
    VIC1->VCiR[VIC_Priority] |= VIC_VECTOR_ENABLE_MASK;
619
}
620
 
621
/*******************************************************************************
622
* Function Name  : VIC_ITSourceConfig
623
* Description    : Select the interrupt source.
624
* Input1         : VIC_Source: specifies the number of the source line.
625
*                  This parameter can be one of the following values:
626
*                     - WDG_ITLine   : VIC source 0
627
*                     - SW_ITLine    : VIC source 1
628
*                     - ARMRX_ITLine : VIC source 2
629
*                     - ARMTX_ITLine : VIC source 3
630
*                     - TIM0_ITLine  : VIC source 4
631
*                     - TIM1_ITLine  : VIC source 5
632
*                     - TIM2_ITLine  : VIC source 6
633
*                     - TIM3_ITLine  : VIC source 7
634
*                     - USBHP_ITLine : VIC source 8
635
*                     - USBLP_ITLine : VIC source 9
636
*                     - SCU_ITLine   : VIC source 10
637
*                     - ENET_ITLine : VIC source 11
638
*                     - DMA_ITLine   : VIC source 12
639
*                     - CAN_ITLine   : VIC source 13
640
*                     - MC_ITLine    : VIC source 14
641
*                     - ADC_ITLine   : VIC source 15
642
*                     - UART0_ITLine : VIC source 16
643
*                     - UART1_ITLine : VIC source 17
644
*                     - UART2_ITLine : VIC source 18
645
*                     - I2C0_ITLine  : VIC source 19
646
*                     - I2C1_ITLine  : VIC source 20
647
*                     - SSP0_ITLine  : VIC source 21
648
*                     - SSP1_ITLine  : VIC source 22
649
*                     - LVD_ITLine   : VIC source 23
650
*                     - RTC_ITLine   : VIC source 24
651
*                     - WIU_ITLine   : VIC source 25
652
*                     - EXTIT0_ITLine: VIC source 26
653
*                     - EXTIT1_ITLine: VIC source 27
654
*                     - EXTIT2_ITLine: VIC source 28
655
*                     - EXTIT3_ITLine: VIC source 29
656
*                     - USBWU_ITLine : VIC source 30
657
*                     - PFQBC_ITLine : VIC source 31
658
* Input2         : VIC_Priority: specifies the priority of the interrupt.
659
*                  It can be a value from 0 to 15. 0 is the highest priority.
660
* Output         : None
661
* Return         : None
662
*******************************************************************************/
663
static void VIC_ITSourceConfig(u16 VIC_Source, u16 VIC_Priority)
664
{
665
  if (VIC_Source < VIC_REGISTER_NUMBER) /* VIC0 */
666
  {
667
    VIC0->VCiR[VIC_Priority] &= VIC_IT_SOURCE_MASK;
668
    VIC0->VCiR[VIC_Priority] |= VIC_Source;
669
  }
670
  else /* VIC1 */
671
  {
672
    VIC1->VCiR[VIC_Priority] &= VIC_IT_SOURCE_MASK;
673
    VIC1->VCiR[VIC_Priority] |= VIC_Source - VIC_REGISTER_NUMBER;
674
  }
675
}
676
 
677
/*******************************************************************************
678
* Function Name  : VIC_Config
679
* Description    : Configure the ISR, the line, the mode and the priority for
680
*                  each interrupt source line.
681
* Input1         : VIC_Source: specifies the number of the source line.
682
*                  This parameter can be one of the following values:
683
*                     - WDG_ITLine   : VIC source 0
684
*                     - SW_ITLine    : VIC source 1
685
*                     - ARMRX_ITLine : VIC source 2
686
*                     - ARMTX_ITLine : VIC source 3
687
*                     - TIM0_ITLine  : VIC source 4
688
*                     - TIM1_ITLine  : VIC source 5
689
*                     - TIM2_ITLine  : VIC source 6
690
*                     - TIM3_ITLine  : VIC source 7
691
*                     - USBHP_ITLine : VIC source 8
692
*                     - USBLP_ITLine : VIC source 9
693
*                     - SCU_ITLine   : VIC source 10
694
*                     - ENET_ITLine : VIC source 11
695
*                     - DMA_ITLine   : VIC source 12
696
*                     - CAN_ITLine   : VIC source 13
697
*                     - MC_ITLine    : VIC source 14
698
*                     - ADC_ITLine   : VIC source 15
699
*                     - UART0_ITLine : VIC source 16
700
*                     - UART1_ITLine : VIC source 17
701
*                     - UART2_ITLine : VIC source 18
702
*                     - I2C0_ITLine  : VIC source 19
703
*                     - I2C1_ITLine  : VIC source 20
704
*                     - SSP0_ITLine  : VIC source 21
705
*                     - SSP1_ITLine  : VIC source 22
706
*                     - LVD_ITLine   : VIC source 23
707
*                     - RTC_ITLine   : VIC source 24
708
*                     - WIU_ITLine   : VIC source 25
709
*                     - EXTIT0_ITLine: VIC source 26
710
*                     - EXTIT1_ITLine: VIC source 27
711
*                     - EXTIT2_ITLine: VIC source 28
712
*                     - EXTIT3_ITLine: VIC source 29
713
*                     - USBWU_ITLine : VIC source 30
714
*                     - PFQBC_ITLine : VIC source 31
715
* Input2         : VIC_LineMode :specifies the type of interrupt of the source
716
*                  line. This parameter can be one of the following values:
717
*                     - VIC_IRQ: the correspondent line is configured as IRQ.
718
*                     - VIC_FIQ: the correspondent line is configured as FIQ.
719
* Input3         : VIC_Priority: specifies the priority of the interrupt.
720
*                  It can be a value from 0 to 15. 0 is the highest priority.
721
* Output         : None
722
* Return         : None
723
*******************************************************************************/
724
void VIC_Config(u16 VIC_Source, VIC_ITLineMode VIC_LineMode, u8 VIC_Priority)
725
{
726
  switch (VIC_Source)
727
  {
728
    case 0:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, WDG_IRQHandler);
729
             break;
730
 
731
    case 1:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, SW_IRQHandler);
732
             break;
733
 
734
    case 2:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, ARMRX_IRQHandler);
735
             break;
736
 
737
    case 3:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, ARMTX_IRQHandler);
738
             break;
739
 
740
    case 4:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, TIM0_IRQHandler);
741
             break;
742
 
743
    case 5:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, TIM1_IRQHandler);
744
             break;
745
 
746
    case 6:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, TIM2_IRQHandler);
747
             break;
748
 
749
    case 7:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, TIM3_IRQHandler);
750
             break;
751
 
752
    case 8:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, USBHP_IRQHandler);
753
             break;
754
 
755
    case 9:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, USBLP_IRQHandler);
756
             break;
757
 
758
    case 10:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, SCU_IRQHandler);
759
              break;
760
 
761
    case 11:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, ENET_IRQHandler);
762
              break;
763
 
764
    case 12:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, DMA_IRQHandler);
765
              break;
766
 
767
    case 13:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, CAN_IRQHandler);
768
              break;
769
 
770
    case 14:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, MC_IRQHandler);
771
              break;
772
 
773
    case 15:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, ADC_IRQHandler);
774
              break;
775
 
776
    case 16:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, UART0_IRQHandler);
777
              break;
778
 
779
    case 17:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, UART1_IRQHandler);
780
              break;
781
 
782
    case 18:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, UART2_IRQHandler);
783
              break;
784
 
785
    case 19:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, I2C0_IRQHandler);
786
              break;
787
 
788
    case 20:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, I2C1_IRQHandler);
789
              break;
790
 
791
    case 21:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, SSP0_IRQHandler);
792
              break;
793
 
794
    case 22:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, SSP1_IRQHandler);
795
              break;
796
 
797
    case 23:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, LVD_IRQHandler);
798
              break;
799
 
800
    case 24:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, RTC_IRQHandler);
801
              break;
802
 
803
    case 25:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, WIU_IRQHandler);
804
              break;
805
 
806
    case 26:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, EXTIT0_IRQHandler);
807
              break;
808
 
809
    case 27:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, EXTIT1_IRQHandler);
810
              break;
811
 
812
    case 28:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, EXTIT2_IRQHandler);
813
              break;
814
 
815
    case 29:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, EXTIT3_IRQHandler);
816
              break;
817
 
818
    case 30:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, USBWU_IRQHandler);
819
              break;
820
 
821
    case 31:  VIC_ISRVectAddConfig(VIC_Source, VIC_Priority, PFQBC_IRQHandler);
822
              break;
823
 
824
    default:  break;
825
  }
826
  VIC_ITModeConfig(VIC_Source, VIC_LineMode);
827
  VIC_VectEnableConfig(VIC_Source, VIC_Priority);
828
  VIC_ITSourceConfig(VIC_Source, VIC_Priority);
829
}
830
 
831
/******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/