1 /**
2 ******************************************************************************
3 * @file stm32wb0x_ll_radio_timer.h
4 * @author GPM WBL Application Team
5 * @brief Radio Timer LL module
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2024 STMicroelectronics.
10 * All rights reserved.
11 *
12 * This software is licensed under terms that can be found in the LICENSE file
13 * in the root directory of this software component.
14 * If no LICENSE file comes with this software, it is provided AS-IS.
15 *
16 ******************************************************************************
17 */
18
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32WB0x_LL_RADIO_TIMER_H
21 #define STM32WB0x_LL_RADIO_TIMER_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28
29 /** @addtogroup STM32WB0x_LL_Driver
30 * @{
31 */
32
33 /** @addtogroup RADIO_TIMER_LL
34 * @{
35 */
36
37 /* Private types -------------------------------------------------------------*/
38 /* Private variables ---------------------------------------------------------*/
39 /* Private constants ---------------------------------------------------------*/
40 /* Private macros ------------------------------------------------------------*/
41 /* Exported types ------------------------------------------------------------*/
42 /* Exported constants --------------------------------------------------------*/
43
44 /** @defgroup RADIO_TIMER_LL_TIMERS Radio & Wakeup Timer definitions
45 * @{
46 */
47 #define LL_RADIO_BLE_WAKEUP_TIMER 0x00000000U
48 #define LL_RADIO_CPU_WAKEUP_TIMER 0x00000001U
49 #define LL_RADIO_TIMER_1 0x00000002U
50 #define LL_RADIO_TIMER_2 0x00000003U
51 /**
52 * @}
53 */
54
55 /** @defgroup RADIO_TIMER_LL_TIMERS_FLAG Flag Defines
56 * @{
57 */
58 #define LL_RADIO_TIMECAPTURETRIGF BLUE_STATUSREG_TIMECAPTURETRIG
59 /**
60 * @}
61 */
62
63 /** @defgroup RADIO_TIMER_LL_TIMERS_INT Interrupt Defines
64 * @{
65 */
66 #define LL_RADIO_BLE_WAKEUP_IT WAKEUP_WAKEUP_BLE_IRQ_ENABLE_WAKEUP_IT
67 #define LL_RADIO_CPU_WAKEUP_IT WAKEUP_WAKEUP_CM0_IRQ_ENABLE_WAKEUP_IT
68 /**
69 * @}
70 */
71
72 /* Exported macro ------------------------------------------------------------*/
73 /* Exported functions --------------------------------------------------------*/
74 /** @defgroup RADIO_TIMER_LL_Exported_Functions Radio Timer Exported Functions
75 * @{
76 */
77
78 /** @defgroup RADIO_TIMER_LL_EF_Radio_Timer_Configuration Radio Timer configuration
79 * @{
80 */
81
82 /**
83 * @brief Enable Radio Timer1.
84 * @rmtoll TIMEOUTDESTREG DESTINATION LL_RADIO_TIMER_EnableTimer1
85 * @param BLUEx Radio Timer instance
86 * @retval None
87 */
LL_RADIO_TIMER_EnableTimer1(BLUE_TypeDef * BLUEx)88 __STATIC_INLINE void LL_RADIO_TIMER_EnableTimer1(BLUE_TypeDef *BLUEx)
89 {
90 MODIFY_REG_FIELD(BLUEx->TIMEOUTDESTREG, BLUE_TIMEOUTDESTREG_DESTINATION, LL_RADIO_TIMER_1);
91 }
92
93 /**
94 * @brief Disable Radio Timer1.
95 * @rmtoll TIMEOUTDESTREG DESTINATION LL_RADIO_TIMER_DisableTimer1
96 * @param BLUEx Radio Timer instance
97 * @retval None
98 */
LL_RADIO_TIMER_DisableTimer1(BLUE_TypeDef * BLUEx)99 __STATIC_INLINE void LL_RADIO_TIMER_DisableTimer1(BLUE_TypeDef *BLUEx)
100 {
101 MODIFY_REG_FIELD(BLUEx->TIMEOUTDESTREG, BLUE_TIMEOUTDESTREG_DESTINATION, 0);
102 }
103
104 /**
105 * @brief Indicates if Radio Timer1 is enabled.
106 * @rmtoll TIMEOUTDESTREG DESTINATION LL_RADIO_TIMER_IsEnabledTimer1
107 * @param BLUEx Radio Timer instance
108 * @retval State of bit (1 or 0).
109 */
LL_RADIO_TIMER_IsEnabledTimer1(BLUE_TypeDef * BLUEx)110 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledTimer1(BLUE_TypeDef *BLUEx)
111 {
112 return ((READ_BIT(BLUEx->TIMEOUTDESTREG, BLUE_TIMEOUTDESTREG_DESTINATION) == (LL_RADIO_TIMER_1)) ? 1UL : 0UL);
113 }
114
115 /**
116 * @brief Enable Radio Timer2.
117 * @rmtoll TIMEOUTDESTREG DESTINATION LL_RADIO_TIMER_EnableTimer2
118 * @param BLUEx Radio Timer instance
119 * @retval None
120 */
LL_RADIO_TIMER_EnableTimer2(BLUE_TypeDef * BLUEx)121 __STATIC_INLINE void LL_RADIO_TIMER_EnableTimer2(BLUE_TypeDef *BLUEx)
122 {
123 MODIFY_REG_FIELD(BLUEx->TIMEOUTDESTREG, BLUE_TIMEOUTDESTREG_DESTINATION, LL_RADIO_TIMER_2);
124 }
125
126 /**
127 * @brief Disable Radio Timer2.
128 * @rmtoll TIMEOUTDESTREG DESTINATION LL_RADIO_TIMER_DisableTimer2
129 * @param BLUEx Radio Timer instance
130 * @retval None
131 */
LL_RADIO_TIMER_DisableTimer2(BLUE_TypeDef * BLUEx)132 __STATIC_INLINE void LL_RADIO_TIMER_DisableTimer2(BLUE_TypeDef *BLUEx)
133 {
134 MODIFY_REG_FIELD(BLUEx->TIMEOUTDESTREG, BLUE_TIMEOUTDESTREG_DESTINATION, 0);
135 }
136
137 /**
138 * @brief Indicates if Radio Timer2 is enabled.
139 * @rmtoll TIMEOUTDESTREG DESTINATION LL_RADIO_TIMER_IsEnabledTimer2
140 * @param BLUEx Radio Timer instance
141 * @retval State of bit (1 or 0).
142 */
LL_RADIO_TIMER_IsEnabledTimer2(BLUE_TypeDef * BLUEx)143 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledTimer2(BLUE_TypeDef *BLUEx)
144 {
145 return ((READ_BIT(BLUEx->TIMEOUTDESTREG, BLUE_TIMEOUTDESTREG_DESTINATION) == (LL_RADIO_TIMER_2)) ? 1UL : 0UL);
146 }
147
148 /**
149 * @brief Set the Radio Timer Timeout. Time units in microseconds for Timer2
150 * or in periods of 512 kHz clock for Timer1 (Interpolated Time).
151 * @param BLUEx Radio Timer instance
152 * @param timeout
153 * @retval None
154 */
LL_RADIO_TIMER_SetTimeout(BLUE_TypeDef * BLUEx,uint32_t timeout)155 __STATIC_INLINE void LL_RADIO_TIMER_SetTimeout(BLUE_TypeDef *BLUEx, uint32_t timeout)
156 {
157 WRITE_REG(BLUEx->TIMEOUTREG, timeout);
158 }
159
160 /**
161 * @brief Get the Radio Timer Timeout. Time units in microseconds for Timer2
162 * or in periods of 512 kHz clock for Timer1 (Interpolated Time).
163 * @param BLUEx Radio Timer instance
164 * @retval Timeout configured
165 */
LL_RADIO_TIMER_GetTimeout(BLUE_TypeDef * BLUEx)166 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetTimeout(BLUE_TypeDef *BLUEx)
167 {
168 return (uint32_t)(READ_REG(BLUEx->TIMEOUTREG));
169 }
170
171 /**
172 * @brief Get the Radio Timer value from the beginning of a new Bluetooth LE sequence.
173 * The granularity is the interpolated absolute time.
174 * @param BLUEx Radio Timer instance
175 * @retval Time from the beginning of a new BLE sequence
176 */
LL_RADIO_TIMER_GetTimerCapture(BLUE_TypeDef * BLUEx)177 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetTimerCapture(BLUE_TypeDef *BLUEx)
178 {
179 return (uint32_t)(READ_REG(BLUEx->TIMERCAPTUREREG));
180 }
181
182 /**
183 * @}
184 */
185
186 /** @defgroup RADIO_TIMER_LL_EF_Wakeup_Timer_Configuration Radio Wakeup Timer configuration
187 * @{
188 */
189
190 /**
191 * @brief Enable Radio BLE Wakeup Timer.
192 * @rmtoll BLUE_SLEEP_REQUEST_MODE BLE_WAKEUP_EN LL_RADIO_TIMER_EnableBLEWakeupTimer
193 * @param WAKEUPx Radio Timer instance
194 * @retval None
195 */
LL_RADIO_TIMER_EnableBLEWakeupTimer(WAKEUP_TypeDef * WAKEUPx)196 __STATIC_INLINE void LL_RADIO_TIMER_EnableBLEWakeupTimer(WAKEUP_TypeDef *WAKEUPx)
197 {
198 SET_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_BLE_WAKEUP_EN);
199 }
200
201 /**
202 * @brief Disable Radio BLE Wakeup Timer.
203 * @rmtoll BLUE_SLEEP_REQUEST_MODE BLE_WAKEUP_EN LL_RADIO_TIMER_DisableBLEWakeupTimer
204 * @param WAKEUPx Radio Timer instance
205 * @retval None
206 */
LL_RADIO_TIMER_DisableBLEWakeupTimer(WAKEUP_TypeDef * WAKEUPx)207 __STATIC_INLINE void LL_RADIO_TIMER_DisableBLEWakeupTimer(WAKEUP_TypeDef *WAKEUPx)
208 {
209 CLEAR_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_BLE_WAKEUP_EN);
210 }
211
212 /**
213 * @brief Indicates if BLE Wakeup Timer is enabled.
214 * @rmtoll BLUE_SLEEP_REQUEST_MODE BLE_WAKEUP_EN LL_RADIO_TIMER_IsEnabledBLEWakeupTimer
215 * @param WAKEUPx Radio Timer instance
216 * @retval State of bit (1 or 0).
217 */
LL_RADIO_TIMER_IsEnabledBLEWakeupTimer(WAKEUP_TypeDef * WAKEUPx)218 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledBLEWakeupTimer(WAKEUP_TypeDef *WAKEUPx)
219 {
220 return ((READ_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_BLE_WAKEUP_EN) == (WAKEUP_BLUE_SLEEP_REQUEST_MODE_BLE_WAKEUP_EN)) ? 1UL : 0UL);
221 }
222
223 /**
224 * @brief Enable Radio CPU Wakeup Timer.
225 * @rmtoll CM0_SLEEP_REQUEST_MODE CPU_WAKEUP_EN LL_RADIO_TIMER_EnableCPUWakeupTimer
226 * @param WAKEUPx Radio Timer instance
227 * @retval None
228 */
LL_RADIO_TIMER_EnableCPUWakeupTimer(WAKEUP_TypeDef * WAKEUPx)229 __STATIC_INLINE void LL_RADIO_TIMER_EnableCPUWakeupTimer(WAKEUP_TypeDef *WAKEUPx)
230 {
231 SET_BIT(WAKEUPx->CM0_SLEEP_REQUEST_MODE, WAKEUP_CM0_SLEEP_REQUEST_MODE_CPU_WAKEUP_EN);
232 }
233
234 /**
235 * @brief Disable Radio CPU Wakeup Timer.
236 * @rmtoll CM0_SLEEP_REQUEST_MODE CPU_WAKEUP_EN LL_RADIO_TIMER_DisableCPUWakeupTimer
237 * @param WAKEUPx Radio Timer instance
238 * @retval None
239 */
LL_RADIO_TIMER_DisableCPUWakeupTimer(WAKEUP_TypeDef * WAKEUPx)240 __STATIC_INLINE void LL_RADIO_TIMER_DisableCPUWakeupTimer(WAKEUP_TypeDef *WAKEUPx)
241 {
242 CLEAR_BIT(WAKEUPx->CM0_SLEEP_REQUEST_MODE, WAKEUP_CM0_SLEEP_REQUEST_MODE_CPU_WAKEUP_EN);
243 }
244
245 /**
246 * @brief Indicates if CPU Wakeup Timer is enabled.
247 * @rmtoll CM0_SLEEP_REQUEST_MODE CPU_WAKEUP_EN LL_RADIO_TIMER_IsEnabledCPUWakeupTimer
248 * @param WAKEUPx Radio Timer instance
249 * @retval State of bit (1 or 0).
250 */
LL_RADIO_TIMER_IsEnabledCPUWakeupTimer(WAKEUP_TypeDef * WAKEUPx)251 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledCPUWakeupTimer(WAKEUP_TypeDef *WAKEUPx)
252 {
253 return ((READ_BIT(WAKEUPx->CM0_SLEEP_REQUEST_MODE, WAKEUP_CM0_SLEEP_REQUEST_MODE_CPU_WAKEUP_EN) == (WAKEUP_CM0_SLEEP_REQUEST_MODE_CPU_WAKEUP_EN)) ? 1UL : 0UL);
254 }
255
256 /**
257 * @brief Set the Wakeup Offset to let time to power and clocks to settle (Granularity slow clock period).
258 * @param WAKEUPx Radio Timer instance
259 * @param Time Time in slow clock period
260 * @retval None
261 */
LL_RADIO_TIMER_SetWakeupOffset(WAKEUP_TypeDef * WAKEUPx,uint8_t Time)262 __STATIC_INLINE void LL_RADIO_TIMER_SetWakeupOffset(WAKEUP_TypeDef *WAKEUPx, uint8_t Time)
263 {
264 WRITE_REG(WAKEUPx->WAKEUP_OFFSET[0], (Time & 0xFF));
265 }
266
267 /**
268 * @brief Get the Wakeup Offset (Granularity slow clock period).
269 * @param WAKEUPx Radio Timer instance
270 * @retval Wakeup Time Offset (Granulary slow clock period, size 8 bit)
271 */
LL_RADIO_TIMER_GetWakeupOffset(WAKEUP_TypeDef * WAKEUPx)272 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetWakeupOffset(WAKEUP_TypeDef *WAKEUPx)
273 {
274 return (uint32_t)(READ_REG(WAKEUPx->WAKEUP_OFFSET[0] & 0xFF));
275 }
276
277 /**
278 * @brief Set the BLE Wakeup Time (Granularity unit is in 16 x slow clock period).
279 * @param WAKEUPx Radio Timer instance
280 * @param Time in 16 x slow clock period
281 * @retval None
282 */
LL_RADIO_TIMER_SetBLEWakeupTime(WAKEUP_TypeDef * WAKEUPx,uint32_t Time)283 __STATIC_INLINE void LL_RADIO_TIMER_SetBLEWakeupTime(WAKEUP_TypeDef *WAKEUPx, uint32_t Time)
284 {
285 WRITE_REG(WAKEUPx->BLUE_WAKEUP_TIME, Time);
286 }
287
288 /**
289 * @brief Get the BLE Wakeup Time (Granularity unit is 16 x slow clock period).
290 * @param WAKEUPx Radio Timer instance
291 * @retval BLE Wakeup Time
292 */
LL_RADIO_TIMER_GetBLEWakeupTime(WAKEUP_TypeDef * WAKEUPx)293 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetBLEWakeupTime(WAKEUP_TypeDef *WAKEUPx)
294 {
295 return (uint32_t)(READ_REG(WAKEUPx->BLUE_WAKEUP_TIME));
296 }
297
298 /**
299 * @brief Set the CPU Wakeup Time (Granularity unit is slow clock period).
300 * Only the first 28 MSB bit are considered.
301 * @param WAKEUPx Radio Timer instance
302 * @param Time in slow clock period
303 * @retval None
304 */
LL_RADIO_TIMER_SetCPUWakeupTime(WAKEUP_TypeDef * WAKEUPx,uint32_t Time)305 __STATIC_INLINE void LL_RADIO_TIMER_SetCPUWakeupTime(WAKEUP_TypeDef *WAKEUPx, uint32_t Time)
306 {
307 WRITE_REG(WAKEUPx->CM0_WAKEUP_TIME, Time);
308 }
309
310 /**
311 * @brief Get the CPU Wakeup Time (Granularity unit is slow clock period).
312 * @param WAKEUPx Radio Timer instance
313 * @retval CPU Wakeup Time
314 */
LL_RADIO_TIMER_GetCPUWakeupTime(WAKEUP_TypeDef * WAKEUPx)315 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetCPUWakeupTime(WAKEUP_TypeDef *WAKEUPx)
316 {
317 return (uint32_t)(READ_REG(WAKEUPx->CM0_WAKEUP_TIME));
318 }
319
320 /**
321 * @brief Get the Absolute Time of the wakeup timer (Granularity unit is 16 x slow clock period).
322 * @param WAKEUPx Radio Timer instance
323 * @retval Absolute Time of Wakeup Timer
324 */
LL_RADIO_TIMER_GetAbsoluteTime(WAKEUP_TypeDef * WAKEUPx)325 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetAbsoluteTime(WAKEUP_TypeDef *WAKEUPx)
326 {
327 return (uint32_t)(READ_REG(WAKEUPx->ABSOLUTE_TIME));
328 }
329
330 /**
331 * @}
332 */
333
334
335 /** @defgroup RADIO_TIMER_LL_EF_Low_Power_Timer_Configuration Radio Timer Low Power configuration
336 * @{
337 */
338
339 /**
340 * @brief Enable the Low Power Mode for the Wakeup Radio Timers.
341 * @rmtoll BLUE_SLEEP_REQUEST_MODE SLEEP_EN LL_RADIO_TIMER_EnableWakeupTimerLowPowerMode
342 * @param WAKEUPx Radio Timer instance
343 * @retval None
344 */
LL_RADIO_TIMER_EnableWakeupTimerLowPowerMode(WAKEUP_TypeDef * WAKEUPx)345 __STATIC_INLINE void LL_RADIO_TIMER_EnableWakeupTimerLowPowerMode(WAKEUP_TypeDef *WAKEUPx)
346 {
347 SET_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_SLEEP_EN);
348 }
349
350 /**
351 * @brief Disable the Low Power Mode for the Wakeup Radio Timers.
352 * @rmtoll BLUE_SLEEP_REQUEST_MODE SLEEP_EN LL_RADIO_TIMER_DisableWakeupTimerLowPowerMode
353 * @param WAKEUPx Radio Timer instance
354 * @retval None
355 */
LL_RADIO_TIMER_DisableWakeupTimerLowPowerMode(WAKEUP_TypeDef * WAKEUPx)356 __STATIC_INLINE void LL_RADIO_TIMER_DisableWakeupTimerLowPowerMode(WAKEUP_TypeDef *WAKEUPx)
357 {
358 CLEAR_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_SLEEP_EN);
359 }
360
361 /**
362 * @brief Indicates if Wakeup Radio Timer Low Power Mode is enabled.
363 * @rmtoll BLUE_SLEEP_REQUEST_MODE SLEEP_EN LL_RADIO_TIMER_IsEnabledWakeupTimerLowPowerMode
364 * @param WAKEUPx Radio Timer instance
365 * @retval State of bit (1 or 0).
366 */
LL_RADIO_TIMER_IsEnabledWakeupTimerLowPowerMode(WAKEUP_TypeDef * WAKEUPx)367 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledWakeupTimerLowPowerMode(WAKEUP_TypeDef *WAKEUPx)
368 {
369 return ((READ_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_SLEEP_EN) == (WAKEUP_BLUE_SLEEP_REQUEST_MODE_SLEEP_EN)) ? 1UL : 0UL);
370 }
371
372 /**
373 * @brief Enable the SoC to go in low power mode always whatever is the radio status.
374 * @rmtoll BLUE_SLEEP_REQUEST_MODE FORCE_SLEEPING LL_RADIO_TIMER_EnableBLEWakeupTimerForceSleeping
375 * @param WAKEUPx Radio Timer instance
376 * @retval None
377 */
LL_RADIO_TIMER_EnableBLEWakeupTimerForceSleeping(WAKEUP_TypeDef * WAKEUPx)378 __STATIC_INLINE void LL_RADIO_TIMER_EnableBLEWakeupTimerForceSleeping(WAKEUP_TypeDef *WAKEUPx)
379 {
380 SET_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_FORCE_SLEEPING);
381 }
382
383 /**
384 * @brief Disable the SoC to go in low power mode always.
385 * @rmtoll BLUE_SLEEP_REQUEST_MODE FORCE_SLEEPING LL_RADIO_TIMER_DisableBLEWakeupTimerForceSleeping
386 * @param WAKEUPx Radio Timer instance
387 * @retval None
388 */
LL_RADIO_TIMER_DisableBLEWakeupTimerForceSleeping(WAKEUP_TypeDef * WAKEUPx)389 __STATIC_INLINE void LL_RADIO_TIMER_DisableBLEWakeupTimerForceSleeping(WAKEUP_TypeDef *WAKEUPx)
390 {
391 CLEAR_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_FORCE_SLEEPING);
392 }
393
394 /**
395 * @brief Indicates if BLUE Wakeup Radio Timer Force Sleeping Mode is enabled.
396 * @rmtoll BLUE_SLEEP_REQUEST_MODE FORCE_SLEEPING LL_RADIO_TIMER_IsEnabledBLEWakeupTimerForceSleeping
397 * @param WAKEUPx Radio Timer instance
398 * @retval State of bit (1 or 0).
399 */
LL_RADIO_TIMER_IsEnabledBLEWakeupTimerForceSleeping(WAKEUP_TypeDef * WAKEUPx)400 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledBLEWakeupTimerForceSleeping(WAKEUP_TypeDef *WAKEUPx)
401 {
402 return ((READ_BIT(WAKEUPx->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_FORCE_SLEEPING) == (WAKEUP_BLUE_SLEEP_REQUEST_MODE_FORCE_SLEEPING)) ? 1UL : 0UL);
403 }
404
405 /**
406 * @brief Enable the CPU to be considered always as sleeping by the wakeup block.
407 * @rmtoll CM0_SLEEP_REQUEST_MODE FORCE_SLEEPING LL_RADIO_TIMER_EnableCPUWakeupTimerForceSleeping
408 * @param WAKEUPx Radio Timer instance
409 * @retval None
410 */
LL_RADIO_TIMER_EnableCPUWakeupTimerForceSleeping(WAKEUP_TypeDef * WAKEUPx)411 __STATIC_INLINE void LL_RADIO_TIMER_EnableCPUWakeupTimerForceSleeping(WAKEUP_TypeDef *WAKEUPx)
412 {
413 SET_BIT(WAKEUPx->CM0_SLEEP_REQUEST_MODE, WAKEUP_CM0_SLEEP_REQUEST_MODE_FORCE_SLEEPING);
414 }
415
416 /**
417 * @brief Disable the CPU to be considered always as sleeping by the wakeup block.
418 * @rmtoll CM0_SLEEP_REQUEST_MODE FORCE_SLEEPING LL_RADIO_TIMER_DisableCPUWakeupTimerForceSleeping
419 * @param WAKEUPx Radio Timer instance
420 * @retval None
421 */
LL_RADIO_TIMER_DisableCPUWakeupTimerForceSleeping(WAKEUP_TypeDef * WAKEUPx)422 __STATIC_INLINE void LL_RADIO_TIMER_DisableCPUWakeupTimerForceSleeping(WAKEUP_TypeDef *WAKEUPx)
423 {
424 CLEAR_BIT(WAKEUPx->CM0_SLEEP_REQUEST_MODE, WAKEUP_CM0_SLEEP_REQUEST_MODE_FORCE_SLEEPING);
425 }
426
427 /**
428 * @brief Indicates if CPU Wakeup Radio Timer Force Sleeping Mode is enabled.
429 * @rmtoll CM0_SLEEP_REQUEST_MODE FORCE_SLEEPING LL_RADIO_TIMER_IsEnabledCPUWakeupTimerForceSleeping
430 * @param WAKEUPx Radio Timer instance
431 * @retval State of bit (1 or 0).
432 */
LL_RADIO_TIMER_IsEnabledCPUWakeupTimerForceSleeping(WAKEUP_TypeDef * WAKEUPx)433 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledCPUWakeupTimerForceSleeping(WAKEUP_TypeDef *WAKEUPx)
434 {
435 return ((READ_BIT(WAKEUPx->CM0_SLEEP_REQUEST_MODE, WAKEUP_CM0_SLEEP_REQUEST_MODE_FORCE_SLEEPING) == (WAKEUP_CM0_SLEEP_REQUEST_MODE_FORCE_SLEEPING)) ? 1UL : 0UL);
436 }
437
438 /**
439 * @brief Set the sleep request mode.
440 * @rmtoll CM0_SLEEP_REQUEST_MODE SLEEP_REQ_MODE LL_RADIO_TIMER_SetSleepRequestMode
441 * @param WAKEUPx Radio Timer instance
442 * @param mode Sleep mode value in range 0-7
443 * @retval None.
444 */
LL_RADIO_TIMER_SetSleepRequestMode(WAKEUP_TypeDef * WAKEUPx,uint8_t mode)445 __STATIC_INLINE void LL_RADIO_TIMER_SetSleepRequestMode(WAKEUP_TypeDef *WAKEUPx, uint8_t mode)
446 {
447 #if defined(STM32WB09)
448 return;
449 #else
450 MODIFY_REG_FIELD(WAKEUP->BLUE_SLEEP_REQUEST_MODE, WAKEUP_BLUE_SLEEP_REQUEST_MODE_SLEEP_REQ_MODE, (mode & 0x7));
451 #endif
452 }
453
454 /**
455 * @brief Get the sleep request mode.
456 * @rmtoll CM0_SLEEP_REQUEST_MODE SLEEP_REQ_MODE LL_RADIO_TIMER_GetSleepRequestMode
457 * @param WAKEUPx Radio Timer instance
458 * @retval Sleep mode value in range 0-7
459 */
LL_RADIO_TIMER_GetSleepRequestMode(WAKEUP_TypeDef * WAKEUPx)460 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetSleepRequestMode(WAKEUP_TypeDef *WAKEUPx)
461 {
462 #if defined(STM32WB09)
463 return 0;
464 #else
465 return (uint32_t)(READ_REG(WAKEUP->BLUE_SLEEP_REQUEST_MODE) & WAKEUP_BLUE_SLEEP_REQUEST_MODE_SLEEP_REQ_MODE);
466 #endif
467 }
468
469 /**
470 * @}
471 */
472
473 /** @defgroup RADIO_TIMER_LL_EF_IT_Management IT-Management
474 * @{
475 */
476
477 /**
478 * @brief Enable the BLE wakeup interrupt towards the CPU.
479 * @rmtoll WAKEUP_BLE_IRQ_ENABLE WAKEUP_IT LL_RADIO_TIMER_EnableBLEWakeupIT
480 * @param WAKEUPx Radio Timer instance
481 * @retval None
482 */
LL_RADIO_TIMER_EnableBLEWakeupIT(WAKEUP_TypeDef * WAKEUPx)483 __STATIC_INLINE void LL_RADIO_TIMER_EnableBLEWakeupIT(WAKEUP_TypeDef *WAKEUPx)
484 {
485 SET_BIT(WAKEUPx->WAKEUP_BLE_IRQ_ENABLE, WAKEUP_WAKEUP_BLE_IRQ_ENABLE_WAKEUP_IT);
486 }
487
488 /**
489 * @brief Disable the BLE wakeup interrupt towards the CPU.
490 * @rmtoll WAKEUP_BLE_IRQ_ENABLE WAKEUP_IT LL_RADIO_TIMER_DisableBLEWakeupIT
491 * @param WAKEUPx Radio Timer instance
492 * @retval None
493 */
LL_RADIO_TIMER_DisableBLEWakeupIT(WAKEUP_TypeDef * WAKEUPx)494 __STATIC_INLINE void LL_RADIO_TIMER_DisableBLEWakeupIT(WAKEUP_TypeDef *WAKEUPx)
495 {
496 CLEAR_BIT(WAKEUPx->WAKEUP_BLE_IRQ_ENABLE, WAKEUP_WAKEUP_BLE_IRQ_ENABLE_WAKEUP_IT);
497 }
498
499 /**
500 * @brief Indicates if BLE wakeup interrupt towards the CPU is enabled.
501 * @rmtoll WAKEUP_BLE_IRQ_ENABLE WAKEUP_IT LL_RADIO_TIMER_IsEnabledBLEWakeupIT
502 * @param WAKEUPx Radio Timer instance
503 * @retval State of bit (1 or 0).
504 */
LL_RADIO_TIMER_IsEnabledBLEWakeupIT(WAKEUP_TypeDef * WAKEUPx)505 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledBLEWakeupIT(WAKEUP_TypeDef *WAKEUPx)
506 {
507 return ((READ_BIT(WAKEUPx->WAKEUP_BLE_IRQ_ENABLE, WAKEUP_WAKEUP_BLE_IRQ_ENABLE_WAKEUP_IT) == (WAKEUP_WAKEUP_BLE_IRQ_ENABLE_WAKEUP_IT)) ? 1UL : 0UL);
508 }
509
510 /**
511 * @brief Enable the CPU wakeup interrupt towards the CPU.
512 * @rmtoll WAKEUP_CM0_IRQ_ENABLE WAKEUP_IT LL_RADIO_TIMER_EnableCPUWakeupIT
513 * @param WAKEUPx Radio Timer instance
514 * @retval None
515 */
LL_RADIO_TIMER_EnableCPUWakeupIT(WAKEUP_TypeDef * WAKEUPx)516 __STATIC_INLINE void LL_RADIO_TIMER_EnableCPUWakeupIT(WAKEUP_TypeDef *WAKEUPx)
517 {
518 SET_BIT(WAKEUPx->WAKEUP_CM0_IRQ_ENABLE, WAKEUP_WAKEUP_CM0_IRQ_ENABLE_WAKEUP_IT);
519 }
520
521 /**
522 * @brief Disable the CPU wakeup interrupt towards the CPU.
523 * @rmtoll WAKEUP_CM0_IRQ_ENABLE WAKEUP_IT LL_RADIO_TIMER_DisableCPUWakeupIT
524 * @param WAKEUPx Radio Timer instance
525 * @retval None
526 */
LL_RADIO_TIMER_DisableCPUWakeupIT(WAKEUP_TypeDef * WAKEUPx)527 __STATIC_INLINE void LL_RADIO_TIMER_DisableCPUWakeupIT(WAKEUP_TypeDef *WAKEUPx)
528 {
529 CLEAR_BIT(WAKEUPx->WAKEUP_CM0_IRQ_ENABLE, WAKEUP_WAKEUP_CM0_IRQ_ENABLE_WAKEUP_IT);
530 }
531
532 /**
533 * @brief Indicates if CPU wakeup interrupt towards the CPU is enabled.
534 * @rmtoll WAKEUP_CPU_IRQ_ENABLE WAKEUP_IT LL_RADIO_TIMER_IsEnabledCPUWakeupIT
535 * @param WAKEUPx Radio Timer instance
536 * @retval State of bit (1 or 0).
537 */
LL_RADIO_TIMER_IsEnabledCPUWakeupIT(WAKEUP_TypeDef * WAKEUPx)538 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledCPUWakeupIT(WAKEUP_TypeDef *WAKEUPx)
539 {
540 return ((READ_BIT(WAKEUPx->WAKEUP_CM0_IRQ_ENABLE, WAKEUP_WAKEUP_CM0_IRQ_ENABLE_WAKEUP_IT) == (WAKEUP_WAKEUP_CM0_IRQ_ENABLE_WAKEUP_IT)) ? 1UL : 0UL);
541 }
542
543 /**
544 * @}
545 */
546
547 /** @defgroup RADIO_TIMER_LL_EF_FLAG_Management FLAG_Management
548 * @{
549 */
550
551 /**
552 * @brief Check if the Radio Timer Time Capture Triggert Flag is set or not
553 * @rmtoll STATUSREG TIMECAPTURETRIG LL_RADIO_TIMER_IsActiveFlag_TIMECAPTURETRIG
554 * @param BLEx BLE Instance
555 * @retval State of bit (1 or 0).
556 */
LL_RADIO_TIMER_IsActiveFlag_TIMECAPTURETRIG(BLUE_TypeDef * BLEx)557 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsActiveFlag_TIMECAPTURETRIG(BLUE_TypeDef *BLEx)
558 {
559 return ((READ_BIT(BLEx->STATUSREG, BLUE_STATUSREG_TIMECAPTURETRIG) == (BLUE_STATUSREG_TIMECAPTURETRIG)) ? 1UL : 0UL);
560 }
561
562 /**
563 * @brief Clear the BLE Wakeup interrupt flag.
564 * @rmtoll WAKEUP_BLE_IRQ_STATUS WAKEUP_IT LL_RADIO_TIMER_ClearFlag_BLEWakeup
565 * @param WAKEUPx Radio Timer instance
566 * @retval None
567 */
LL_RADIO_TIMER_ClearFlag_BLEWakeup(WAKEUP_TypeDef * WAKEUPx)568 __STATIC_INLINE void LL_RADIO_TIMER_ClearFlag_BLEWakeup(WAKEUP_TypeDef *WAKEUPx)
569 {
570 SET_BIT(WAKEUPx->WAKEUP_BLE_IRQ_STATUS, WAKEUP_WAKEUP_BLE_IRQ_STATUS_WAKEUP_IT);
571 }
572
573 /**
574 * @brief Indicate whether the BLE Wakeup interrupt flag is set
575 * @rmtoll WAKEUP_BLE_IRQ_STATUS WAKEUP_IT LL_RADIO_TIMER_IsActiveFlag_BLEWakeup
576 * @param WAKEUPx Radio Timer instance
577 * @retval State of bit (1 or 0).
578 */
LL_RADIO_TIMER_IsActiveFlag_BLEWakeup(WAKEUP_TypeDef * WAKEUPx)579 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsActiveFlag_BLEWakeup(WAKEUP_TypeDef *WAKEUPx)
580 {
581 return ((READ_BIT(WAKEUPx->WAKEUP_BLE_IRQ_STATUS, WAKEUP_WAKEUP_BLE_IRQ_STATUS_WAKEUP_IT) == (WAKEUP_WAKEUP_BLE_IRQ_STATUS_WAKEUP_IT)) ? 1UL : 0UL);
582 }
583
584 /**
585 * @brief Clear the CPU Wakeup interrupt flag.
586 * @rmtoll WAKEUP_CM0_IRQ_STATUS WAKEUP_IT LL_RADIO_TIMER_ClearFlag_CPUWakeup
587 * @param WAKEUPx Radio Timer instance
588 * @retval None
589 */
LL_RADIO_TIMER_ClearFlag_CPUWakeup(WAKEUP_TypeDef * WAKEUPx)590 __STATIC_INLINE void LL_RADIO_TIMER_ClearFlag_CPUWakeup(WAKEUP_TypeDef *WAKEUPx)
591 {
592 SET_BIT(WAKEUPx->WAKEUP_CM0_IRQ_STATUS, WAKEUP_WAKEUP_CM0_IRQ_STATUS_WAKEUP_IT);
593 }
594
595 /**
596 * @brief Indicate whether the CPU Wakeup interrupt flag is set
597 * @rmtoll WAKEUP_CM0_IRQ_STATUS WAKEUP_IT LL_RADIO_TIMER_IsActiveFlag_CPUWakeup
598 * @param WAKEUPx Radio Timer instance
599 * @retval State of bit (1 or 0).
600 */
LL_RADIO_TIMER_IsActiveFlag_CPUWakeup(WAKEUP_TypeDef * WAKEUPx)601 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsActiveFlag_CPUWakeup(WAKEUP_TypeDef *WAKEUPx)
602 {
603 return ((READ_BIT(WAKEUPx->WAKEUP_CM0_IRQ_STATUS, WAKEUP_WAKEUP_CM0_IRQ_STATUS_WAKEUP_IT) == (WAKEUP_WAKEUP_CM0_IRQ_STATUS_WAKEUP_IT)) ? 1UL : 0UL);
604 }
605
606 /**
607 * @}
608 */
609
610 /** @defgroup RADIO_TIMER_LL_EF_LSI_CALIBRATION Radio Timer LSI calibration APIs
611 * @{
612 */
613
614 /**
615 * @brief Set the window length (in slow clock period) for slow clock measurement.
616 * @param RADIO_CTRLx: Radio Control instance
617 * @param Count Slow clock is measured in a window of SLOW_COUNT+1 slow clock cycles
618 * @retval None
619 */
LL_RADIO_TIMER_SetLSIWindowCalibrationLength(RADIO_CTRL_TypeDef * RADIO_CTRLx,uint32_t Count)620 __STATIC_INLINE void LL_RADIO_TIMER_SetLSIWindowCalibrationLength(RADIO_CTRL_TypeDef *RADIO_CTRLx, uint32_t Count)
621 {
622 WRITE_REG(RADIO_CTRLx->CLK32COUNT_REG, Count);
623 }
624
625 /**
626 * @brief Get the window length (in slow clock period) for slow clock measurement.
627 * @param RADIO_CTRLx: Radio Control instance
628 * @retval The LSI Window Length used for the LSI calibration procedure
629 */
LL_RADIO_TIMER_GetLSIWindowCalibrationLength(RADIO_CTRL_TypeDef * RADIO_CTRLx)630 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetLSIWindowCalibrationLength(RADIO_CTRL_TypeDef *RADIO_CTRLx)
631 {
632 return (uint32_t)(READ_REG(RADIO_CTRLx->CLK32COUNT_REG));
633 }
634
635 /**
636 * @brief Start the LSI calibration procedure.
637 * @param RADIO_CTRLx: Radio Control instance
638 * @retval None
639 */
LL_RADIO_TIMER_StartLSICalibration(RADIO_CTRL_TypeDef * RADIO_CTRLx)640 __STATIC_INLINE void LL_RADIO_TIMER_StartLSICalibration(RADIO_CTRL_TypeDef *RADIO_CTRLx)
641 {
642 WRITE_REG(RADIO_CTRLx->CLK32PERIOD_REG, 0);
643 }
644
645 /**
646 * @brief Get the LSI clock Period calibrated.
647 * @param RADIO_CTRLx: Radio Control instance
648 * @retval The LSI clock period calibrated
649 */
LL_RADIO_TIMER_GetLSIPeriod(RADIO_CTRL_TypeDef * RADIO_CTRLx)650 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetLSIPeriod(RADIO_CTRL_TypeDef *RADIO_CTRLx)
651 {
652 return (uint32_t)(READ_REG(RADIO_CTRLx->CLK32PERIOD_REG));
653 }
654
655 /**
656 * @brief Get the LSI clock Frequency calibrated.
657 * @param RADIO_CTRLx: Radio Control instance
658 * @retval The LSI clock frequency calibrated
659 */
LL_RADIO_TIMER_GetLSIFrequency(RADIO_CTRL_TypeDef * RADIO_CTRLx)660 __STATIC_INLINE uint32_t LL_RADIO_TIMER_GetLSIFrequency(RADIO_CTRL_TypeDef *RADIO_CTRLx)
661 {
662 return (uint32_t)(READ_REG(RADIO_CTRLx->CLK32FREQUENCY_REG));
663 }
664
665 /**
666 * @brief Enable the LSI calibration ended interrupt.
667 * @param RADIO_CTRLx: Radio Control instance
668 * @retval None
669 */
LL_RADIO_TIMER_EnableLSICalibrationIT(RADIO_CTRL_TypeDef * RADIO_CTRLx)670 __STATIC_INLINE void LL_RADIO_TIMER_EnableLSICalibrationIT(RADIO_CTRL_TypeDef *RADIO_CTRLx)
671 {
672 SET_BIT(RADIO_CTRLx->RADIO_CONTROL_IRQ_ENABLE, RADIO_CTRL_RADIO_CONTROL_IRQ_ENABLE_SLOW_CLK_IRQ_MASK);
673 }
674
675 /**
676 * @brief Disable the LSI calibration ended interrupt.
677 * @param RADIO_CTRLx: Radio Control instance
678 * @retval None
679 */
LL_RADIO_TIMER_DisableLSICalibrationEndedIT(RADIO_CTRL_TypeDef * RADIO_CTRLx)680 __STATIC_INLINE void LL_RADIO_TIMER_DisableLSICalibrationEndedIT(RADIO_CTRL_TypeDef *RADIO_CTRLx)
681 {
682 CLEAR_BIT(RADIO_CTRLx->RADIO_CONTROL_IRQ_ENABLE, RADIO_CTRL_RADIO_CONTROL_IRQ_ENABLE_SLOW_CLK_IRQ_MASK);
683 }
684
685 /**
686 * @brief Indicates if the LSI calibration ended interrupt is enabled.
687 * @param RADIO_CTRLx: Radio Control instance
688 * @retval State of bit (1 or 0).
689 */
LL_RADIO_TIMER_IsEnabledLSICalibrationEndedIT(RADIO_CTRL_TypeDef * RADIO_CTRLx)690 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsEnabledLSICalibrationEndedIT(RADIO_CTRL_TypeDef *RADIO_CTRLx)
691 {
692 return ((READ_BIT(RADIO_CTRLx->RADIO_CONTROL_IRQ_ENABLE, RADIO_CTRL_RADIO_CONTROL_IRQ_ENABLE_SLOW_CLK_IRQ_MASK) == (RADIO_CTRL_RADIO_CONTROL_IRQ_ENABLE_SLOW_CLK_IRQ_MASK)) ? 1UL : 0UL);
693 }
694
695 /**
696 * @brief Clear the LSI calibration ended flag.
697 * @param RADIO_CTRLx: Radio Control instance
698 * @retval None
699 */
LL_RADIO_TIMER_ClearFlag_LSICalibrationEnded(RADIO_CTRL_TypeDef * RADIO_CTRLx)700 __STATIC_INLINE void LL_RADIO_TIMER_ClearFlag_LSICalibrationEnded(RADIO_CTRL_TypeDef *RADIO_CTRLx)
701 {
702 SET_BIT(RADIO_CTRLx->RADIO_CONTROL_IRQ_STATUS, RADIO_CTRL_RADIO_CONTROL_IRQ_STATUS_SLOW_CLK_IRQ);
703 }
704
705 /**
706 * @brief Check if the LSI calibration ended flag is set or not.
707 * @param RADIO_CTRLx: Radio Control instance
708 * @retval State of bit (1 or 0).
709 */
LL_RADIO_TIMER_IsActiveFlag_LSICalibrationEnded(RADIO_CTRL_TypeDef * RADIO_CTRLx)710 __STATIC_INLINE uint32_t LL_RADIO_TIMER_IsActiveFlag_LSICalibrationEnded(RADIO_CTRL_TypeDef *RADIO_CTRLx)
711 {
712 return ((READ_BIT(RADIO_CTRLx->RADIO_CONTROL_IRQ_STATUS, RADIO_CTRL_RADIO_CONTROL_IRQ_STATUS_SLOW_CLK_IRQ) == (RADIO_CTRL_RADIO_CONTROL_IRQ_STATUS_SLOW_CLK_IRQ)) ? 1UL : 0UL);
713 }
714
715 /**
716 * @}
717 */
718
719 /**
720 * @}
721 */
722
723 /**
724 * @}
725 */
726
727 /**
728 * @}
729 */
730
731 #ifdef __cplusplus
732 }
733 #endif
734
735 #endif /* STM32WB0x_LL_RADIO_TIMER_H */
736