109#ifdef HAL_RNG_MODULE_ENABLED
118#define RNG_TIMEOUT_VALUE 2U
165#if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
166 if (hrng->State == HAL_RNG_STATE_RESET)
171 hrng->ReadyDataCallback = HAL_RNG_ReadyDataCallback;
172 hrng->ErrorCallback = HAL_RNG_ErrorCallback;
174 if (hrng->MspInitCallback == NULL)
176 hrng->MspInitCallback = HAL_RNG_MspInit;
180 hrng->MspInitCallback(hrng);
183 if (hrng->State == HAL_RNG_STATE_RESET)
189 HAL_RNG_MspInit(hrng);
194 hrng->State = HAL_RNG_STATE_BUSY;
198 __HAL_RNG_ENABLE(hrng);
201 hrng->State = HAL_RNG_STATE_READY;
204 hrng->ErrorCode = HAL_RNG_ERROR_NONE;
225 CLEAR_BIT(hrng->Instance->CR, RNG_CR_IE | RNG_CR_RNGEN);
228 CLEAR_BIT(hrng->Instance->SR, RNG_SR_CEIS | RNG_SR_SEIS);
230#if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
231 if (hrng->MspDeInitCallback == NULL)
233 hrng->MspDeInitCallback = HAL_RNG_MspDeInit;
237 hrng->MspDeInitCallback(hrng);
240 HAL_RNG_MspDeInit(hrng);
244 hrng->State = HAL_RNG_STATE_RESET;
247 hrng->ErrorCode = HAL_RNG_ERROR_NONE;
262__weak
void HAL_RNG_MspInit(RNG_HandleTypeDef *hrng)
277__weak
void HAL_RNG_MspDeInit(RNG_HandleTypeDef *hrng)
286#if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
299HAL_StatusTypeDef HAL_RNG_RegisterCallback(RNG_HandleTypeDef *hrng, HAL_RNG_CallbackIDTypeDef CallbackID,
300 pRNG_CallbackTypeDef pCallback)
304 if (pCallback == NULL)
307 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
311 if (HAL_RNG_STATE_READY == hrng->State)
315 case HAL_RNG_ERROR_CB_ID :
316 hrng->ErrorCallback = pCallback;
319 case HAL_RNG_MSPINIT_CB_ID :
320 hrng->MspInitCallback = pCallback;
323 case HAL_RNG_MSPDEINIT_CB_ID :
324 hrng->MspDeInitCallback = pCallback;
329 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
335 else if (HAL_RNG_STATE_RESET == hrng->State)
339 case HAL_RNG_MSPINIT_CB_ID :
340 hrng->MspInitCallback = pCallback;
343 case HAL_RNG_MSPDEINIT_CB_ID :
344 hrng->MspDeInitCallback = pCallback;
349 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
358 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
377HAL_StatusTypeDef HAL_RNG_UnRegisterCallback(RNG_HandleTypeDef *hrng, HAL_RNG_CallbackIDTypeDef CallbackID)
382 if (HAL_RNG_STATE_READY == hrng->State)
386 case HAL_RNG_ERROR_CB_ID :
387 hrng->ErrorCallback = HAL_RNG_ErrorCallback;
390 case HAL_RNG_MSPINIT_CB_ID :
391 hrng->MspInitCallback = HAL_RNG_MspInit;
394 case HAL_RNG_MSPDEINIT_CB_ID :
395 hrng->MspDeInitCallback = HAL_RNG_MspDeInit;
400 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
406 else if (HAL_RNG_STATE_RESET == hrng->State)
410 case HAL_RNG_MSPINIT_CB_ID :
411 hrng->MspInitCallback = HAL_RNG_MspInit;
414 case HAL_RNG_MSPDEINIT_CB_ID :
415 hrng->MspDeInitCallback = HAL_RNG_MspDeInit;
420 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
429 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
444HAL_StatusTypeDef HAL_RNG_RegisterReadyDataCallback(RNG_HandleTypeDef *hrng, pRNG_ReadyDataCallbackTypeDef pCallback)
448 if (pCallback == NULL)
451 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
457 if (HAL_RNG_STATE_READY == hrng->State)
459 hrng->ReadyDataCallback = pCallback;
464 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
487 if (HAL_RNG_STATE_READY == hrng->State)
489 hrng->ReadyDataCallback = HAL_RNG_ReadyDataCallback;
494 hrng->ErrorCode = HAL_RNG_ERROR_INVALID_CALLBACK;
536HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber(RNG_HandleTypeDef *hrng, uint32_t *random32bit)
545 if (hrng->State == HAL_RNG_STATE_READY)
548 hrng->State = HAL_RNG_STATE_BUSY;
554 while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_DRDY) == RESET)
556 if ((
HAL_GetTick() - tickstart) > RNG_TIMEOUT_VALUE)
559 if (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_DRDY) == RESET)
561 hrng->State = HAL_RNG_STATE_READY;
562 hrng->ErrorCode = HAL_RNG_ERROR_TIMEOUT;
571 hrng->RandomNumber = hrng->Instance->DR;
572 *random32bit = hrng->RandomNumber;
574 hrng->State = HAL_RNG_STATE_READY;
578 hrng->ErrorCode = HAL_RNG_ERROR_BUSY;
602 if (hrng->State == HAL_RNG_STATE_READY)
605 hrng->State = HAL_RNG_STATE_BUSY;
608 __HAL_RNG_ENABLE_IT(hrng);
615 hrng->ErrorCode = HAL_RNG_ERROR_BUSY;
629uint32_t HAL_RNG_GetRandomNumber(RNG_HandleTypeDef *hrng)
631 if (HAL_RNG_GenerateRandomNumber(hrng, &(hrng->RandomNumber)) ==
HAL_OK)
633 return hrng->RandomNumber;
648uint32_t HAL_RNG_GetRandomNumber_IT(RNG_HandleTypeDef *hrng)
650 uint32_t random32bit = 0U;
656 hrng->State = HAL_RNG_STATE_BUSY;
659 random32bit = hrng->Instance->DR;
662 __HAL_RNG_ENABLE_IT(hrng);
689void HAL_RNG_IRQHandler(RNG_HandleTypeDef *hrng)
691 uint32_t rngclockerror = 0U;
692 uint32_t itflag = hrng->Instance->SR;
695 if ((itflag & RNG_IT_CEI) == RNG_IT_CEI)
698 hrng->ErrorCode = HAL_RNG_ERROR_CLOCK;
701 else if ((itflag & RNG_IT_SEI) == RNG_IT_SEI)
704 hrng->ErrorCode = HAL_RNG_ERROR_SEED;
712 if (rngclockerror == 1U)
715 hrng->State = HAL_RNG_STATE_ERROR;
717#if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
719 hrng->ErrorCallback(hrng);
722 HAL_RNG_ErrorCallback(hrng);
726 __HAL_RNG_CLEAR_IT(hrng, RNG_IT_CEI | RNG_IT_SEI);
732 if ((itflag & RNG_IT_DRDY) == RNG_IT_DRDY)
735 __HAL_RNG_DISABLE_IT(hrng);
738 hrng->RandomNumber = hrng->Instance->DR;
740 if (hrng->State != HAL_RNG_STATE_ERROR)
743 hrng->State = HAL_RNG_STATE_READY;
747#if (USE_HAL_RNG_REGISTER_CALLBACKS == 1)
749 hrng->ReadyDataCallback(hrng, hrng->RandomNumber);
752 HAL_RNG_ReadyDataCallback(hrng, hrng->RandomNumber);
764uint32_t HAL_RNG_ReadLastRandomNumber(
const RNG_HandleTypeDef *hrng)
766 return (hrng->RandomNumber);
776__weak
void HAL_RNG_ReadyDataCallback(RNG_HandleTypeDef *hrng, uint32_t random32bit)
792__weak
void HAL_RNG_ErrorCallback(RNG_HandleTypeDef *hrng)
826HAL_RNG_StateTypeDef HAL_RNG_GetState(
const RNG_HandleTypeDef *hrng)
836uint32_t HAL_RNG_GetError(
const RNG_HandleTypeDef *hrng)
839 return hrng->ErrorCode;
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef
HAL Status structures definition
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)