xref: /btstack/port/stm32-wb55xx-nucleo-freertos/Middlewares/STM32_WPAN/stm32_wpan_common.h (revision 0561b2d8d5dba972c7daa57d5e677f7a1327edfd)
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>&copy; 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