summaryrefslogtreecommitdiffstats
path: root/bsps/arm/stm32h7/hal/stm32h7xx_hal_dts.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/arm/stm32h7/hal/stm32h7xx_hal_dts.c')
-rw-r--r--bsps/arm/stm32h7/hal/stm32h7xx_hal_dts.c1805
1 files changed, 981 insertions, 824 deletions
diff --git a/bsps/arm/stm32h7/hal/stm32h7xx_hal_dts.c b/bsps/arm/stm32h7/hal/stm32h7xx_hal_dts.c
index 0c0282f9b4..63ed290fe7 100644
--- a/bsps/arm/stm32h7/hal/stm32h7xx_hal_dts.c
+++ b/bsps/arm/stm32h7/hal/stm32h7xx_hal_dts.c
@@ -1,829 +1,986 @@
-/**
- ******************************************************************************
- * @file stm32h7xx_hal_dts.c
- * @author MCD Application Team
- * @brief DTS HAL module driver.
- * This file provides firmware functions to manage the following
- * functionalities of the DTS peripheral:
- * + Initialization and de-initialization functions
- * + Start/Stop operation functions in polling mode.
- * + Start/Stop operation functions in interrupt mode.
- * + Peripheral Control functions
- * + Peripheral State functions
- *
- @verbatim
-================================================================================
- ##### DTS Peripheral features #####
-================================================================================
-
- [..]
- The STM32h7xx device family integrate one DTS sensor interface :
-
-
- ##### How to use this driver #####
-================================================================================
- [..]
-
-
- @endverbatim
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2017 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 "stm32h7xx_hal.h"
-
-/** @addtogroup STM32H7xx_HAL_Driver
- * @{
- */
-
-#ifdef HAL_DTS_MODULE_ENABLED
-
-#if defined(DTS)
-
-/** @defgroup DTS DTS
+/**
+ ******************************************************************************
+ * @file stm32h7xx_hal_dts.c
+ * @author MCD Application Team
+ * @brief DTS HAL module driver.
+ * This file provides firmware functions to manage the following
+ * functionalities of the DTS peripheral:
+ * + Initialization and de-initialization functions
+ * + Start/Stop operation functions in polling mode.
+ * + Start/Stop operation functions in interrupt mode.
+ * + Peripheral Control functions
+ * + Peripheral State functions
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2017 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ @verbatim
+================================================================================
+ ##### DTS Peripheral features #####
+================================================================================
+
+ [..]
+ The STM32h7xx device family integrate one DTS sensor interface :
+
+
+ ##### How to use this driver #####
+================================================================================
+ [..]
+
+
+ @endverbatim
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32h7xx_hal.h"
+
+/** @addtogroup STM32H7xx_HAL_Driver
+ * @{
+ */
+
+#ifdef HAL_DTS_MODULE_ENABLED
+
+#if defined(DTS)
+
+/** @defgroup DTS DTS
* @ingroup RTEMSBSPsARMSTM32H7
- * @brief DTS HAL module driver
- * @{
- */
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/** @addtogroup DTS_Private_Constants
- * @{
- */
-
-/* @brief Delay for DTS startup time
- * @note Delay required to get ready for DTS Block.
- * @note Unit: ms
- */
-#define DTS_DELAY_STARTUP (1UL)
-
-/* @brief DTS measure ready flag time out value.
- * @note Maximal measurement time is when LSE is selected as ref_clock and
- * maximal sampling time is used, taking calibration into account this
- * is equivalent to ~620 us. Use 5 ms as arbitrary timeout
- * @note Unit: ms
- */
-#define TS_TIMEOUT_MS (5UL)
-
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
-static void DTS_ResetCallback(DTS_HandleTypeDef *hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
-/* Exported functions --------------------------------------------------------*/
-
-/** @defgroup DTS_Exported_Functions DTS Exported Functions
+ * @brief DTS HAL module driver
+ * @{
+ */
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/** @addtogroup DTS_Private_Constants
+ * @{
+ */
+
+/* @brief Delay for DTS startup time
+ * @note Delay required to get ready for DTS Block.
+ * @note Unit: ms
+ */
+#define DTS_DELAY_STARTUP (1UL)
+
+/* @brief DTS measure ready flag time out value.
+ * @note Maximal measurement time is when LSE is selected as ref_clock and
+ * maximal sampling time is used, taking calibration into account this
+ * is equivalent to ~620 us. Use 5 ms as arbitrary timeout
+ * @note Unit: ms
+ */
+#define TS_TIMEOUT_MS (5UL)
+
+/* @brief DTS factory temperatures
+ * @note Unit: degree Celsius
+ */
+#define DTS_FACTORY_TEMPERATURE1 (30UL)
+#define DTS_FACTORY_TEMPERATURE2 (130UL)
+
+/**
+ * @}
+ */
+
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Exported functions --------------------------------------------------------*/
+
+/** @defgroup DTS_Exported_Functions DTS Exported Functions
* @ingroup RTEMSBSPsARMSTM32H7
- * @{
- */
-
-/** @defgroup DTS_Exported_Functions_Group1 Initialization/de-initialization functions
+ * @{
+ */
+
+/** @defgroup DTS_Exported_Functions_Group1 Initialization/de-initialization functions
* @ingroup RTEMSBSPsARMSTM32H7
- * @brief Initialization and de-initialization functions.
- *
-@verbatim
- ===============================================================================
- ##### Initialization and de-initialization functions #####
- ===============================================================================
- [..] This section provides functions to initialize and de-initialize comparators
-
-@endverbatim
- * @{
- */
-
-/**
- * @brief Initialize the DTS according to the specified
- * parameters in the DTS_InitTypeDef and initialize the associated handle.
- * @param hdts DTS handle
- * @retval HAL status
- */
-HAL_StatusTypeDef HAL_DTS_Init(DTS_HandleTypeDef *hdts)
-{
- /* Check the DTS handle allocation */
- if (hdts == NULL)
- {
- return HAL_ERROR;
- }
-
- /* Check the parameters */
- assert_param(IS_DTS_ALL_INSTANCE(hdts->Instance));
- assert_param(IS_DTS_QUICKMEAS(hdts->Init.QuickMeasure));
- assert_param(IS_DTS_REFCLK(hdts->Init.RefClock));
- assert_param(IS_DTS_TRIGGERINPUT(hdts->Init.TriggerInput));
- assert_param(IS_DTS_SAMPLINGTIME(hdts->Init.SamplingTime));
- assert_param(IS_DTS_THRESHOLD(hdts->Init.HighThreshold));
- assert_param(IS_DTS_THRESHOLD(hdts->Init.LowThreshold));
-
- if (hdts->State == HAL_DTS_STATE_RESET)
- {
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
- /* Reset interrupt callbacks to legacy weak callbacks */
- DTS_ResetCallback(hdts);
-
- if (hdts->MspInitCallback == NULL)
- {
- hdts->MspInitCallback = HAL_DTS_MspInit;
- }
-
- /* Init the low level hardware : GPIO, CLOCK, NVIC */
- hdts->MspInitCallback(hdts);
-#else
- /* Init the low level hardware : GPIO, CLOCK, NVIC */
- HAL_DTS_MspInit(hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
- }
-
- /* Change the DTS state */
- hdts->State = HAL_DTS_STATE_BUSY;
-
- /* Check ramp coefficient */
- if (hdts->Instance->RAMPVALR == 0UL)
- {
- return HAL_ERROR;
- }
-
- /* Check factory calibration temperature */
- if (hdts->Instance->T0VALR1 == 0UL)
- {
- return HAL_ERROR;
- }
-
- /* Check Quick Measure option is enabled or disabled */
- if (hdts->Init.QuickMeasure == DTS_QUICKMEAS_DISABLE)
- {
- /* Check Reference clock selection */
- if (hdts->Init.RefClock == DTS_REFCLKSEL_PCLK)
- {
- assert_param(IS_DTS_DIVIDER_RATIO_NUMBER(hdts->Init.Divider));
- }
- /* Quick measurement mode disabled */
- CLEAR_BIT(hdts->Instance->CFGR1, DTS_CFGR1_Q_MEAS_OPT);
- }
- else
- {
- /* DTS_QUICKMEAS_ENABLE shall be used only when the LSE clock is
- selected as reference clock */
- if (hdts->Init.RefClock != DTS_REFCLKSEL_LSE)
- {
- return HAL_ERROR;
- }
-
- /* Quick measurement mode enabled - no calibration needed */
- SET_BIT(hdts->Instance->CFGR1, DTS_CFGR1_Q_MEAS_OPT);
- }
-
- /* set the DTS clk source */
- if (hdts->Init.RefClock == DTS_REFCLKSEL_LSE)
- {
- SET_BIT(hdts->Instance->CFGR1, DTS_CFGR1_REFCLK_SEL);
- }
- else
- {
- CLEAR_BIT(hdts->Instance->CFGR1, DTS_CFGR1_REFCLK_SEL);
- }
-
- MODIFY_REG(hdts->Instance->CFGR1, DTS_CFGR1_HSREF_CLK_DIV, (hdts->Init.Divider << DTS_CFGR1_HSREF_CLK_DIV_Pos));
- MODIFY_REG(hdts->Instance->CFGR1, DTS_CFGR1_TS1_SMP_TIME, hdts->Init.SamplingTime);
- MODIFY_REG(hdts->Instance->CFGR1, DTS_CFGR1_TS1_INTRIG_SEL, hdts->Init.TriggerInput);
- MODIFY_REG(hdts->Instance->ITR1, DTS_ITR1_TS1_HITTHD, (hdts->Init.HighThreshold << DTS_ITR1_TS1_HITTHD_Pos));
- MODIFY_REG(hdts->Instance->ITR1, DTS_ITR1_TS1_LITTHD, hdts->Init.LowThreshold);
-
- /* Change the DTS state */
- hdts->State = HAL_DTS_STATE_READY;
-
- return HAL_OK;
-}
-
-/**
- * @brief DeInitialize the DTS peripheral.
- * @note Deinitialization cannot be performed if the DTS configuration is locked.
- * To unlock the configuration, perform a system reset.
- * @param hdts DTS handle
- * @retval HAL status
- */
-HAL_StatusTypeDef HAL_DTS_DeInit(DTS_HandleTypeDef *hdts)
-{
- /* Check the DTS handle allocation */
- if (hdts == NULL)
- {
- return HAL_ERROR;
- }
-
- /* Check the parameter */
- assert_param(IS_DTS_ALL_INSTANCE(hdts->Instance));
-
- /* Set DTS_CFGR register to reset value */
- CLEAR_REG(hdts->Instance->CFGR1);
-
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
- if (hdts->MspDeInitCallback == NULL)
- {
- hdts->MspDeInitCallback = HAL_DTS_MspDeInit;
- }
-
- /* DeInit the low level hardware: CLOCK, NVIC.*/
- hdts->MspDeInitCallback(hdts);
-#else
- /* DeInit the low level hardware: CLOCK, NVIC.*/
- HAL_DTS_MspDeInit(hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
-
- hdts->State = HAL_DTS_STATE_RESET;
-
- return HAL_OK;
-}
-
-/**
- * @brief Initialize the DTS MSP.
- * @param hdts DTS handle
- * @retval None
- */
-__weak void HAL_DTS_MspInit(DTS_HandleTypeDef *hdts)
-{
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hdts);
-
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_DTS_MspInit could be implemented in the user file
- */
-}
-
-/**
- * @brief DeInitialize the DTS MSP.
- * @param hdts DTS handle
- * @retval None
- */
-__weak void HAL_DTS_MspDeInit(DTS_HandleTypeDef *hdts)
-{
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hdts);
-
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_DTS_MspDeInit could be implemented in the user file
- */
-}
-
-/**
- * @}
- */
-
-/** @defgroup DTS_Exported_Functions_Group2 Start-Stop operation functions
+ * @brief Initialization and de-initialization functions.
+ *
+@verbatim
+ ===============================================================================
+ ##### Initialization and de-initialization functions #####
+ ===============================================================================
+ [..] This section provides functions to initialize and de-initialize comparators
+
+@endverbatim
+ * @{
+ */
+
+/**
+ * @brief Initialize the DTS according to the specified
+ * parameters in the DTS_InitTypeDef and initialize the associated handle.
+ * @param hdts DTS handle
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_DTS_Init(DTS_HandleTypeDef *hdts)
+{
+ /* Check the DTS handle allocation */
+ if (hdts == NULL)
+ {
+ return HAL_ERROR;
+ }
+
+ /* Check the parameters */
+ assert_param(IS_DTS_ALL_INSTANCE(hdts->Instance));
+ assert_param(IS_DTS_QUICKMEAS(hdts->Init.QuickMeasure));
+ assert_param(IS_DTS_REFCLK(hdts->Init.RefClock));
+ assert_param(IS_DTS_TRIGGERINPUT(hdts->Init.TriggerInput));
+ assert_param(IS_DTS_SAMPLINGTIME(hdts->Init.SamplingTime));
+ assert_param(IS_DTS_THRESHOLD(hdts->Init.HighThreshold));
+ assert_param(IS_DTS_THRESHOLD(hdts->Init.LowThreshold));
+
+ if (hdts->State == HAL_DTS_STATE_RESET)
+ {
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+ /* Reset the DTS callback to the legacy weak callbacks */
+ hdts->EndCallback = HAL_DTS_EndCallback; /* End measure Callback */
+ hdts->LowCallback = HAL_DTS_LowCallback; /* low threshold Callback */
+ hdts->HighCallback = HAL_DTS_HighCallback; /* high threshold Callback */
+ hdts->AsyncEndCallback = HAL_DTS_AsyncEndCallback; /* Asynchronous end of measure Callback */
+ hdts->AsyncLowCallback = HAL_DTS_AsyncLowCallback; /* Asynchronous low threshold Callback */
+ hdts->AsyncHighCallback = HAL_DTS_AsyncHighCallback; /* Asynchronous high threshold Callback */
+
+ if (hdts->MspInitCallback == NULL)
+ {
+ hdts->MspInitCallback = HAL_DTS_MspInit;
+ }
+
+ /* Init the low level hardware : GPIO, CLOCK, NVIC */
+ hdts->MspInitCallback(hdts);
+#else
+ /* Init the low level hardware : GPIO, CLOCK, NVIC */
+ HAL_DTS_MspInit(hdts);
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+ }
+
+ /* Change the DTS state */
+ hdts->State = HAL_DTS_STATE_BUSY;
+
+ /* Check ramp coefficient */
+ if (hdts->Instance->RAMPVALR == 0UL)
+ {
+ return HAL_ERROR;
+ }
+
+ /* Check factory calibration temperature */
+ if (hdts->Instance->T0VALR1 == 0UL)
+ {
+ return HAL_ERROR;
+ }
+
+ /* Check Quick Measure option is enabled or disabled */
+ if (hdts->Init.QuickMeasure == DTS_QUICKMEAS_DISABLE)
+ {
+ /* Check Reference clock selection */
+ if (hdts->Init.RefClock == DTS_REFCLKSEL_PCLK)
+ {
+ assert_param(IS_DTS_DIVIDER_RATIO_NUMBER(hdts->Init.Divider));
+ }
+ /* Quick measurement mode disabled */
+ CLEAR_BIT(hdts->Instance->CFGR1, DTS_CFGR1_Q_MEAS_OPT);
+ }
+ else
+ {
+ /* DTS_QUICKMEAS_ENABLE shall be used only when the LSE clock is
+ selected as reference clock */
+ if (hdts->Init.RefClock != DTS_REFCLKSEL_LSE)
+ {
+ return HAL_ERROR;
+ }
+
+ /* Quick measurement mode enabled - no calibration needed */
+ SET_BIT(hdts->Instance->CFGR1, DTS_CFGR1_Q_MEAS_OPT);
+ }
+
+ /* set the DTS clk source */
+ if (hdts->Init.RefClock == DTS_REFCLKSEL_LSE)
+ {
+ SET_BIT(hdts->Instance->CFGR1, DTS_CFGR1_REFCLK_SEL);
+ }
+ else
+ {
+ CLEAR_BIT(hdts->Instance->CFGR1, DTS_CFGR1_REFCLK_SEL);
+ }
+
+ MODIFY_REG(hdts->Instance->CFGR1, DTS_CFGR1_HSREF_CLK_DIV, (hdts->Init.Divider << DTS_CFGR1_HSREF_CLK_DIV_Pos));
+ MODIFY_REG(hdts->Instance->CFGR1, DTS_CFGR1_TS1_SMP_TIME, hdts->Init.SamplingTime);
+ MODIFY_REG(hdts->Instance->CFGR1, DTS_CFGR1_TS1_INTRIG_SEL, hdts->Init.TriggerInput);
+ MODIFY_REG(hdts->Instance->ITR1, DTS_ITR1_TS1_HITTHD, (hdts->Init.HighThreshold << DTS_ITR1_TS1_HITTHD_Pos));
+ MODIFY_REG(hdts->Instance->ITR1, DTS_ITR1_TS1_LITTHD, hdts->Init.LowThreshold);
+
+ /* Change the DTS state */
+ hdts->State = HAL_DTS_STATE_READY;
+
+ return HAL_OK;
+}
+
+/**
+ * @brief DeInitialize the DTS peripheral.
+ * @note Deinitialization cannot be performed if the DTS configuration is locked.
+ * To unlock the configuration, perform a system reset.
+ * @param hdts DTS handle
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_DTS_DeInit(DTS_HandleTypeDef *hdts)
+{
+ /* Check the DTS handle allocation */
+ if (hdts == NULL)
+ {
+ return HAL_ERROR;
+ }
+
+ /* Check the parameter */
+ assert_param(IS_DTS_ALL_INSTANCE(hdts->Instance));
+
+ /* Set DTS_CFGR register to reset value */
+ CLEAR_REG(hdts->Instance->CFGR1);
+
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+ if (hdts->MspDeInitCallback == NULL)
+ {
+ hdts->MspDeInitCallback = HAL_DTS_MspDeInit;
+ }
+
+ /* DeInit the low level hardware: CLOCK, NVIC.*/
+ hdts->MspDeInitCallback(hdts);
+#else
+ /* DeInit the low level hardware: CLOCK, NVIC.*/
+ HAL_DTS_MspDeInit(hdts);
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+
+ hdts->State = HAL_DTS_STATE_RESET;
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Initialize the DTS MSP.
+ * @param hdts DTS handle
+ * @retval None
+ */
+__weak void HAL_DTS_MspInit(DTS_HandleTypeDef *hdts)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(hdts);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_DTS_MspInit could be implemented in the user file
+ */
+}
+
+/**
+ * @brief DeInitialize the DTS MSP.
+ * @param hdts DTS handle
+ * @retval None
+ */
+__weak void HAL_DTS_MspDeInit(DTS_HandleTypeDef *hdts)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(hdts);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_DTS_MspDeInit could be implemented in the user file
+ */
+}
+
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+/**
+ * @brief Register a user DTS callback to be used instead of the weak predefined callback.
+ * @param hdts DTS handle.
+ * @param CallbackID ID of the callback to be registered.
+ * This parameter can be one of the following values:
+ * @arg @ref HAL_DTS_MEAS_COMPLETE_CB_ID measure complete callback ID.
+ * @arg @ref HAL_DTS_ASYNC_MEAS_COMPLETE_CB_ID asynchronous measure complete callback ID.
+ * @arg @ref HAL_DTS_LOW_THRESHOLD_CB_ID low threshold detection callback ID.
+ * @arg @ref HAL_DTS_ASYNC_LOW_THRESHOLD_CB_ID asynchronous low threshold detection callback ID.
+ * @arg @ref HAL_DTS_HIGH_THRESHOLD_CB_ID high threshold detection callback ID.
+ * @arg @ref HAL_DTS_ASYNC_HIGH_THRESHOLD_CB_ID asynchronous high threshold detection callback ID.
+ * @arg @ref HAL_DTS_MSPINIT_CB_ID MSP init callback ID.
+ * @arg @ref HAL_DTS_MSPDEINIT_CB_ID MSP de-init callback ID.
+ * @param pCallback pointer to the callback function.
+ * @retval HAL status.
+ */
+HAL_StatusTypeDef HAL_DTS_RegisterCallback(DTS_HandleTypeDef *hdts,
+ HAL_DTS_CallbackIDTypeDef CallbackID,
+ pDTS_CallbackTypeDef pCallback)
+{
+ HAL_StatusTypeDef status = HAL_OK;
+
+ /* Check parameters */
+ if (pCallback == NULL)
+ {
+ /* Update status */
+ status = HAL_ERROR;
+ }
+ else
+ {
+ if (hdts->State == HAL_DTS_STATE_READY)
+ {
+ switch (CallbackID)
+ {
+ case HAL_DTS_MEAS_COMPLETE_CB_ID :
+ hdts->EndCallback = pCallback;
+ break;
+ case HAL_DTS_ASYNC_MEAS_COMPLETE_CB_ID :
+ hdts->AsyncEndCallback = pCallback;
+ break;
+ case HAL_DTS_LOW_THRESHOLD_CB_ID :
+ hdts->LowCallback = pCallback;
+ break;
+ case HAL_DTS_ASYNC_LOW_THRESHOLD_CB_ID :
+ hdts->AsyncLowCallback = pCallback;
+ break;
+ case HAL_DTS_HIGH_THRESHOLD_CB_ID :
+ hdts->HighCallback = pCallback;
+ break;
+ case HAL_DTS_ASYNC_HIGH_THRESHOLD_CB_ID :
+ hdts->AsyncHighCallback = pCallback;
+ break;
+ case HAL_DTS_MSPINIT_CB_ID :
+ hdts->MspInitCallback = pCallback;
+ break;
+ case HAL_DTS_MSPDEINIT_CB_ID :
+ hdts->MspDeInitCallback = pCallback;
+ break;
+ default :
+ /* Update status */
+ status = HAL_ERROR;
+ break;
+ }
+ }
+ else if (hdts->State == HAL_DTS_STATE_RESET)
+ {
+ switch (CallbackID)
+ {
+ case HAL_DTS_MSPINIT_CB_ID :
+ hdts->MspInitCallback = pCallback;
+ break;
+ case HAL_DTS_MSPDEINIT_CB_ID :
+ hdts->MspDeInitCallback = pCallback;
+ break;
+ default :
+ /* Update status */
+ status = HAL_ERROR;
+ break;
+ }
+ }
+ else
+ {
+ /* Update status */
+ status = HAL_ERROR;
+ }
+ }
+
+ /* Return function status */
+ return status;
+}
+
+/**
+ * @brief Unregister a user DTS callback.
+ * DTS callback is redirected to the weak predefined callback.
+ * @param hdts DTS handle.
+ * @param CallbackID ID of the callback to be unregistered.
+ * This parameter can be one of the following values:
+ * @arg @ref HAL_DTS_MEAS_COMPLETE_CB_ID measure complete callback ID.
+ * @arg @ref HAL_DTS_ASYNC_MEAS_COMPLETE_CB_ID asynchronous measure complete callback ID.
+ * @arg @ref HAL_DTS_LOW_THRESHOLD_CB_ID low threshold detection callback ID.
+ * @arg @ref HAL_DTS_ASYNC_LOW_THRESHOLD_CB_ID asynchronous low threshold detection callback ID.
+ * @arg @ref HAL_DTS_HIGH_THRESHOLD_CB_ID high threshold detection callback ID.
+ * @arg @ref HAL_DTS_ASYNC_HIGH_THRESHOLD_CB_ID asynchronous high threshold detection callback ID.
+ * @arg @ref HAL_DTS_MSPINIT_CB_ID MSP init callback ID.
+ * @arg @ref HAL_DTS_MSPDEINIT_CB_ID MSP de-init callback ID.
+ * @retval HAL status.
+ */
+HAL_StatusTypeDef HAL_DTS_UnRegisterCallback(DTS_HandleTypeDef *hdts,
+ HAL_DTS_CallbackIDTypeDef CallbackID)
+{
+ HAL_StatusTypeDef status = HAL_OK;
+
+ if (hdts->State == HAL_DTS_STATE_READY)
+ {
+ switch (CallbackID)
+ {
+ case HAL_DTS_MEAS_COMPLETE_CB_ID :
+ hdts->EndCallback = HAL_DTS_EndCallback;
+ break;
+ case HAL_DTS_ASYNC_MEAS_COMPLETE_CB_ID :
+ hdts->AsyncEndCallback = HAL_DTS_AsyncEndCallback;
+ break;
+ case HAL_DTS_LOW_THRESHOLD_CB_ID :
+ hdts->LowCallback = HAL_DTS_LowCallback;
+ break;
+ case HAL_DTS_ASYNC_LOW_THRESHOLD_CB_ID :
+ hdts->AsyncLowCallback = HAL_DTS_AsyncLowCallback;
+ break;
+ case HAL_DTS_HIGH_THRESHOLD_CB_ID :
+ hdts->HighCallback = HAL_DTS_HighCallback;
+ break;
+ case HAL_DTS_ASYNC_HIGH_THRESHOLD_CB_ID :
+ hdts->AsyncHighCallback = HAL_DTS_AsyncHighCallback;
+ break;
+ case HAL_DTS_MSPINIT_CB_ID :
+ hdts->MspInitCallback = HAL_DTS_MspInit;
+ break;
+ case HAL_DTS_MSPDEINIT_CB_ID :
+ hdts->MspDeInitCallback = HAL_DTS_MspDeInit;
+ break;
+ default :
+ /* Update status */
+ status = HAL_ERROR;
+ break;
+ }
+ }
+ else if (hdts->State == HAL_DTS_STATE_RESET)
+ {
+ switch (CallbackID)
+ {
+ case HAL_DTS_MSPINIT_CB_ID :
+ hdts->MspInitCallback = HAL_DTS_MspInit;
+ break;
+ case HAL_DTS_MSPDEINIT_CB_ID :
+ hdts->MspDeInitCallback = HAL_DTS_MspDeInit;
+ break;
+ default :
+ /* Update status */
+ status = HAL_ERROR;
+ break;
+ }
+ }
+ else
+ {
+ /* Update status */
+ status = HAL_ERROR;
+ }
+
+ /* Return function status */
+ return status;
+}
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+
+/**
+ * @}
+ */
+
+/** @defgroup DTS_Exported_Functions_Group2 Start-Stop operation functions
* @ingroup RTEMSBSPsARMSTM32H7
- * @brief Start-Stop operation functions.
- *
-@verbatim
- ===============================================================================
- ##### DTS Start Stop operation functions #####
- ===============================================================================
- [..] This section provides functions allowing to:
- (+) Start a DTS Sensor without interrupt.
- (+) Stop a DTS Sensor without interrupt.
- (+) Start a DTS Sensor with interrupt generation.
- (+) Stop a DTS Sensor with interrupt generation.
-
-@endverbatim
- * @{
- */
-
-/**
- * @brief Start the DTS sensor.
- * @param hdts DTS handle
- * @retval HAL status
- */
-HAL_StatusTypeDef HAL_DTS_Start(DTS_HandleTypeDef *hdts)
-{
- uint32_t Ref_Time;
-
- /* Check the DTS handle allocation */
- if (hdts == NULL)
- {
- return HAL_ERROR;
- }
-
- if (hdts->State == HAL_DTS_STATE_READY)
- {
- hdts->State = HAL_DTS_STATE_BUSY;
-
- /* Enable DTS sensor */
- __HAL_DTS_ENABLE(hdts);
-
- /* Get Start Tick*/
- Ref_Time = HAL_GetTick();
-
- /* Wait till TS1_RDY flag is set */
- while (__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_RDY) == RESET)
- {
- if ((HAL_GetTick() - Ref_Time) > DTS_DELAY_STARTUP)
- {
- return HAL_TIMEOUT;
- }
- }
-
- if (__HAL_DTS_GET_TRIGGER(hdts) == DTS_TRIGGER_HW_NONE)
- {
- /* Start continuous measures */
- SET_BIT(hdts->Instance->CFGR1, DTS_CFGR1_TS1_START);
-
- /* Ensure start is taken into account */
- HAL_Delay(TS_TIMEOUT_MS);
- }
-
- hdts->State = HAL_DTS_STATE_READY;
- }
- else
- {
- return HAL_BUSY;
- }
-
- return HAL_OK;
-}
-
-/**
- * @brief Stop the DTS Sensor.
- * @param hdts DTS handle
- * @retval HAL status
- */
-HAL_StatusTypeDef HAL_DTS_Stop(DTS_HandleTypeDef *hdts)
-{
- /* Check the DTS handle allocation */
- if (hdts == NULL)
- {
- return HAL_ERROR;
- }
-
- if (hdts->State == HAL_DTS_STATE_READY)
- {
- hdts->State = HAL_DTS_STATE_BUSY;
-
- if (__HAL_DTS_GET_TRIGGER(hdts) == DTS_TRIGGER_HW_NONE)
- {
- CLEAR_BIT(hdts->Instance->CFGR1, DTS_CFGR1_TS1_START);
- }
-
- /* Disable the selected DTS sensor */
- __HAL_DTS_DISABLE(hdts);
-
- hdts->State = HAL_DTS_STATE_READY;
- }
- else
- {
- return HAL_BUSY;
- }
-
- return HAL_OK;
-}
-
-/**
- * @brief Enable the interrupt(s) and start the DTS sensor
- * @param hdts DTS handle
- * @retval HAL status
- */
-HAL_StatusTypeDef HAL_DTS_Start_IT(DTS_HandleTypeDef *hdts)
-{
- uint32_t Ref_Time;
-
- /* Check the DTS handle allocation */
- if (hdts == NULL)
- {
- return HAL_ERROR;
- }
-
- if (hdts->State == HAL_DTS_STATE_READY)
- {
- hdts->State = HAL_DTS_STATE_BUSY;
-
- /* On Asynchronous mode enable the asynchronous IT */
- if (hdts->Init.RefClock == DTS_REFCLKSEL_LSE)
- {
- __HAL_DTS_ENABLE_IT(hdts, DTS_IT_TS1_AITE | DTS_IT_TS1_AITL | DTS_IT_TS1_AITH);
- }
- else
- {
- /* Enable the IT(s) */
- __HAL_DTS_ENABLE_IT(hdts, DTS_IT_TS1_ITE | DTS_IT_TS1_ITL | DTS_IT_TS1_ITH);
- }
-
- /* Enable the selected DTS sensor */
- __HAL_DTS_ENABLE(hdts);
-
- /* Get Start Tick*/
- Ref_Time = HAL_GetTick();
-
- /* Wait till TS1_RDY flag is set */
- while (__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_RDY) == RESET)
- {
- if ((HAL_GetTick() - Ref_Time) > DTS_DELAY_STARTUP)
- {
- return HAL_TIMEOUT;
- }
- }
-
- if (__HAL_DTS_GET_TRIGGER(hdts) == DTS_TRIGGER_HW_NONE)
- {
- /* Start continuous measures */
- SET_BIT(hdts->Instance->CFGR1, DTS_CFGR1_TS1_START);
-
- /* Ensure start is taken into account */
- HAL_Delay(TS_TIMEOUT_MS);
- }
-
- hdts->State = HAL_DTS_STATE_READY;
- }
- else
- {
- return HAL_BUSY;
- }
-
- return HAL_OK;
-}
-
-/**
- * @brief Disable the interrupt(s) and stop the DTS sensor.
- * @param hdts DTS handle
- * @retval HAL status
- */
-HAL_StatusTypeDef HAL_DTS_Stop_IT(DTS_HandleTypeDef *hdts)
-{
- /* Check the DTS handle allocation */
- if (hdts == NULL)
- {
- return HAL_ERROR;
- }
-
- if (hdts->State == HAL_DTS_STATE_READY)
- {
- hdts->State = HAL_DTS_STATE_BUSY;
-
- /* On Asynchronous mode disable the asynchronous IT */
- if (hdts->Init.RefClock == DTS_REFCLKSEL_LSE)
- {
- __HAL_DTS_DISABLE_IT(hdts, DTS_IT_TS1_AITE | DTS_IT_TS1_AITL | DTS_IT_TS1_AITH);
- }
- else
- {
- /* Disable the IT(s) */
- __HAL_DTS_DISABLE_IT(hdts, DTS_IT_TS1_ITE | DTS_IT_TS1_ITL | DTS_IT_TS1_ITH);
- }
-
- if (__HAL_DTS_GET_TRIGGER(hdts) == DTS_TRIGGER_HW_NONE)
- {
- CLEAR_BIT(hdts->Instance->CFGR1, DTS_CFGR1_TS1_START);
- }
-
- /* Disable the selected DTS sensor */
- __HAL_DTS_DISABLE(hdts);
-
- hdts->State = HAL_DTS_STATE_READY;
- }
- else
- {
- return HAL_BUSY;
- }
-
- return HAL_OK;
-}
-
-/**
- * @brief Get temperature from DTS
- * @param hdts DTS handle
- * @param Temperature Temperature in deg C
- * @note This function retrieves latest available measure
- * @retval HAL status
- */
-HAL_StatusTypeDef HAL_DTS_GetTemperature(DTS_HandleTypeDef *hdts, int32_t *Temperature)
-{
- uint32_t freq_meas;
- uint32_t samples;
- uint32_t t0_temp;
- uint32_t t0_freq;
- uint32_t ramp_coeff;
-
- if (hdts->State == HAL_DTS_STATE_READY)
- {
- hdts->State = HAL_DTS_STATE_BUSY;
-
- /* Get the total number of samples */
- samples = (hdts->Instance->DR & DTS_DR_TS1_MFREQ);
-
- if ((hdts->Init.SamplingTime == 0UL) || (samples == 0UL))
- {
- hdts->State = HAL_DTS_STATE_READY;
- return HAL_ERROR;
- }
-
- if ((hdts->Init.RefClock) == DTS_REFCLKSEL_LSE)
- {
- freq_meas = (LSE_VALUE * samples) / (hdts->Init.SamplingTime >> DTS_CFGR1_TS1_SMP_TIME_Pos); /* On Hz */
- }
- else
- {
- freq_meas = (HAL_RCCEx_GetD3PCLK1Freq() * (hdts->Init.SamplingTime >> DTS_CFGR1_TS1_SMP_TIME_Pos)) / samples; /* On Hz */
- }
-
- /* Read factory settings */
- t0_temp = hdts->Instance->T0VALR1 >> DTS_T0VALR1_TS1_T0_Pos;
-
- if (t0_temp == 0UL)
- {
- t0_temp = 30UL; /* 30 deg C */
- }
- else if (t0_temp == 1UL)
- {
- t0_temp = 110UL; /* 110 deg C */
- }
- else
- {
- hdts->State = HAL_DTS_STATE_READY;
- return HAL_ERROR;
- }
-
- t0_freq = (hdts->Instance->T0VALR1 & DTS_T0VALR1_TS1_FMT0) * 100UL; /* Hz */
-
- ramp_coeff = hdts->Instance->RAMPVALR & DTS_RAMPVALR_TS1_RAMP_COEFF; /* deg C/Hz */
-
- if (ramp_coeff == 0UL)
- {
- hdts->State = HAL_DTS_STATE_READY;
- return HAL_ERROR;
- }
-
- /* Figure out the temperature deg C */
- *Temperature = (int32_t)t0_temp + (((int32_t)freq_meas - (int32_t)t0_freq) / (int32_t)ramp_coeff);
-
- hdts->State = HAL_DTS_STATE_READY;
- }
- else
- {
- return HAL_BUSY;
- }
-
- return HAL_OK;
-}
-
-/**
- * @brief DTS sensor IRQ Handler.
- * @param hdts DTS handle
- * @retval None
- */
-void HAL_DTS_IRQHandler(DTS_HandleTypeDef *hdts)
-{
- /* Check end of measure Asynchronous IT */
- if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_AITE)) != RESET)
- {
- __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_AITE);
-
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
- hdts->AsyncEndCallback(hdts);
-#else
- HAL_DTS_AsyncEndCallback(hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
- }
-
- /* Check low threshold Asynchronous IT */
- if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_AITL)) != RESET)
- {
- __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_AITL);
-
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
- hdts->AsyncLowCallback(hdts);
-#else
- HAL_DTS_AsyncLowCallback(hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
- }
-
- /* Check high threshold Asynchronous IT */
- if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_AITH)) != RESET)
- {
- __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_AITH);
-
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
- hdts->AsyncHighCallback(hdts);
-#else
- HAL_DTS_AsyncHighCallback(hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
- }
-
- /* Check end of measure IT */
- if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_ITE)) != RESET)
- {
- __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_ITE);
-
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
- hdts->EndCallback(hdts);
-#else
- HAL_DTS_EndCallback(hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
- }
-
- /* Check low threshold IT */
- if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_ITL)) != RESET)
- {
- __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_ITL);
-
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
- hdts->LowCallback(hdts);
-#else
- HAL_DTS_LowCallback(hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
- }
-
- /* Check high threshold IT */
- if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_ITH)) != RESET)
- {
- __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_ITH);
-
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
- hdts->HighCallback(hdts);
-#else
- HAL_DTS_HighCallback(hdts);
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
- }
-}
-
-/**
- * @brief DTS Sensor End measure callback.
- * @param hdts DTS handle
- * @retval None
- */
-__weak void HAL_DTS_EndCallback(DTS_HandleTypeDef *hdts)
-{
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hdts);
-
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_DTS_EndCallback should be implemented in the user file
- */
-}
-
-/**
- * @brief DTS Sensor low threshold measure callback.
- * @param hdts DTS handle
- * @retval None
- */
-__weak void HAL_DTS_LowCallback(DTS_HandleTypeDef *hdts)
-{
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hdts);
-
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_DTS_LowCallback should be implemented in the user file
- */
-}
-
-/**
- * @brief DTS Sensor high threshold measure callback.
- * @param hdts DTS handle
- * @retval None
- */
-__weak void HAL_DTS_HighCallback(DTS_HandleTypeDef *hdts)
-{
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hdts);
-
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_DTS_HighCallback should be implemented in the user file
- */
-}
-
-/**
- * @brief DTS Sensor asynchronous end measure callback.
- * @param hdts DTS handle
- * @retval None
- */
-__weak void HAL_DTS_AsyncEndCallback(DTS_HandleTypeDef *hdts)
-{
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hdts);
-
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_DTS_AsyncEndCallback should be implemented in the user file
- */
-}
-
-/**
- * @brief DTS Sensor asynchronous low threshold measure callback.
- * @param hdts DTS handle
- * @retval None
- */
-__weak void HAL_DTS_AsyncLowCallback(DTS_HandleTypeDef *hdts)
-{
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hdts);
-
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_DTS_AsyncLowCallback should be implemented in the user file
- */
-}
-
-/**
- * @brief DTS Sensor asynchronous high threshold measure callback.
- * @param hdts DTS handle
- * @retval None
- */
-__weak void HAL_DTS_AsyncHighCallback(DTS_HandleTypeDef *hdts)
-{
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hdts);
-
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_DTS_AsyncHighCallback should be implemented in the user file
- */
-}
-
-/**
- * @}
- */
-
-/** @defgroup DTS_Exported_Functions_Group3 Peripheral State functions
+ * @brief Start-Stop operation functions.
+ *
+@verbatim
+ ===============================================================================
+ ##### DTS Start Stop operation functions #####
+ ===============================================================================
+ [..] This section provides functions allowing to:
+ (+) Start a DTS Sensor without interrupt.
+ (+) Stop a DTS Sensor without interrupt.
+ (+) Start a DTS Sensor with interrupt generation.
+ (+) Stop a DTS Sensor with interrupt generation.
+
+@endverbatim
+ * @{
+ */
+
+/**
+ * @brief Start the DTS sensor.
+ * @param hdts DTS handle
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_DTS_Start(DTS_HandleTypeDef *hdts)
+{
+ uint32_t Ref_Time;
+
+ /* Check the DTS handle allocation */
+ if (hdts == NULL)
+ {
+ return HAL_ERROR;
+ }
+
+ if (hdts->State == HAL_DTS_STATE_READY)
+ {
+ hdts->State = HAL_DTS_STATE_BUSY;
+
+ /* Enable DTS sensor */
+ __HAL_DTS_ENABLE(hdts);
+
+ /* Get Start Tick*/
+ Ref_Time = HAL_GetTick();
+
+ /* Wait till TS1_RDY flag is set */
+ while (__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_RDY) == RESET)
+ {
+ if ((HAL_GetTick() - Ref_Time) > DTS_DELAY_STARTUP)
+ {
+ return HAL_TIMEOUT;
+ }
+ }
+
+ if (__HAL_DTS_GET_TRIGGER(hdts) == DTS_TRIGGER_HW_NONE)
+ {
+ /* Start continuous measures */
+ SET_BIT(hdts->Instance->CFGR1, DTS_CFGR1_TS1_START);
+
+ /* Ensure start is taken into account */
+ HAL_Delay(TS_TIMEOUT_MS);
+ }
+
+ hdts->State = HAL_DTS_STATE_READY;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Stop the DTS Sensor.
+ * @param hdts DTS handle
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_DTS_Stop(DTS_HandleTypeDef *hdts)
+{
+ /* Check the DTS handle allocation */
+ if (hdts == NULL)
+ {
+ return HAL_ERROR;
+ }
+
+ if (hdts->State == HAL_DTS_STATE_READY)
+ {
+ hdts->State = HAL_DTS_STATE_BUSY;
+
+ if (__HAL_DTS_GET_TRIGGER(hdts) == DTS_TRIGGER_HW_NONE)
+ {
+ CLEAR_BIT(hdts->Instance->CFGR1, DTS_CFGR1_TS1_START);
+ }
+
+ /* Disable the selected DTS sensor */
+ __HAL_DTS_DISABLE(hdts);
+
+ hdts->State = HAL_DTS_STATE_READY;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Enable the interrupt(s) and start the DTS sensor
+ * @param hdts DTS handle
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_DTS_Start_IT(DTS_HandleTypeDef *hdts)
+{
+ uint32_t Ref_Time;
+
+ /* Check the DTS handle allocation */
+ if (hdts == NULL)
+ {
+ return HAL_ERROR;
+ }
+
+ if (hdts->State == HAL_DTS_STATE_READY)
+ {
+ hdts->State = HAL_DTS_STATE_BUSY;
+
+ /* On Asynchronous mode enable the asynchronous IT */
+ if (hdts->Init.RefClock == DTS_REFCLKSEL_LSE)
+ {
+ __HAL_DTS_ENABLE_IT(hdts, DTS_IT_TS1_AITE | DTS_IT_TS1_AITL | DTS_IT_TS1_AITH);
+ }
+ else
+ {
+ /* Enable the IT(s) */
+ __HAL_DTS_ENABLE_IT(hdts, DTS_IT_TS1_ITE | DTS_IT_TS1_ITL | DTS_IT_TS1_ITH);
+ }
+
+ /* Enable the selected DTS sensor */
+ __HAL_DTS_ENABLE(hdts);
+
+ /* Get Start Tick*/
+ Ref_Time = HAL_GetTick();
+
+ /* Wait till TS1_RDY flag is set */
+ while (__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_RDY) == RESET)
+ {
+ if ((HAL_GetTick() - Ref_Time) > DTS_DELAY_STARTUP)
+ {
+ return HAL_TIMEOUT;
+ }
+ }
+
+ if (__HAL_DTS_GET_TRIGGER(hdts) == DTS_TRIGGER_HW_NONE)
+ {
+ /* Start continuous measures */
+ SET_BIT(hdts->Instance->CFGR1, DTS_CFGR1_TS1_START);
+
+ /* Ensure start is taken into account */
+ HAL_Delay(TS_TIMEOUT_MS);
+ }
+
+ hdts->State = HAL_DTS_STATE_READY;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable the interrupt(s) and stop the DTS sensor.
+ * @param hdts DTS handle
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_DTS_Stop_IT(DTS_HandleTypeDef *hdts)
+{
+ /* Check the DTS handle allocation */
+ if (hdts == NULL)
+ {
+ return HAL_ERROR;
+ }
+
+ if (hdts->State == HAL_DTS_STATE_READY)
+ {
+ hdts->State = HAL_DTS_STATE_BUSY;
+
+ /* On Asynchronous mode disable the asynchronous IT */
+ if (hdts->Init.RefClock == DTS_REFCLKSEL_LSE)
+ {
+ __HAL_DTS_DISABLE_IT(hdts, DTS_IT_TS1_AITE | DTS_IT_TS1_AITL | DTS_IT_TS1_AITH);
+ }
+ else
+ {
+ /* Disable the IT(s) */
+ __HAL_DTS_DISABLE_IT(hdts, DTS_IT_TS1_ITE | DTS_IT_TS1_ITL | DTS_IT_TS1_ITH);
+ }
+
+ if (__HAL_DTS_GET_TRIGGER(hdts) == DTS_TRIGGER_HW_NONE)
+ {
+ CLEAR_BIT(hdts->Instance->CFGR1, DTS_CFGR1_TS1_START);
+ }
+
+ /* Disable the selected DTS sensor */
+ __HAL_DTS_DISABLE(hdts);
+
+ hdts->State = HAL_DTS_STATE_READY;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Get temperature from DTS
+ * @param hdts DTS handle
+ * @param Temperature Temperature in deg C
+ * @note This function retrieves latest available measure
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_DTS_GetTemperature(DTS_HandleTypeDef *hdts, int32_t *Temperature)
+{
+ uint32_t freq_meas;
+ uint32_t samples;
+ uint32_t t0_temp;
+ uint32_t t0_freq;
+ uint32_t ramp_coeff;
+
+ if (hdts->State == HAL_DTS_STATE_READY)
+ {
+ hdts->State = HAL_DTS_STATE_BUSY;
+
+ /* Get the total number of samples */
+ samples = (hdts->Instance->DR & DTS_DR_TS1_MFREQ);
+
+ if ((hdts->Init.SamplingTime == 0UL) || (samples == 0UL))
+ {
+ hdts->State = HAL_DTS_STATE_READY;
+ return HAL_ERROR;
+ }
+
+ if ((hdts->Init.RefClock) == DTS_REFCLKSEL_LSE)
+ {
+ freq_meas = (LSE_VALUE * samples) / (hdts->Init.SamplingTime >> DTS_CFGR1_TS1_SMP_TIME_Pos); /* On Hz */
+ }
+ else
+ {
+ freq_meas = (HAL_RCCEx_GetD3PCLK1Freq() * (hdts->Init.SamplingTime >> DTS_CFGR1_TS1_SMP_TIME_Pos)) / samples; /* On Hz */
+ }
+
+ /* Read factory settings */
+ t0_temp = hdts->Instance->T0VALR1 >> DTS_T0VALR1_TS1_T0_Pos;
+
+ if (t0_temp == 0UL)
+ {
+ t0_temp = DTS_FACTORY_TEMPERATURE1; /* 30 deg C */
+ }
+ else if (t0_temp == 1UL)
+ {
+ t0_temp = DTS_FACTORY_TEMPERATURE2; /* 130 deg C */
+ }
+ else
+ {
+ hdts->State = HAL_DTS_STATE_READY;
+ return HAL_ERROR;
+ }
+
+ t0_freq = (hdts->Instance->T0VALR1 & DTS_T0VALR1_TS1_FMT0) * 100UL; /* Hz */
+
+ ramp_coeff = hdts->Instance->RAMPVALR & DTS_RAMPVALR_TS1_RAMP_COEFF; /* deg C/Hz */
+
+ if (ramp_coeff == 0UL)
+ {
+ hdts->State = HAL_DTS_STATE_READY;
+ return HAL_ERROR;
+ }
+
+ /* Figure out the temperature deg C */
+ *Temperature = (int32_t)t0_temp + (((int32_t)freq_meas - (int32_t)t0_freq) / (int32_t)ramp_coeff);
+
+ hdts->State = HAL_DTS_STATE_READY;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+
+ return HAL_OK;
+}
+
+/**
+ * @brief DTS sensor IRQ Handler.
+ * @param hdts DTS handle
+ * @retval None
+ */
+void HAL_DTS_IRQHandler(DTS_HandleTypeDef *hdts)
+{
+ /* Check end of measure Asynchronous IT */
+ if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_AITE)) != RESET)
+ {
+ __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_AITE);
+
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+ hdts->AsyncEndCallback(hdts);
+#else
+ HAL_DTS_AsyncEndCallback(hdts);
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+ }
+
+ /* Check low threshold Asynchronous IT */
+ if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_AITL)) != RESET)
+ {
+ __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_AITL);
+
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+ hdts->AsyncLowCallback(hdts);
+#else
+ HAL_DTS_AsyncLowCallback(hdts);
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+ }
+
+ /* Check high threshold Asynchronous IT */
+ if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_AITH)) != RESET)
+ {
+ __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_AITH);
+
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+ hdts->AsyncHighCallback(hdts);
+#else
+ HAL_DTS_AsyncHighCallback(hdts);
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+ }
+
+ /* Check end of measure IT */
+ if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_ITE)) != RESET)
+ {
+ __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_ITE);
+
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+ hdts->EndCallback(hdts);
+#else
+ HAL_DTS_EndCallback(hdts);
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+ }
+
+ /* Check low threshold IT */
+ if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_ITL)) != RESET)
+ {
+ __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_ITL);
+
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+ hdts->LowCallback(hdts);
+#else
+ HAL_DTS_LowCallback(hdts);
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+ }
+
+ /* Check high threshold IT */
+ if ((__HAL_DTS_GET_FLAG(hdts, DTS_FLAG_TS1_ITH)) != RESET)
+ {
+ __HAL_DTS_CLEAR_FLAG(hdts, DTS_FLAG_TS1_ITH);
+
+#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
+ hdts->HighCallback(hdts);
+#else
+ HAL_DTS_HighCallback(hdts);
+#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
+ }
+}
+
+/**
+ * @brief DTS Sensor End measure callback.
+ * @param hdts DTS handle
+ * @retval None
+ */
+__weak void HAL_DTS_EndCallback(DTS_HandleTypeDef *hdts)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(hdts);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_DTS_EndCallback should be implemented in the user file
+ */
+}
+
+/**
+ * @brief DTS Sensor low threshold measure callback.
+ * @param hdts DTS handle
+ * @retval None
+ */
+__weak void HAL_DTS_LowCallback(DTS_HandleTypeDef *hdts)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(hdts);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_DTS_LowCallback should be implemented in the user file
+ */
+}
+
+/**
+ * @brief DTS Sensor high threshold measure callback.
+ * @param hdts DTS handle
+ * @retval None
+ */
+__weak void HAL_DTS_HighCallback(DTS_HandleTypeDef *hdts)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(hdts);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_DTS_HighCallback should be implemented in the user file
+ */
+}
+
+/**
+ * @brief DTS Sensor asynchronous end measure callback.
+ * @param hdts DTS handle
+ * @retval None
+ */
+__weak void HAL_DTS_AsyncEndCallback(DTS_HandleTypeDef *hdts)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(hdts);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_DTS_AsyncEndCallback should be implemented in the user file
+ */
+}
+
+/**
+ * @brief DTS Sensor asynchronous low threshold measure callback.
+ * @param hdts DTS handle
+ * @retval None
+ */
+__weak void HAL_DTS_AsyncLowCallback(DTS_HandleTypeDef *hdts)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(hdts);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_DTS_AsyncLowCallback should be implemented in the user file
+ */
+}
+
+/**
+ * @brief DTS Sensor asynchronous high threshold measure callback.
+ * @param hdts DTS handle
+ * @retval None
+ */
+__weak void HAL_DTS_AsyncHighCallback(DTS_HandleTypeDef *hdts)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(hdts);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_DTS_AsyncHighCallback should be implemented in the user file
+ */
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup DTS_Exported_Functions_Group3 Peripheral State functions
* @ingroup RTEMSBSPsARMSTM32H7
- * @brief Peripheral State functions.
- *
-@verbatim
- ===============================================================================
- ##### Peripheral State functions #####
- ===============================================================================
- [..]
- This subsection permits to get in run-time the status of the peripheral.
-
-@endverbatim
- * @{
- */
-
-/**
- * @brief Return the DTS handle state.
- * @param hdts DTS handle
- * @retval HAL state
- */
-HAL_DTS_StateTypeDef HAL_DTS_GetState(DTS_HandleTypeDef *hdts)
-{
- /* Check the DTS handle allocation */
- if (hdts == NULL)
- {
- return HAL_DTS_STATE_RESET;
- }
-
- /* Return DTS handle state */
- return hdts->State;
-}
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/* Private functions ---------------------------------------------------------*/
-
-/** @defgroup DTS_Private_Functions DTS Private Functions
- * @ingroup RTEMSBSPsARMSTM32H7
- * @{
- */
-#if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
-/**
- * @brief Reset interrupt callbacks to the legacy weak callbacks.
- * @param hdts pointer to a DTS_HandleTypeDef structure that contains
- * the configuration information for DTS module.
- * @retval None
- */
-static void DTS_ResetCallback(DTS_HandleTypeDef *hdts)
-{
- /* Reset the DTS callback to the legacy weak callbacks */
- hdts->DTS_EndCallback = HAL_DTS_EndCallback; /* End measure Callback */
- hdts->DTS_LowCallback = HAL_DTS_LowCallback; /* low threshold Callback */
- hdts->DTS_HighCallback = HAL_DTS_HighCallback; /* high threshold Callback */
- hdts->DTS_AsyncEndCallback = HAL_DTS_AsyncEndCallback; /* Asynchronous end of measure Callback */
- hdts->DTS_AsyncLowCallback = HAL_DTS_AsyncLowCallback; /* Asynchronous low threshold Callback */
- hdts->DTS_AsyncHighCallback = HAL_DTS_AsyncHighCallback; /* Asynchronous high threshold Callback */
-}
-#endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-#endif /* DTS */
-
-#endif /* HAL_DTS_MODULE_ENABLED */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+ * @brief Peripheral State functions.
+ *
+@verbatim
+ ===============================================================================
+ ##### Peripheral State functions #####
+ ===============================================================================
+ [..]
+ This subsection permits to get in run-time the status of the peripheral.
+
+@endverbatim
+ * @{
+ */
+
+/**
+ * @brief Return the DTS handle state.
+ * @param hdts DTS handle
+ * @retval HAL state
+ */
+HAL_DTS_StateTypeDef HAL_DTS_GetState(DTS_HandleTypeDef *hdts)
+{
+ /* Check the DTS handle allocation */
+ if (hdts == NULL)
+ {
+ return HAL_DTS_STATE_RESET;
+ }
+
+ /* Return DTS handle state */
+ return hdts->State;
+}
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#endif /* DTS */
+
+#endif /* HAL_DTS_MODULE_ENABLED */
+
+/**
+ * @}
+ */
+