core_cm3.c
Go to the documentation of this file.
1 /**************************************************************************/
24 #include <stdint.h>
25 
26 /* define compiler specific symbols */
27 #if defined ( __CC_ARM )
28  #define __ASM __asm
29  #define __INLINE __inline
31 #elif defined ( __ICCARM__ )
32  #define __ASM __asm
33  #define __INLINE inline
35 #elif defined ( __GNUC__ )
36  #define __ASM __asm
37  #define __INLINE inline
39 #elif defined ( __TASKING__ )
40  #define __ASM __asm
41  #define __INLINE inline
43 #endif
44 
45 
46 /* ################### Compiler specific Intrinsics ########################### */
47 
48 #if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
49 /* ARM armcc specific functions */
50 
58 __ASM uint32_t __get_PSP(void)
59 {
60  mrs r0, psp
61  bx lr
62 }
63 
72 __ASM void __set_PSP(uint32_t topOfProcStack)
73 {
74  msr psp, r0
75  bx lr
76 }
77 
86 __ASM uint32_t __get_MSP(void)
87 {
88  mrs r0, msp
89  bx lr
90 }
91 
100 __ASM void __set_MSP(uint32_t mainStackPointer)
101 {
102  msr msp, r0
103  bx lr
104 }
105 
114 __ASM uint32_t __REV16(uint16_t value)
115 {
116  rev16 r0, r0
117  bx lr
118 }
119 
128 __ASM int32_t __REVSH(int16_t value)
129 {
130  revsh r0, r0
131  bx lr
132 }
133 
134 
135 #if (__ARMCC_VERSION < 400000)
136 
142 __ASM void __CLREX(void)
143 {
144  clrex
145 }
146 
154 __ASM uint32_t __get_BASEPRI(void)
155 {
156  mrs r0, basepri
157  bx lr
158 }
159 
167 __ASM void __set_BASEPRI(uint32_t basePri)
168 {
169  msr basepri, r0
170  bx lr
171 }
172 
180 __ASM uint32_t __get_PRIMASK(void)
181 {
182  mrs r0, primask
183  bx lr
184 }
185 
193 __ASM void __set_PRIMASK(uint32_t priMask)
194 {
195  msr primask, r0
196  bx lr
197 }
198 
206 __ASM uint32_t __get_FAULTMASK(void)
207 {
208  mrs r0, faultmask
209  bx lr
210 }
211 
219 __ASM void __set_FAULTMASK(uint32_t faultMask)
220 {
221  msr faultmask, r0
222  bx lr
223 }
224 
232 __ASM uint32_t __get_CONTROL(void)
233 {
234  mrs r0, control
235  bx lr
236 }
237 
245 __ASM void __set_CONTROL(uint32_t control)
246 {
247  msr control, r0
248  bx lr
249 }
250 
251 #endif /* __ARMCC_VERSION */
252 
253 
254 
255 #elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/
256 /* IAR iccarm specific functions */
257 #pragma diag_suppress=Pe940
258 
266 uint32_t __get_PSP(void)
267 {
268  __ASM("mrs r0, psp");
269  __ASM("bx lr");
270 }
271 
280 void __set_PSP(uint32_t topOfProcStack)
281 {
282  __ASM("msr psp, r0");
283  __ASM("bx lr");
284 }
285 
294 uint32_t __get_MSP(void)
295 {
296  __ASM("mrs r0, msp");
297  __ASM("bx lr");
298 }
299 
308 void __set_MSP(uint32_t topOfMainStack)
309 {
310  __ASM("msr msp, r0");
311  __ASM("bx lr");
312 }
313 
322 uint32_t __REV16(uint16_t value)
323 {
324  __ASM("rev16 r0, r0");
325  __ASM("bx lr");
326 }
327 
336 uint32_t __RBIT(uint32_t value)
337 {
338  __ASM("rbit r0, r0");
339  __ASM("bx lr");
340 }
341 
350 uint8_t __LDREXB(uint8_t *addr)
351 {
352  __ASM("ldrexb r0, [r0]");
353  __ASM("bx lr");
354 }
355 
364 uint16_t __LDREXH(uint16_t *addr)
365 {
366  __ASM("ldrexh r0, [r0]");
367  __ASM("bx lr");
368 }
369 
378 uint32_t __LDREXW(uint32_t *addr)
379 {
380  __ASM("ldrex r0, [r0]");
381  __ASM("bx lr");
382 }
383 
393 uint32_t __STREXB(uint8_t value, uint8_t *addr)
394 {
395  __ASM("strexb r0, r0, [r1]");
396  __ASM("bx lr");
397 }
398 
408 uint32_t __STREXH(uint16_t value, uint16_t *addr)
409 {
410  __ASM("strexh r0, r0, [r1]");
411  __ASM("bx lr");
412 }
413 
423 uint32_t __STREXW(uint32_t value, uint32_t *addr)
424 {
425  __ASM("strex r0, r0, [r1]");
426  __ASM("bx lr");
427 }
428 
429 #pragma diag_default=Pe940
430 
431 
432 #elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/
433 /* GNU gcc specific functions */
434 
442 uint32_t __get_PSP(void) __attribute__( ( naked ) );
443 uint32_t __get_PSP(void)
444 {
445  uint32_t result=0;
446 
447  __ASM volatile ("MRS %0, psp\n\t"
448  "MOV r0, %0 \n\t"
449  "BX lr \n\t" : "=r" (result) );
450  return(result);
451 }
452 
461 void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) );
462 void __set_PSP(uint32_t topOfProcStack)
463 {
464  __ASM volatile ("MSR psp, %0\n\t"
465  "BX lr \n\t" : : "r" (topOfProcStack) );
466 }
467 
476 uint32_t __get_MSP(void) __attribute__( ( naked ) );
477 uint32_t __get_MSP(void)
478 {
479  uint32_t result=0;
480 
481  __ASM volatile ("MRS %0, msp\n\t"
482  "MOV r0, %0 \n\t"
483  "BX lr \n\t" : "=r" (result) );
484  return(result);
485 }
486 
495 void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) );
496 void __set_MSP(uint32_t topOfMainStack)
497 {
498  __ASM volatile ("MSR msp, %0\n\t"
499  "BX lr \n\t" : : "r" (topOfMainStack) );
500 }
501 
509 uint32_t __get_BASEPRI(void)
510 {
511  uint32_t result=0;
512 
513  __ASM volatile ("MRS %0, basepri_max" : "=r" (result) );
514  return(result);
515 }
516 
524 void __set_BASEPRI(uint32_t value)
525 {
526  __ASM volatile ("MSR basepri, %0" : : "r" (value) );
527 }
528 
536 uint32_t __get_PRIMASK(void)
537 {
538  uint32_t result=0;
539 
540  __ASM volatile ("MRS %0, primask" : "=r" (result) );
541  return(result);
542 }
543 
551 void __set_PRIMASK(uint32_t priMask)
552 {
553  __ASM volatile ("MSR primask, %0" : : "r" (priMask) );
554 }
555 
563 uint32_t __get_FAULTMASK(void)
564 {
565  uint32_t result=0;
566 
567  __ASM volatile ("MRS %0, faultmask" : "=r" (result) );
568  return(result);
569 }
570 
578 void __set_FAULTMASK(uint32_t faultMask)
579 {
580  __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) );
581 }
582 
590 uint32_t __get_CONTROL(void)
591 {
592  uint32_t result=0;
593 
594  __ASM volatile ("MRS %0, control" : "=r" (result) );
595  return(result);
596 }
597 
605 void __set_CONTROL(uint32_t control)
606 {
607  __ASM volatile ("MSR control, %0" : : "r" (control) );
608 }
609 
610 
619 uint32_t __REV(uint32_t value)
620 {
621  uint32_t result=0;
622 
623  __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) );
624  return(result);
625 }
626 
635 uint32_t __REV16(uint16_t value)
636 {
637  uint32_t result=0;
638 
639  __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) );
640  return(result);
641 }
642 
651 int32_t __REVSH(int16_t value)
652 {
653  uint32_t result=0;
654 
655  __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) );
656  return(result);
657 }
658 
667 uint32_t __RBIT(uint32_t value)
668 {
669  uint32_t result=0;
670 
671  __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
672  return(result);
673 }
674 
683 uint8_t __LDREXB(uint8_t *addr)
684 {
685  uint8_t result=0;
686 
687  __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) );
688  return(result);
689 }
690 
699 uint16_t __LDREXH(uint16_t *addr)
700 {
701  uint16_t result=0;
702 
703  __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) );
704  return(result);
705 }
706 
715 uint32_t __LDREXW(uint32_t *addr)
716 {
717  uint32_t result=0;
718 
719  __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) );
720  return(result);
721 }
722 
732 uint32_t __STREXB(uint8_t value, uint8_t *addr)
733 {
734  uint32_t result=0;
735 
736  __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
737  return(result);
738 }
739 
749 uint32_t __STREXH(uint16_t value, uint16_t *addr)
750 {
751  uint32_t result=0;
752 
753  __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
754  return(result);
755 }
756 
766 uint32_t __STREXW(uint32_t value, uint32_t *addr)
767 {
768  uint32_t result=0;
769 
770  __ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
771  return(result);
772 }
773 
774 
775 #elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/
776 /* TASKING carm specific functions */
777 
778 /*
779  * The CMSIS functions have been implemented as intrinsics in the compiler.
780  * Please use "carm -?i" to get an up to date list of all instrinsics,
781  * Including the CMSIS ones.
782  */
783 
784 #endif
static volatile uint8_t addr
Definition: drv_i2c.c:95
struct __attribute__((packed))
Definition: usbd_cdc_vcp.h:66


rosflight_firmware
Author(s): Daniel Koch , James Jackson
autogenerated on Thu Apr 15 2021 05:07:46