]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_MB9A310_IAR_Keil/Fujitu_source/core_cm3.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / CORTEX_MB9A310_IAR_Keil / Fujitu_source / core_cm3.c
1 /**************************************************************************//**\r
2  * @file     core_cm3.c\r
3  * @brief    CMSIS Cortex-M3 Core Peripheral Access Layer Source File\r
4  * @version  V1.40\r
5  * @date     18. February 2010\r
6  *\r
7  * @note\r
8  * Copyright (C) 2009-2010 ARM Limited. All rights reserved.\r
9  *\r
10  * @par\r
11  * ARM Limited (ARM) is supplying this software for use with Cortex-M \r
12  * processor based microcontrollers.  This file can be freely distributed \r
13  * within development tools that are supporting such ARM based processors. \r
14  *\r
15  * @par\r
16  * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED\r
17  * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.\r
19  * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR\r
20  * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.\r
21  *\r
22  ******************************************************************************/\r
23 \r
24 #include <stdint.h>\r
25 \r
26 /* define compiler specific symbols */\r
27 #if defined ( __CC_ARM   )\r
28   #define __ASM            __asm                                      /*!< asm keyword for ARM Compiler          */\r
29   #define __INLINE         __inline                                   /*!< inline keyword for ARM Compiler       */\r
30 \r
31 #elif defined ( __ICCARM__ )\r
32   #define __ASM           __asm                                       /*!< asm keyword for IAR Compiler          */\r
33   #define __INLINE        inline                                      /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */\r
34 \r
35 #elif defined   (  __GNUC__  )\r
36   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */\r
37   #define __INLINE         inline                                     /*!< inline keyword for GNU Compiler       */\r
38 \r
39 #elif defined   (  __TASKING__  )\r
40   #define __ASM            __asm                                      /*!< asm keyword for TASKING Compiler      */\r
41   #define __INLINE         inline                                     /*!< inline keyword for TASKING Compiler   */\r
42 \r
43 #endif\r
44 \r
45 \r
46 /* ##########################  Core Instruction Access  ######################### */\r
47 \r
48 #if defined ( __CC_ARM   ) /*------------------ RealView Compiler ----------------*/\r
49 \r
50 /**\r
51  * @brief  Reverse byte order (16 bit)\r
52  *\r
53  * @param  value  value to reverse\r
54  * @return        reversed value\r
55  *\r
56  * Reverse byte order in unsigned short value\r
57  */\r
58 #if (__ARMCC_VERSION < 400677)\r
59 __ASM uint32_t __REV16(uint16_t value)\r
60 {\r
61   rev16 r0, r0\r
62   bx lr\r
63 }\r
64 #endif /* __ARMCC_VERSION  */ \r
65 \r
66 /**\r
67  * @brief  Reverse byte order in signed short value with sign extension to integer\r
68  *\r
69  * @param  value  value to reverse\r
70  * @return        reversed value\r
71  *\r
72  * Reverse byte order in signed short value with sign extension to integer\r
73  */\r
74 #if (__ARMCC_VERSION < 400677)\r
75 __ASM int32_t __REVSH(int16_t value)\r
76 {\r
77   revsh r0, r0\r
78   bx lr\r
79 }\r
80 #endif /* __ARMCC_VERSION  */ \r
81 \r
82  /**\r
83  * @brief  Remove the exclusive lock created by ldrex\r
84  *\r
85  * Removes the exclusive lock which is created by ldrex.\r
86  */\r
87 #if (__ARMCC_VERSION < 400000)\r
88 __ASM void __CLREX(void)\r
89 {\r
90   clrex\r
91 }\r
92 #endif /* __ARMCC_VERSION  */ \r
93 \r
94 \r
95 #elif (defined (__ICCARM__)) /*---------------- ICC Compiler ---------------------*/\r
96 /* obsolete */\r
97 #elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/\r
98 /* obsolete */\r
99 #elif (defined (__TASKING__)) /*--------------- TASKING Compiler -----------------*/\r
100 /* obsolete */\r
101 #endif\r
102 \r
103 \r
104 /* ###########################  Core Function Access  ########################### */\r
105 \r
106 #if defined ( __CC_ARM   ) /*------------------ RealView Compiler ----------------*/\r
107 \r
108 /**\r
109  * @brief  Return the Control Register value\r
110\r
111 *  @return Control value\r
112  *\r
113  * Return the content of the control register\r
114  */\r
115 #if       (__ARMCC_VERSION <  400000)\r
116 __ASM uint32_t __get_CONTROL(void)\r
117 {\r
118   mrs r0, control\r
119   bx lr\r
120 }\r
121 #endif /*  __ARMCC_VERSION  */ \r
122 \r
123 /**\r
124  * @brief  Set the Control Register value\r
125  *\r
126  * @param  control  Control value\r
127  *\r
128  * Set the control register\r
129  */\r
130 #if       (__ARMCC_VERSION <  400000)\r
131 __ASM void __set_CONTROL(uint32_t control)\r
132 {\r
133   msr control, r0\r
134   bx lr\r
135 }\r
136 #endif /*  __ARMCC_VERSION  */ \r
137 \r
138 /**\r
139  * @brief  Get IPSR Register value\r
140  *\r
141  * @return uint32_t IPSR value\r
142  *\r
143  * return the content of the IPSR register\r
144  */\r
145 #if       (__ARMCC_VERSION <  400000)\r
146 __ASM uint32_t __get_IPSR(void)\r
147 {\r
148   mrs r0, ipsr\r
149   bx lr\r
150 }\r
151 #endif /*  __ARMCC_VERSION  */ \r
152 \r
153 /**\r
154  * @brief  Get APSR Register value\r
155  *\r
156  * @return uint32_t APSR value\r
157  *\r
158  * return the content of the APSR register\r
159  */\r
160 #if       (__ARMCC_VERSION <  400000)\r
161 __ASM uint32_t __get_APSR(void)\r
162 {\r
163   mrs r0, apsr\r
164   bx lr\r
165 }\r
166 #endif /*  __ARMCC_VERSION  */ \r
167 \r
168 /**\r
169  * @brief  Get xPSR Register value\r
170  *\r
171  * @return uint32_t xPSR value\r
172  *\r
173  * return the content of the xPSR register\r
174  */\r
175 #if       (__ARMCC_VERSION <  400000)\r
176 __ASM uint32_t __get_xPSR(void)\r
177 {\r
178   mrs r0, xpsr\r
179   bx lr\r
180 }\r
181 #endif /*  __ARMCC_VERSION  */ \r
182 \r
183 /**\r
184  * @brief  Return the Process Stack Pointer\r
185  *\r
186  * @return ProcessStackPointer\r
187  *\r
188  * Return the actual process stack pointer\r
189  */\r
190 #if       (__ARMCC_VERSION <  400000)\r
191 __ASM uint32_t __get_PSP(void)\r
192 {\r
193   mrs r0, psp\r
194   bx lr\r
195 }\r
196 #endif /*  __ARMCC_VERSION  */ \r
197  \r
198 /**\r
199  * @brief  Set the Process Stack Pointer\r
200  *\r
201  * @param  topOfProcStack  Process Stack Pointer\r
202  *\r
203  * Assign the value ProcessStackPointer to the MSP \r
204  * (process stack pointer) Cortex processor register\r
205  */\r
206 #if       (__ARMCC_VERSION <  400000)\r
207 __ASM void __set_PSP(uint32_t topOfProcStack)\r
208 {\r
209   msr psp, r0\r
210   bx lr\r
211 }\r
212 #endif /*  __ARMCC_VERSION  */ \r
213 \r
214 /**\r
215  * @brief  Return the Main Stack Pointer\r
216  *\r
217  * @return Main Stack Pointer\r
218  *\r
219  * Return the current value of the MSP (main stack pointer)\r
220  * Cortex processor register\r
221  */\r
222 #if       (__ARMCC_VERSION <  400000)\r
223 __ASM uint32_t __get_MSP(void)\r
224 {\r
225   mrs r0, msp\r
226   bx lr\r
227 }\r
228 #endif /*  __ARMCC_VERSION  */ \r
229  \r
230 /**\r
231  * @brief  Set the Main Stack Pointer\r
232  *\r
233  * @param  topOfMainStack  Main Stack Pointer\r
234  *\r
235  * Assign the value mainStackPointer to the MSP \r
236  * (main stack pointer) Cortex processor register\r
237  */\r
238 #if       (__ARMCC_VERSION <  400000)\r
239 __ASM void __set_MSP(uint32_t mainStackPointer)\r
240 {\r
241   msr msp, r0\r
242   bx lr\r
243 }\r
244 #endif /*  __ARMCC_VERSION  */ \r
245  \r
246 /**\r
247  * @brief  Return the Base Priority value\r
248  *\r
249  * @return BasePriority\r
250  *\r
251  * Return the content of the base priority register\r
252  */\r
253 #if       (__ARMCC_VERSION <  400000)\r
254 __ASM uint32_t  __get_BASEPRI(void)\r
255 {\r
256   mrs r0, basepri\r
257   bx lr\r
258 }\r
259 #endif /*  __ARMCC_VERSION  */ \r
260 \r
261 /**\r
262  * @brief  Set the Base Priority value\r
263  *\r
264  * @param  basePri  BasePriority\r
265  *\r
266  * Set the base priority register\r
267  */\r
268 #if       (__ARMCC_VERSION <  400000)\r
269 __ASM void __set_BASEPRI(uint32_t basePri)\r
270 {\r
271   msr basepri, r0\r
272   bx lr\r
273 }\r
274 #endif /*  __ARMCC_VERSION  */ \r
275  \r
276 /**\r
277  * @brief  Return the Priority Mask value\r
278  *\r
279  * @return PriMask\r
280  *\r
281  * Return state of the priority mask bit from the priority mask register\r
282  */\r
283 #if       (__ARMCC_VERSION <  400000)\r
284 __ASM uint32_t __get_PRIMASK(void)\r
285 {\r
286   mrs r0, primask\r
287   bx lr\r
288 }\r
289 #endif /*  __ARMCC_VERSION  */ \r
290  \r
291 /**\r
292  * @brief  Set the Priority Mask value\r
293  *\r
294  * @param  priMask  PriMask\r
295  *\r
296  * Set the priority mask bit in the priority mask register\r
297  */\r
298 #if       (__ARMCC_VERSION <  400000)\r
299 __ASM void __set_PRIMASK(uint32_t priMask)\r
300 {\r
301   msr primask, r0\r
302   bx lr\r
303 }\r
304 #endif /*  __ARMCC_VERSION  */ \r
305  \r
306 /**\r
307  * @brief  Return the Fault Mask value\r
308  *\r
309  * @return FaultMask\r
310  *\r
311  * Return the content of the fault mask register\r
312  */\r
313 #if       (__ARMCC_VERSION <  400000)\r
314 __ASM uint32_t  __get_FAULTMASK(void)\r
315 {\r
316   mrs r0, faultmask\r
317   bx lr\r
318 }\r
319 #endif /*  __ARMCC_VERSION  */ \r
320 \r
321 /**\r
322  * @brief  Set the Fault Mask value\r
323  *\r
324  * @param  faultMask  faultMask value\r
325  *\r
326  * Set the fault mask register\r
327  */\r
328 #if       (__ARMCC_VERSION <  400000)\r
329 __ASM void __set_FAULTMASK(uint32_t faultMask)\r
330 {\r
331   msr faultmask, r0\r
332   bx lr\r
333 }\r
334 #endif /*  __ARMCC_VERSION  */ \r
335 \r
336 /**\r
337  * @brief  Return the FPSCR value\r
338  *\r
339  * @return FloatingPointStatusControlRegister\r
340  *\r
341  * Return the content of the FPSCR register\r
342  */\r
343 \r
344 /**\r
345  * @brief  Set the FPSCR value\r
346  *\r
347  * @param  fpscr  FloatingPointStatusControlRegister\r
348  *\r
349  * Set the FPSCR register\r
350  */\r
351 \r
352 \r
353 #elif (defined (__ICCARM__)) /*---------------- ICC Compiler ---------------------*/\r
354 /* obsolete */\r
355 #elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/\r
356 /* obsolete */\r
357 #elif (defined (__TASKING__)) /*--------------- TASKING Compiler -----------------*/\r
358 /* obsolete */\r
359 #endif\r