mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-22 17:12:55 +08:00
134 lines
3.4 KiB
C
134 lines
3.4 KiB
C
/*
|
|
* Copyright 2021 MindMotion Microelectronics Co., Ltd.
|
|
* All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef __HAL_IWDG_H__
|
|
#define __HAL_IWDG_H__
|
|
|
|
#include "hal_common.h"
|
|
|
|
/*!
|
|
* @addtogroup IWDG
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief IWDG driver version number.
|
|
*/
|
|
#define IWDG_DRIVER_VERSION 0u /*!< IWDG_0. */
|
|
|
|
/*!
|
|
* @brief IWDG key values
|
|
*/
|
|
#define IWDG_KEY_ENABLE 0xCCCC /*!< IWDG Peripheral Enable . */
|
|
#define IWDG_KEY_RELOAD 0xAAAA /*!< IWDG Reload Counter Enable. */
|
|
#define IWDG_KEY_UNLOCK 0x5555 /*!< IWDG KR Write Access Enable*/
|
|
|
|
/*!
|
|
* @addtogroup IWDG_STATUS
|
|
* @{
|
|
*/
|
|
#define IWDG_STATUS_RELOAD_UPDATE IWDG_SR_RVU_MASK /*!< Status flag when IWDG counter reload value update, can not be cleared. */
|
|
#define IWDG_STATUS_PRESCALER_UPDATE IWDG_SR_PVU_MASK /*!< Status flag when IWDG prescaler value update, can not be cleared. */
|
|
#define IWDG_STATUS_ALMOST_TIMEOUT IWDG_SR_IVU_MASK /*!< Status flag when IWDG almost timeout. */
|
|
/*!
|
|
* @}
|
|
*/
|
|
|
|
/*!
|
|
* @addtogroup IWDG_INT
|
|
* @{
|
|
*/
|
|
#define IWDG_INT_ALMOST_TIMEOUT IWDG_CR_IRQSEL_MASK /*!< IWDG Interrupt: Select IWDG interrupt method */
|
|
/*!
|
|
* @}
|
|
*/
|
|
|
|
/*!
|
|
* @brief IWDG prescaler type.
|
|
*
|
|
* Select the prescaler of time base as the IWDG counter clock.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IWDG_Prescaler_4 = 0u, /*!< IWDG prescaler 4. */
|
|
IWDG_Prescaler_8 = 1u, /*!< IWDG prescaler 8. */
|
|
IWDG_Prescaler_16 = 2u, /*!< IWDG prescaler 16. */
|
|
IWDG_Prescaler_32 = 3u, /*!< IWDG prescaler 32. */
|
|
IWDG_Prescaler_64 = 4u, /*!< IWDG prescaler 64. */
|
|
IWDG_Prescaler_128 = 5u, /*!< IWDG prescaler 128. */
|
|
IWDG_Prescaler_256 = 6u, /*!< IWDG prescaler 256. */
|
|
} IWDG_Prescaler_Type;
|
|
|
|
/*!
|
|
* @brief This type of structure instance is used to keep the settings when calling the @ref IWDG_Init() to initialize the IWDG module.
|
|
*/
|
|
typedef struct
|
|
{
|
|
IWDG_Prescaler_Type Prescaler; /*!< Specify the IWDG counter time base division value. */
|
|
uint32_t Relaod; /*!< Specify the IWDG counter reload value. */
|
|
} IWDG_Init_Type;
|
|
|
|
/*!
|
|
* @brief Initialize the IWDG module.
|
|
*
|
|
* @param IWDGx IWDG instance.
|
|
* @param init Pointer to the initialization structure. See to @ref IWDG_Init_Type.
|
|
* @return None.
|
|
*/
|
|
void IWDG_Init(IWDG_Type * IWDGx, IWDG_Init_Type * init);
|
|
|
|
/*!
|
|
* @brief Start the IWDG counter.
|
|
*
|
|
* Once IWDG counter is started, it cannot be stopped unless reset MCU.
|
|
*
|
|
* @param IWDGx IWDG instance.
|
|
* @return None.
|
|
*/
|
|
void IWDG_Start(IWDG_Type * IWDGx);
|
|
|
|
/*!
|
|
* @brief Get the current status flags of the IWDG module.
|
|
*
|
|
* @param IWDGx IWDG instance.
|
|
* @return Status flags. See to @ref IWDG_STATUS.
|
|
*/
|
|
uint32_t IWDG_GetStatus(IWDG_Type * IWDGx);
|
|
|
|
/*!
|
|
* @brief Clear the status flags of the IWDG module.
|
|
*
|
|
* @param IWDGx IWDG instance.
|
|
* @param status Status flags. See to @ref IWDG_STATUS.
|
|
* @return None.
|
|
*/
|
|
void IWDG_ClearStatus(IWDG_Type * IWDGx, uint32_t status);
|
|
|
|
/*!
|
|
* @brief Do reload IWDG counter (i.e. "feed dog").
|
|
*
|
|
* @param IWDGx IWDG instance.
|
|
* @return None.
|
|
*/
|
|
void IWDG_DoReload(IWDG_Type * IWDGx);
|
|
|
|
/*!
|
|
* @brief Enable interrupts of the IWDG module.
|
|
*
|
|
* @param IWDGx IWDG instance.
|
|
* @param interrupts Interrupt code masks. See to @ref IWDG_INT.
|
|
* @param enable 'true' to enable the indicated interrupts, 'false' has no effect.
|
|
* @return None.
|
|
*/
|
|
void IWDG_EnableInterrupts(IWDG_Type * IWDGx, uint32_t interrupts, bool enable);
|
|
|
|
/*!
|
|
*@}
|
|
*/
|
|
|
|
#endif /* __HAL_IWDG_H__ */
|