feat(Puya-PY32F040): add OTA dual-project codegen template
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,274 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file py32f040_hal_div.c
|
||||
* @author MCU Application Team
|
||||
* @brief DIV HAL module driver.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© Copyright (c) 2023 Puya Semiconductor Co.
|
||||
* All rights reserved.</center></h2>
|
||||
*
|
||||
* This software component is licensed by Puya under BSD 3-Clause license,
|
||||
* the "License"; You may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at:
|
||||
* opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics.
|
||||
* All rights reserved.</center></h2>
|
||||
*
|
||||
* This software component is licensed by ST under BSD 3-Clause license,
|
||||
* the "License"; You may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at:
|
||||
* opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "py32f0xx_hal.h"
|
||||
|
||||
/** @addtogroup PY32F040_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup DIV DIV
|
||||
* @brief DIV HAL module driver.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifdef HAL_DIV_MODULE_ENABLED
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/** @defgroup DIV_Private_Constants DIV Private Constants
|
||||
* @{
|
||||
*/
|
||||
#define DIV_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup DIV_Exported_Functions DIV Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup DIV_Exported_Functions_Group1 Initialization and de-initialization functions
|
||||
* @brief Initialization and Configuration functions.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initialize the DIV according to the specified
|
||||
* parameters in the DIV_InitTypeDef and create the associated handle.
|
||||
* @param hdiv DIV handle
|
||||
* @retval HAL status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_DIV_Init(DIV_HandleTypeDef *hdiv)
|
||||
{
|
||||
/* Check the DIV handle allocation */
|
||||
if (hdiv == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_DIV_ALL_INSTANCE(hdiv->Instance));
|
||||
|
||||
if (hdiv->State == HAL_DIV_STATE_RESET)
|
||||
{
|
||||
/* Allocate lock resource and initialize it */
|
||||
hdiv->Lock = HAL_UNLOCKED;
|
||||
/* Init the low level hardware */
|
||||
HAL_DIV_MspInit(hdiv);
|
||||
}
|
||||
|
||||
/* Change DIV peripheral state */
|
||||
hdiv->State = HAL_DIV_STATE_READY;
|
||||
|
||||
/* Return function status */
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DeInitialize the DIV peripheral.
|
||||
* @param hdiv DIV handle
|
||||
* @retval HAL status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_DIV_DeInit(DIV_HandleTypeDef *hdiv)
|
||||
{
|
||||
/* Check the DIV handle allocation */
|
||||
if (hdiv == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_DIV_ALL_INSTANCE(hdiv->Instance));
|
||||
|
||||
/* Check the DIV peripheral state */
|
||||
if (hdiv->State == HAL_DIV_STATE_BUSY)
|
||||
{
|
||||
return HAL_BUSY;
|
||||
}
|
||||
|
||||
/* Change DIV peripheral state */
|
||||
hdiv->State = HAL_DIV_STATE_BUSY;
|
||||
|
||||
/* Force reset DIV */
|
||||
__HAL_RCC_DIV_FORCE_RESET();
|
||||
|
||||
/* Release reset DIV */
|
||||
__HAL_RCC_DIV_RELEASE_RESET();
|
||||
|
||||
/* DeInit the low level hardware */
|
||||
HAL_DIV_MspDeInit(hdiv);
|
||||
|
||||
/* Change DIV peripheral state */
|
||||
hdiv->State = HAL_DIV_STATE_RESET;
|
||||
|
||||
/* Process unlocked */
|
||||
__HAL_UNLOCK(hdiv);
|
||||
|
||||
/* Return function status */
|
||||
return HAL_OK;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initializes the DIV MSP.
|
||||
* @param hdiv DIV handle
|
||||
* @retval None
|
||||
*/
|
||||
__weak void HAL_DIV_MspInit(DIV_HandleTypeDef *hdiv)
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(hdiv);
|
||||
|
||||
/* NOTE : This function should not be modified, when the callback is needed,
|
||||
the HAL_DIV_MspInit can be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DeInitialize the DIV MSP.
|
||||
* @param hdiv DIV handle
|
||||
* @retval None
|
||||
*/
|
||||
__weak void HAL_DIV_MspDeInit(DIV_HandleTypeDef *hdiv)
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(hdiv);
|
||||
|
||||
/* NOTE : This function should not be modified, when the callback is needed,
|
||||
the HAL_DIV_MspDeInit can be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup DIV_Exported_Functions_Group2 DIV calculate functions
|
||||
* @brief DIV calculate functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Calculate the division result.
|
||||
* @param hdiv DIV handle
|
||||
* @param Calculated Pointing to DIV calculation value structure
|
||||
* @retval HAL_State.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_DIV_Calculate(DIV_HandleTypeDef *hdiv, DIV_CalculatedTypeDef* Calculated)
|
||||
{
|
||||
uint32_t tickstart;
|
||||
|
||||
/* Check the DIV handle allocation */
|
||||
if (hdiv == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_DIV_ALL_INSTANCE(hdiv->Instance));
|
||||
|
||||
MODIFY_REG(hdiv->Instance->SIGN, DIV_SIGN_DIV_SIGN, (Calculated->Sign));
|
||||
|
||||
WRITE_REG(hdiv->Instance->DEND, (Calculated-> Dividend));
|
||||
|
||||
WRITE_REG(hdiv->Instance->SOR, (Calculated-> Divisor));
|
||||
|
||||
if(READ_BIT(hdiv->Instance->STAT, DIV_STAT_DIV_ZERO) != 0)
|
||||
{
|
||||
hdiv->State = HAL_DIV_STATE_ZERO;
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
tickstart = HAL_GetTick();
|
||||
|
||||
while (READ_BIT(hdiv->Instance->STAT, DIV_STAT_DIV_END) != DIV_STAT_DIV_END)
|
||||
{
|
||||
if ((HAL_GetTick() - tickstart) > DIV_TIMEOUT_VALUE)
|
||||
{
|
||||
hdiv->State = HAL_DIV_STATE_TIMEOUT;
|
||||
return HAL_TIMEOUT;
|
||||
}
|
||||
}
|
||||
|
||||
hdiv->State = HAL_DIV_STATE_END;
|
||||
|
||||
Calculated->Quotient = __HAL_DIV_GET_QUOT(hdiv);
|
||||
|
||||
Calculated->Remainder = __HAL_DIV_GET_REMD(hdiv);
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DIV_Exported_Functions_Group3 Peripheral Control functions
|
||||
* @brief DIV control functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get DIV State.
|
||||
* @param hdiv DIV handle
|
||||
* @retval DIV State.
|
||||
*/
|
||||
HAL_DIV_StateTypeDef HAL_DIV_Get_State(DIV_HandleTypeDef *hdiv)
|
||||
{
|
||||
return hdiv->State;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
#endif /* HAL_DIV_MODULE_ENABLED */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT Puya *****END OF FILE******************/
|
||||
Reference in New Issue
Block a user