Added support for v4.2 boards
[SCSI2SD.git] / software / SCSI2SD / v4 / SCSI2SD.cydsn / Generated_Source / PSoC5 / cytypes.h
1 /*******************************************************************************
2 * FILENAME: cytypes.h
3 * Version 4.0
4 *
5 *  Description:
6 *  CyTypes provides register access macros and approved types for use in
7 *  firmware.
8 *
9 *  Note:
10 *  Due to endiannesses of the hardware and some compilers, the register
11 *  access macros for big endian compilers use some library calls to arrange
12 *  data the correct way.
13 *
14 *  Register Access macros and functions perform their operations on an
15 *  input of type pointer to void.  The arguments passed to it should be
16 *  pointers to the type associated with the register size.
17 *  (i.e. a "uint8 *" shouldn't be passed to obtain a 16-bit register value)
18 *
19 ********************************************************************************
20 * Copyright 2008-2013, Cypress Semiconductor Corporation.  All rights reserved.
21 * You may use this file only in accordance with the license, terms, conditions,
22 * disclaimers, and limitations in the end user license agreement accompanying
23 * the software package with which this file was provided.
24 *******************************************************************************/
25
26 #if !defined(CY_BOOT_CYTYPES_H)
27 #define CY_BOOT_CYTYPES_H
28
29 #if defined(__C51__)
30     #include <intrins.h>
31 #endif  /* (__C51__) */
32
33 /* ARM and C99 or later */
34 #if defined(__GNUC__) || defined(__ARMCC_VERSION) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)
35     #include <stdint.h>
36 #endif  /* (__GNUC__) || defined(__ARMCC_VERSION) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) */
37
38 #include "cyfitter.h"
39
40
41 #if defined( __ICCARM__ )
42     /* Suppress warning for multiple volatile variables in an expression. */
43     /* This is common in component code and the usage is not order dependent. */
44     #pragma diag_suppress=Pa082
45 #endif  /* defined( __ICCARM__ ) */
46
47
48 /***************************************
49 * Conditional Compilation Parameters
50 ***************************************/
51
52
53 /*******************************************************************************
54 * FAMILY encodes the overall architectural family
55 *******************************************************************************/
56 #define CY_PSOC3 (CYDEV_CHIP_FAMILY_USED == CYDEV_CHIP_FAMILY_PSOC3)
57 #define CY_PSOC4 (CYDEV_CHIP_FAMILY_USED == CYDEV_CHIP_FAMILY_PSOC4)
58 #define CY_PSOC5 (CYDEV_CHIP_FAMILY_USED == CYDEV_CHIP_FAMILY_PSOC5)
59
60
61 /*******************************************************************************
62 * MEMBER encodes both the family and the detailed architecture
63 *******************************************************************************/
64 #define CY_PSOC4A  (CYDEV_CHIP_MEMBER_USED == CYDEV_CHIP_MEMBER_4A)
65 #ifdef CYDEV_CHIP_MEMBER_4D
66     #define CY_PSOC4D   (CYDEV_CHIP_MEMBER_USED == CYDEV_CHIP_MEMBER_4D)
67     #define CY_PSOC4SF  (CY_PSOC4D)
68 #else
69     #define CY_PSOC4D   (0u != 0u)
70     #define CY_PSOC4SF  (CY_PSOC4D)
71 #endif  /* CYDEV_CHIP_MEMBER_4D */
72
73 #define CY_PSOC5A  (CYDEV_CHIP_MEMBER_USED == CYDEV_CHIP_MEMBER_5A)
74 #ifdef CYDEV_CHIP_MEMBER_5B
75     #define CY_PSOC5LP  (CYDEV_CHIP_MEMBER_USED == CYDEV_CHIP_MEMBER_5B)
76 #else
77     #define CY_PSOC5LP  (0u != 0u)
78 #endif  /* CYDEV_CHIP_MEMBER_5B */
79
80
81 /*******************************************************************************
82 * UDB revisions
83 *******************************************************************************/
84 #define CY_UDB_V0 (CY_PSOC5A)
85 #define CY_UDB_V1 (!CY_UDB_V0)
86
87
88 /*******************************************************************************
89 *   Base Types. Acceptable types from MISRA-C specifying signedness and size.
90 *******************************************************************************/
91 typedef unsigned char   uint8;
92 typedef unsigned short  uint16;
93 typedef unsigned long   uint32;
94 typedef signed   char   int8;
95 typedef signed   short  int16;
96 typedef signed   long   int32;
97 typedef          float  float32;
98
99 #if(!CY_PSOC3)
100
101     typedef               double float64;
102     typedef          long long   int64;
103     typedef unsigned long long   uint64;
104
105 #endif  /* (!CY_PSOC3) */
106
107 /* Signed or unsigned depending on the compiler selection */
108 typedef          char   char8;
109
110
111 /*******************************************************************************
112 *   Memory address functions prototypes
113 *******************************************************************************/
114 #if(CY_PSOC3)
115
116     /***************************************************************************
117     * Prototypes for absolute memory address functions (cymem.a51) with built-in
118     * endian conversion. These functions should be called through the
119     * CY_GET_XTND_REGxx and CY_SET_XTND_REGxx macros.
120     ***************************************************************************/
121     extern uint8  cyread8       (const volatile void far *addr);
122     extern void   cywrite8      (volatile void far *addr, uint8 value);
123
124     extern uint16 cyread16      (const volatile void far *addr);
125     extern uint16 cyread16_nodpx(const volatile void far *addr);
126
127     extern void   cywrite16      (volatile void far *addr, uint16 value);
128     extern void   cywrite16_nodpx(volatile void far *addr, uint16 value);
129
130     extern uint32 cyread24      (const volatile void far *addr);
131     extern uint32 cyread24_nodpx(const volatile void far *addr);
132
133     extern void   cywrite24      (volatile void far *addr, uint32 value);
134     extern void   cywrite24_nodpx(volatile void far *addr, uint32 value);
135
136     extern uint32 cyread32      (const volatile void far *addr);
137     extern uint32 cyread32_nodpx(const volatile void far *addr);
138
139     extern void   cywrite32      (volatile void far *addr, uint32 value);
140     extern void   cywrite32_nodpx(volatile void far *addr, uint32 value);
141
142
143     /***************************************************************************
144     * Memory access routines from cymem.a51 for the generated device
145     * configuration code. These functions may be subject to change in future
146     * revisions of the cy_boot component and they are not available for all
147     * devices. Most code should use memset or memcpy instead.
148     ***************************************************************************/
149     void cymemzero(void far *addr, uint16 size);
150     void cyconfigcpy(uint16 size, const void far *src, void far *dest) large;
151     void cyconfigcpycode(uint16 size, const void code *src, void far *dest);
152
153     #define CYCONFIGCPY_DECLARED    (1)
154
155 #else
156
157     /* Prototype for function to set a 24-bit register. Located at cyutils.c */
158     extern void     CySetReg24(uint32 volatile * addr, uint32 value);
159
160     #if(CY_PSOC4)
161
162         extern uint32 CyGetReg24(uint32 const volatile * addr);
163
164     #endif  /* (CY_PSOC4) */
165
166 #endif  /* (CY_PSOC3) */
167
168
169 /*******************************************************************************
170 *   Memory model definitions. To allow code to be 8051-ARM agnostic.
171 *******************************************************************************/
172 #if(CY_PSOC3)
173
174     #define CYBDATA     bdata
175     #define CYBIT       bit
176     #define CYCODE      code
177     #define CYCOMPACT   compact
178     #define CYDATA      data
179     #define CYFAR       far
180     #define CYIDATA     idata
181     #define CYLARGE     large
182     #define CYPDATA     pdata
183     #define CYREENTRANT reentrant
184     #define CYSMALL     small
185     #define CYXDATA     xdata
186     #define XDATA       xdata
187
188     #define CY_NOINIT
189
190 #else
191
192     #define CYBDATA
193     #define CYBIT      uint8
194     #define CYCODE
195     #define CYCOMPACT
196     #define CYDATA
197     #define CYFAR
198     #define CYIDATA
199     #define CYLARGE
200     #define CYPDATA
201     #define CYREENTRANT
202     #define CYSMALL
203     #define CYXDATA
204     #define XDATA
205
206     #if defined(__ARMCC_VERSION)
207         #define CY_NOINIT           __attribute__ ((section(".noinit"), zero_init))
208         #define CY_NORETURN         __attribute__ ((noreturn))
209         #define CY_SECTION(name)    __attribute__ ((section(name)))
210         #define CY_ALIGN(align)     __align(align)
211     #elif defined (__GNUC__)
212         #define CY_NOINIT           __attribute__ ((section(".noinit")))
213         #define CY_NORETURN         __attribute__ ((noreturn))
214         #define CY_SECTION(name)    __attribute__ ((section(name)))
215         #define CY_ALIGN(align)     __attribute__ ((aligned(align)))
216     #elif defined (__ICCARM__)
217         #define CY_NOINIT           __no_init
218         #define CY_NORETURN         __noreturn
219     #endif  /* (__ARMCC_VERSION) */
220
221 #endif  /* (CY_PSOC3) */
222
223
224 #if(CY_PSOC3)
225
226     /* 8051 naturally returns an 8 bit value. */
227     typedef unsigned char cystatus;
228
229 #else
230
231     /* ARM naturally returns a 32 bit value. */
232     typedef unsigned long cystatus;
233
234 #endif  /* (CY_PSOC3) */
235
236
237 /*******************************************************************************
238 *  Hardware Register Types.
239 *******************************************************************************/
240 typedef volatile uint8  CYXDATA reg8;
241 typedef volatile uint16 CYXDATA reg16;
242 typedef volatile uint32 CYXDATA reg32;
243
244
245 /*******************************************************************************
246 *  Interrupt Types and Macros
247 *******************************************************************************/
248 #if(CY_PSOC3)
249
250     #define CY_ISR(FuncName)        void FuncName (void) interrupt 0
251     #define CY_ISR_PROTO(FuncName)  void FuncName (void)
252     typedef void (CYCODE * cyisraddress)(void);
253
254 #else
255
256     #define CY_ISR(FuncName)        void FuncName (void)
257     #define CY_ISR_PROTO(FuncName)  void FuncName (void)
258     typedef void (* cyisraddress)(void);
259
260     #if defined (__ICCARM__)
261         typedef union { cyisraddress __fun; void * __ptr; } intvec_elem;
262     #endif  /* defined (__ICCARM__) */
263
264 #endif  /* (CY_PSOC3) */
265
266
267 /*******************************************************************************
268 *  Register Access
269 *******************************************************************************/
270 #if(CY_PSOC3)
271
272
273     /*******************************************************************************
274     * KEIL for the 8051 is a big endian compiler This causes problems as the on chip
275     * registers are little endian.  Byte swapping for two and four byte registers is
276     * implemented in the functions below.  This will require conditional compilation
277     * of function prototypes in code.
278     *******************************************************************************/
279
280     /* Access macros for 8, 16, 24 and 32-bit registers, IN THE FIRST 64K OF XDATA */
281
282     #define CY_GET_REG8(addr)               (*((const reg8 *)(addr)))
283     #define CY_SET_REG8(addr, value)        (*((reg8 *)(addr))  = (uint8)(value))
284
285     #define CY_GET_REG16(addr)              cyread16_nodpx ((const volatile void far *)(const reg16 *)(addr))
286     #define CY_SET_REG16(addr, value)       cywrite16_nodpx((volatile void far *)(reg16 *)(addr), value)
287
288     #define CY_GET_REG24(addr)              cyread24_nodpx ((const volatile void far *)(const reg32 *)(addr))
289     #define CY_SET_REG24(addr, value)       cywrite24_nodpx((volatile void far *)(reg32 *)(addr),value)
290
291     #define CY_GET_REG32(addr)              cyread32_nodpx ((const volatile void far *)(const reg32 *)(addr))
292     #define CY_SET_REG32(addr, value)       cywrite32_nodpx((volatile void far *)(reg32 *)(addr), value)
293
294     /* Access 8, 16, 24 and 32-bit registers, ABOVE THE FIRST 64K OF XDATA */
295     #define CY_GET_XTND_REG8(addr)          cyread8((const volatile void far *)(addr))
296     #define CY_SET_XTND_REG8(addr, value)   cywrite8((volatile void far *)(addr), value)
297
298     #define CY_GET_XTND_REG16(addr)         cyread16((const volatile void far *)(addr))
299     #define CY_SET_XTND_REG16(addr, value)  cywrite16((volatile void far *)(addr), value)
300
301     #define CY_GET_XTND_REG24(addr)         cyread24((const volatile void far *)(addr))
302     #define CY_SET_XTND_REG24(addr, value)  cywrite24((volatile void far *)(addr), value)
303
304     #define CY_GET_XTND_REG32(addr)         cyread32((const volatile void far *)(addr))
305     #define CY_SET_XTND_REG32(addr, value)  cywrite32((volatile void far *)(addr), value)
306
307 #else
308
309     /* 8, 16, 24 and 32-bit register access macros */
310     #define CY_GET_REG8(addr)               (*((const reg8 *)(addr)))
311     #define CY_SET_REG8(addr, value)        (*((reg8 *)(addr))  = (uint8)(value))
312
313     #define CY_GET_REG16(addr)              (*((const reg16 *)(addr)))
314     #define CY_SET_REG16(addr, value)       (*((reg16 *)(addr)) = (uint16)(value))
315
316
317     #define CY_SET_REG24(addr, value)       CySetReg24((reg32 *) (addr), (value))
318     #if(CY_PSOC4)
319         #define CY_GET_REG24(addr)          CyGetReg24((const reg32 *) (addr))
320     #else
321         #define CY_GET_REG24(addr)          (*((const reg32 *)(addr)) & 0x00FFFFFFu)
322     #endif  /* (CY_PSOC4) */
323
324
325     #define CY_GET_REG32(addr)              (*((const reg32 *)(addr)))
326     #define CY_SET_REG32(addr, value)       (*((reg32 *)(addr)) = (uint32)(value))
327
328
329     /* To allow code to be 8051-ARM agnostic. */
330     #define CY_GET_XTND_REG8(addr)          CY_GET_REG8(addr)
331     #define CY_SET_XTND_REG8(addr, value)   CY_SET_REG8(addr, value)
332
333     #define CY_GET_XTND_REG16(addr)         CY_GET_REG16(addr)
334     #define CY_SET_XTND_REG16(addr, value)  CY_SET_REG16(addr, value)
335
336     #define CY_GET_XTND_REG24(addr)         CY_GET_REG24(addr)
337     #define CY_SET_XTND_REG24(addr, value)  CY_SET_REG24(addr, value)
338
339     #define CY_GET_XTND_REG32(addr)         CY_GET_REG32(addr)
340     #define CY_SET_XTND_REG32(addr, value)  CY_SET_REG32(addr, value)
341
342 #endif  /* (CY_PSOC3) */
343
344
345
346 /*******************************************************************************
347 *  Data manipulation defines
348 *******************************************************************************/
349
350 /* Get 8 bits of a 16 bit value. */
351 #define LO8(x)                  ((uint8) ((x) & 0xFFu))
352 #define HI8(x)                  ((uint8) ((uint16)(x) >> 8))
353
354 /* Get 16 bits of a 32 bit value. */
355 #define LO16(x)                 ((uint16) ((x) & 0xFFFFu))
356 #define HI16(x)                 ((uint16) ((uint32)(x) >> 16))
357
358 /* Swap the byte ordering of a 32 bit value */
359 #define CYSWAP_ENDIAN32(x)  \
360         ((uint32)(((x) >> 24) | (((x) & 0x00FF0000u) >> 8) | (((x) & 0x0000FF00u) << 8) | ((x) << 24)))
361
362 /* Swap the byte ordering of a 16 bit value */
363 #define CYSWAP_ENDIAN16(x)      ((uint16)(((x) << 8) | ((x) >> 8)))
364
365
366 /*******************************************************************************
367 * Defines the standard return values used PSoC content. A function is
368 * not limited to these return values but can use them when returning standard
369 * error values. Return values can be overloaded if documented in the function
370 * header. On the 8051 a function can use a larger return type but still use the
371 * defined return codes.
372 *
373 * Zero is successful, all other values indicate some form of failure. 1 - 0x7F -
374 * standard defined values; 0x80 - ...  - user or content defined values.
375 *******************************************************************************/
376 #define CYRET_SUCCESS           (0x00u)           /* Successful */
377 #define CYRET_BAD_PARAM         (0x01u)           /* One or more invalid parameters */
378 #define CYRET_INVALID_OBJECT    (0x02u)           /* Invalid object specified */
379 #define CYRET_MEMORY            (0x03u)           /* Memory related failure */
380 #define CYRET_LOCKED            (0x04u)           /* Resource lock failure */
381 #define CYRET_EMPTY             (0x05u)           /* No more objects available */
382 #define CYRET_BAD_DATA          (0x06u)           /* Bad data received (CRC or other error check) */
383 #define CYRET_STARTED           (0x07u)           /* Operation started, but not necessarily completed yet */
384 #define CYRET_FINISHED          (0x08u)           /* Operation completed */
385 #define CYRET_CANCELED          (0x09u)           /* Operation canceled */
386 #define CYRET_TIMEOUT           (0x10u)           /* Operation timed out */
387 #define CYRET_INVALID_STATE     (0x11u)           /* Operation not setup or is in an improper state */
388 #define CYRET_UNKNOWN           ((cystatus) 0xFFFFFFFFu)    /* Unknown failure */
389
390
391 /*******************************************************************************
392 *   Intrinsic Defines: Processor NOP instruction
393 *******************************************************************************/
394 #if(CY_PSOC3)
395
396     #define CY_NOP          _nop_()
397
398 #else
399
400     #if defined(__ARMCC_VERSION)
401
402         /* RealView */
403         #define CY_NOP      __nop()
404
405     #else
406
407         /* GCC */
408         #define CY_NOP      __asm("NOP\n")
409
410     #endif  /* defined(__ARMCC_VERSION) */
411
412 #endif  /* (CY_PSOC3) */
413
414
415 /*******************************************************************************
416 * Following code are OBSOLETE and must not be used starting from cy_boot 3.10
417 *******************************************************************************/
418
419 /* Device is PSoC 3 and the revision is ES2 or earlier */
420 #define CY_PSOC3_ES2 ((CYDEV_CHIP_MEMBER_USED == CYDEV_CHIP_MEMBER_3A) && \
421     (CYDEV_CHIP_REVISION_USED <= CYDEV_CHIP_REVISION_3A_ES2))
422
423 /* Device is PSoC 3 and the revision is ES3 or later */
424 #define CY_PSOC3_ES3 ((CYDEV_CHIP_MEMBER_USED == CYDEV_CHIP_MEMBER_3A) && \
425     (CYDEV_CHIP_REVISION_USED >= CYDEV_CHIP_REVISION_3A_ES3))
426
427 /* Device is PSoC 5 and the revision is ES1 or earlier */
428 #define CY_PSOC5_ES1 (CY_PSOC5A && \
429     (CYDEV_CHIP_REVISION_USED <= CYDEV_CHIP_REVISION_5A_ES1))
430
431 /* Device is PSoC 5 and the revision is ES2 or later */
432 #define CY_PSOC5_ES2 (CY_PSOC5A && \
433     (CYDEV_CHIP_REVISION_USED > CYDEV_CHIP_REVISION_5A_ES1))
434
435 #endif  /* CY_BOOT_CYTYPES_H */
436
437
438 /* [] END OF FILE */