Exemplo n.º 1
0
/**
* @brief This function handles CRS Synchronization Timeout.
* @param Timeout: Duration of the timeout
* @note  Timeout is based on the maximum time to receive a SYNC event based on synchronization
*        frequency.
* @note    If Timeout set to HAL_MAX_DELAY, HAL_TIMEOUT will be never returned.
* @retval Combination of Synchronization status
*          This parameter can be a combination of the following values:
*            @arg RCC_CRS_TIMEOUT
*            @arg RCC_CRS_SYNCOK
*            @arg RCC_CRS_SYNCWARM
*            @arg RCC_CRS_SYNCERR
*            @arg RCC_CRS_SYNCMISS
*            @arg RCC_CRS_TRIMOV
*/
RCC_CRSStatusTypeDef HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout)
{
  RCC_CRSStatusTypeDef crsstatus = RCC_CRS_NONE;
  uint32_t tickstart = 0;
  
  /* Get timeout */
  tickstart = HAL_GetTick();
  
  /* Check that if one of CRS flags have been set */
  while(RCC_CRS_NONE == crsstatus)
  {
    if(Timeout != HAL_MAX_DELAY)
    {
      if((HAL_GetTick() - tickstart ) > Timeout)
      {
        crsstatus = RCC_CRS_TIMEOUT;
      }
    }
    /* Check CRS SYNCOK flag  */
    if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCOK))
    {
      /* CRS SYNC event OK */
      crsstatus |= RCC_CRS_SYNCOK;
    
      /* Clear CRS SYNC event OK bit */
      __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCOK);
    }
    
    /* Check CRS SYNCWARN flag  */
    if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCWARN))
    {
      /* CRS SYNC warning */
      crsstatus |= RCC_CRS_SYNCWARM;
    
      /* Clear CRS SYNCWARN bit */
      __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCWARN);
    }
    
    /* Check CRS TRIM overflow flag  */
    if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_TRIMOVF))
    {
      /* CRS SYNC Error */
      crsstatus |= RCC_CRS_TRIMOV;
    
      /* Clear CRS Error bit */
      __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_TRIMOVF);
    }
    
    /* Check CRS Error flag  */
    if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCERR))
    {
      /* CRS SYNC Error */
      crsstatus |= RCC_CRS_SYNCERR;
    
      /* Clear CRS Error bit */
      __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCERR);
    }
    
    /* Check CRS SYNC Missed flag  */
    if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCMISS))
    {
      /* CRS SYNC Missed */
      crsstatus |= RCC_CRS_SYNCMISS;
    
      /* Clear CRS SYNC Missed bit */
      __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCMISS);
    }
    
    /* Check CRS Expected SYNC flag  */
    if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_ESYNC))
    {
      /* frequency error counter reached a zero value */
      __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_ESYNC);
    }
  }
  
  return crsstatus;
}
Exemplo n.º 2
0
/**
  * @brief  Handle CRS interuption
  * @param  none 
  * @retval none
  */
void CRS_HandlerIT(void)
{
  /* Check CRS SYNCOK flag  */
  if ((__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCOK)) && (__HAL_RCC_CRS_GET_IT_SOURCE(RCC_CRS_IT_SYNCOK)))
  {
    /* Power on LED1 */
    BSP_LED_On(LED1);
    /* Power off LED2*/
    BSP_LED_Off(LED2);
      /* Power off LED4*/
    BSP_LED_Off(LED4);

    CRSSyncStatus = 0;
    /* Clear CRS SYNC event OK bit */
    __HAL_RCC_CRS_CLEAR_IT(RCC_CRS_FLAG_SYNCOK);
  }

  /* Check CRS SYNCWARN flag  */
  if ((__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCWARN)) && (__HAL_RCC_CRS_GET_IT_SOURCE(RCC_CRS_IT_SYNCWARN)))
  {
    /* Power off LED1 */
    BSP_LED_Off(LED1);
    /* Power on LED2*/
    BSP_LED_On(LED2);
     /* Power off LED4*/
    BSP_LED_Off(LED4);

    CRSSyncStatus = 1;

    /* Clear CRS SYNCWARN bit */
    __HAL_RCC_CRS_CLEAR_IT(RCC_CRS_FLAG_SYNCWARN);
  }

  /* Check CRS Error flag  */
  if ((__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCERR)) && (__HAL_RCC_CRS_GET_IT_SOURCE(RCC_CRS_IT_SYNCERR)))
  {
    /* Power off LED1 */
    BSP_LED_Off(LED1);
    /* Power off LED2*/
    BSP_LED_Off(LED2);
    /* Power on LED4*/
    BSP_LED_On(LED4);

    CRSSyncStatus = 2;

    /* Clear CRS Error bit */
    __HAL_RCC_CRS_CLEAR_IT(RCC_CRS_FLAG_SYNCERR);
  }

  /* Check CRS SYNC Missed flag  */
  if ((__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCMISS)) && (__HAL_RCC_CRS_GET_IT_SOURCE(RCC_CRS_IT_ERR)))
  {
    /* Power off LED1 */
    BSP_LED_Off(LED1);
    /* Power off LED2*/
    BSP_LED_Off(LED2);
    /* Power on LED4*/
    BSP_LED_On(LED4);

    CRSSyncStatus = 2;
    
    /* Clear CRS SYNC Missed bit */
    __HAL_RCC_CRS_CLEAR_IT(RCC_CRS_FLAG_SYNCMISS);
  }
  
  /* Check CRS Expected SYNC flag  */
  if ((__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_ESYNC)) && (__HAL_RCC_CRS_GET_IT_SOURCE(RCC_CRS_IT_ESYNC)))
  {
    /* frequency error counter reached a zero value */
    __HAL_RCC_CRS_CLEAR_IT(RCC_CRS_FLAG_ESYNC);
  }
}