]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_CEC_MEC_17xx_Keil_GCC/peripheral_library/platform.h
Change name of the CEC and MEC directory to CORTEX_MPU_CEC_MEC_17xx_51xx_Keil_GCC...
[freertos] / FreeRTOS / Demo / CORTEX_M4F_CEC_MEC_17xx_Keil_GCC / peripheral_library / platform.h
1 /****************************************************************************\r
2 * © 2013 Microchip Technology Inc. and its subsidiaries.\r
3 * You may use this software and any derivatives exclusively with\r
4 * Microchip products.\r
5 * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS".\r
6 * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,\r
7 * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,\r
8 * AND FITNESS FOR A PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP\r
9 * PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.\r
10 * IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,\r
11 * INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND\r
12 * WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS\r
13 * BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.\r
14 * TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL\r
15 * CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF\r
16 * FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.\r
17 * MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE\r
18 * OF THESE TERMS.\r
19 */\r
20 \r
21 /** @defgroup pwm pwm_c_wrapper\r
22  *  @{\r
23  */\r
24 /** @file pwm_c_wrapper.cpp\r
25  \brief the pwm component C wrapper   \r
26  This program is designed to allow the other C programs to be able to use this component\r
27 \r
28  There are entry points for all C wrapper API implementation\r
29 \r
30 <b>Platform:</b> This is ARC-based component \r
31 \r
32 <b>Toolset:</b> Metaware IDE(8.5.1)\r
33 <b>Reference:</b> smsc_reusable_fw_requirement.doc */\r
34 \r
35 /*******************************************************************************\r
36  *  SMSC version control information (Perforce):\r
37  *\r
38  *  FILE:     $File: //depot_pcs/FWEng/projects/MEC2016/Playground/pramans/160623_FreeRTOS_Microchip_MEC170x/Demo/CORTEX_MPU_MEC1701_Keil_GCC/peripheral_library/platform.h $\r
39  *  REVISION: $Revision: #1 $\r
40  *  DATETIME: $DateTime: 2016/09/22 08:03:49 $\r
41  *  AUTHOR:   $Author: pramans $\r
42  *\r
43  *  Revision history (latest first):\r
44  *      #xx\r
45  ***********************************************************************************\r
46  */\r
47 \r
48 #ifndef _PLATFORM_H_\r
49 #define _PLATFORM_H_\r
50 #include <stdint.h>\r
51 \r
52 /* Enable any one of the below flag which enables either Aggregated or Disaggregated Interrupts */\r
53 #define DISAGGREGATED_INPT_DEFINED              1\r
54 //#define AGGREGATED_INPT_DEFINED                       1\r
55 \r
56 /* Platform Configuration PreProcessor Conditions */\r
57 #define TOOLKEIL    1\r
58 #define TOOLPC      2\r
59 #define TOOLMW          3\r
60 #define TOOLMDK         4\r
61 \r
62 #define PCLINT      9   //added to satisfy PC Lint's need for a value here\r
63 \r
64 #ifdef __CC_ARM         // Keil ARM MDK\r
65 #define TOOLSET TOOLMDK\r
66 #endif\r
67 \r
68 #if 0\r
69 #ifdef _WIN32           //always defined by visual c++\r
70 #define TOOLSET TOOLPC\r
71 #endif\r
72 \r
73 #ifdef __WIN32__        //always defined by borland\r
74 #define TOOLSET TOOLPC\r
75 #endif\r
76 #endif\r
77 \r
78 \r
79 #ifdef _ARC\r
80 #define TOOLSET TOOLMW    // ARC Metaware\r
81 #endif\r
82 \r
83 #ifndef TOOLSET\r
84 //#error "ERROR: cfg.h TOOLSET not defined!"\r
85 #endif\r
86 \r
87 #if TOOLSET == TOOLMDK\r
88 #define _KEIL_ARM_  1   /* Make 1 for Keil MDK Compiler     */\r
89 #define _KEIL_  0       /* Make 1 for Keil Compiler     */\r
90 #define _PC_    0   \r
91 #define _ARC_CORE_      0\r
92 #endif\r
93 \r
94 #if TOOLSET == TOOLKEIL\r
95 #define _KEIL_ARM_  0\r
96 #define _KEIL_  1   /* Make 1 for Keil Compiler     */\r
97 #define _PC_    0   \r
98 #define _ARC_CORE_      0\r
99 #endif\r
100 \r
101 #if TOOLSET == TOOLPC\r
102 #define _KEIL_ARM_  0\r
103 #define _KEIL_  0   \r
104 #define _PC_    1       /* Make 1 for PC Environment    */\r
105 #define _ARC_CORE_      0\r
106 #endif\r
107 \r
108 #if TOOLSET == TOOLMW\r
109 #define _KEIL_ARM_  0\r
110 #define _KEIL_  0\r
111 #define _PC_    0\r
112 #define _ARC_CORE_      1\r
113 #endif\r
114 \r
115 /* Short form for Standard Data Types */\r
116 typedef unsigned char           UINT8;\r
117 typedef unsigned short          UINT16;\r
118 typedef unsigned long           UINT32;\r
119 \r
120 typedef volatile unsigned char  REG8;\r
121 \r
122 typedef unsigned char           BYTE;\r
123 typedef unsigned short          WORD;\r
124 typedef unsigned long           DWORD;\r
125 \r
126 typedef unsigned char           UCHAR;\r
127 typedef unsigned short          USHORT;\r
128 typedef unsigned long           ULONG;\r
129 \r
130 typedef unsigned char           BOOL;\r
131 typedef unsigned int            UINT;\r
132 \r
133 /* signed types */\r
134 typedef signed char             INT8;\r
135 typedef signed short            INT16;\r
136 typedef signed long             INT32;\r
137 \r
138 typedef void                    VOID;\r
139 \r
140 typedef volatile unsigned char      VUINT8;\r
141 typedef volatile unsigned short int VUINT16;\r
142 typedef volatile unsigned long int  VUINT32;\r
143 /* union types */\r
144 typedef union _BITS_8\r
145 {\r
146     UINT8 byte;\r
147     struct\r
148     {\r
149                 UINT8 bit0: 1;\r
150                 UINT8 bit1: 1;\r
151                 UINT8 bit2: 1;\r
152                 UINT8 bit3: 1;\r
153                 UINT8 bit4: 1;\r
154                 UINT8 bit5: 1;\r
155                 UINT8 bit6: 1;\r
156                 UINT8 bit7: 1;\r
157    }bit;\r
158 }BITS_8;\r
159 \r
160 \r
161 /* MACROS FOR Platform Portability */\r
162 \r
163 /* macro for defining MMCR register */\r
164 /* add MMCRARRAY() & EXTERNMMCRARRAY() */\r
165 #if     _KEIL_\r
166 #define MMCR(name,address)      volatile unsigned char xdata name _at_ address\r
167 #define MMCRARRAY(name,length,address)  volatile unsigned char xdata name[length] _at_ address\r
168 #define MMCRTYPE(name,dtype,address) volatile dtype xdata name _at_ address\r
169 #define EXTERNMMCR(name)        extern volatile unsigned char xdata name\r
170 #define EXTERNMMCRARRAY(name)   extern volatile unsigned char xdata name[]\r
171 #define EXTERNMMCRTYPE(name,dtype) extern volatile dtype xdata name\r
172 #define SFR(name,address)       sfr name = address\r
173 #define SFRBIT(name,address)    sbit name = address\r
174 #define EXTERNSFR(name) \r
175 #define BITADDRESSTYPE(name)    bit name\r
176 #define XDATA                   xdata\r
177 #define CODE                    code\r
178 #define DATA                    data\r
179 #define IDATA                   idata\r
180 #define INTERRUPT(x)            interrupt x\r
181 #define SET_GLOBAL_INTR_ENABLE()        (sfrIE_EAbit = TRUE;)\r
182 #define CLR_GLOBAL_INTR_ENABLE()        (sfrIE_EAbit = FALSE;)\r
183 #define NULLPTR                                         (char *)(0)\r
184 #define PLATFORM_TRIM_OSC()                     // TODO\r
185 #define PNOP() \r
186 #define DISABLE_INTERRUPTS() sfrIE_EAbit=0\r
187 #define ENABLE_INTERRUPTS() sfrIE_EAbit=1\r
188 #define SAVE_DIS_INTERRUPTS(x) { x=sfrIE_EAbit; sfrIE_EAbit=0; }\r
189 #define RESTORE_INTERRUPTS(x) { sfrIE_EAbit=x; }\r
190 #define ATOMIC_CPU_SLEEP()\r
191 #define NUM_IRQ_VECTORS     12  // DW-8051\r
192 #define IRQ_VECTOR_SIZE     8 \r
193 #define USE_INLINE_PATCHER  1\r
194 #define IRQ_VECTABLE_IN_RAM 0\r
195 #define PLAT_ROM_IRQ_VECTOR_BASE 0x03  // ROM start\r
196 #define PLAT_IRQ_VECTOR_BASE 0x1003    // RAM start\r
197 #define FUNC_NEVER_RETURNS\r
198 #define BEGIN_SMALL_DATA_BLOCK(x)\r
199 #define END_SMALL_DATA_BLOCK()\r
200 UINT32 soft_norm(UINT32 val);\r
201 #define NORM(x) soft_norm(x)\r
202 //\r
203 #define USE_FUNC_REPLACEMENT    0\r
204 #endif\r
205 \r
206 #if _PC_\r
207 #define MMCR(name,address)      volatile unsigned char name\r
208 #define MMCRARRAY(name,length,address)  volatile unsigned char name[length]\r
209 #define MMCRTYPE(name,dtype,address) volatile dtype name\r
210 #define EXTERNMMCR(name)        extern volatile unsigned char name\r
211 #define EXTERNMMCRARRAY(name)   extern volatile unsigned char name[]\r
212 #define EXTERNMMCRTYPE(name,dtype) extern volatile dtype name\r
213 #define SFR(name,address)       volatile unsigned char name\r
214 #define SFRBIT(name,address)    volatile unsigned char name\r
215 #define EXTERNSFR(name)         extern  volatile unsigned char name\r
216 #define BITADDRESSTYPE(name)    volatile unsigned char name\r
217 #define XDATA\r
218 #define CODE                \r
219 #define DATA\r
220 #define IDATA\r
221 #define INTERRUPT(x)\r
222 #define SET_GLOBAL_INTR_ENABLE()        (sfrIE_EAbit = TRUE;)\r
223 #define CLR_GLOBAL_INTR_ENABLE()        (sfrIE_EAbit = FALSE;)\r
224 #define NULLPTR                                         (char *)(0)\r
225 #define PLATFORM_TRIM_OSC()                     // TODO\r
226 #define PNOP() \r
227 #define DISABLE_INTERRUPTS() \r
228 #define ENABLE_INTERRUPTS()\r
229 #define SAVE_DIS_INTERRUPTS(x) \r
230 #define RESTORE_INTERRUPTS(x) \r
231 #define ATOMIC_CPU_SLEEP()\r
232 #define NUM_IRQ_VECTORS     24\r
233 #define IRQ_VECTOR_SIZE     8\r
234 #define USE_INLINE_PATCHER  1\r
235 #define IRQ_VECTABLE_IN_RAM 0\r
236 #define FUNC_NEVER_RETURNS\r
237 #define BEGIN_SMALL_DATA_BLOCK(x)\r
238 #define END_SMALL_DATA_BLOCK()\r
239 UINT32 soft_norm(UINT32 val);\r
240 #define NORM(x) soft_norm(x)\r
241 //\r
242 #define USE_FUNC_REPLACEMENT    0\r
243 #endif\r
244 \r
245 #if _ARC_CORE_\r
246 // ARC C has no equivalent operator to specify address of a variable\r
247 // ARC MMCR's are 32-bit registers\r
248 #define MMCR(name,address)      volatile unsigned char name\r
249 #define MMCRARRAY(name,length,address)  volatile unsigned char name[length]\r
250 #define MMCRTYPE(name,dtype,address) volatile dtype name \r
251 #define EXTERNMMCR(name)        extern volatile unsigned char name\r
252 #define EXTERNMMCRARRAY(name)   extern volatile unsigned char name[]\r
253 #define EXTERNMMCRTYPE(name,dtype) extern volatile dtype name\r
254 #define SFR(name,address)   volatile unsigned char name        \r
255 #define SFRBIT(name,address) volatile unsigned char name \r
256 #define EXTERNSFR(name) extern volatile unsigned char name \r
257 #define BITADDRESSTYPE(name) \r
258 #define XDATA\r
259 #define CODE     \r
260 #define DATA\r
261 #define IDATA\r
262 #define INTERRUPT(x)\r
263 #define SET_GLOBAL_INTR_ENABLE()        (_enable())\r
264 #define CLR_GLOBAL_INTR_ENABLE()        (_disable())\r
265 #define NULLPTR                                         (char *)(0)\r
266 #define NULLVOIDPTR                 (void *)(0)\r
267 #define NULLFPTR                                        (void (*)(void))0\r
268 #define PLATFORM_TRIM_OSC()                     // TODO\r
269 #define PNOP() _nop()\r
270 #define DISABLE_INTERRUPTS() _disable()\r
271 #define ENABLE_INTERRUPTS() _enable()\r
272 #define SAVE_DIS_INTERRUPTS(x) { x=_lr(REG_STATUS32);_flag(x & ~(REG_STATUS32_E1_BIT | REG_STATUS32_E2_BIT));_nop(); }\r
273 #define RESTORE_INTERRUPTS(x) { _flag((_lr(REG_STATUS32) | (x & (REG_STATUS32_E1_BIT | REG_STATUS32_E2_BIT))));_nop(); }\r
274 #define ATOMIC_CPU_SLEEP() _flag(6);_sleep();_nop();_nop();\r
275 #define NUM_IRQ_VECTORS     24\r
276 #define IRQ_VECTOR_SIZE     8\r
277 #define USE_INLINE_PATCHER  0\r
278 #define DCCM_CODE_ALIAS_ADDR  0x00060000\r
279 #define PLAT_ROM_IRQ_VECTOR_BASE 0\r
280 #define PLAT_IRQ_VECTOR_BASE  (DCCM_CODE_ALIAS_ADDR)\r
281 /// y #define IRQ_VECTABLE_IN_RAM 1\r
282 #define IRQ_VECTABLE_IN_RAM 0\r
283 #define FUNC_NEVER_RETURNS  _CC(_NEVER_RETURNS)\r
284 #define BEGIN_SMALL_DATA_BLOCK(x)  #pragma Push_small_data(x)\r
285 #define END_SMALL_DATA_BLOCK()  #pragma Pop_small_data()\r
286 #define NORM(x) _norm(x)\r
287 \r
288 #define INLINE_FUNCTION(x) #pragma On_inline(x)\r
289 \r
290 //\r
291 #define USE_FUNC_REPLACEMENT    0\r
292 #endif\r
293 \r
294 #if _KEIL_ARM_\r
295 // For ARM MDK compiler\r
296 // ARM MMCR's are 32-bit registers\r
297 #define MMCR(name,address)      volatile unsigned char name\r
298 #define MMCRARRAY(name,length,address)  volatile unsigned char name[length]\r
299 #define MMCRTYPE(name,dtype,address) volatile dtype name \r
300 #define EXTERNMMCR(name)        extern volatile unsigned char name\r
301 #define EXTERNMMCRARRAY(name)   extern volatile unsigned char name[]\r
302 #define EXTERNMMCRTYPE(name,dtype) extern volatile dtype name\r
303 #define SFR(name,address)   volatile unsigned char name        \r
304 #define SFRBIT(name,address) volatile unsigned char name \r
305 #define EXTERNSFR(name) extern volatile unsigned char name \r
306 #define BITADDRESSTYPE(name) \r
307 #define XDATA\r
308 #define CODE     \r
309 #define DATA\r
310 #define IDATA\r
311 #define INTERRUPT(x)\r
312 #define SET_GLOBAL_INTR_ENABLE()        (__enable_irq())\r
313 #define CLR_GLOBAL_INTR_ENABLE()        (__disable_irq())\r
314 #define NULLPTR                                         (char *)(0)\r
315 #define NULLVOIDPTR                 (void *)(0)\r
316 #define NULLFPTR                                        (void (*)(void))0\r
317 #define PLATFORM_TRIM_OSC()                     // TODO\r
318 #define PNOP() __NOP()\r
319 #define DISABLE_INTERRUPTS() __disable_irq()\r
320 #define ENABLE_INTERRUPTS() __enable_irq()\r
321 #define ATOMIC_CPU_SLEEP() __wfi();__nop();__nop();\r
322 \r
323 #if 0 /* need further efforts if needed */\r
324 #define SAVE_DIS_INTERRUPTS(x) { x=_lr(REG_STATUS32);_flag(x & ~(REG_STATUS32_E1_BIT | REG_STATUS32_E2_BIT));_nop(); }\r
325 #define RESTORE_INTERRUPTS(x) { _flag((_lr(REG_STATUS32) | (x & (REG_STATUS32_E1_BIT | REG_STATUS32_E2_BIT))));_nop(); }\r
326 #define NUM_IRQ_VECTORS     24\r
327 #define IRQ_VECTOR_SIZE     8\r
328 #define USE_INLINE_PATCHER  0\r
329 #define DCCM_CODE_ALIAS_ADDR  0x00060000\r
330 #define PLAT_ROM_IRQ_VECTOR_BASE 0\r
331 #define PLAT_IRQ_VECTOR_BASE  (DCCM_CODE_ALIAS_ADDR)\r
332 /// y #define IRQ_VECTABLE_IN_RAM 1\r
333 #define IRQ_VECTABLE_IN_RAM 0\r
334 #define BEGIN_SMALL_DATA_BLOCK(x)  #pragma Push_small_data(x)\r
335 #define END_SMALL_DATA_BLOCK()  #pragma Pop_small_data()\r
336 #define INLINE_FUNCTION(x) #pragma On_inline(x)\r
337 #define USE_FUNC_REPLACEMENT    0\r
338 #endif\r
339 \r
340 #if 0\r
341 #define FUNC_NEVER_RETURNS  _CC(_NEVER_RETURNS)\r
342 #define NORM(x) _norm(x)\r
343 #else\r
344 /* for ARM MDK */\r
345 #define FUNC_NEVER_RETURNS\r
346 UINT32 soft_norm(UINT32 val);\r
347 #define NORM(x) soft_norm(x)\r
348 #endif\r
349 #endif\r
350 \r
351 /* General Constants */\r
352 #define FALSE   0x00\r
353 #define TRUE    !FALSE\r
354 \r
355 #define BIT_n_MASK(n)   (1U << (n))\r
356 #define BIT_0_MASK    (1<<0)\r
357 #define BIT_1_MASK    (1<<1)\r
358 #define BIT_2_MASK    (1<<2)\r
359 #define BIT_3_MASK    (1<<3)\r
360 #define BIT_4_MASK    (1<<4)\r
361 #define BIT_5_MASK    (1<<5)\r
362 #define BIT_6_MASK    (1<<6)\r
363 #define BIT_7_MASK    (1<<7)\r
364 #define BIT_8_MASK    ((UINT16)1<<8)\r
365 #define BIT_9_MASK    ((UINT16)1<<9)\r
366 #define BIT_10_MASK   ((UINT16)1<<10)\r
367 #define BIT_11_MASK   ((UINT16)1<<11)\r
368 #define BIT_12_MASK   ((UINT16)1<<12)\r
369 #define BIT_13_MASK   ((UINT16)1<<13)\r
370 #define BIT_14_MASK   ((UINT16)1<<14)\r
371 #define BIT_15_MASK   ((UINT16)1<<15)\r
372 #define BIT_16_MASK     ((UINT32)1<<16)\r
373 #define BIT_17_MASK     ((UINT32)1<<17)\r
374 #define BIT_18_MASK     ((UINT32)1<<18)\r
375 #define BIT_19_MASK     ((UINT32)1<<19)\r
376 #define BIT_20_MASK     ((UINT32)1<<20)\r
377 #define BIT_21_MASK     ((UINT32)1<<21)\r
378 #define BIT_22_MASK     ((UINT32)1<<22)\r
379 #define BIT_23_MASK     ((UINT32)1<<23)\r
380 #define BIT_24_MASK     ((UINT32)1<<24)\r
381 #define BIT_25_MASK     ((UINT32)1<<25)\r
382 #define BIT_26_MASK     ((UINT32)1<<26)\r
383 #define BIT_27_MASK     ((UINT32)1<<27)\r
384 #define BIT_28_MASK     ((UINT32)1<<28)\r
385 #define BIT_29_MASK     ((UINT32)1<<29)\r
386 #define BIT_30_MASK     ((UINT32)1<<30)\r
387 #define BIT_31_MASK     ((UINT32)1<<31)\r
388 \r
389 \r
390 /* For CEC application  */\r
391 #define ON  1\r
392 #define OFF 0\r
393 \r
394 #endif /*_PLATFORM_H_*/\r
395 \r
396 /**   @}\r
397  */\r
398 \r