mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			[CMSIS_5]: Updated to b5f0603d6
							parent
							
								
									74a640f028
								
							
						
					
					
						commit
						48747cdb26
					
				| 
						 | 
					@ -86,6 +86,9 @@
 | 
				
			||||||
#ifndef   __PACKED
 | 
					#ifndef   __PACKED
 | 
				
			||||||
  #define __PACKED                               __attribute__((packed))
 | 
					  #define __PACKED                               __attribute__((packed))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER()                   __memory_changed()
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ##########################  Core Instruction Access  ######################### */
 | 
					/* ##########################  Core Instruction Access  ######################### */
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -102,6 +102,9 @@
 | 
				
			||||||
#ifndef   __PACKED
 | 
					#ifndef   __PACKED
 | 
				
			||||||
  #define __PACKED                               __attribute__((packed))
 | 
					  #define __PACKED                               __attribute__((packed))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER()                   __ASM volatile("":::"memory")
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ##########################  Core Instruction Access  ######################### */
 | 
					/* ##########################  Core Instruction Access  ######################### */
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -311,6 +314,68 @@ __STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define __USAT             __builtin_arm_usat
 | 
					#define __USAT             __builtin_arm_usat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ###################  Compiler specific Intrinsics  ########################### */
 | 
				
			||||||
 | 
					/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics
 | 
				
			||||||
 | 
					  Access to dedicated SIMD instructions
 | 
				
			||||||
 | 
					  @{
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define     __QADD8                 __builtin_arm_qadd8
 | 
				
			||||||
 | 
					#define     __QSUB8                 __builtin_arm_qsub8
 | 
				
			||||||
 | 
					#define     __QADD16                __builtin_arm_qadd16
 | 
				
			||||||
 | 
					#define     __SHADD16               __builtin_arm_shadd16
 | 
				
			||||||
 | 
					#define     __QSUB16                __builtin_arm_qsub16
 | 
				
			||||||
 | 
					#define     __SHSUB16               __builtin_arm_shsub16
 | 
				
			||||||
 | 
					#define     __QASX                  __builtin_arm_qasx
 | 
				
			||||||
 | 
					#define     __SHASX                 __builtin_arm_shasx
 | 
				
			||||||
 | 
					#define     __QSAX                  __builtin_arm_qsax
 | 
				
			||||||
 | 
					#define     __SHSAX                 __builtin_arm_shsax
 | 
				
			||||||
 | 
					#define     __SXTB16                __builtin_arm_sxtb16
 | 
				
			||||||
 | 
					#define     __SMUAD                 __builtin_arm_smuad
 | 
				
			||||||
 | 
					#define     __SMUADX                __builtin_arm_smuadx
 | 
				
			||||||
 | 
					#define     __SMLAD                 __builtin_arm_smlad
 | 
				
			||||||
 | 
					#define     __SMLADX                __builtin_arm_smladx
 | 
				
			||||||
 | 
					#define     __SMLALD                __builtin_arm_smlald
 | 
				
			||||||
 | 
					#define     __SMLALDX               __builtin_arm_smlaldx
 | 
				
			||||||
 | 
					#define     __SMUSD                 __builtin_arm_smusd
 | 
				
			||||||
 | 
					#define     __SMUSDX                __builtin_arm_smusdx
 | 
				
			||||||
 | 
					#define     __SMLSDX                __builtin_arm_smlsdx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE  int32_t __QADD( int32_t op1,  int32_t op2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE  int32_t __QSUB( int32_t op1,  int32_t op2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define __PKHBT(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0x0000FFFFUL) |  \
 | 
				
			||||||
 | 
					                                           ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL)  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define __PKHTB(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0xFFFF0000UL) |  \
 | 
				
			||||||
 | 
					                                           ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL)  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r"  (op1), "r" (op2), "r" (op3) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* (__ARM_FEATURE_DSP == 1) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ###########################  Core Function Access  ########################### */
 | 
					/* ###########################  Core Function Access  ########################### */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,6 +98,10 @@
 | 
				
			||||||
  #ifndef   __PACKED
 | 
					  #ifndef   __PACKED
 | 
				
			||||||
    #define __PACKED                  __attribute__((packed))
 | 
					    #define __PACKED                  __attribute__((packed))
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					  #ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
				
			||||||
 | 
					    #define __COMPILER_BARRIER()      (void)0
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -144,6 +148,10 @@
 | 
				
			||||||
  #ifndef   __PACKED
 | 
					  #ifndef   __PACKED
 | 
				
			||||||
    #define __PACKED                  __packed__
 | 
					    #define __PACKED                  __packed__
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					  #ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
				
			||||||
 | 
					    #define __COMPILER_BARRIER()      (void)0
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -190,6 +198,10 @@
 | 
				
			||||||
  #ifndef   __PACKED
 | 
					  #ifndef   __PACKED
 | 
				
			||||||
    #define __PACKED                  @packed
 | 
					    #define __PACKED                  @packed
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					  #ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
				
			||||||
 | 
					    #define __COMPILER_BARRIER()      (void)0
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     cmsis_gcc.h
 | 
					 * @file     cmsis_gcc.h
 | 
				
			||||||
 * @brief    CMSIS compiler specific macros, functions, instructions
 | 
					 * @brief    CMSIS compiler specific macros, functions, instructions
 | 
				
			||||||
 * @version  V1.1.1
 | 
					 * @version  V1.2.0
 | 
				
			||||||
 * @date     15. May 2019
 | 
					 * @date     17. May 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
					 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
				
			||||||
| 
						 | 
					@ -37,8 +37,9 @@
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* CMSIS compiler specific defines */
 | 
					/* CMSIS compiler specific defines */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef   __ASM
 | 
					#ifndef   __ASM
 | 
				
			||||||
  #define __ASM                                  asm
 | 
					  #define __ASM                                  __asm
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifndef   __INLINE
 | 
					#ifndef   __INLINE
 | 
				
			||||||
  #define __INLINE                               inline
 | 
					  #define __INLINE                               inline
 | 
				
			||||||
| 
						 | 
					@ -104,6 +105,123 @@
 | 
				
			||||||
#ifndef   __ALIGNED
 | 
					#ifndef   __ALIGNED
 | 
				
			||||||
  #define __ALIGNED(x)                           __attribute__((aligned(x)))
 | 
					  #define __ALIGNED(x)                           __attribute__((aligned(x)))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER()                   __ASM volatile("":::"memory")
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE  int32_t __QADD( int32_t op1,  int32_t op2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  union llreg_u{
 | 
				
			||||||
 | 
					    uint32_t w32[2];
 | 
				
			||||||
 | 
					    uint64_t w64;
 | 
				
			||||||
 | 
					  } llr;
 | 
				
			||||||
 | 
					  llr.w64 = acc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ARMEB__   /* Little endian */
 | 
				
			||||||
 | 
					  __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );
 | 
				
			||||||
 | 
					#else               /* Big endian */
 | 
				
			||||||
 | 
					  __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return(llr.w64);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE  int32_t __QSUB( int32_t op1,  int32_t op2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE uint32_t __SMUAD  (uint32_t op1, uint32_t op2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define __PKHBT(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0x0000FFFFUL) |  \
 | 
				
			||||||
 | 
					                                           ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL)  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
 | 
				
			||||||
 | 
					  return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  union llreg_u{
 | 
				
			||||||
 | 
					    uint32_t w32[2];
 | 
				
			||||||
 | 
					    uint64_t w64;
 | 
				
			||||||
 | 
					  } llr;
 | 
				
			||||||
 | 
					  llr.w64 = acc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ARMEB__   /* Little endian */
 | 
				
			||||||
 | 
					  __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );
 | 
				
			||||||
 | 
					#else               /* Big endian */
 | 
				
			||||||
 | 
					  __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return(llr.w64);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int32_t result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r"  (op1), "r" (op2), "r" (op3) );
 | 
				
			||||||
 | 
					 return(result);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ##########################  Core Instruction Access  ######################### */
 | 
					/* ##########################  Core Instruction Access  ######################### */
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,6 +70,10 @@
 | 
				
			||||||
  #define __ASM __asm
 | 
					  #define __ASM __asm
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER() __ASM volatile("":::"memory")
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __INLINE
 | 
					#ifndef __INLINE
 | 
				
			||||||
  #define __INLINE inline
 | 
					  #define __INLINE inline
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,11 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     cmsis_armcc.h
 | 
					 * @file     cmsis_armcc.h
 | 
				
			||||||
 * @brief    CMSIS compiler ARMCC (Arm Compiler 5) header file
 | 
					 * @brief    CMSIS compiler ARMCC (Arm Compiler 5) header file
 | 
				
			||||||
 * @version  V5.0.5
 | 
					 * @version  V5.1.0
 | 
				
			||||||
 * @date     14. December 2018
 | 
					 * @date     08. May 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
 | 
					 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -104,6 +104,31 @@
 | 
				
			||||||
#ifndef   __RESTRICT
 | 
					#ifndef   __RESTRICT
 | 
				
			||||||
  #define __RESTRICT                             __restrict
 | 
					  #define __RESTRICT                             __restrict
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER()                   __memory_changed()
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* #########################  Startup and Lowlevel Init  ######################## */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __PROGRAM_START
 | 
				
			||||||
 | 
					#define __PROGRAM_START           __main
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __INITIAL_SP
 | 
				
			||||||
 | 
					#define __INITIAL_SP              Image$$ARM_LIB_STACK$$ZI$$Limit
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __STACK_LIMIT
 | 
				
			||||||
 | 
					#define __STACK_LIMIT             Image$$ARM_LIB_STACK$$ZI$$Base
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE            __Vectors
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE_ATTRIBUTE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE_ATTRIBUTE  __attribute((used, section("RESET")))
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ###########################  Core Function Access  ########################### */
 | 
					/* ###########################  Core Function Access  ########################### */
 | 
				
			||||||
/** \ingroup  CMSIS_Core_FunctionInterface
 | 
					/** \ingroup  CMSIS_Core_FunctionInterface
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     cmsis_armclang.h
 | 
					 * @file     cmsis_armclang.h
 | 
				
			||||||
 * @brief    CMSIS compiler armclang (Arm Compiler 6) header file
 | 
					 * @brief    CMSIS compiler armclang (Arm Compiler 6) header file
 | 
				
			||||||
 * @version  V5.1.0
 | 
					 * @version  V5.2.0
 | 
				
			||||||
 * @date     14. March 2019
 | 
					 * @date     08. May 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
					 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
				
			||||||
| 
						 | 
					@ -110,7 +110,31 @@
 | 
				
			||||||
#ifndef   __RESTRICT
 | 
					#ifndef   __RESTRICT
 | 
				
			||||||
  #define __RESTRICT                             __restrict
 | 
					  #define __RESTRICT                             __restrict
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER()                   __ASM volatile("":::"memory")
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* #########################  Startup and Lowlevel Init  ######################## */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __PROGRAM_START
 | 
				
			||||||
 | 
					#define __PROGRAM_START           __main
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __INITIAL_SP
 | 
				
			||||||
 | 
					#define __INITIAL_SP              Image$$ARM_LIB_STACK$$ZI$$Limit
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __STACK_LIMIT
 | 
				
			||||||
 | 
					#define __STACK_LIMIT             Image$$ARM_LIB_STACK$$ZI$$Base
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE            __Vectors
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE_ATTRIBUTE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE_ATTRIBUTE  __attribute((used, section("RESET")))
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ###########################  Core Function Access  ########################### */
 | 
					/* ###########################  Core Function Access  ########################### */
 | 
				
			||||||
