1*0561b2d8STREFOU Felix /** 2*0561b2d8STREFOU Felix ****************************************************************************** 3*0561b2d8STREFOU Felix * @file stm32_wpan_common.h 4*0561b2d8STREFOU Felix * @author MCD Application Team 5*0561b2d8STREFOU Felix * @brief Common file to utilities 6*0561b2d8STREFOU Felix ****************************************************************************** 7*0561b2d8STREFOU Felix * @attention 8*0561b2d8STREFOU Felix * 9*0561b2d8STREFOU Felix * <h2><center>© Copyright (c) 2018 STMicroelectronics. 10*0561b2d8STREFOU Felix * All rights reserved.</center></h2> 11*0561b2d8STREFOU Felix * 12*0561b2d8STREFOU Felix * This software component is licensed by ST under Ultimate Liberty license 13*0561b2d8STREFOU Felix * SLA0044, the "License"; You may not use this file except in compliance with 14*0561b2d8STREFOU Felix * the License. You may obtain a copy of the License at: 15*0561b2d8STREFOU Felix * www.st.com/SLA0044 16*0561b2d8STREFOU Felix * 17*0561b2d8STREFOU Felix ****************************************************************************** 18*0561b2d8STREFOU Felix */ 19*0561b2d8STREFOU Felix 20*0561b2d8STREFOU Felix 21*0561b2d8STREFOU Felix /* Define to prevent recursive inclusion -------------------------------------*/ 22*0561b2d8STREFOU Felix #ifndef __STM32_WPAN_COMMON_H 23*0561b2d8STREFOU Felix #define __STM32_WPAN_COMMON_H 24*0561b2d8STREFOU Felix 25*0561b2d8STREFOU Felix #ifdef __cplusplus 26*0561b2d8STREFOU Felix extern "C" { 27*0561b2d8STREFOU Felix #endif 28*0561b2d8STREFOU Felix 29*0561b2d8STREFOU Felix #if defined ( __CC_ARM ) 30*0561b2d8STREFOU Felix #define __ASM __asm /*!< asm keyword for ARM Compiler */ 31*0561b2d8STREFOU Felix #define __INLINE __inline /*!< inline keyword for ARM Compiler */ 32*0561b2d8STREFOU Felix #define __STATIC_INLINE static __inline 33*0561b2d8STREFOU Felix #elif defined ( __ICCARM__ ) 34*0561b2d8STREFOU Felix #define __ASM __asm /*!< asm keyword for IAR Compiler */ 35*0561b2d8STREFOU Felix #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ 36*0561b2d8STREFOU Felix #define __STATIC_INLINE static inline 37*0561b2d8STREFOU Felix #elif defined ( __GNUC__ ) 38*0561b2d8STREFOU Felix #define __ASM __asm /*!< asm keyword for GNU Compiler */ 39*0561b2d8STREFOU Felix #define __INLINE inline /*!< inline keyword for GNU Compiler */ 40*0561b2d8STREFOU Felix #define __STATIC_INLINE static inline 41*0561b2d8STREFOU Felix #endif 42*0561b2d8STREFOU Felix 43*0561b2d8STREFOU Felix #include <stdint.h> 44*0561b2d8STREFOU Felix #include <string.h> 45*0561b2d8STREFOU Felix #include <stdio.h> 46*0561b2d8STREFOU Felix #include <stdlib.h> 47*0561b2d8STREFOU Felix #include <stdarg.h> 48*0561b2d8STREFOU Felix #include "cmsis_compiler.h" 49*0561b2d8STREFOU Felix 50*0561b2d8STREFOU Felix /* -------------------------------- * 51*0561b2d8STREFOU Felix * Basic definitions * 52*0561b2d8STREFOU Felix * -------------------------------- */ 53*0561b2d8STREFOU Felix 54*0561b2d8STREFOU Felix #undef NULL 55*0561b2d8STREFOU Felix #define NULL 0U 56*0561b2d8STREFOU Felix 57*0561b2d8STREFOU Felix #undef FALSE 58*0561b2d8STREFOU Felix #define FALSE 0U 59*0561b2d8STREFOU Felix 60*0561b2d8STREFOU Felix #undef TRUE 61*0561b2d8STREFOU Felix #define TRUE (!0U) 62*0561b2d8STREFOU Felix 63*0561b2d8STREFOU Felix /* -------------------------------- * 64*0561b2d8STREFOU Felix * Critical Section definition * 65*0561b2d8STREFOU Felix * -------------------------------- */ 66*0561b2d8STREFOU Felix #undef BACKUP_PRIMASK 67*0561b2d8STREFOU Felix #define BACKUP_PRIMASK() uint32_t primask_bit= __get_PRIMASK() 68*0561b2d8STREFOU Felix 69*0561b2d8STREFOU Felix #undef DISABLE_IRQ 70*0561b2d8STREFOU Felix #define DISABLE_IRQ() __disable_irq() 71*0561b2d8STREFOU Felix 72*0561b2d8STREFOU Felix #undef RESTORE_PRIMASK 73*0561b2d8STREFOU Felix #define RESTORE_PRIMASK() __set_PRIMASK(primask_bit) 74*0561b2d8STREFOU Felix 75*0561b2d8STREFOU Felix /* -------------------------------- * 76*0561b2d8STREFOU Felix * Macro delimiters * 77*0561b2d8STREFOU Felix * -------------------------------- */ 78*0561b2d8STREFOU Felix #undef M_BEGIN 79*0561b2d8STREFOU Felix #define M_BEGIN do { 80*0561b2d8STREFOU Felix 81*0561b2d8STREFOU Felix #undef M_END 82*0561b2d8STREFOU Felix #define M_END } while(0) 83*0561b2d8STREFOU Felix 84*0561b2d8STREFOU Felix /* -------------------------------- * 85*0561b2d8STREFOU Felix * Some useful macro definitions * 86*0561b2d8STREFOU Felix * -------------------------------- */ 87*0561b2d8STREFOU Felix #undef MAX 88*0561b2d8STREFOU Felix #define MAX( x, y ) (((x)>(y))?(x):(y)) 89*0561b2d8STREFOU Felix 90*0561b2d8STREFOU Felix #undef MIN 91*0561b2d8STREFOU Felix #define MIN( x, y ) (((x)<(y))?(x):(y)) 92*0561b2d8STREFOU Felix 93*0561b2d8STREFOU Felix #undef MODINC 94*0561b2d8STREFOU Felix #define MODINC( a, m ) M_BEGIN (a)++; if ((a)>=(m)) (a)=0; M_END 95*0561b2d8STREFOU Felix 96*0561b2d8STREFOU Felix #undef MODDEC 97*0561b2d8STREFOU Felix #define MODDEC( a, m ) M_BEGIN if ((a)==0) (a)=(m); (a)--; M_END 98*0561b2d8STREFOU Felix 99*0561b2d8STREFOU Felix #undef MODADD 100*0561b2d8STREFOU Felix #define MODADD( a, b, m ) M_BEGIN (a)+=(b); if ((a)>=(m)) (a)-=(m); M_END 101*0561b2d8STREFOU Felix 102*0561b2d8STREFOU Felix #undef MODSUB 103*0561b2d8STREFOU Felix #define MODSUB( a, b, m ) MODADD( a, (m)-(b), m ) 104*0561b2d8STREFOU Felix 105*0561b2d8STREFOU Felix #undef ALIGN 106*0561b2d8STREFOU Felix #ifdef WIN32 107*0561b2d8STREFOU Felix #define ALIGN(n) 108*0561b2d8STREFOU Felix #else 109*0561b2d8STREFOU Felix #define ALIGN(n) __attribute__((aligned(n))) 110*0561b2d8STREFOU Felix #endif 111*0561b2d8STREFOU Felix 112*0561b2d8STREFOU Felix #undef PAUSE 113*0561b2d8STREFOU Felix #define PAUSE( t ) M_BEGIN \ 114*0561b2d8STREFOU Felix volatile int _i; \ 115*0561b2d8STREFOU Felix for ( _i = t; _i > 0; _i -- ); \ 116*0561b2d8STREFOU Felix M_END 117*0561b2d8STREFOU Felix #undef DIVF 118*0561b2d8STREFOU Felix #define DIVF( x, y ) ((x)/(y)) 119*0561b2d8STREFOU Felix 120*0561b2d8STREFOU Felix #undef DIVC 121*0561b2d8STREFOU Felix #define DIVC( x, y ) (((x)+(y)-1)/(y)) 122*0561b2d8STREFOU Felix 123*0561b2d8STREFOU Felix #undef DIVR 124*0561b2d8STREFOU Felix #define DIVR( x, y ) (((x)+((y)/2))/(y)) 125*0561b2d8STREFOU Felix 126*0561b2d8STREFOU Felix #undef SHRR 127*0561b2d8STREFOU Felix #define SHRR( x, n ) ((((x)>>((n)-1))+1)>>1) 128*0561b2d8STREFOU Felix 129*0561b2d8STREFOU Felix #undef BITN 130*0561b2d8STREFOU Felix #define BITN( w, n ) (((w)[(n)/32] >> ((n)%32)) & 1) 131*0561b2d8STREFOU Felix 132*0561b2d8STREFOU Felix #undef BITNSET 133*0561b2d8STREFOU Felix #define BITNSET( w, n, b ) M_BEGIN (w)[(n)/32] |= ((U32)(b))<<((n)%32); M_END 134*0561b2d8STREFOU Felix 135*0561b2d8STREFOU Felix /* -------------------------------- * 136*0561b2d8STREFOU Felix * Section attribute * 137*0561b2d8STREFOU Felix * -------------------------------- */ 138*0561b2d8STREFOU Felix #undef PLACE_IN_SECTION 139*0561b2d8STREFOU Felix #define PLACE_IN_SECTION( __x__ ) __attribute__((section (__x__))) 140*0561b2d8STREFOU Felix 141*0561b2d8STREFOU Felix /* ----------------------------------- * 142*0561b2d8STREFOU Felix * Packed usage (compiler dependent) * 143*0561b2d8STREFOU Felix * ----------------------------------- */ 144*0561b2d8STREFOU Felix #undef PACKED__ 145*0561b2d8STREFOU Felix #undef PACKED_STRUCT 146*0561b2d8STREFOU Felix 147*0561b2d8STREFOU Felix #if defined ( __CC_ARM ) 148*0561b2d8STREFOU Felix #if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050U) 149*0561b2d8STREFOU Felix #define PACKED__ __attribute__((packed)) 150*0561b2d8STREFOU Felix #define PACKED_STRUCT struct PACKED__ 151*0561b2d8STREFOU Felix #else 152*0561b2d8STREFOU Felix #define PACKED__(TYPE) __packed TYPE 153*0561b2d8STREFOU Felix #define PACKED_STRUCT PACKED__(struct) 154*0561b2d8STREFOU Felix #endif 155*0561b2d8STREFOU Felix #elif defined ( __GNUC__ ) 156*0561b2d8STREFOU Felix #define PACKED__ __attribute__((packed)) 157*0561b2d8STREFOU Felix #define PACKED_STRUCT struct PACKED__ 158*0561b2d8STREFOU Felix #elif defined (__ICCARM__) 159*0561b2d8STREFOU Felix #define PACKED_STRUCT __packed struct 160*0561b2d8STREFOU Felix #elif 161*0561b2d8STREFOU Felix #define PACKED_STRUCT __packed struct 162*0561b2d8STREFOU Felix #endif 163*0561b2d8STREFOU Felix 164*0561b2d8STREFOU Felix #ifdef __cplusplus 165*0561b2d8STREFOU Felix } 166*0561b2d8STREFOU Felix #endif 167*0561b2d8STREFOU Felix 168*0561b2d8STREFOU Felix #endif /*__STM32_WPAN_COMMON_H */ 169*0561b2d8STREFOU Felix 170*0561b2d8STREFOU Felix /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 171