Glitch filter configuration options and update to PSoC Creator v3.2
[SCSI2SD-V6.git] / software / SCSI2SD / v3 / SCSI2SD.cydsn / Generated_Source / PSoC5 / SCSI_SEL_ISR.c
1 /*******************************************************************************
2 * File Name: SCSI_SEL_ISR.c  
3 * Version 1.70
4 *
5 *  Description:
6 *   API for controlling the state of an interrupt.
7 *
8 *
9 *  Note:
10 *
11 ********************************************************************************
12 * Copyright 2008-2015, Cypress Semiconductor Corporation.  All rights reserved.
13 * You may use this file only in accordance with the license, terms, conditions, 
14 * disclaimers, and limitations in the end user license agreement accompanying 
15 * the software package with which this file was provided.
16 *******************************************************************************/
17
18
19 #include <cydevice_trm.h>
20 #include <CyLib.h>
21 #include <SCSI_SEL_ISR.h>
22
23 #if !defined(SCSI_SEL_ISR__REMOVED) /* Check for removal by optimization */
24
25 /*******************************************************************************
26 *  Place your includes, defines and code here 
27 ********************************************************************************/
28 /* `#START SCSI_SEL_ISR_intc` */
29
30 /* `#END` */
31
32 #ifndef CYINT_IRQ_BASE
33 #define CYINT_IRQ_BASE      16
34 #endif /* CYINT_IRQ_BASE */
35 #ifndef CYINT_VECT_TABLE
36 #define CYINT_VECT_TABLE    ((cyisraddress **) CYREG_NVIC_VECT_OFFSET)
37 #endif /* CYINT_VECT_TABLE */
38
39 /* Declared in startup, used to set unused interrupts to. */
40 CY_ISR_PROTO(IntDefaultHandler);
41
42
43 /*******************************************************************************
44 * Function Name: SCSI_SEL_ISR_Start
45 ********************************************************************************
46 *
47 * Summary:
48 *  Set up the interrupt and enable it. This function disables the interrupt, 
49 *  sets the default interrupt vector, sets the priority from the value in the
50 *  Design Wide Resources Interrupt Editor, then enables the interrupt to the 
51 *  interrupt controller.
52 *
53 * Parameters:  
54 *   None
55 *
56 * Return:
57 *   None
58 *
59 *******************************************************************************/
60 void SCSI_SEL_ISR_Start(void)
61 {
62     /* For all we know the interrupt is active. */
63     SCSI_SEL_ISR_Disable();
64
65     /* Set the ISR to point to the SCSI_SEL_ISR Interrupt. */
66     SCSI_SEL_ISR_SetVector(&SCSI_SEL_ISR_Interrupt);
67
68     /* Set the priority. */
69     SCSI_SEL_ISR_SetPriority((uint8)SCSI_SEL_ISR_INTC_PRIOR_NUMBER);
70
71     /* Enable it. */
72     SCSI_SEL_ISR_Enable();
73 }
74
75
76 /*******************************************************************************
77 * Function Name: SCSI_SEL_ISR_StartEx
78 ********************************************************************************
79 *
80 * Summary:
81 *  Sets up the interrupt and enables it. This function disables the interrupt,
82 *  sets the interrupt vector based on the address passed in, sets the priority 
83 *  from the value in the Design Wide Resources Interrupt Editor, then enables 
84 *  the interrupt to the interrupt controller.
85 *  
86 *  When defining ISR functions, the CY_ISR and CY_ISR_PROTO macros should be 
87 *  used to provide consistent definition across compilers:
88 *  
89 *  Function definition example:
90 *   CY_ISR(MyISR)
91 *   {
92 *   }
93 *   Function prototype example:
94 *   CY_ISR_PROTO(MyISR);
95 *
96 * Parameters:  
97 *   address: Address of the ISR to set in the interrupt vector table.
98 *
99 * Return:
100 *   None
101 *
102 *******************************************************************************/
103 void SCSI_SEL_ISR_StartEx(cyisraddress address)
104 {
105     /* For all we know the interrupt is active. */
106     SCSI_SEL_ISR_Disable();
107
108     /* Set the ISR to point to the SCSI_SEL_ISR Interrupt. */
109     SCSI_SEL_ISR_SetVector(address);
110
111     /* Set the priority. */
112     SCSI_SEL_ISR_SetPriority((uint8)SCSI_SEL_ISR_INTC_PRIOR_NUMBER);
113
114     /* Enable it. */
115     SCSI_SEL_ISR_Enable();
116 }
117
118
119 /*******************************************************************************
120 * Function Name: SCSI_SEL_ISR_Stop
121 ********************************************************************************
122 *
123 * Summary:
124 *   Disables and removes the interrupt.
125 *
126 * Parameters:  
127 *   None
128 *
129 * Return:
130 *   None
131 *
132 *******************************************************************************/
133 void SCSI_SEL_ISR_Stop(void)
134 {
135     /* Disable this interrupt. */
136     SCSI_SEL_ISR_Disable();
137
138     /* Set the ISR to point to the passive one. */
139     SCSI_SEL_ISR_SetVector(&IntDefaultHandler);
140 }
141
142
143 /*******************************************************************************
144 * Function Name: SCSI_SEL_ISR_Interrupt
145 ********************************************************************************
146 *
147 * Summary:
148 *   The default Interrupt Service Routine for SCSI_SEL_ISR.
149 *
150 *   Add custom code between the coments to keep the next version of this file
151 *   from over writting your code.
152 *
153 * Parameters:  
154 *
155 * Return:
156 *   None
157 *
158 *******************************************************************************/
159 CY_ISR(SCSI_SEL_ISR_Interrupt)
160 {
161     /*  Place your Interrupt code here. */
162     /* `#START SCSI_SEL_ISR_Interrupt` */
163
164     /* `#END` */
165 }
166
167
168 /*******************************************************************************
169 * Function Name: SCSI_SEL_ISR_SetVector
170 ********************************************************************************
171 *
172 * Summary:
173 *   Change the ISR vector for the Interrupt. Note calling SCSI_SEL_ISR_Start
174 *   will override any effect this method would have had. To set the vector 
175 *   before the component has been started use SCSI_SEL_ISR_StartEx instead.
176
177 *   When defining ISR functions, the CY_ISR and CY_ISR_PROTO macros should be 
178 *   used to provide consistent definition across compilers:
179 *
180 *   Function definition example:
181 *   CY_ISR(MyISR)
182 *   {
183 *   }
184 *
185 *   Function prototype example:
186 *     CY_ISR_PROTO(MyISR);
187 *
188 * Parameters:
189 *   address: Address of the ISR to set in the interrupt vector table.
190 *
191 * Return:
192 *   None
193 *
194 *******************************************************************************/
195 void SCSI_SEL_ISR_SetVector(cyisraddress address)
196 {
197     cyisraddress * ramVectorTable;
198
199     ramVectorTable = (cyisraddress *) *CYINT_VECT_TABLE;
200
201     ramVectorTable[CYINT_IRQ_BASE + (uint32)SCSI_SEL_ISR__INTC_NUMBER] = address;
202 }
203
204
205 /*******************************************************************************
206 * Function Name: SCSI_SEL_ISR_GetVector
207 ********************************************************************************
208 *
209 * Summary:
210 *   Gets the "address" of the current ISR vector for the Interrupt.
211 *
212 * Parameters:
213 *   None
214 *
215 * Return:
216 *   Address of the ISR in the interrupt vector table.
217 *
218 *******************************************************************************/
219 cyisraddress SCSI_SEL_ISR_GetVector(void)
220 {
221     cyisraddress * ramVectorTable;
222
223     ramVectorTable = (cyisraddress *) *CYINT_VECT_TABLE;
224
225     return ramVectorTable[CYINT_IRQ_BASE + (uint32)SCSI_SEL_ISR__INTC_NUMBER];
226 }
227
228
229 /*******************************************************************************
230 * Function Name: SCSI_SEL_ISR_SetPriority
231 ********************************************************************************
232 *
233 * Summary:
234 *   Sets the Priority of the Interrupt. 
235 *
236 *   Note calling SCSI_SEL_ISR_Start or SCSI_SEL_ISR_StartEx will 
237 *   override any effect this API would have had. This API should only be called
238 *   after SCSI_SEL_ISR_Start or SCSI_SEL_ISR_StartEx has been called. 
239 *   To set the initial priority for the component, use the Design-Wide Resources
240 *   Interrupt Editor.
241 *
242 *   Note This API has no effect on Non-maskable interrupt NMI).
243 *
244 * Parameters:
245 *   priority: Priority of the interrupt, 0 being the highest priority
246 *             PSoC 3 and PSoC 5LP: Priority is from 0 to 7.
247 *             PSoC 4: Priority is from 0 to 3.
248 *
249 * Return:
250 *   None
251 *
252 *******************************************************************************/
253 void SCSI_SEL_ISR_SetPriority(uint8 priority)
254 {
255     *SCSI_SEL_ISR_INTC_PRIOR = priority << 5;
256 }
257
258
259 /*******************************************************************************
260 * Function Name: SCSI_SEL_ISR_GetPriority
261 ********************************************************************************
262 *
263 * Summary:
264 *   Gets the Priority of the Interrupt.
265 *
266 * Parameters:
267 *   None
268 *
269 * Return:
270 *   Priority of the interrupt, 0 being the highest priority
271 *    PSoC 3 and PSoC 5LP: Priority is from 0 to 7.
272 *    PSoC 4: Priority is from 0 to 3.
273 *
274 *******************************************************************************/
275 uint8 SCSI_SEL_ISR_GetPriority(void)
276 {
277     uint8 priority;
278
279
280     priority = *SCSI_SEL_ISR_INTC_PRIOR >> 5;
281
282     return priority;
283 }
284
285
286 /*******************************************************************************
287 * Function Name: SCSI_SEL_ISR_Enable
288 ********************************************************************************
289 *
290 * Summary:
291 *   Enables the interrupt to the interrupt controller. Do not call this function
292 *   unless ISR_Start() has been called or the functionality of the ISR_Start() 
293 *   function, which sets the vector and the priority, has been called.
294 *
295 * Parameters:
296 *   None
297 *
298 * Return:
299 *   None
300 *
301 *******************************************************************************/
302 void SCSI_SEL_ISR_Enable(void)
303 {
304     /* Enable the general interrupt. */
305     *SCSI_SEL_ISR_INTC_SET_EN = SCSI_SEL_ISR__INTC_MASK;
306 }
307
308
309 /*******************************************************************************
310 * Function Name: SCSI_SEL_ISR_GetState
311 ********************************************************************************
312 *
313 * Summary:
314 *   Gets the state (enabled, disabled) of the Interrupt.
315 *
316 * Parameters:
317 *   None
318 *
319 * Return:
320 *   1 if enabled, 0 if disabled.
321 *
322 *******************************************************************************/
323 uint8 SCSI_SEL_ISR_GetState(void)
324 {
325     /* Get the state of the general interrupt. */
326     return ((*SCSI_SEL_ISR_INTC_SET_EN & (uint32)SCSI_SEL_ISR__INTC_MASK) != 0u) ? 1u:0u;
327 }
328
329
330 /*******************************************************************************
331 * Function Name: SCSI_SEL_ISR_Disable
332 ********************************************************************************
333 *
334 * Summary:
335 *   Disables the Interrupt in the interrupt controller.
336 *
337 * Parameters:
338 *   None
339 *
340 * Return:
341 *   None
342 *
343 *******************************************************************************/
344 void SCSI_SEL_ISR_Disable(void)
345 {
346     /* Disable the general interrupt. */
347     *SCSI_SEL_ISR_INTC_CLR_EN = SCSI_SEL_ISR__INTC_MASK;
348 }
349
350
351 /*******************************************************************************
352 * Function Name: SCSI_SEL_ISR_SetPending
353 ********************************************************************************
354 *
355 * Summary:
356 *   Causes the Interrupt to enter the pending state, a software method of
357 *   generating the interrupt.
358 *
359 * Parameters:
360 *   None
361 *
362 * Return:
363 *   None
364 *
365 * Side Effects:
366 *   If interrupts are enabled and the interrupt is set up properly, the ISR is
367 *   entered (depending on the priority of this interrupt and other pending 
368 *   interrupts).
369 *
370 *******************************************************************************/
371 void SCSI_SEL_ISR_SetPending(void)
372 {
373     *SCSI_SEL_ISR_INTC_SET_PD = SCSI_SEL_ISR__INTC_MASK;
374 }
375
376
377 /*******************************************************************************
378 * Function Name: SCSI_SEL_ISR_ClearPending
379 ********************************************************************************
380 *
381 * Summary:
382 *   Clears a pending interrupt in the interrupt controller.
383 *
384 *   Note Some interrupt sources are clear-on-read and require the block 
385 *   interrupt/status register to be read/cleared with the appropriate block API 
386 *   (GPIO, UART, and so on). Otherwise the ISR will continue to remain in 
387 *   pending state even though the interrupt itself is cleared using this API.
388 *
389 * Parameters:
390 *   None
391 *
392 * Return:
393 *   None
394 *
395 *******************************************************************************/
396 void SCSI_SEL_ISR_ClearPending(void)
397 {
398     *SCSI_SEL_ISR_INTC_CLR_PD = SCSI_SEL_ISR__INTC_MASK;
399 }
400
401 #endif /* End check for removal by optimization */
402
403
404 /* [] END OF FILE */