/** \ingroup  CMSIS_Core_FunctionInterface
 | 
					/** \ingroup  CMSIS_Core_FunctionInterface
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     cmsis_armclang_ltm.h
 | 
					 * @file     cmsis_armclang_ltm.h
 | 
				
			||||||
 * @brief    CMSIS compiler armclang (Arm Compiler 6) header file
 | 
					 * @brief    CMSIS compiler armclang (Arm Compiler 6) header file
 | 
				
			||||||
 * @version  V1.0.1
 | 
					 * @version  V1.2.0
 | 
				
			||||||
 * @date     19. March 2019
 | 
					 * @date     08. May 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2018-2019 Arm Limited. All rights reserved.
 | 
					 * Copyright (c) 2018-2019 Arm Limited. All rights reserved.
 | 
				
			||||||
| 
						 | 
					@ -110,6 +110,31 @@
 | 
				
			||||||
#ifndef   __RESTRICT
 | 
					#ifndef   __RESTRICT
 | 
				
			||||||
  #define __RESTRICT                             __restrict
 | 
					  #define __RESTRICT                             __restrict
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER()                   __ASM volatile("":::"memory")
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* #########################  Startup and Lowlevel Init  ######################## */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __PROGRAM_START
 | 
				
			||||||
 | 
					#define __PROGRAM_START           __main
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __INITIAL_SP
 | 
				
			||||||
 | 
					#define __INITIAL_SP              Image$$ARM_LIB_STACK$$ZI$$Limit
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __STACK_LIMIT
 | 
				
			||||||
 | 
					#define __STACK_LIMIT             Image$$ARM_LIB_STACK$$ZI$$Base
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE            __Vectors
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE_ATTRIBUTE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE_ATTRIBUTE  __attribute((used, section("RESET")))
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ###########################  Core Function Access  ########################### */
 | 
					/* ###########################  Core Function Access  ########################### */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -123,6 +123,10 @@
 | 
				
			||||||
  #ifndef   __RESTRICT
 | 
					  #ifndef   __RESTRICT
 | 
				
			||||||
    #define __RESTRICT                             __restrict
 | 
					    #define __RESTRICT                             __restrict
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					  #ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
				
			||||||
 | 
					    #define __COMPILER_BARRIER()                   (void)0
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -192,6 +196,10 @@
 | 
				
			||||||
    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
 | 
					    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
 | 
				
			||||||
    #define __RESTRICT
 | 
					    #define __RESTRICT
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					  #ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
				
			||||||
 | 
					    #define __COMPILER_BARRIER()                   (void)0
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -260,6 +268,10 @@
 | 
				
			||||||
    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
 | 
					    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
 | 
				
			||||||
    #define __RESTRICT
 | 
					    #define __RESTRICT
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					  #ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
				
			||||||
 | 
					    #define __COMPILER_BARRIER()                   (void)0
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,11 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     cmsis_gcc.h
 | 
					 * @file     cmsis_gcc.h
 | 
				
			||||||
 * @brief    CMSIS compiler GCC header file
 | 
					 * @brief    CMSIS compiler GCC header file
 | 
				
			||||||
 * @version  V5.1.0
 | 
					 * @version  V5.2.0
 | 
				
			||||||
 * @date     20. December 2018
 | 
					 * @date     08. May 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
 | 
					 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -113,7 +113,74 @@
 | 
				
			||||||
#ifndef   __RESTRICT
 | 
					#ifndef   __RESTRICT
 | 
				
			||||||
  #define __RESTRICT                             __restrict
 | 
					  #define __RESTRICT                             __restrict
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER()                   __ASM volatile("":::"memory")
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* #########################  Startup and Lowlevel Init  ######################## */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __PROGRAM_START
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  \brief   Initializes data and bss sections
 | 
				
			||||||
 | 
					  \details This default implementations initialized all data and additional bss
 | 
				
			||||||
 | 
					           sections relying on .copy.table and .zero.table specified properly
 | 
				
			||||||
 | 
					           in the used linker script.
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  extern void _start(void) __NO_RETURN;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  typedef struct {
 | 
				
			||||||
 | 
					    uint32_t const* src;
 | 
				
			||||||
 | 
					    uint32_t* dest;
 | 
				
			||||||
 | 
					    uint32_t  wlen;
 | 
				
			||||||
 | 
					  } __copy_table_t;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  typedef struct {
 | 
				
			||||||
 | 
					    uint32_t* dest;
 | 
				
			||||||
 | 
					    uint32_t  wlen;
 | 
				
			||||||
 | 
					  } __zero_table_t;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  extern const __copy_table_t __copy_table_start__;
 | 
				
			||||||
 | 
					  extern const __copy_table_t __copy_table_end__;
 | 
				
			||||||
 | 
					  extern const __zero_table_t __zero_table_start__;
 | 
				
			||||||
 | 
					  extern const __zero_table_t __zero_table_end__;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) {
 | 
				
			||||||
 | 
					    for(uint32_t i=0u; i<pTable->wlen; ++i) {
 | 
				
			||||||
 | 
					      pTable->dest[i] = pTable->src[i];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) {
 | 
				
			||||||
 | 
					    for(uint32_t i=0u; i<pTable->wlen; ++i) {
 | 
				
			||||||
 | 
					      pTable->dest[i] = 0u;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  _start();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					#define __PROGRAM_START           __cmsis_start
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __INITIAL_SP
 | 
				
			||||||
 | 
					#define __INITIAL_SP              __StackTop
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __STACK_LIMIT
 | 
				
			||||||
 | 
					#define __STACK_LIMIT             __StackLimit
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE            __Vectors
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE_ATTRIBUTE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE_ATTRIBUTE  __attribute((used, section(".vectors")))
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ###########################  Core Function Access  ########################### */
 | 
					/* ###########################  Core Function Access  ########################### */
 | 
				
			||||||
/** \ingroup  CMSIS_Core_FunctionInterface
 | 
					/** \ingroup  CMSIS_Core_FunctionInterface
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,14 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     cmsis_iccarm.h
 | 
					 * @file     cmsis_iccarm.h
 | 
				
			||||||
 * @brief    CMSIS compiler ICCARM (IAR Compiler for Arm) header file
 | 
					 * @brief    CMSIS compiler ICCARM (IAR Compiler for Arm) header file
 | 
				
			||||||
 * @version  V5.0.8
 | 
					 * @version  V5.1.0
 | 
				
			||||||
 * @date     04. September 2018
 | 
					 * @date     08. May 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//------------------------------------------------------------------------------
 | 
					//------------------------------------------------------------------------------
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Copyright (c) 2017-2018 IAR Systems
 | 
					// Copyright (c) 2017-2019 IAR Systems
 | 
				
			||||||
 | 
					// Copyright (c) 2017-2019 Arm Limited. All rights reserved. 
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Licensed under the Apache License, Version 2.0 (the "License")
 | 
					// Licensed under the Apache License, Version 2.0 (the "License")
 | 
				
			||||||
// you may not use this file except in compliance with the License.
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
| 
						 | 
					@ -110,6 +111,10 @@
 | 
				
			||||||
  #define __ASM __asm
 | 
					  #define __ASM __asm
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef   __COMPILER_BARRIER
 | 
				
			||||||
 | 
					  #define __COMPILER_BARRIER() __ASM volatile("":::"memory")
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __INLINE
 | 
					#ifndef __INLINE
 | 
				
			||||||
  #define __INLINE inline
 | 
					  #define __INLINE inline
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -239,6 +244,25 @@ __packed struct  __iar_u32 { uint32_t v; };
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __PROGRAM_START
 | 
				
			||||||
 | 
					#define __PROGRAM_START           __iar_program_start
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __INITIAL_SP
 | 
				
			||||||
 | 
					#define __INITIAL_SP              CSTACK$$Limit
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __STACK_LIMIT
 | 
				
			||||||
 | 
					#define __STACK_LIMIT             CSTACK$$Base
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE            __vector_table
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VECTOR_TABLE_ATTRIBUTE
 | 
				
			||||||
 | 
					#define __VECTOR_TABLE_ATTRIBUTE  @".intvec"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __ICCARM_INTRINSICS_VERSION__
 | 
					#ifndef __ICCARM_INTRINSICS_VERSION__
 | 
				
			||||||
  #define __ICCARM_INTRINSICS_VERSION__  0
 | 
					  #define __ICCARM_INTRINSICS_VERSION__  0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,11 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     cmsis_version.h
 | 
					 * @file     cmsis_version.h
 | 
				
			||||||
 * @brief    CMSIS Core(M) Version definitions
 | 
					 * @brief    CMSIS Core(M) Version definitions
 | 
				
			||||||
 * @version  V5.0.2
 | 
					 * @version  V5.0.3
 | 
				
			||||||
 * @date     19. April 2017
 | 
					 * @date     24. June 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
 | 
					 * Copyright (c) 2009-2019 ARM Limited. All rights reserved.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*  CMSIS Version definitions */
 | 
					/*  CMSIS Version definitions */
 | 
				
			||||||
#define __CM_CMSIS_VERSION_MAIN  ( 5U)                                      /*!< [31:16] CMSIS Core(M) main version */
 | 
					#define __CM_CMSIS_VERSION_MAIN  ( 5U)                                      /*!< [31:16] CMSIS Core(M) main version */
 | 
				
			||||||
#define __CM_CMSIS_VERSION_SUB   ( 1U)                                      /*!< [15:0]  CMSIS Core(M) sub version */
 | 
					#define __CM_CMSIS_VERSION_SUB   ( 3U)                                      /*!< [15:0]  CMSIS Core(M) sub version */
 | 
				
			||||||
#define __CM_CMSIS_VERSION       ((__CM_CMSIS_VERSION_MAIN << 16U) | \
 | 
					#define __CM_CMSIS_VERSION       ((__CM_CMSIS_VERSION_MAIN << 16U) | \
 | 
				
			||||||
                                   __CM_CMSIS_VERSION_SUB           )       /*!< CMSIS Core(M) version number */
 | 
					                                   __CM_CMSIS_VERSION_SUB           )       /*!< CMSIS Core(M) version number */
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2480,6 +2480,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
					  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
				
			||||||
 | 
					  __DSB();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1253,7 +1253,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1552,6 +1554,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)0x0U;
 | 
					  uint32_t *vectors = (uint32_t *)0x0U;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
				
			||||||
 | 
					  __DSB();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2053,7 +2053,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2345,6 +2347,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
					  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
				
			||||||
 | 
					  __DSB();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -624,7 +624,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -831,6 +833,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t vectors = 0x0U;
 | 
					  uint32_t vectors = 0x0U;
 | 
				
			||||||
  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
					  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
				
			||||||
 | 
					  /* ARM Application Note 321 states that the M0 does not require the architectural barrier */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@
 | 
				
			||||||
 * @date     13. March 2019
 | 
					 * @date     13. March 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
 | 
					 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -742,7 +742,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -953,6 +955,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
  uint32_t vectors = 0x0U;
 | 
					  uint32_t vectors = 0x0U;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
					  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
				
			||||||
 | 
					  /* ARM Application Note 321 states that the M0+ does not require the architectural barrier */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -651,7 +651,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -858,6 +860,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)0x0U;
 | 
					  uint32_t *vectors = (uint32_t *)0x0U;
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
				
			||||||
 | 
					  /* ARM Application Note 321 states that the M1 does not require the architectural barrier */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1328,7 +1328,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1627,6 +1629,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)0x0U;
 | 
					  uint32_t *vectors = (uint32_t *)0x0U;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
				
			||||||
 | 
					  __DSB();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1504,7 +1504,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1729,6 +1731,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t vectors = (uint32_t )SCB->VTOR;
 | 
					  uint32_t vectors = (uint32_t )SCB->VTOR;
 | 
				
			||||||
  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
					  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
				
			||||||
 | 
					  /* ARM Application Note 321 states that the M3 does not require the architectural barrier */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2128,7 +2128,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2420,6 +2422,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
					  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
				
			||||||
 | 
					  __DSB();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2128,7 +2128,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2420,6 +2422,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
					  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
				
			||||||
 | 
					  __DSB();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1680,7 +1680,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1905,6 +1907,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t vectors = (uint32_t )SCB->VTOR;
 | 
					  uint32_t vectors = (uint32_t )SCB->VTOR;
 | 
				
			||||||
  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
					  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
				
			||||||
 | 
					  /* ARM Application Note 321 states that the M4 does not require the architectural barrier */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     core_cm7.h
 | 
					 * @file     core_cm7.h
 | 
				
			||||||
 * @brief    CMSIS Cortex-M7 Core Peripheral Access Layer Header File
 | 
					 * @brief    CMSIS Cortex-M7 Core Peripheral Access Layer Header File
 | 
				
			||||||
 * @version  V5.1.0
 | 
					 * @version  V5.1.1
 | 
				
			||||||
 * @date     13. March 2019
 | 
					 * @date     28. March 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
					 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
				
			||||||
