]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/CMSIS/Include/core_cmFunc.h
Update library files used in STM32F7 demo to the latest version released by ST.
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil / CMSIS / Include / core_cmFunc.h
1 /**************************************************************************//**\r
2  * @file     core_cmFunc.h\r
3  * @brief    CMSIS Cortex-M Core Function Access Header File\r
4  * @version  V4.10\r
5  * @date     18. March 2015\r
6  *\r
7  * @note\r
8  *\r
9  ******************************************************************************/\r
10 /* Copyright (c) 2009 - 2015 ARM LIMITED\r
11 \r
12    All rights reserved.\r
13    Redistribution and use in source and binary forms, with or without\r
14    modification, are permitted provided that the following conditions are met:\r
15    - Redistributions of source code must retain the above copyright\r
16      notice, this list of conditions and the following disclaimer.\r
17    - Redistributions in binary form must reproduce the above copyright\r
18      notice, this list of conditions and the following disclaimer in the\r
19      documentation and/or other materials provided with the distribution.\r
20    - Neither the name of ARM nor the names of its contributors may be used\r
21      to endorse or promote products derived from this software without\r
22      specific prior written permission.\r
23    *\r
24    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
25    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
26    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
27    ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r
28    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
29    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
30    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
31    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
32    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
33    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
34    POSSIBILITY OF SUCH DAMAGE.\r
35    ---------------------------------------------------------------------------*/\r
36 \r
37 \r
38 #ifndef __CORE_CMFUNC_H\r
39 #define __CORE_CMFUNC_H\r
40 \r
41 \r
42 /* ###########################  Core Function Access  ########################### */\r
43 /** \ingroup  CMSIS_Core_FunctionInterface\r
44     \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r
45   @{\r
46  */\r
47 \r
48 #if   defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/\r
49 /* ARM armcc specific functions */\r
50 \r
51 #if (__ARMCC_VERSION < 400677)\r
52   #error "Please use ARM Compiler Toolchain V4.0.677 or later!"\r
53 #endif\r
54 \r
55 /* intrinsic void __enable_irq();     */\r
56 /* intrinsic void __disable_irq();    */\r
57 \r
58 /** \brief  Get Control Register\r
59 \r
60     This function returns the content of the Control Register.\r
61 \r
62     \return               Control Register value\r
63  */\r
64 __STATIC_INLINE uint32_t __get_CONTROL(void)\r
65 {\r
66   register uint32_t __regControl         __ASM("control");\r
67   return(__regControl);\r
68 }\r
69 \r
70 \r
71 /** \brief  Set Control Register\r
72 \r
73     This function writes the given value to the Control Register.\r
74 \r
75     \param [in]    control  Control Register value to set\r
76  */\r
77 __STATIC_INLINE void __set_CONTROL(uint32_t control)\r
78 {\r
79   register uint32_t __regControl         __ASM("control");\r
80   __regControl = control;\r
81 }\r
82 \r
83 \r
84 /** \brief  Get IPSR Register\r
85 \r
86     This function returns the content of the IPSR Register.\r
87 \r
88     \return               IPSR Register value\r
89  */\r
90 __STATIC_INLINE uint32_t __get_IPSR(void)\r
91 {\r
92   register uint32_t __regIPSR          __ASM("ipsr");\r
93   return(__regIPSR);\r
94 }\r
95 \r
96 \r
97 /** \brief  Get APSR Register\r
98 \r
99     This function returns the content of the APSR Register.\r
100 \r
101     \return               APSR Register value\r
102  */\r
103 __STATIC_INLINE uint32_t __get_APSR(void)\r
104 {\r
105   register uint32_t __regAPSR          __ASM("apsr");\r
106   return(__regAPSR);\r
107 }\r
108 \r
109 \r
110 /** \brief  Get xPSR Register\r
111 \r
112     This function returns the content of the xPSR Register.\r
113 \r
114     \return               xPSR Register value\r
115  */\r
116 __STATIC_INLINE uint32_t __get_xPSR(void)\r
117 {\r
118   register uint32_t __regXPSR          __ASM("xpsr");\r
119   return(__regXPSR);\r
120 }\r
121 \r
122 \r
123 /** \brief  Get Process Stack Pointer\r
124 \r
125     This function returns the current value of the Process Stack Pointer (PSP).\r
126 \r
127     \return               PSP Register value\r
128  */\r
129 __STATIC_INLINE uint32_t __get_PSP(void)\r
130 {\r
131   register uint32_t __regProcessStackPointer  __ASM("psp");\r
132   return(__regProcessStackPointer);\r
133 }\r
134 \r
135 \r
136 /** \brief  Set Process Stack Pointer\r
137 \r
138     This function assigns the given value to the Process Stack Pointer (PSP).\r
139 \r
140     \param [in]    topOfProcStack  Process Stack Pointer value to set\r
141  */\r
142 __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)\r
143 {\r
144   register uint32_t __regProcessStackPointer  __ASM("psp");\r
145   __regProcessStackPointer = topOfProcStack;\r
146 }\r
147 \r
148 \r
149 /** \brief  Get Main Stack Pointer\r
150 \r
151     This function returns the current value of the Main Stack Pointer (MSP).\r
152 \r
153     \return               MSP Register value\r
154  */\r
155 __STATIC_INLINE uint32_t __get_MSP(void)\r
156 {\r
157   register uint32_t __regMainStackPointer     __ASM("msp");\r
158   return(__regMainStackPointer);\r
159 }\r
160 \r
161 \r
162 /** \brief  Set Main Stack Pointer\r
163 \r
164     This function assigns the given value to the Main Stack Pointer (MSP).\r
165 \r
166     \param [in]    topOfMainStack  Main Stack Pointer value to set\r
167  */\r
168 __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)\r
169 {\r
170   register uint32_t __regMainStackPointer     __ASM("msp");\r
171   __regMainStackPointer = topOfMainStack;\r
172 }\r
173 \r
174 \r
175 /** \brief  Get Priority Mask\r
176 \r
177     This function returns the current state of the priority mask bit from the Priority Mask Register.\r
178 \r
179     \return               Priority Mask value\r
180  */\r
181 __STATIC_INLINE uint32_t __get_PRIMASK(void)\r
182 {\r
183   register uint32_t __regPriMask         __ASM("primask");\r
184   return(__regPriMask);\r
185 }\r
186 \r
187 \r
188 /** \brief  Set Priority Mask\r
189 \r
190     This function assigns the given value to the Priority Mask Register.\r
191 \r
192     \param [in]    priMask  Priority Mask\r
193  */\r
194 __STATIC_INLINE void __set_PRIMASK(uint32_t priMask)\r
195 {\r
196   register uint32_t __regPriMask         __ASM("primask");\r
197   __regPriMask = (priMask);\r
198 }\r
199 \r
200 \r
201 #if       (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300)\r
202 \r
203 /** \brief  Enable FIQ\r
204 \r
205     This function enables FIQ interrupts by clearing the F-bit in the CPSR.\r
206     Can only be executed in Privileged modes.\r
207  */\r
208 #define __enable_fault_irq                __enable_fiq\r
209 \r
210 \r
211 /** \brief  Disable FIQ\r
212 \r
213     This function disables FIQ interrupts by setting the F-bit in the CPSR.\r
214     Can only be executed in Privileged modes.\r
215  */\r
216 #define __disable_fault_irq               __disable_fiq\r
217 \r
218 \r
219 /** \brief  Get Base Priority\r
220 \r
221     This function returns the current value of the Base Priority register.\r
222 \r
223     \return               Base Priority register value\r
224  */\r
225 __STATIC_INLINE uint32_t  __get_BASEPRI(void)\r
226 {\r
227   register uint32_t __regBasePri         __ASM("basepri");\r
228   return(__regBasePri);\r
229 }\r
230 \r
231 \r
232 /** \brief  Set Base Priority\r
233 \r
234     This function assigns the given value to the Base Priority register.\r
235 \r
236     \param [in]    basePri  Base Priority value to set\r
237  */\r
238 __STATIC_INLINE void __set_BASEPRI(uint32_t basePri)\r
239 {\r
240   register uint32_t __regBasePri         __ASM("basepri");\r
241   __regBasePri = (basePri & 0xff);\r
242 }\r
243 \r
244 \r
245 /** \brief  Set Base Priority with condition\r
246 \r
247     This function assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r
248     or the new value increases the BASEPRI priority level.\r
249 \r
250     \param [in]    basePri  Base Priority value to set\r
251  */\r
252 __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri)\r
253 {\r
254   register uint32_t __regBasePriMax      __ASM("basepri_max");\r
255   __regBasePriMax = (basePri & 0xff);\r
256 }\r
257 \r
258 \r
259 /** \brief  Get Fault Mask\r
260 \r
261     This function returns the current value of the Fault Mask register.\r
262 \r
263     \return               Fault Mask register value\r
264  */\r
265 __STATIC_INLINE uint32_t __get_FAULTMASK(void)\r
266 {\r
267   register uint32_t __regFaultMask       __ASM("faultmask");\r
268   return(__regFaultMask);\r
269 }\r
270 \r
271 \r
272 /** \brief  Set Fault Mask\r
273 \r
274     This function assigns the given value to the Fault Mask register.\r
275 \r
276     \param [in]    faultMask  Fault Mask value to set\r
277  */\r
278 __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)\r
279 {\r
280   register uint32_t __regFaultMask       __ASM("faultmask");\r
281   __regFaultMask = (faultMask & (uint32_t)1);\r
282 }\r
283 \r
284 #endif /* (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) */\r
285 \r
286 \r
287 #if       (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07)\r
288 \r
289 /** \brief  Get FPSCR\r
290 \r
291     This function returns the current value of the Floating Point Status/Control register.\r
292 \r
293     \return               Floating Point Status/Control register value\r
294  */\r
295 __STATIC_INLINE uint32_t __get_FPSCR(void)\r
296 {\r
297 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)\r
298   register uint32_t __regfpscr         __ASM("fpscr");\r
299   return(__regfpscr);\r
300 #else\r
301    return(0);\r
302 #endif\r
303 }\r
304 \r
305 \r
306 /** \brief  Set FPSCR\r
307 \r
308     This function assigns the given value to the Floating Point Status/Control register.\r
309 \r
310     \param [in]    fpscr  Floating Point Status/Control value to set\r
311  */\r
312 __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)\r
313 {\r
314 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)\r
315   register uint32_t __regfpscr         __ASM("fpscr");\r
316   __regfpscr = (fpscr);\r
317 #endif\r
318 }\r
319 \r
320 #endif /* (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) */\r
321 \r
322 \r
323 #elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/\r
324 /* GNU gcc specific functions */\r
325 \r
326 /** \brief  Enable IRQ Interrupts\r
327 \r
328   This function enables IRQ interrupts by clearing the I-bit in the CPSR.\r
329   Can only be executed in Privileged modes.\r
330  */\r
331 __attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)\r
332 {\r
333   __ASM volatile ("cpsie i" : : : "memory");\r
334 }\r
335 \r
336 \r
337 /** \brief  Disable IRQ Interrupts\r
338 \r
339   This function disables IRQ interrupts by setting the I-bit in the CPSR.\r
340   Can only be executed in Privileged modes.\r
341  */\r
342 __attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)\r
343 {\r
344   __ASM volatile ("cpsid i" : : : "memory");\r
345 }\r
346 \r
347 \r
348 /** \brief  Get Control Register\r
349 \r
350     This function returns the content of the Control Register.\r
351 \r
352     \return               Control Register value\r
353  */\r
354 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void)\r
355 {\r
356   uint32_t result;\r
357 \r
358   __ASM volatile ("MRS %0, control" : "=r" (result) );\r
359   return(result);\r
360 }\r
361 \r
362 \r
363 /** \brief  Set Control Register\r
364 \r
365     This function writes the given value to the Control Register.\r
366 \r
367     \param [in]    control  Control Register value to set\r
368  */\r
369 __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control)\r
370 {\r
371   __ASM volatile ("MSR control, %0" : : "r" (control) : "memory");\r
372 }\r
373 \r
374 \r
375 /** \brief  Get IPSR Register\r
376 \r
377     This function returns the content of the IPSR Register.\r
378 \r
379     \return               IPSR Register value\r
380  */\r
381 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void)\r
382 {\r
383   uint32_t result;\r
384 \r
385   __ASM volatile ("MRS %0, ipsr" : "=r" (result) );\r
386   return(result);\r
387 }\r
388 \r
389 \r
390 /** \brief  Get APSR Register\r
391 \r
392     This function returns the content of the APSR Register.\r
393 \r
394     \return               APSR Register value\r
395  */\r
396 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void)\r
397 {\r
398   uint32_t result;\r
399 \r
400   __ASM volatile ("MRS %0, apsr" : "=r" (result) );\r
401   return(result);\r
402 }\r
403 \r
404 \r
405 /** \brief  Get xPSR Register\r
406 \r
407     This function returns the content of the xPSR Register.\r
408 \r
409     \return               xPSR Register value\r
410  */\r
411 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void)\r
412 {\r
413   uint32_t result;\r
414 \r
415   __ASM volatile ("MRS %0, xpsr" : "=r" (result) );\r
416   return(result);\r
417 }\r
418 \r
419 \r
420 /** \brief  Get Process Stack Pointer\r
421 \r
422     This function returns the current value of the Process Stack Pointer (PSP).\r
423 \r
424     \return               PSP Register value\r
425  */\r
426 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void)\r
427 {\r
428   register uint32_t result;\r
429 \r
430   __ASM volatile ("MRS %0, psp\n"  : "=r" (result) );\r
431   return(result);\r
432 }\r
433 \r
434 \r
435 /** \brief  Set Process Stack Pointer\r
436 \r
437     This function assigns the given value to the Process Stack Pointer (PSP).\r
438 \r
439     \param [in]    topOfProcStack  Process Stack Pointer value to set\r
440  */\r
441 __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)\r
442 {\r
443   __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp");\r
444 }\r
445 \r
446 \r
447 /** \brief  Get Main Stack Pointer\r
448 \r
449     This function returns the current value of the Main Stack Pointer (MSP).\r
450 \r
451     \return               MSP Register value\r
452  */\r
453 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void)\r
454 {\r
455   register uint32_t result;\r
456 \r
457   __ASM volatile ("MRS %0, msp\n" : "=r" (result) );\r
458   return(result);\r
459 }\r
460 \r
461 \r
462 /** \brief  Set Main Stack Pointer\r
463 \r
464     This function assigns the given value to the Main Stack Pointer (MSP).\r
465 \r
466     \param [in]    topOfMainStack  Main Stack Pointer value to set\r
467  */\r
468 __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)\r
469 {\r
470   __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp");\r
471 }\r
472 \r
473 \r
474 /** \brief  Get Priority Mask\r
475 \r
476     This function returns the current state of the priority mask bit from the Priority Mask Register.\r
477 \r
478     \return               Priority Mask value\r
479  */\r
480 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void)\r
481 {\r
482   uint32_t result;\r
483 \r
484   __ASM volatile ("MRS %0, primask" : "=r" (result) );\r
485   return(result);\r
486 }\r
487 \r
488 \r
489 /** \brief  Set Priority Mask\r
490 \r
491     This function assigns the given value to the Priority Mask Register.\r
492 \r
493     \param [in]    priMask  Priority Mask\r
494  */\r
495 __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask)\r
496 {\r
497   __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");\r
498 }\r
499 \r
500 \r
501 #if       (__CORTEX_M >= 0x03)\r
502 \r
503 /** \brief  Enable FIQ\r
504 \r
505     This function enables FIQ interrupts by clearing the F-bit in the CPSR.\r
506     Can only be executed in Privileged modes.\r
507  */\r
508 __attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void)\r
509 {\r
510   __ASM volatile ("cpsie f" : : : "memory");\r
511 }\r
512 \r
513 \r
514 /** \brief  Disable FIQ\r
515 \r
516     This function disables FIQ interrupts by setting the F-bit in the CPSR.\r
517     Can only be executed in Privileged modes.\r
518  */\r
519 __attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void)\r
520 {\r
521   __ASM volatile ("cpsid f" : : : "memory");\r
522 }\r
523 \r
524 \r
525 /** \brief  Get Base Priority\r
526 \r
527     This function returns the current value of the Base Priority register.\r
528 \r
529     \return               Base Priority register value\r
530  */\r
531 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void)\r
532 {\r
533   uint32_t result;\r
534 \r
535   __ASM volatile ("MRS %0, basepri" : "=r" (result) );\r
536   return(result);\r
537 }\r
538 \r
539 \r
540 /** \brief  Set Base Priority\r
541 \r
542     This function assigns the given value to the Base Priority register.\r
543 \r
544     \param [in]    basePri  Base Priority value to set\r
545  */\r
546 __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value)\r
547 {\r
548   __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory");\r
549 }\r
550 \r
551 \r
552 /** \brief  Set Base Priority with condition\r
553 \r
554     This function assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r
555         or the new value increases the BASEPRI priority level.\r
556 \r
557     \param [in]    basePri  Base Priority value to set\r
558  */\r
559 __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value)\r
560 {\r
561   __ASM volatile ("MSR basepri_max, %0" : : "r" (value) : "memory");\r
562 }\r
563 \r
564 \r
565 /** \brief  Get Fault Mask\r
566 \r
567     This function returns the current value of the Fault Mask register.\r
568 \r
569     \return               Fault Mask register value\r
570  */\r
571 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void)\r
572 {\r
573   uint32_t result;\r
574 \r
575   __ASM volatile ("MRS %0, faultmask" : "=r" (result) );\r
576   return(result);\r
577 }\r
578 \r
579 \r
580 /** \brief  Set Fault Mask\r
581 \r
582     This function assigns the given value to the Fault Mask register.\r
583 \r
584     \param [in]    faultMask  Fault Mask value to set\r
585  */\r
586 __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)\r
587 {\r
588   __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory");\r
589 }\r
590 \r
591 #endif /* (__CORTEX_M >= 0x03) */\r
592 \r
593 \r
594 #if       (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07)\r
595 \r
596 /** \brief  Get FPSCR\r
597 \r
598     This function returns the current value of the Floating Point Status/Control register.\r
599 \r
600     \return               Floating Point Status/Control register value\r
601  */\r
602 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void)\r
603 {\r
604 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)\r
605   uint32_t result;\r
606 \r
607   /* Empty asm statement works as a scheduling barrier */\r
608   __ASM volatile ("");\r
609   __ASM volatile ("VMRS %0, fpscr" : "=r" (result) );\r
610   __ASM volatile ("");\r
611   return(result);\r
612 #else\r
613    return(0);\r
614 #endif\r
615 }\r
616 \r
617 \r
618 /** \brief  Set FPSCR\r
619 \r
620     This function assigns the given value to the Floating Point Status/Control register.\r
621 \r
622     \param [in]    fpscr  Floating Point Status/Control value to set\r
623  */\r
624 __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)\r
625 {\r
626 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)\r
627   /* Empty asm statement works as a scheduling barrier */\r
628   __ASM volatile ("");\r
629   __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");\r
630   __ASM volatile ("");\r
631 #endif\r
632 }\r
633 \r
634 #endif /* (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) */\r
635 \r
636 \r
637 #elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/\r
638 /* IAR iccarm specific functions */\r
639 #include <cmsis_iar.h>\r
640 \r
641 \r
642 #elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/\r
643 /* TI CCS specific functions */\r
644 #include <cmsis_ccs.h>\r
645 \r
646 \r
647 #elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/\r
648 /* TASKING carm specific functions */\r
649 /*\r
650  * The CMSIS functions have been implemented as intrinsics in the compiler.\r
651  * Please use "carm -?i" to get an up to date list of all intrinsics,\r
652  * Including the CMSIS ones.\r
653  */\r
654 \r
655 \r
656 #elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/\r
657 /* Cosmic specific functions */\r
658 #include <cmsis_csm.h>\r
659 \r
660 #endif\r
661 \r
662 /*@} end of CMSIS_Core_RegAccFunctions */\r
663 \r
664 #endif /* __CORE_CMFUNC_H */\r