| 
						 | 
					@ -1903,7 +1903,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2128,6 +2130,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t vectors = (uint32_t )SCB->VTOR;
 | 
					  uint32_t vectors = (uint32_t )SCB->VTOR;
 | 
				
			||||||
  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
					  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
				
			||||||
 | 
					  __DSB();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2229,6 +2232,7 @@ __STATIC_INLINE uint32_t SCB_GetFPUType(void)
 | 
				
			||||||
#define CCSIDR_SETS(x)         (((x) & SCB_CCSIDR_NUMSETS_Msk      ) >> SCB_CCSIDR_NUMSETS_Pos      )
 | 
					#define CCSIDR_SETS(x)         (((x) & SCB_CCSIDR_NUMSETS_Msk      ) >> SCB_CCSIDR_NUMSETS_Pos      )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define __SCB_DCACHE_LINE_SIZE  32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */
 | 
					#define __SCB_DCACHE_LINE_SIZE  32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */
 | 
				
			||||||
 | 
					#define __SCB_ICACHE_LINE_SIZE  32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
  \brief   Enable I-Cache
 | 
					  \brief   Enable I-Cache
 | 
				
			||||||
| 
						 | 
					@ -2284,6 +2288,36 @@ __STATIC_FORCEINLINE void SCB_InvalidateICache (void)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  \brief   I-Cache Invalidate by address
 | 
				
			||||||
 | 
					  \details Invalidates I-Cache for the given address.
 | 
				
			||||||
 | 
					           I-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity.
 | 
				
			||||||
 | 
					           I-Cache memory blocks which are part of given address + given size are invalidated.
 | 
				
			||||||
 | 
					  \param[in]   addr    address
 | 
				
			||||||
 | 
					  \param[in]   isize   size of memory block (in number of bytes)
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (void *addr, int32_t isize)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
 | 
				
			||||||
 | 
					    if ( isize > 0 ) {
 | 
				
			||||||
 | 
					       int32_t op_size = isize + (((uint32_t)addr) & (__SCB_ICACHE_LINE_SIZE - 1U));
 | 
				
			||||||
 | 
					      uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_ICACHE_LINE_SIZE - 1U) */;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      __DSB();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      do {
 | 
				
			||||||
 | 
					        SCB->ICIMVAU = op_addr;             /* register accepts only 32byte aligned values, only bits 31..5 are valid */
 | 
				
			||||||
 | 
					        op_addr += __SCB_ICACHE_LINE_SIZE;
 | 
				
			||||||
 | 
					        op_size -= __SCB_ICACHE_LINE_SIZE;
 | 
				
			||||||
 | 
					      } while ( op_size > 0 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      __DSB();
 | 
				
			||||||
 | 
					      __ISB();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
  \brief   Enable D-Cache
 | 
					  \brief   Enable D-Cache
 | 
				
			||||||
  \details Turns on D-Cache
 | 
					  \details Turns on D-Cache
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -750,7 +750,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -904,6 +906,7 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
					  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
				
			||||||
 | 
					  /* ARM Application Note 321 states that the M0 and M0+ do not require the architectural barrier - assume SC000 is the same */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,11 @@
 | 
				
			||||||
/**************************************************************************//**
 | 
					/**************************************************************************//**
 | 
				
			||||||
 * @file     core_sc300.h
 | 
					 * @file     core_sc300.h
 | 
				
			||||||
 * @brief    CMSIS SC300 Core Peripheral Access Layer Header File
 | 
					 * @brief    CMSIS SC300 Core Peripheral Access Layer Header File
 | 
				
			||||||
 * @version  V5.0.7
 | 
					 * @version  V5.0.8
 | 
				
			||||||
 * @date     12. November 2018
 | 
					 * @date     31. May 2019
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
 | 
					 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -342,7 +342,7 @@ typedef struct
 | 
				
			||||||
  __IOM uint32_t ISER[8U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */
 | 
					  __IOM uint32_t ISER[8U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */
 | 
				
			||||||
        uint32_t RESERVED0[24U];
 | 
					        uint32_t RESERVED0[24U];
 | 
				
			||||||
  __IOM uint32_t ICER[8U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */
 | 
					  __IOM uint32_t ICER[8U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */
 | 
				
			||||||
        uint32_t RSERVED1[24U];
 | 
					        uint32_t RESERVED1[24U];
 | 
				
			||||||
  __IOM uint32_t ISPR[8U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */
 | 
					  __IOM uint32_t ISPR[8U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */
 | 
				
			||||||
        uint32_t RESERVED2[24U];
 | 
					        uint32_t RESERVED2[24U];
 | 
				
			||||||
  __IOM uint32_t ICPR[8U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */
 | 
					  __IOM uint32_t ICPR[8U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */
 | 
				
			||||||
| 
						 | 
					@ -653,13 +653,23 @@ typedef struct
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
        uint32_t RESERVED0[1U];
 | 
					        uint32_t RESERVED0[1U];
 | 
				
			||||||
  __IM  uint32_t ICTR;                   /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */
 | 
					  __IM  uint32_t ICTR;                   /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */
 | 
				
			||||||
        uint32_t RESERVED1[1U];
 | 
					  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */
 | 
				
			||||||
} SCnSCB_Type;
 | 
					} SCnSCB_Type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Interrupt Controller Type Register Definitions */
 | 
					/* Interrupt Controller Type Register Definitions */
 | 
				
			||||||
#define SCnSCB_ICTR_INTLINESNUM_Pos         0U                                         /*!< ICTR: INTLINESNUM Position */
 | 
					#define SCnSCB_ICTR_INTLINESNUM_Pos         0U                                         /*!< ICTR: INTLINESNUM Position */
 | 
				
			||||||
#define SCnSCB_ICTR_INTLINESNUM_Msk        (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)  /*!< ICTR: INTLINESNUM Mask */
 | 
					#define SCnSCB_ICTR_INTLINESNUM_Msk        (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)  /*!< ICTR: INTLINESNUM Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Auxiliary Control Register Definitions */
 | 
				
			||||||
 | 
					#define SCnSCB_ACTLR_DISFOLD_Pos            2U                                         /*!< ACTLR: DISFOLD Position */
 | 
				
			||||||
 | 
					#define SCnSCB_ACTLR_DISFOLD_Msk           (1UL << SCnSCB_ACTLR_DISFOLD_Pos)           /*!< ACTLR: DISFOLD Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SCnSCB_ACTLR_DISDEFWBUF_Pos         1U                                         /*!< ACTLR: DISDEFWBUF Position */
 | 
				
			||||||
 | 
					#define SCnSCB_ACTLR_DISDEFWBUF_Msk        (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos)        /*!< ACTLR: DISDEFWBUF Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SCnSCB_ACTLR_DISMCYCINT_Pos         0U                                         /*!< ACTLR: DISMCYCINT Position */
 | 
				
			||||||
 | 
					#define SCnSCB_ACTLR_DISMCYCINT_Msk        (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/)    /*!< ACTLR: DISMCYCINT Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*@} end of group CMSIS_SCnotSCB */
 | 
					/*@} end of group CMSIS_SCnotSCB */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -739,10 +749,7 @@ typedef struct
 | 
				
			||||||
  __IOM uint32_t TPR;                    /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */
 | 
					  __IOM uint32_t TPR;                    /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */
 | 
				
			||||||
        uint32_t RESERVED2[15U];
 | 
					        uint32_t RESERVED2[15U];
 | 
				
			||||||
  __IOM uint32_t TCR;                    /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */
 | 
					  __IOM uint32_t TCR;                    /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */
 | 
				
			||||||
        uint32_t RESERVED3[29U];
 | 
					        uint32_t RESERVED3[32U];
 | 
				
			||||||
  __OM  uint32_t IWR;                    /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */
 | 
					 | 
				
			||||||
  __IM  uint32_t IRR;                    /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */
 | 
					 | 
				
			||||||
  __IOM uint32_t IMCR;                   /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */
 | 
					 | 
				
			||||||
        uint32_t RESERVED4[43U];
 | 
					        uint32_t RESERVED4[43U];
 | 
				
			||||||
  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */
 | 
					  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */
 | 
				
			||||||
  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */
 | 
					  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */
 | 
				
			||||||
| 
						 | 
					@ -793,18 +800,6 @@ typedef struct
 | 
				
			||||||
#define ITM_TCR_ITMENA_Pos                  0U                                            /*!< ITM TCR: ITM Enable bit Position */
 | 
					#define ITM_TCR_ITMENA_Pos                  0U                                            /*!< ITM TCR: ITM Enable bit Position */
 | 
				
			||||||
#define ITM_TCR_ITMENA_Msk                 (1UL /*<< ITM_TCR_ITMENA_Pos*/)                /*!< ITM TCR: ITM Enable bit Mask */
 | 
					#define ITM_TCR_ITMENA_Msk                 (1UL /*<< ITM_TCR_ITMENA_Pos*/)                /*!< ITM TCR: ITM Enable bit Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ITM Integration Write Register Definitions */
 | 
					 | 
				
			||||||
#define ITM_IWR_ATVALIDM_Pos                0U                                            /*!< ITM IWR: ATVALIDM Position */
 | 
					 | 
				
			||||||
#define ITM_IWR_ATVALIDM_Msk               (1UL /*<< ITM_IWR_ATVALIDM_Pos*/)              /*!< ITM IWR: ATVALIDM Mask */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ITM Integration Read Register Definitions */
 | 
					 | 
				
			||||||
#define ITM_IRR_ATREADYM_Pos                0U                                            /*!< ITM IRR: ATREADYM Position */
 | 
					 | 
				
			||||||
#define ITM_IRR_ATREADYM_Msk               (1UL /*<< ITM_IRR_ATREADYM_Pos*/)              /*!< ITM IRR: ATREADYM Mask */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ITM Integration Mode Control Register Definitions */
 | 
					 | 
				
			||||||
#define ITM_IMCR_INTEGRATION_Pos            0U                                            /*!< ITM IMCR: INTEGRATION Position */
 | 
					 | 
				
			||||||
#define ITM_IMCR_INTEGRATION_Msk           (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/)          /*!< ITM IMCR: INTEGRATION Mask */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ITM Lock Status Register Definitions */
 | 
					/* ITM Lock Status Register Definitions */
 | 
				
			||||||
#define ITM_LSR_ByteAcc_Pos                 2U                                            /*!< ITM LSR: ByteAcc Position */
 | 
					#define ITM_LSR_ByteAcc_Pos                 2U                                            /*!< ITM LSR: ByteAcc Position */
 | 
				
			||||||
#define ITM_LSR_ByteAcc_Msk                (1UL << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */
 | 
					#define ITM_LSR_ByteAcc_Msk                (1UL << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */
 | 
				
			||||||
| 
						 | 
					@ -1037,13 +1032,13 @@ typedef struct
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* TPI Integration ETM Data Register Definitions (FIFO0) */
 | 
					/* TPI Integration ETM Data Register Definitions (FIFO0) */
 | 
				
			||||||
#define TPI_FIFO0_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO0: ITM_ATVALID Position */
 | 
					#define TPI_FIFO0_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO0: ITM_ATVALID Position */
 | 
				
			||||||
#define TPI_FIFO0_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos)        /*!< TPI FIFO0: ITM_ATVALID Mask */
 | 
					#define TPI_FIFO0_ITM_ATVALID_Msk          (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos)        /*!< TPI FIFO0: ITM_ATVALID Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TPI_FIFO0_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO0: ITM_bytecount Position */
 | 
					#define TPI_FIFO0_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO0: ITM_bytecount Position */
 | 
				
			||||||
#define TPI_FIFO0_ITM_bytecount_Msk        (0x3UL << TPI_FIFO0_ITM_bytecount_Pos)      /*!< TPI FIFO0: ITM_bytecount Mask */
 | 
					#define TPI_FIFO0_ITM_bytecount_Msk        (0x3UL << TPI_FIFO0_ITM_bytecount_Pos)      /*!< TPI FIFO0: ITM_bytecount Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TPI_FIFO0_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO0: ETM_ATVALID Position */
 | 
					#define TPI_FIFO0_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO0: ETM_ATVALID Position */
 | 
				
			||||||
#define TPI_FIFO0_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos)        /*!< TPI FIFO0: ETM_ATVALID Mask */
 | 
					#define TPI_FIFO0_ETM_ATVALID_Msk          (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos)        /*!< TPI FIFO0: ETM_ATVALID Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TPI_FIFO0_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO0: ETM_bytecount Position */
 | 
					#define TPI_FIFO0_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO0: ETM_bytecount Position */
 | 
				
			||||||
#define TPI_FIFO0_ETM_bytecount_Msk        (0x3UL << TPI_FIFO0_ETM_bytecount_Pos)      /*!< TPI FIFO0: ETM_bytecount Mask */
 | 
					#define TPI_FIFO0_ETM_bytecount_Msk        (0x3UL << TPI_FIFO0_ETM_bytecount_Pos)      /*!< TPI FIFO0: ETM_bytecount Mask */
 | 
				
			||||||
| 
						 | 
					@ -1066,13 +1061,13 @@ typedef struct
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* TPI Integration ITM Data Register Definitions (FIFO1) */
 | 
					/* TPI Integration ITM Data Register Definitions (FIFO1) */
 | 
				
			||||||
#define TPI_FIFO1_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO1: ITM_ATVALID Position */
 | 
					#define TPI_FIFO1_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO1: ITM_ATVALID Position */
 | 
				
			||||||
#define TPI_FIFO1_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos)        /*!< TPI FIFO1: ITM_ATVALID Mask */
 | 
					#define TPI_FIFO1_ITM_ATVALID_Msk          (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos)        /*!< TPI FIFO1: ITM_ATVALID Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TPI_FIFO1_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO1: ITM_bytecount Position */
 | 
					#define TPI_FIFO1_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO1: ITM_bytecount Position */
 | 
				
			||||||
#define TPI_FIFO1_ITM_bytecount_Msk        (0x3UL << TPI_FIFO1_ITM_bytecount_Pos)      /*!< TPI FIFO1: ITM_bytecount Mask */
 | 
					#define TPI_FIFO1_ITM_bytecount_Msk        (0x3UL << TPI_FIFO1_ITM_bytecount_Pos)      /*!< TPI FIFO1: ITM_bytecount Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TPI_FIFO1_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO1: ETM_ATVALID Position */
 | 
					#define TPI_FIFO1_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO1: ETM_ATVALID Position */
 | 
				
			||||||
#define TPI_FIFO1_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos)        /*!< TPI FIFO1: ETM_ATVALID Mask */
 | 
					#define TPI_FIFO1_ETM_ATVALID_Msk          (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos)        /*!< TPI FIFO1: ETM_ATVALID Mask */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TPI_FIFO1_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO1: ETM_bytecount Position */
 | 
					#define TPI_FIFO1_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO1: ETM_bytecount Position */
 | 
				
			||||||
#define TPI_FIFO1_ETM_bytecount_Msk        (0x3UL << TPI_FIFO1_ETM_bytecount_Pos)      /*!< TPI FIFO1: ETM_bytecount Mask */
 | 
					#define TPI_FIFO1_ETM_bytecount_Msk        (0x3UL << TPI_FIFO1_ETM_bytecount_Pos)      /*!< TPI FIFO1: ETM_bytecount Mask */
 | 
				
			||||||
| 
						 | 
					@ -1448,7 +1443,6 @@ typedef struct
 | 
				
			||||||
#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */
 | 
					#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
  \brief   Set Priority Grouping
 | 
					  \brief   Set Priority Grouping
 | 
				
			||||||
  \details Sets the priority grouping field using the required unlock sequence.
 | 
					  \details Sets the priority grouping field using the required unlock sequence.
 | 
				
			||||||
| 
						 | 
					@ -1467,7 +1461,7 @@ __STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
 | 
				
			||||||
  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */
 | 
					  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */
 | 
				
			||||||
  reg_value  =  (reg_value                                   |
 | 
					  reg_value  =  (reg_value                                   |
 | 
				
			||||||
                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
 | 
					                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
 | 
				
			||||||
                (PriorityGroupTmp << 8U)                      );              /* Insert write key and priorty group */
 | 
					                (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos)  );              /* Insert write key and priority group */
 | 
				
			||||||
  SCB->AIRCR =  reg_value;
 | 
					  SCB->AIRCR =  reg_value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1493,7 +1487,9 @@ __STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ((int32_t)(IRQn) >= 0)
 | 
					  if ((int32_t)(IRQn) >= 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
					    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
				
			||||||
 | 
					    __COMPILER_BARRIER();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1716,8 +1712,9 @@ __STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGr
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
					__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
					  uint32_t vectors = (uint32_t )SCB->VTOR;
 | 
				
			||||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
					  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
				
			||||||
 | 
					  /* ARM Application Note 321 states that the M3 does not require the architectural barrier */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1731,8 +1728,8 @@ __STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
 | 
					__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
					  uint32_t vectors = (uint32_t )SCB->VTOR;
 | 
				
			||||||
  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];
 | 
					  return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,10 +22,6 @@
 | 
				
			||||||
 * limitations under the License.
 | 
					 * limitations under the License.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !TARGET_TFM
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined (__ARM_FEATURE_CMSE) &&  (__ARM_FEATURE_CMSE == 3U)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "RTE_Components.h"
 | 
					#include "RTE_Components.h"
 | 
				
			||||||
#include CMSIS_device_header
 | 
					#include CMSIS_device_header
 | 
				
			||||||
#include "tz_context.h"
 | 
					#include "tz_context.h"
 | 
				
			||||||
| 
						 | 
					@ -202,6 +198,3 @@ uint32_t TZ_StoreContext_S (TZ_MemoryId_t id) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return 1U;    // Success
 | 
					  return 1U;    // Success
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // !TARGET_TFM
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -438,25 +438,26 @@ uint32_t osKernelSysTick (void);
 | 
				
			||||||
/// Create a Thread Definition with function, priority, and stack requirements.
 | 
					/// Create a Thread Definition with function, priority, and stack requirements.
 | 
				
			||||||
/// \param         name          name of the thread function.
 | 
					/// \param         name          name of the thread function.
 | 
				
			||||||
/// \param         priority      initial priority of the thread function.
 | 
					/// \param         priority      initial priority of the thread function.
 | 
				
			||||||
 | 
					/// \param         instances     number of possible thread instances.
 | 
				
			||||||
/// \param         stacksz       stack size (in bytes) requirements for the thread function.
 | 
					/// \param         stacksz       stack size (in bytes) requirements for the thread function.
 | 
				
			||||||
#if defined (osObjectsExternal)  // object is external
 | 
					#if defined (osObjectsExternal)  // object is external
 | 
				
			||||||
#define osThreadDef(name, priority, stacksz) \
 | 
					#define osThreadDef(name, priority, instances, stacksz) \
 | 
				
			||||||
extern const osThreadDef_t os_thread_def_##name
 | 
					extern const osThreadDef_t os_thread_def_##name
 | 
				
			||||||
#else                            // define the object
 | 
					#else                            // define the object
 | 
				
			||||||
#if (osCMSIS < 0x20000U)
 | 
					#if (osCMSIS < 0x20000U)
 | 
				
			||||||
#define osThreadDef(name, priority, stacksz) \
 | 
					#define osThreadDef(name, priority, instances, stacksz) \
 | 
				
			||||||
const osThreadDef_t os_thread_def_##name = \
 | 
					const osThreadDef_t os_thread_def_##name = \
 | 
				
			||||||
{ (name), (priority), 1, (stacksz) }
 | 
					{ (name), (priority), (instances), (stacksz) }
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define osThreadDef(name, priority, stacksz) \
 | 
					#define osThreadDef(name, priority, instances, stacksz) \
 | 
				
			||||||
uint64_t os_thread_stack##name[(stacksz)?(((stacksz+7)/8)):1] __attribute__((section(".bss.os.thread.stack"))); \
 | 
					static uint64_t os_thread_stack##name[(stacksz)?(((stacksz+7)/8)):1] __attribute__((section(".bss.os.thread.stack"))); \
 | 
				
			||||||
static osRtxThread_t os_thread_cb_##name __attribute__((section(".bss.os.thread.cb"))); \
 | 
					static osRtxThread_t os_thread_cb_##name __attribute__((section(".bss.os.thread.cb"))); \
 | 
				
			||||||
const osThreadDef_t os_thread_def_##name = \
 | 
					const osThreadDef_t os_thread_def_##name = \
 | 
				
			||||||
{ (name), \
 | 
					{ (name), \
 | 
				
			||||||
  { NULL, osThreadDetached, \
 | 
					  { NULL, osThreadDetached, \
 | 
				
			||||||
    &os_thread_cb_##name,\
 | 
					    (instances == 1) ? (&os_thread_cb_##name) : NULL,\
 | 
				
			||||||
    osRtxThreadCbSize, \
 | 
					    (instances == 1) ? osRtxThreadCbSize : 0U, \
 | 
				
			||||||
    (stacksz) ? (&os_thread_stack##name) : NULL, \
 | 
					    ((stacksz) && (instances == 1)) ? (&os_thread_stack##name) : NULL, \
 | 
				
			||||||
    8*((stacksz+7)/8), \
 | 
					    8*((stacksz+7)/8), \
 | 
				
			||||||
    (priority), 0U, 0U } }
 | 
					    (priority), 0U, 0U } }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -267,7 +267,6 @@ osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ptr->mp_id = osMemoryPoolNew  (queue_def->queue_sz, queue_def->item_sz, &queue_def->mp_attr);
 | 
					  ptr->mp_id = osMemoryPoolNew  (queue_def->queue_sz, queue_def->item_sz, &queue_def->mp_attr);
 | 
				
			||||||
  // coverity[suspicious_sizeof]
 | 
					 | 
				
			||||||
  ptr->mq_id = osMessageQueueNew(queue_def->queue_sz, sizeof(void *), &queue_def->mq_attr);
 | 
					  ptr->mq_id = osMessageQueueNew(queue_def->queue_sz, sizeof(void *), &queue_def->mq_attr);
 | 
				
			||||||
  if ((ptr->mp_id == NULL) || (ptr->mq_id == NULL)) {
 | 
					  if ((ptr->mp_id == NULL) || (ptr->mq_id == NULL)) {
 | 
				
			||||||
    if (ptr->mp_id != NULL) {
 | 
					    if (ptr->mp_id != NULL) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -568,9 +568,7 @@
 | 
				
			||||||
// Number of Threads which use standard C/C++ library libspace
 | 
					// Number of Threads which use standard C/C++ library libspace
 | 
				
			||||||
// (when thread specific memory allocation is not used).
 | 
					// (when thread specific memory allocation is not used).
 | 
				
			||||||
#if (OS_THREAD_OBJ_MEM == 0)
 | 
					#if (OS_THREAD_OBJ_MEM == 0)
 | 
				
			||||||
#ifndef OS_THREAD_LIBSPACE_NUM
 | 
					 | 
				
			||||||
#define OS_THREAD_LIBSPACE_NUM      4
 | 
					#define OS_THREAD_LIBSPACE_NUM      4
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define OS_THREAD_LIBSPACE_NUM      OS_THREAD_NUM
 | 
					#define OS_THREAD_LIBSPACE_NUM      OS_THREAD_NUM
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1276,7 +1276,7 @@ extern void EvrRtxMutexAcquire (osMutexId_t mutex_id, uint32_t timeout);
 | 
				
			||||||
#if (!defined(EVR_RTX_DISABLE) && (OS_EVR_MUTEX != 0) && !defined(EVR_RTX_MUTEX_ACQUIRE_PENDING_DISABLE))
 | 
					#if (!defined(EVR_RTX_DISABLE) && (OS_EVR_MUTEX != 0) && !defined(EVR_RTX_MUTEX_ACQUIRE_PENDING_DISABLE))
 | 
				
			||||||
extern void EvrRtxMutexAcquirePending (osMutexId_t mutex_id, uint32_t timeout);
 | 
					extern void EvrRtxMutexAcquirePending (osMutexId_t mutex_id, uint32_t timeout);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define EvrRtxMutexAcquirePending(mutex_id, timeout);
 | 
					#define EvrRtxMutexAcquirePending(mutex_id, timeout)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -1429,7 +1429,7 @@ extern void EvrRtxSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t timeo
 | 
				
			||||||
#if (!defined(EVR_RTX_DISABLE) && (OS_EVR_SEMAPHORE != 0) && !defined(EVR_RTX_SEMAPHORE_ACQUIRE_PENDING_DISABLE))
 | 
					#if (!defined(EVR_RTX_DISABLE) && (OS_EVR_SEMAPHORE != 0) && !defined(EVR_RTX_SEMAPHORE_ACQUIRE_PENDING_DISABLE))
 | 
				
			||||||
extern void EvrRtxSemaphoreAcquirePending (osSemaphoreId_t semaphore_id, uint32_t timeout);
 | 
					extern void EvrRtxSemaphoreAcquirePending (osSemaphoreId_t semaphore_id, uint32_t timeout);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define EvrRtxSemaphoreAcquirePending(semaphore_id, timeout);
 | 
					#define EvrRtxSemaphoreAcquirePending(semaphore_id, timeout)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,8 +38,8 @@ extern "C"
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
/// Kernel Information
 | 
					/// Kernel Information
 | 
				
			||||||
#define osRtxVersionAPI      20010003   ///< API version (2.1.3)
 | 
					#define osRtxVersionAPI      20010003   ///< API version (2.1.3)
 | 
				
			||||||
#define osRtxVersionKernel   50050000   ///< Kernel version (5.5.0)
 | 
					#define osRtxVersionKernel   50050001   ///< Kernel version (5.5.1)
 | 
				
			||||||
#define osRtxKernelId     "RTX V5.5.0"  ///< Kernel identification string
 | 
					#define osRtxKernelId     "RTX V5.5.1"  ///< Kernel identification string
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
//  ==== Common definitions ====
 | 
					//  ==== Common definitions ====
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,9 +24,9 @@
 | 
				
			||||||
; */
 | 
					; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef DOMAIN_NS
 | 
					                IF       :LNOT::DEF:DOMAIN_NS
 | 
				
			||||||
DOMAIN_NS     EQU      0
 | 
					DOMAIN_NS       EQU      0
 | 
				
			||||||
#endif
 | 
					                ENDIF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I_T_RUN_OFS     EQU      20                     ; osRtxInfo.thread.run offset
 | 
					I_T_RUN_OFS     EQU      20                     ; osRtxInfo.thread.run offset
 | 
				
			||||||
TCB_SM_OFS      EQU      48                     ; TCB.stack_mem offset
 | 
					TCB_SM_OFS      EQU      48                     ; TCB.stack_mem offset
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,16 +24,15 @@
 | 
				
			||||||
; */
 | 
					; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef DOMAIN_NS
 | 
					                IF       :LNOT::DEF:DOMAIN_NS
 | 
				
			||||||
DOMAIN_NS     EQU      0
 | 
					DOMAIN_NS       EQU      0
 | 
				
			||||||
#endif
 | 
					                ENDIF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __ARM_FP
 | 
					                IF       ({FPU}="FPv5-SP") || ({FPU}="FPv5_D16")
 | 
				
			||||||
__FPU_USED      EQU      1
 | 
					__FPU_USED      EQU      1
 | 
				
			||||||
#else
 | 
					                ELSE
 | 
				
			||||||
__FPU_USED      EQU      0
 | 
					__FPU_USED      EQU      0
 | 
				
			||||||
#endif
 | 
					                ENDIF
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
I_T_RUN_OFS     EQU      20                     ; osRtxInfo.thread.run offset
 | 
					I_T_RUN_OFS     EQU      20                     ; osRtxInfo.thread.run offset
 | 
				
			||||||
TCB_SM_OFS      EQU      48                     ; TCB.stack_mem offset
 | 
					TCB_SM_OFS      EQU      48                     ; TCB.stack_mem offset
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,22 +74,17 @@ SVC_Context
 | 
				
			||||||
                CBNZ     R1,SVC_ContextSave     ; Branch if running thread is not deleted
 | 
					                CBNZ     R1,SVC_ContextSave     ; Branch if running thread is not deleted
 | 
				
			||||||
                TST      LR,#0x10               ; Check if extended stack frame
 | 
					                TST      LR,#0x10               ; Check if extended stack frame
 | 
				
			||||||
                BNE      SVC_ContextSwitch
 | 
					                BNE      SVC_ContextSwitch
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
                LDR      R1,=0xE000EF34         ; FPCCR Address
 | 
					                LDR      R1,=0xE000EF34         ; FPCCR Address
 | 
				
			||||||
                LDR      R0,[R1]                ; Load FPCCR
 | 
					                LDR      R0,[R1]                ; Load FPCCR
 | 
				
			||||||
                BIC      R0,R0,#1               ; Clear LSPACT (Lazy state)
 | 
					                BIC      R0,R0,#1               ; Clear LSPACT (Lazy state)
 | 
				
			||||||
                STR      R0,[R1]                ; Store FPCCR
 | 
					                STR      R0,[R1]                ; Store FPCCR
 | 
				
			||||||
                B        SVC_ContextSwitch
 | 
					                B        SVC_ContextSwitch
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SVC_ContextSave
 | 
					SVC_ContextSave
 | 
				
			||||||
                STMDB    R12!,{R4-R11}          ; Save R4..R11
 | 
					                STMDB    R12!,{R4-R11}          ; Save R4..R11
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
                TST      LR,#0x10               ; Check if extended stack frame
 | 
					                TST      LR,#0x10               ; Check if extended stack frame
 | 
				
			||||||
                IT       EQ
 | 
					                IT       EQ
 | 
				
			||||||
                VSTMDBEQ R12!,{S16-S31}         ;  Save VFP S16.S31
 | 
					                VSTMDBEQ R12!,{S16-S31}         ;  Save VFP S16.S31
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                STR      R12,[R1,#TCB_SP_OFS]   ; Store SP
 | 
					                STR      R12,[R1,#TCB_SP_OFS]   ; Store SP
 | 
				
			||||||
                STRB     LR, [R1,#TCB_SF_OFS]   ; Store stack frame information
 | 
					                STRB     LR, [R1,#TCB_SF_OFS]   ; Store stack frame information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,11 +103,9 @@ SVC_ContextRestore
 | 
				
			||||||
                LDR      R0,[R2,#TCB_SP_OFS]    ; Load SP
 | 
					                LDR      R0,[R2,#TCB_SP_OFS]    ; Load SP
 | 
				
			||||||
                ORR      LR,R1,#0xFFFFFF00      ; Set EXC_RETURN
 | 
					                ORR      LR,R1,#0xFFFFFF00      ; Set EXC_RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
                TST      LR,#0x10               ; Check if extended stack frame
 | 
					                TST      LR,#0x10               ; Check if extended stack frame
 | 
				
			||||||
                IT       EQ
 | 
					                IT       EQ
 | 
				
			||||||
                VLDMIAEQ R0!,{S16-S31}          ;  Restore VFP S16..S31
 | 
					                VLDMIAEQ R0!,{S16-S31}          ;  Restore VFP S16..S31
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
                LDMIA    R0!,{R4-R11}           ; Restore R4..R11
 | 
					                LDMIA    R0!,{R4-R11}           ; Restore R4..R11
 | 
				
			||||||
                MSR      PSP,R0                 ; Set PSP
 | 
					                MSR      PSP,R0                 ; Set PSP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,9 +27,9 @@
 | 
				
			||||||
        .file    "irq_armv8mbl.S"
 | 
					        .file    "irq_armv8mbl.S"
 | 
				
			||||||
        .syntax  unified
 | 
					        .syntax  unified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef  DOMAIN_NS
 | 
					        .ifndef  DOMAIN_NS
 | 
				
			||||||
        .equ     DOMAIN_NS, 0
 | 
					        .equ     DOMAIN_NS, 0
 | 
				
			||||||
#endif
 | 
					        .endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .equ     I_T_RUN_OFS, 20        // osRtxInfo.thread.run offset
 | 
					        .equ     I_T_RUN_OFS, 20        // osRtxInfo.thread.run offset
 | 
				
			||||||
        .equ     TCB_SM_OFS,  48        // TCB.stack_mem offset
 | 
					        .equ     TCB_SM_OFS,  48        // TCB.stack_mem offset
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,15 +27,13 @@
 | 
				
			||||||
        .file    "irq_armv8mml.S"
 | 
					        .file    "irq_armv8mml.S"
 | 
				
			||||||
        .syntax  unified
 | 
					        .syntax  unified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef DOMAIN_NS
 | 
					        .ifndef  DOMAIN_NS
 | 
				
			||||||
        .equ     DOMAIN_NS, 0
 | 
					        .equ     DOMAIN_NS, 0
 | 
				
			||||||
#endif
 | 
					        .endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined (__VFP_FP__) && !defined(__SOFTFP__)
 | 
					        .ifndef  __FPU_USED
 | 
				
			||||||
        .equ     __FPU_USED,  1
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
        .equ     __FPU_USED,  0
 | 
					        .equ     __FPU_USED,  0
 | 
				
			||||||
#endif
 | 
					        .endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .equ     I_T_RUN_OFS, 20        // osRtxInfo.thread.run offset
 | 
					        .equ     I_T_RUN_OFS, 20        // osRtxInfo.thread.run offset
 | 
				
			||||||
        .equ     TCB_SM_OFS,  48        // TCB.stack_mem offset
 | 
					        .equ     TCB_SM_OFS,  48        // TCB.stack_mem offset
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,22 +74,17 @@ SVC_Context:
 | 
				
			||||||
        CBNZ     R1,SVC_ContextSave     // Branch if running thread is not deleted
 | 
					        CBNZ     R1,SVC_ContextSave     // Branch if running thread is not deleted
 | 
				
			||||||
        TST      LR,#0x10               // Check if extended stack frame
 | 
					        TST      LR,#0x10               // Check if extended stack frame
 | 
				
			||||||
        BNE      SVC_ContextSwitch
 | 
					        BNE      SVC_ContextSwitch
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
        LDR      R1,=0xE000EF34         // FPCCR Address
 | 
					        LDR      R1,=0xE000EF34         // FPCCR Address
 | 
				
			||||||
        LDR      R0,[R1]                // Load FPCCR
 | 
					        LDR      R0,[R1]                // Load FPCCR
 | 
				
			||||||
        BIC      R0,R0,#1               // Clear LSPACT (Lazy state)
 | 
					        BIC      R0,R0,#1               // Clear LSPACT (Lazy state)
 | 
				
			||||||
        STR      R0,[R1]                // Store FPCCR
 | 
					        STR      R0,[R1]                // Store FPCCR
 | 
				
			||||||
        B        SVC_ContextSwitch
 | 
					        B        SVC_ContextSwitch
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SVC_ContextSave:
 | 
					SVC_ContextSave:
 | 
				
			||||||
        STMDB    R12!,{R4-R11}          // Save R4..R11
 | 
					        STMDB    R12!,{R4-R11}          // Save R4..R11
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
        TST      LR,#0x10               // Check if extended stack frame
 | 
					        TST      LR,#0x10               // Check if extended stack frame
 | 
				
			||||||
        IT       EQ
 | 
					        IT       EQ
 | 
				
			||||||
        VSTMDBEQ R12!,{S16-S31}         //  Save VFP S16.S31
 | 
					        VSTMDBEQ R12!,{S16-S31}         //  Save VFP S16.S31
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        STR      R12,[R1,#TCB_SP_OFS]   // Store SP
 | 
					        STR      R12,[R1,#TCB_SP_OFS]   // Store SP
 | 
				
			||||||
        STRB     LR, [R1,#TCB_SF_OFS]   // Store stack frame information
 | 
					        STRB     LR, [R1,#TCB_SF_OFS]   // Store stack frame information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -101,11 +96,9 @@ SVC_ContextRestore:
 | 
				
			||||||
        LDR      R0,[R2,#TCB_SP_OFS]    // Load SP
 | 
					        LDR      R0,[R2,#TCB_SP_OFS]    // Load SP
 | 
				
			||||||
        ORR      LR,R1,#0xFFFFFF00      // Set EXC_RETURN
 | 
					        ORR      LR,R1,#0xFFFFFF00      // Set EXC_RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
        TST      LR,#0x10               // Check if extended stack frame
 | 
					        TST      LR,#0x10               // Check if extended stack frame
 | 
				
			||||||
        IT       EQ
 | 
					        IT       EQ
 | 
				
			||||||
        VLDMIAEQ R0!,{S16-S31}          //  Restore VFP S16..S31
 | 
					        VLDMIAEQ R0!,{S16-S31}          //  Restore VFP S16..S31
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
        LDMIA    R0!,{R4-R11}           // Restore R4..R11
 | 
					        LDMIA    R0!,{R4-R11}           // Restore R4..R11
 | 
				
			||||||
        MSR      PSP,R0                 // Set PSP
 | 
					        MSR      PSP,R0                 // Set PSP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -297,5 +297,3 @@ Sys_ContextRestore2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sys_ContextExit
 | 
					Sys_ContextExit
 | 
				
			||||||
                BX       LR                     ; Exit from handler
 | 
					                BX       LR                     ; Exit from handler
 | 
				
			||||||
 | 
					 | 
				
			||||||
                END
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -270,5 +270,3 @@ Sys_ContextRestore2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sys_ContextExit
 | 
					Sys_ContextExit
 | 
				
			||||||
                BX       LR                     ; Exit from handler
 | 
					                BX       LR                     ; Exit from handler
 | 
				
			||||||
 | 
					 | 
				
			||||||
                END
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,22 +74,17 @@ SVC_Context
 | 
				
			||||||
                CBNZ     R1,SVC_ContextSave     ; Branch if running thread is not deleted
 | 
					                CBNZ     R1,SVC_ContextSave     ; Branch if running thread is not deleted
 | 
				
			||||||
                TST      LR,#0x10               ; Check if extended stack frame
 | 
					                TST      LR,#0x10               ; Check if extended stack frame
 | 
				
			||||||
                BNE      SVC_ContextSwitch
 | 
					                BNE      SVC_ContextSwitch
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
                LDR      R1,=0xE000EF34         ; FPCCR Address
 | 
					                LDR      R1,=0xE000EF34         ; FPCCR Address
 | 
				
			||||||
                LDR      R0,[R1]                ; Load FPCCR
 | 
					                LDR      R0,[R1]                ; Load FPCCR
 | 
				
			||||||
                BIC      R0,R0,#1               ; Clear LSPACT (Lazy state)
 | 
					                BIC      R0,R0,#1               ; Clear LSPACT (Lazy state)
 | 
				
			||||||
                STR      R0,[R1]                ; Store FPCCR
 | 
					                STR      R0,[R1]                ; Store FPCCR
 | 
				
			||||||
                B        SVC_ContextSwitch
 | 
					                B        SVC_ContextSwitch
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SVC_ContextSave
 | 
					SVC_ContextSave
 | 
				
			||||||
                STMDB    R12!,{R4-R11}          ; Save R4..R11
 | 
					                STMDB    R12!,{R4-R11}          ; Save R4..R11
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
                TST      LR,#0x10               ; Check if extended stack frame
 | 
					                TST      LR,#0x10               ; Check if extended stack frame
 | 
				
			||||||
                IT       EQ
 | 
					                IT       EQ
 | 
				
			||||||
                VSTMDBEQ R12!,{S16-S31}         ;  Save VFP S16.S31
 | 
					                VSTMDBEQ R12!,{S16-S31}         ;  Save VFP S16.S31
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                STR      R12,[R1,#TCB_SP_OFS]   ; Store SP
 | 
					                STR      R12,[R1,#TCB_SP_OFS]   ; Store SP
 | 
				
			||||||
                STRB     LR, [R1,#TCB_SF_OFS]   ; Store stack frame information
 | 
					                STRB     LR, [R1,#TCB_SF_OFS]   ; Store stack frame information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -101,11 +96,9 @@ SVC_ContextRestore
 | 
				
			||||||
                LDR      R0,[R2,#TCB_SP_OFS]    ; Load SP
 | 
					                LDR      R0,[R2,#TCB_SP_OFS]    ; Load SP
 | 
				
			||||||
                ORR      LR,R1,#0xFFFFFF00      ; Set EXC_RETURN
 | 
					                ORR      LR,R1,#0xFFFFFF00      ; Set EXC_RETURN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __FPU_PRESENT
 | 
					 | 
				
			||||||
                TST      LR,#0x10               ; Check if extended stack frame
 | 
					                TST      LR,#0x10               ; Check if extended stack frame
 | 
				
			||||||
                IT       EQ
 | 
					                IT       EQ
 | 
				
			||||||
                VLDMIAEQ R0!,{S16-S31}          ;  Restore VFP S16..S31
 | 
					                VLDMIAEQ R0!,{S16-S31}          ;  Restore VFP S16..S31
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
                LDMIA    R0!,{R4-R11}           ; Restore R4..R11
 | 
					                LDMIA    R0!,{R4-R11}           ; Restore R4..R11
 | 
				
			||||||
                MSR      PSP,R0                 ; Set PSP
 | 
					                MSR      PSP,R0                 ; Set PSP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,8 +33,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdbool.h>
 | 
					#include <stdbool.h>
 | 
				
			||||||
typedef bool bool_t;
 | 
					typedef bool bool_t;
 | 
				
			||||||
#define FALSE                   (0)
 | 
					#define FALSE                   ((bool_t)0)
 | 
				
			||||||
#define TRUE                    (1)
 | 
					#define TRUE                    ((bool_t)1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef  RTE_CMSIS_RTOS2_RTX5_ARMV8M_NS
 | 
					#ifdef  RTE_CMSIS_RTOS2_RTX5_ARMV8M_NS
 | 
				
			||||||
#define DOMAIN_NS               1
 | 
					#define DOMAIN_NS               1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -125,12 +125,9 @@ static osRtxThread_t os_idle_thread_cb \
 | 
				
			||||||
__attribute__((section(".bss.os.thread.cb")));
 | 
					__attribute__((section(".bss.os.thread.cb")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Idle Thread Stack
 | 
					// Idle Thread Stack
 | 
				
			||||||
#if defined (__CC_ARM)
 | 
					 | 
				
			||||||
static uint64_t os_idle_thread_stack[OS_IDLE_THREAD_STACK_SIZE/8];
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
static uint64_t os_idle_thread_stack[OS_IDLE_THREAD_STACK_SIZE/8] \
 | 
					static uint64_t os_idle_thread_stack[OS_IDLE_THREAD_STACK_SIZE/8] \
 | 
				
			||||||
__attribute__((section(".bss.os.thread.stack")));
 | 
					__attribute__((section(".bss.os.thread.stack")));
 | 
				
			||||||
#endif
 | 
					
 | 
				
			||||||
// Idle Thread Attributes
 | 
					// Idle Thread Attributes
 | 
				
			||||||
static const osThreadAttr_t os_idle_thread_attr = {
 | 
					static const osThreadAttr_t os_idle_thread_attr = {
 | 
				
			||||||
#if defined(OS_IDLE_THREAD_NAME)
 | 
					#if defined(OS_IDLE_THREAD_NAME)
 | 
				
			||||||
| 
						 | 
					@ -184,13 +181,9 @@ __attribute__((section(".data.os.timer.mpi"))) =
 | 
				
			||||||
static osRtxThread_t os_timer_thread_cb \
 | 
					static osRtxThread_t os_timer_thread_cb \
 | 
				
			||||||
__attribute__((section(".bss.os.thread.cb")));
 | 
					__attribute__((section(".bss.os.thread.cb")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined (__CC_ARM)
 | 
					 | 
				
			||||||
static uint64_t os_timer_thread_stack[OS_TIMER_THREAD_STACK_SIZE/8];
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
// Timer Thread Stack
 | 
					// Timer Thread Stack
 | 
				
			||||||
static uint64_t os_timer_thread_stack[OS_TIMER_THREAD_STACK_SIZE/8] \
 | 
					static uint64_t os_timer_thread_stack[OS_TIMER_THREAD_STACK_SIZE/8] \
 | 
				
			||||||
__attribute__((section(".bss.os.thread.stack")));
 | 
					__attribute__((section(".bss.os.thread.stack")));
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Timer Thread Attributes
 | 
					// Timer Thread Attributes
 | 
				
			||||||
static const osThreadAttr_t os_timer_thread_attr = {
 | 
					static const osThreadAttr_t os_timer_thread_attr = {
 | 
				
			||||||
| 
						 | 
					@ -468,7 +461,7 @@ __attribute__((section(".rodata"))) =
 | 
				
			||||||
  0U,
 | 
					  0U,
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
  { &os_isr_queue[0], (uint16_t)(sizeof(os_isr_queue)/sizeof(void *)), 0U },
 | 
					  { &os_isr_queue[0], (uint16_t)(sizeof(os_isr_queue)/sizeof(void *)), 0U },
 | 
				
			||||||
  {
 | 
					  { 
 | 
				
			||||||
    // Memory Pools (Variable Block Size)
 | 
					    // Memory Pools (Variable Block Size)
 | 
				
			||||||
#if ((OS_THREAD_OBJ_MEM != 0) && (OS_THREAD_USER_STACK_SIZE != 0))
 | 
					#if ((OS_THREAD_OBJ_MEM != 0) && (OS_THREAD_USER_STACK_SIZE != 0))
 | 
				
			||||||
    &os_thread_stack[0], sizeof(os_thread_stack),
 | 
					    &os_thread_stack[0], sizeof(os_thread_stack),
 | 
				
			||||||
| 
						 | 
					@ -501,7 +494,7 @@ __attribute__((section(".rodata"))) =
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    &os_mpi_thread,
 | 
					    &os_mpi_thread,
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    NULL,
 | 
					    NULL, 
 | 
				
			||||||
    NULL,
 | 
					    NULL,
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if (OS_TIMER_OBJ_MEM != 0)
 | 
					#if (OS_TIMER_OBJ_MEM != 0)
 | 
				
			||||||
| 
						 | 
					@ -568,113 +561,64 @@ __WEAK void * const osRtxUserSVC[1] = { (void *)0 };
 | 
				
			||||||
// OS Sections
 | 
					// OS Sections
 | 
				
			||||||
// ===========
 | 
					// ===========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__CC_ARM)
 | 
					#if  defined(__CC_ARM) || \
 | 
				
			||||||
__asm void os_cb_sections_wrapper (void) {
 | 
					    (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
 | 
				
			||||||
                EXTERN  ||.bss.os.thread.cb$$Base||     [WEAK]
 | 
					static uint32_t __os_thread_cb_start__    __attribute__((weakref(".bss.os.thread.cb$$Base")));     //lint -esym(728,__os_thread_cb_start__)
 | 
				
			||||||
                EXTERN  ||.bss.os.thread.cb$$Limit||    [WEAK]
 | 
					static uint32_t __os_thread_cb_end__      __attribute__((weakref(".bss.os.thread.cb$$Limit")));    //lint -esym(728,__os_thread_cb_end__)
 | 
				
			||||||
                EXTERN  ||.bss.os.timer.cb$$Base||      [WEAK]
 | 
					static uint32_t __os_timer_cb_start__     __attribute__((weakref(".bss.os.timer.cb$$Base")));      //lint -esym(728,__os_timer_cb_start__)
 | 
				
			||||||
                EXTERN  ||.bss.os.timer.cb$$Limit||     [WEAK]
 | 
					static uint32_t __os_timer_cb_end__       __attribute__((weakref(".bss.os.timer.cb$$Limit")));     //lint -esym(728,__os_timer_cb_end__)
 | 
				
			||||||
                EXTERN  ||.bss.os.evflags.cb$$Base||    [WEAK]
 | 
					static uint32_t __os_evflags_cb_start__   __attribute__((weakref(".bss.os.evflags.cb$$Base")));    //lint -esym(728,__os_evflags_cb_start__)
 | 
				
			||||||
                EXTERN  ||.bss.os.evflags.cb$$Limit||   [WEAK]
 | 
					static uint32_t __os_evflags_cb_end__     __attribute__((weakref(".bss.os.evflags.cb$$Limit")));   //lint -esym(728,__os_evflags_cb_end__)
 | 
				
			||||||
                EXTERN  ||.bss.os.mutex.cb$$Base||      [WEAK]
 | 
					static uint32_t __os_mutex_cb_start__     __attribute__((weakref(".bss.os.mutex.cb$$Base")));      //lint -esym(728,__os_mutex_cb_start__)
 | 
				
			||||||
                EXTERN  ||.bss.os.mutex.cb$$Limit||     [WEAK]
 | 
					static uint32_t __os_mutex_cb_end__       __attribute__((weakref(".bss.os.mutex.cb$$Limit")));     //lint -esym(728,__os_mutex_cb_end__)
 | 
				
			||||||
                EXTERN  ||.bss.os.semaphore.cb$$Base||  [WEAK]
 | 
					static uint32_t __os_semaphore_cb_start__ __attribute__((weakref(".bss.os.semaphore.cb$$Base")));  //lint -esym(728,__os_semaphore_cb_start__)
 | 
				
			||||||
                EXTERN  ||.bss.os.semaphore.cb$$Limit|| [WEAK]
 | 
					static uint32_t __os_semaphore_cb_end__   __attribute__((weakref(".bss.os.semaphore.cb$$Limit"))); //lint -esym(728,__os_semaphore_cb_end__)
 | 
				
			||||||
                EXTERN  ||.bss.os.mempool.cb$$Base||    [WEAK]
 | 
					static uint32_t __os_mempool_cb_start__   __attribute__((weakref(".bss.os.mempool.cb$$Base")));    //lint -esym(728,__os_mempool_cb_start__)
 | 
				
			||||||
                EXTERN  ||.bss.os.mempool.cb$$Limit||   [WEAK]
 | 
					static uint32_t __os_mempool_cb_end__     __attribute__((weakref(".bss.os.mempool.cb$$Limit")));   //lint -esym(728,__os_mempool_cb_end__)
 | 
				
			||||||
                EXTERN  ||.bss.os.msgqueue.cb$$Base||   [WEAK]
 | 
					static uint32_t __os_msgqueue_cb_start__  __attribute__((weakref(".bss.os.msgqueue.cb$$Base")));   //lint -esym(728,__os_msgqueue_cb_start__)
 | 
				
			||||||
                EXTERN  ||.bss.os.msgqueue.cb$$Limit||  [WEAK]
 | 
					static uint32_t __os_msgqueue_cb_end__    __attribute__((weakref(".bss.os.msgqueue.cb$$Limit")));  //lint -esym(728,__os_msgqueue_cb_end__)
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
                AREA    ||.rodata||, DATA, READONLY
 | 
					extern uint32_t __os_thread_cb_start__    __attribute__((weak));
 | 
				
			||||||
                EXPORT  os_cb_sections
 | 
					extern uint32_t __os_thread_cb_end__      __attribute__((weak));
 | 
				
			||||||
os_cb_sections
 | 
					extern uint32_t __os_timer_cb_start__     __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.thread.cb$$Base||
 | 
					extern uint32_t __os_timer_cb_end__       __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.thread.cb$$Limit||
 | 
					extern uint32_t __os_evflags_cb_start__   __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.timer.cb$$Base||
 | 
					extern uint32_t __os_evflags_cb_end__     __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.timer.cb$$Limit||
 | 
					extern uint32_t __os_mutex_cb_start__     __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.evflags.cb$$Base||
 | 
					extern uint32_t __os_mutex_cb_end__       __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.evflags.cb$$Limit||
 | 
					extern uint32_t __os_semaphore_cb_start__ __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.mutex.cb$$Base||
 | 
					extern uint32_t __os_semaphore_cb_end__   __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.mutex.cb$$Limit||
 | 
					extern uint32_t __os_mempool_cb_start__   __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.semaphore.cb$$Base||
 | 
					extern uint32_t __os_mempool_cb_end__     __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.semaphore.cb$$Limit||
 | 
					extern uint32_t __os_msgqueue_cb_start__  __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.mempool.cb$$Base||
 | 
					extern uint32_t __os_msgqueue_cb_end__    __attribute__((weak));
 | 
				
			||||||
                DCD     ||.bss.os.mempool.cb$$Limit||
 | 
					 | 
				
			||||||
                DCD     ||.bss.os.msgqueue.cb$$Base||
 | 
					 | 
				
			||||||
                DCD     ||.bss.os.msgqueue.cb$$Limit||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                AREA    ||.emb_text||, CODE
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
 | 
					 | 
				
			||||||
//lint -e{19} "Linker symbols"
 | 
					 | 
				
			||||||
__asm (
 | 
					 | 
				
			||||||
  ".weakref __os_thread_cb_start__,    .bss.os.thread.cb$$Base\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_thread_cb_end__,      .bss.os.thread.cb$$Limit\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_timer_cb_start__,     .bss.os.timer.cb$$Base\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_timer_cb_end__,       .bss.os.timer.cb$$Limit\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_evflags_cb_start__,   .bss.os.evflags.cb$$Base\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_evflags_cb_end__,     .bss.os.evflags.cb$$Limit\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_mutex_cb_start__,     .bss.os.mutex.cb$$Base\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_mutex_cb_end__,       .bss.os.mutex.cb$$Limit\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_semaphore_cb_start__, .bss.os.semaphore.cb$$Base\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_semaphore_cb_end__,   .bss.os.semaphore.cb$$Limit\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_mempool_cb_start__,   .bss.os.mempool.cb$$Base\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_mempool_cb_end__,     .bss.os.mempool.cb$$Limit\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_msgqueue_cb_start__,  .bss.os.msgqueue.cb$$Base\n\t"
 | 
					 | 
				
			||||||
  ".weakref __os_msgqueue_cb_end__,    .bss.os.msgqueue.cb$$Limit\n\t"
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || \
 | 
					 | 
				
			||||||
    (defined(__GNUC__) && !defined(__CC_ARM))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_thread_cb_start__;    //lint -esym(526,__os_thread_cb_start__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_thread_cb_end__;      //lint -esym(526,__os_thread_cb_end__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_timer_cb_start__;     //lint -esym(526,__os_timer_cb_start__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_timer_cb_end__;       //lint -esym(526,__os_timer_cb_end__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_evflags_cb_start__;   //lint -esym(526,__os_evflags_cb_start__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_evflags_cb_end__;     //lint -esym(526,__os_evflags_cb_end__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_mutex_cb_start__;     //lint -esym(526,__os_mutex_cb_start__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_mutex_cb_end__;       //lint -esym(526,__os_mutex_cb_end__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_semaphore_cb_start__; //lint -esym(526,__os_semaphore_cb_start__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_semaphore_cb_end__;   //lint -esym(526,__os_semaphore_cb_end__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_mempool_cb_start__;   //lint -esym(526,__os_mempool_cb_start__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_mempool_cb_end__;     //lint -esym(526,__os_mempool_cb_end__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_msgqueue_cb_start__;  //lint -esym(526,__os_msgqueue_cb_start__)
 | 
					 | 
				
			||||||
extern __attribute__((weak)) uint32_t __os_msgqueue_cb_end__;    //lint -esym(526,__os_msgqueue_cb_end__)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//lint -e{19} "Global symbol"
 | 
					 | 
				
			||||||
__asm (".global os_cb_sections");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//lint -e{9067} "extern array declared without size"
 | 
					//lint -e{9067} "extern array declared without size"
 | 
				
			||||||
extern const uint32_t os_cb_sections[];
 | 
					extern const uint32_t * const os_cb_sections[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//lint -esym(714,os_cb_sections) "Referenced by debugger"
 | 
					//lint -esym(714,os_cb_sections) "Referenced by debugger"
 | 
				
			||||||
//lint -esym(765,os_cb_sections) "Global scope"
 | 
					//lint -esym(765,os_cb_sections) "Global scope"
 | 
				
			||||||
//lint -e{923} -e{9078} "cast from pointer to unsigned int"
 | 
					const uint32_t * const os_cb_sections[] \
 | 
				
			||||||
const uint32_t os_cb_sections[] \
 | 
					__USED \
 | 
				
			||||||
__attribute__((section(".rodata"))) =
 | 
					__attribute__((section(".rodata"))) =
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  (uint32_t)&__os_thread_cb_start__,
 | 
					  &__os_thread_cb_start__,
 | 
				
			||||||
  (uint32_t)&__os_thread_cb_end__,
 | 
					  &__os_thread_cb_end__,
 | 
				
			||||||
  (uint32_t)&__os_timer_cb_start__,
 | 
					  &__os_timer_cb_start__,
 | 
				
			||||||
  (uint32_t)&__os_timer_cb_end__,
 | 
					  &__os_timer_cb_end__,
 | 
				
			||||||
  (uint32_t)&__os_evflags_cb_start__,
 | 
					  &__os_evflags_cb_start__,
 | 
				
			||||||
  (uint32_t)&__os_evflags_cb_end__,
 | 
					  &__os_evflags_cb_end__,
 | 
				
			||||||
  (uint32_t)&__os_mutex_cb_start__,
 | 
					  &__os_mutex_cb_start__,
 | 
				
			||||||
  (uint32_t)&__os_mutex_cb_end__,
 | 
					  &__os_mutex_cb_end__,
 | 
				
			||||||
  (uint32_t)&__os_semaphore_cb_start__,
 | 
					  &__os_semaphore_cb_start__,
 | 
				
			||||||
  (uint32_t)&__os_semaphore_cb_end__,
 | 
					  &__os_semaphore_cb_end__,
 | 
				
			||||||
  (uint32_t)&__os_mempool_cb_start__,
 | 
					  &__os_mempool_cb_start__,
 | 
				
			||||||
  (uint32_t)&__os_mempool_cb_end__,
 | 
					  &__os_mempool_cb_end__,
 | 
				
			||||||
  (uint32_t)&__os_msgqueue_cb_start__,
 | 
					  &__os_msgqueue_cb_start__,
 | 
				
			||||||
  (uint32_t)&__os_msgqueue_cb_end__
 | 
					  &__os_msgqueue_cb_end__
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// OS Initialization
 | 
					// OS Initialization
 | 
				
			||||||
// =================
 | 
					// =================
 | 
				
			||||||
| 
						 | 
					@ -784,12 +728,11 @@ typedef void *mutex;
 | 
				
			||||||
//lint -e818 "Pointer 'm' could be declared as pointing to const"
 | 
					//lint -e818 "Pointer 'm' could be declared as pointing to const"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Initialize mutex
 | 
					// Initialize mutex
 | 
				
			||||||
#if !defined(__ARMCC_VERSION) || __ARMCC_VERSION < 6010050
 | 
					 | 
				
			||||||
__USED
 | 
					__USED
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
int _mutex_initialize(mutex *m);
 | 
					int _mutex_initialize(mutex *m);
 | 
				
			||||||
__WEAK int _mutex_initialize(mutex *m) {
 | 
					int _mutex_initialize(mutex *m) {
 | 
				
			||||||
  int result;
 | 
					  int result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  *m = osMutexNew(NULL);
 | 
					  *m = osMutexNew(NULL);
 | 
				
			||||||
  if (*m != NULL) {
 | 
					  if (*m != NULL) {
 | 
				
			||||||
    result = 1;
 | 
					    result = 1;
 | 
				
			||||||
| 
						 | 
					@ -801,10 +744,8 @@ __WEAK int _mutex_initialize(mutex *m) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Acquire mutex
 | 
					// Acquire mutex
 | 
				
			||||||
#if !defined(__ARMCC_VERSION) || __ARMCC_VERSION < 6010050
 | 
					 | 
				
			||||||
__USED
 | 
					__USED
 | 
				
			||||||
#endif
 | 
					void _mutex_acquire(mutex *m);
 | 
				
			||||||
__WEAK void _mutex_acquire(mutex *m);
 | 
					 | 
				
			||||||
void _mutex_acquire(mutex *m) {
 | 
					void _mutex_acquire(mutex *m) {
 | 
				
			||||||
  if (os_kernel_is_active() != 0U) {
 | 
					  if (os_kernel_is_active() != 0U) {
 | 
				
			||||||
    (void)osMutexAcquire(*m, osWaitForever);
 | 
					    (void)osMutexAcquire(*m, osWaitForever);
 | 
				
			||||||
| 
						 | 
					@ -812,10 +753,8 @@ void _mutex_acquire(mutex *m) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Release mutex
 | 
					// Release mutex
 | 
				
			||||||
#if !defined(__ARMCC_VERSION) || __ARMCC_VERSION < 6010050
 | 
					 | 
				
			||||||
__USED
 | 
					__USED
 | 
				
			||||||
#endif
 | 
					void _mutex_release(mutex *m);
 | 
				
			||||||
__WEAK void _mutex_release(mutex *m);
 | 
					 | 
				
			||||||
void _mutex_release(mutex *m) {
 | 
					void _mutex_release(mutex *m) {
 | 
				
			||||||
  if (os_kernel_is_active() != 0U) {
 | 
					  if (os_kernel_is_active() != 0U) {
 | 
				
			||||||
    (void)osMutexRelease(*m);
 | 
					    (void)osMutexRelease(*m);
 | 
				
			||||||
| 
						 | 
					@ -823,10 +762,8 @@ void _mutex_release(mutex *m) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Free mutex
 | 
					// Free mutex
 | 
				
			||||||
#if !defined(__ARMCC_VERSION) || __ARMCC_VERSION < 6010050
 | 
					 | 
				
			||||||
__USED
 | 
					__USED
 | 
				
			||||||
#endif
 | 
					void _mutex_free(mutex *m);
 | 
				
			||||||
__WEAK void _mutex_free(mutex *m);
 | 
					 | 
				
			||||||
void _mutex_free(mutex *m) {
 | 
					void _mutex_free(mutex *m) {
 | 
				
			||||||
  (void)osMutexDelete(*m);
 | 
					  (void)osMutexDelete(*m);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,9 +59,12 @@ void osRtxMutexOwnerRelease (os_mutex_t *mutex_list) {
 | 
				
			||||||
        osRtxThreadWaitExit(thread, (uint32_t)osOK, FALSE);
 | 
					        osRtxThreadWaitExit(thread, (uint32_t)osOK, FALSE);
 | 
				
			||||||
        // Thread is the new Mutex owner
 | 
					        // Thread is the new Mutex owner
 | 
				
			||||||
        mutex->owner_thread = thread;
 | 
					        mutex->owner_thread = thread;
 | 
				
			||||||
        mutex->owner_next   = thread->mutex_list;
 | 
					 | 
				
			||||||
        mutex->owner_prev   = NULL;
 | 
					        mutex->owner_prev   = NULL;
 | 
				
			||||||
        thread->mutex_list  = mutex;
 | 
					        mutex->owner_next   = thread->mutex_list;
 | 
				
			||||||
 | 
					        if (thread->mutex_list != NULL) {
 | 
				
			||||||
 | 
					          thread->mutex_list->owner_prev = mutex;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        thread->mutex_list = mutex;
 | 
				
			||||||
        mutex->lock = 1U;
 | 
					        mutex->lock = 1U;
 | 
				
			||||||
        EvrRtxMutexAcquired(mutex, 1U);
 | 
					        EvrRtxMutexAcquired(mutex, 1U);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					@ -194,10 +197,10 @@ static osStatus_t svcRtxMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) {
 | 
				
			||||||
  if (mutex->lock == 0U) {
 | 
					  if (mutex->lock == 0U) {
 | 
				
			||||||
    // Acquire Mutex
 | 
					    // Acquire Mutex
 | 
				
			||||||
    mutex->owner_thread = thread;
 | 
					    mutex->owner_thread = thread;
 | 
				
			||||||
    mutex->owner_next   = thread->mutex_list;
 | 
					 | 
				
			||||||
    mutex->owner_prev   = NULL;
 | 
					    mutex->owner_prev   = NULL;
 | 
				
			||||||
 | 
					    mutex->owner_next   = thread->mutex_list;
 | 
				
			||||||
    if (thread->mutex_list != NULL) {
 | 
					    if (thread->mutex_list != NULL) {
 | 
				
			||||||
        thread->mutex_list->owner_prev = mutex;
 | 
					      thread->mutex_list->owner_prev = mutex;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    thread->mutex_list = mutex;
 | 
					    thread->mutex_list = mutex;
 | 
				
			||||||
    mutex->lock = 1U;
 | 
					    mutex->lock = 1U;
 | 
				
			||||||
| 
						 | 
					@ -320,9 +323,12 @@ static osStatus_t svcRtxMutexRelease (osMutexId_t mutex_id) {
 | 
				
			||||||
      osRtxThreadWaitExit(thread, (uint32_t)osOK, FALSE);
 | 
					      osRtxThreadWaitExit(thread, (uint32_t)osOK, FALSE);
 | 
				
			||||||
      // Thread is the new Mutex owner
 | 
					      // Thread is the new Mutex owner
 | 
				
			||||||
      mutex->owner_thread = thread;
 | 
					      mutex->owner_thread = thread;
 | 
				
			||||||
      mutex->owner_next   = thread->mutex_list;
 | 
					 | 
				
			||||||
      mutex->owner_prev   = NULL;
 | 
					      mutex->owner_prev   = NULL;
 | 
				
			||||||
      thread->mutex_list  = mutex;
 | 
					      mutex->owner_next   = thread->mutex_list;
 | 
				
			||||||
 | 
					      if (thread->mutex_list != NULL) {
 | 
				
			||||||
 | 
					        thread->mutex_list->owner_prev = mutex;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      thread->mutex_list = mutex;
 | 
				
			||||||
      mutex->lock = 1U;
 | 
					      mutex->lock = 1U;
 | 
				
			||||||
      EvrRtxMutexAcquired(mutex, 1U);
 | 
					      EvrRtxMutexAcquired(mutex, 1U);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1184,6 +1184,7 @@ static osStatus_t svcRtxThreadJoin (osThreadId_t thread_id) {
 | 
				
			||||||
    // Suspend current Thread
 | 
					    // Suspend current Thread
 | 
				
			||||||
    if (osRtxThreadWaitEnter(osRtxThreadWaitingJoin, osWaitForever)) {
 | 
					    if (osRtxThreadWaitEnter(osRtxThreadWaitingJoin, osWaitForever)) {
 | 
				
			||||||
      thread->thread_join = osRtxThreadGetRunning();
 | 
					      thread->thread_join = osRtxThreadGetRunning();
 | 
				
			||||||
 | 
					      thread->attr &= ~osThreadJoinable;
 | 
				
			||||||
      EvrRtxThreadJoinPending(thread);
 | 
					      EvrRtxThreadJoinPending(thread);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      EvrRtxThreadError(thread, (int32_t)osErrorResource);
 | 
					      EvrRtxThreadError(thread, (int32_t)osErrorResource);
 | 
				
			||||||
| 
						 | 
					@ -1223,7 +1224,7 @@ static void svcRtxThreadExit (void) {
 | 
				
			||||||
  osRtxThreadSwitch(osRtxThreadListGet(&osRtxInfo.thread.ready));
 | 
					  osRtxThreadSwitch(osRtxThreadListGet(&osRtxInfo.thread.ready));
 | 
				
			||||||
  osRtxThreadSetRunning(NULL);
 | 
					  osRtxThreadSetRunning(NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (((thread->attr & osThreadJoinable) == 0U) || (thread->thread_join != NULL)) {
 | 
					  if ((thread->attr & osThreadJoinable) == 0U) {
 | 
				
			||||||
    osRtxThreadFree(thread);
 | 
					    osRtxThreadFree(thread);
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    // Update Thread State and put it into Terminate Thread list
 | 
					    // Update Thread State and put it into Terminate Thread list
 | 
				
			||||||
| 
						 | 
					@ -1299,7 +1300,7 @@ static osStatus_t svcRtxThreadTerminate (osThreadId_t thread_id) {
 | 
				
			||||||
      osRtxThreadDispatch(NULL);
 | 
					      osRtxThreadDispatch(NULL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (((thread->attr & osThreadJoinable) == 0U) || (thread->thread_join != NULL)) {
 | 
					    if ((thread->attr & osThreadJoinable) == 0U) {
 | 
				
			||||||
      osRtxThreadFree(thread);
 | 
					      osRtxThreadFree(thread);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      // Update Thread State and put it into Terminate Thread list
 | 
					      // Update Thread State and put it into Terminate Thread list
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue