generated from Template/H563ZI-HAL-CMake-Template
fix: Set LF line endings for assembly files
This commit is contained in:
4422
Drivers/STM32H5xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
Normal file
4422
Drivers/STM32H5xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
Normal file
File diff suppressed because it is too large
Load Diff
934
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal.h
Normal file
934
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal.h
Normal file
@@ -0,0 +1,934 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains all the functions prototypes for the HAL
|
||||
* module driver.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32H5xx_HAL_H
|
||||
#define __STM32H5xx_HAL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_conf.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/** @defgroup HAL_Exported_Types HAL Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup HAL_TICK_FREQ Tick Frequency
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HAL_TICK_FREQ_10HZ = 100U,
|
||||
HAL_TICK_FREQ_100HZ = 10U,
|
||||
HAL_TICK_FREQ_1KHZ = 1U,
|
||||
HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ
|
||||
} HAL_TickFreqTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported variables --------------------------------------------------------*/
|
||||
/** @defgroup HAL_Exported_Variables HAL Exported Variables
|
||||
* @{
|
||||
*/
|
||||
extern __IO uint32_t uwTick;
|
||||
extern uint32_t uwTickPrio;
|
||||
extern HAL_TickFreqTypeDef uwTickFreq;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/** @defgroup SBS_Exported_Constants SBS Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup SBS_FPU_Interrupts FPU Interrupts
|
||||
* @{
|
||||
*/
|
||||
#define SBS_IT_FPU_IOC SBS_FPUIMR_FPU_IE_0 /*!< Floating Point Unit Invalid operation Interrupt */
|
||||
#define SBS_IT_FPU_DZC SBS_FPUIMR_FPU_IE_1 /*!< Floating Point Unit Divide-by-zero Interrupt */
|
||||
#define SBS_IT_FPU_UFC SBS_FPUIMR_FPU_IE_2 /*!< Floating Point Unit Underflow Interrupt */
|
||||
#define SBS_IT_FPU_OFC SBS_FPUIMR_FPU_IE_3 /*!< Floating Point Unit Overflow Interrupt */
|
||||
#define SBS_IT_FPU_IDC SBS_FPUIMR_FPU_IE_4 /*!< Floating Point Unit Input denormal Interrupt */
|
||||
#define SBS_IT_FPU_IXC SBS_FPUIMR_FPU_IE_5 /*!< Floating Point Unit Inexact Interrupt */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup SBS_BREAK_CONFIG SBS Break Config
|
||||
* @{
|
||||
*/
|
||||
#define SBS_BREAK_FLASH_ECC SBS_CFGR2_ECCL /*!< Enable and lock the FLASH ECC double error with TIM1/8/15/16/17
|
||||
Break inputs.*/
|
||||
#define SBS_BREAK_PVD SBS_CFGR2_PVDL /*!< Enable and lock the PVD connection with TIM1/8/15/16/17
|
||||
Break inputs. */
|
||||
#define SBS_BREAK_SRAM_ECC SBS_CFGR2_SEL /*!< Enable and lock the SRAM ECC double error signal with
|
||||
TIM1/8/15/16/17 Break inputs.*/
|
||||
#define SBS_BREAK_LOCKUP SBS_CFGR2_CLL /*!< Enable and lock the connection of Cortex-M33 LOCKUP (hardfault)
|
||||
output to TIM1/8/15/16/17 Break inputs.*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(VREFBUF)
|
||||
/** @defgroup VREFBUF_VoltageScale VREFBUF Voltage Scale
|
||||
* @{
|
||||
*/
|
||||
#define VREFBUF_VOLTAGE_SCALE0 ((uint32_t)0x00000000) /*!< Voltage reference scale 0 (VREF_OUT1) */
|
||||
#define VREFBUF_VOLTAGE_SCALE1 VREFBUF_CSR_VRS_0 /*!< Voltage reference scale 1 (VREF_OUT2) */
|
||||
#define VREFBUF_VOLTAGE_SCALE2 VREFBUF_CSR_VRS_1 /*!< Voltage reference scale 2 (VREF_OUT3) */
|
||||
#define VREFBUF_VOLTAGE_SCALE3 (VREFBUF_CSR_VRS_0 | VREFBUF_CSR_VRS_1) /*!< Voltage reference scale 3 (VREF_OUT4) */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup VREFBUF_HighImpedance VREFBUF High Impedance
|
||||
* @{
|
||||
*/
|
||||
#define VREFBUF_HIGH_IMPEDANCE_DISABLE ((uint32_t)0x00000000) /*!< VREF_plus pin is internally connected to
|
||||
Voltage reference buffer output */
|
||||
#define VREFBUF_HIGH_IMPEDANCE_ENABLE VREFBUF_CSR_HIZ /*!< VREF_plus pin is high impedance */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* VREFBUF */
|
||||
|
||||
/** @defgroup SBS_FastModePlus_GPIO Fast-mode Plus on GPIO
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @brief Fast-mode Plus driving capability on a specific GPIO
|
||||
*/
|
||||
#define SBS_FASTMODEPLUS_PB6 SBS_PMCR_PB6_FMP /*!< Enable Fast-mode Plus on PB6 */
|
||||
#define SBS_FASTMODEPLUS_PB7 SBS_PMCR_PB7_FMP /*!< Enable Fast-mode Plus on PB7 */
|
||||
#define SBS_FASTMODEPLUS_PB8 SBS_PMCR_PB8_FMP /*!< Enable Fast-mode Plus on PB8 */
|
||||
#if defined(SBS_PMCR_PB9_FMP)
|
||||
#define SBS_FASTMODEPLUS_PB9 SBS_PMCR_PB9_FMP /*!< Enable Fast-mode Plus on PB9 */
|
||||
#endif /* SBS_PMCR_PB9_FMP */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(SBS_PMCR_ETH_SEL_PHY)
|
||||
/** @defgroup SBS_Ethernet_Config Ethernet Config
|
||||
* @{
|
||||
*/
|
||||
#define SBS_ETH_MII ((uint32_t)0x00000000) /*!< Select the Media Independent Interface (MII) or GMII */
|
||||
#define SBS_ETH_RMII SBS_PMCR_ETH_SEL_PHY_2 /*!< Select the Reduced Media Independent Interface (RMII) */
|
||||
|
||||
#define IS_SBS_ETHERNET_CONFIG(CONFIG) (((CONFIG) == SBS_ETH_MII) || \
|
||||
((CONFIG) == SBS_ETH_RMII))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* SBS_PMCR_ETH_SEL_PHY */
|
||||
|
||||
/** @defgroup SBS_Memories_Erase_Flag_Status Memory Erase Flags Status
|
||||
* @{
|
||||
*/
|
||||
#define SBS_MEMORIES_ERASE_FLAG_IPMEE SBS_MESR_IPMEE /*!< Select the Status of End Of Erase for ICACHE
|
||||
and PKA RAMs */
|
||||
#define SBS_MEMORIES_ERASE_FLAG_MCLR SBS_MESR_MCLR /*!< Select the Status of Erase after Power-on Reset
|
||||
(SRAM2, BKPRAM, ICACHE, DCACHE, PKA rams) */
|
||||
|
||||
#define IS_SBS_MEMORIES_ERASE_FLAG(FLAG) (((FLAG) == SBS_MEMORIES_ERASE_FLAG_IPMEE) || \
|
||||
((FLAG) == SBS_MEMORIES_ERASE_FLAG_MCLR))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup SBS_IOCompenstionCell_Config IOCompenstionCell Config
|
||||
* @{
|
||||
*/
|
||||
#define SBS_VDD_CELL_CODE ((uint32_t)0x00000000) /*!< Select Code from the cell */
|
||||
#define SBS_VDD_REGISTER_CODE SBS_CCCSR_CS1 /*!< Code from the SBS compensation cell code register */
|
||||
|
||||
#define IS_SBS_VDD_CODE_SELECT(SELECT) (((SELECT) == SBS_VDD_CELL_CODE)|| \
|
||||
((SELECT) == SBS_VDD_REGISTER_CODE))
|
||||
|
||||
#define SBS_VDDIO_CELL_CODE ((uint32_t)0x00000000) /*!< Select Code from the cell */
|
||||
#define SBS_VDDIO_REGISTER_CODE SBS_CCCSR_CS2 /*!< Code from the SBS compensation cell code register */
|
||||
|
||||
#define IS_SBS_VDDIO_CODE_SELECT(SELECT) (((SELECT) == SBS_VDDIO_CELL_CODE)|| \
|
||||
((SELECT) == SBS_VDDIO_REGISTER_CODE))
|
||||
|
||||
#define IS_SBS_CODE_CONFIG(CONFIG) ((CONFIG) < (0x10UL))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(SBS_EPOCHSELCR_EPOCH_SEL)
|
||||
/** @defgroup SBS_EPOCH_Selection EPOCH Selection
|
||||
* @{
|
||||
*/
|
||||
#define SBS_EPOCH_SEL_NONSECURE 0x0UL /*!< EPOCH non secure selected */
|
||||
#define SBS_EPOCH_SEL_SECURE SBS_EPOCHSELCR_EPOCH_SEL_0 /*!< EPOCH secure selected */
|
||||
#define SBS_EPOCH_SEL_PUFCHECK SBS_EPOCHSELCR_EPOCH_SEL_1 /*!< EPOCH all zeros for PUF integrity check */
|
||||
|
||||
#define IS_SBS_EPOCH_SELECTION(SELECT) (((SELECT) == SBS_EPOCH_SEL_SECURE) || \
|
||||
((SELECT) == SBS_EPOCH_SEL_NONSECURE) || \
|
||||
((SELECT) == SBS_EPOCH_SEL_PUFCHECK))
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* SBS_EPOCHSELCR_EPOCH_SEL */
|
||||
|
||||
#if defined(SBS_NEXTHDPLCR_NEXTHDPL)
|
||||
/** @defgroup SBS_NextHDPL_Selection Next HDPL Selection
|
||||
* @{
|
||||
*/
|
||||
#define SBS_OBKHDPL_INCR_0 0x00U /*!< Index to add to the current HDPL to point (through OBK-HDPL) to the next secure storage areas */
|
||||
#define SBS_OBKHDPL_INCR_1 SBS_NEXTHDPLCR_NEXTHDPL_0 /*!< Index to add to the current HDPL to point (through OBK-HDPL) to the next secure storage areas */
|
||||
#define SBS_OBKHDPL_INCR_2 SBS_NEXTHDPLCR_NEXTHDPL_1 /*!< Index to add to the current HDPL to point (through OBK-HDPL) to the next secure storage areas */
|
||||
#define SBS_OBKHDPL_INCR_3 SBS_NEXTHDPLCR_NEXTHDPL /*!< Index to add to the current HDPL to point (through OBK-HDPL) to the next secure storage areas */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* SBS_NEXTHDPLCR_NEXTHDPL */
|
||||
|
||||
/** @defgroup SBS_HDPL_Value HDPL Value
|
||||
* @{
|
||||
*/
|
||||
#define SBS_HDPL_VALUE_0 0x000000B4U /*!< Hide protection level 0 */
|
||||
#define SBS_HDPL_VALUE_1 0x00000051U /*!< Hide protection level 1 */
|
||||
#define SBS_HDPL_VALUE_2 0x0000008AU /*!< Hide protection level 2 */
|
||||
#define SBS_HDPL_VALUE_3 0x0000006FU /*!< Hide protection level 3 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(SBS_DBGCR_DBG_AUTH_SEC)
|
||||
/** @defgroup SBS_DEBUG_SEC_Value Debug sec Value
|
||||
* @{
|
||||
*/
|
||||
#define SBS_DEBUG_SEC_NSEC 0x000000B4U /*!< Debug opening for secure and non-secure */
|
||||
#define SBS_DEBUG_NSEC 0x0000003CU /*!< Debug opening for non-secure only */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* SBS_DBGCR_DBG_AUTH_SEC */
|
||||
|
||||
/** @defgroup SBS_Lock_items SBS Lock items
|
||||
* @brief SBS items to set lock on
|
||||
* @{
|
||||
*/
|
||||
#define SBS_MPU_NSEC SBS_CNSLCKR_LOCKNSMPU /*!< Non-secure MPU lock (privileged secure or
|
||||
non-secure only) */
|
||||
#define SBS_VTOR_NSEC SBS_CNSLCKR_LOCKNSVTOR /*!< Non-secure VTOR lock (privileged secure or
|
||||
non-secure only) */
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#define SBS_SAU (SBS_CSLCKR_LOCKSAU << 16U) /*!< SAU lock (privileged secure code only) */
|
||||
#define SBS_MPU_SEC (SBS_CSLCKR_LOCKSMPU << 16U) /*!< Secure MPU lock (privileged secure code only)
|
||||
*/
|
||||
#define SBS_VTOR_AIRCR_SEC (SBS_CSLCKR_LOCKSVTAIRCR << 16U) /*!< VTOR_S and AIRCR lock (privileged secure
|
||||
code only) */
|
||||
#define SBS_LOCK_ALL (SBS_MPU_NSEC|SBS_VTOR_NSEC|SBS_SAU|SBS_MPU_SEC|SBS_VTOR_AIRCR_SEC) /*!< All */
|
||||
#else
|
||||
#define SBS_LOCK_ALL (SBS_MPU_NSEC|SBS_VTOR_NSEC) /*!< All (privileged secure or non-secure only) */
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup SBS_Attributes_items SBS Attributes items
|
||||
* @brief SBS items to configure secure or non-secure attributes on
|
||||
* @{
|
||||
*/
|
||||
#define SBS_CLK SBS_SECCFGR_SBSSEC /*!< SBS clock control */
|
||||
#define SBS_CLASSB SBS_SECCFGR_CLASSBSEC /*!< Class B */
|
||||
#define SBS_FPU SBS_SECCFGR_FPUSEC /*!< FPU */
|
||||
#define SBS_ALL (SBS_CLK | SBS_CLASSB | SBS_FPU) /*!< All */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup SBS_attributes SBS attributes
|
||||
* @brief SBS secure or non-secure attributes
|
||||
* @{
|
||||
*/
|
||||
#define SBS_SEC 0x00000001U /*!< Secure attribute */
|
||||
#define SBS_NSEC 0x00000000U /*!< Non-secure attribute */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macros -----------------------------------------------------------*/
|
||||
|
||||
/** @defgroup DBGMCU_Exported_Macros DBGMCU Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @brief Freeze/Unfreeze Peripherals in Debug mode
|
||||
*/
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM2_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM2() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM2_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM2() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM2_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM2_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM3_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM3() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM3_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM3() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM3_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM3_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM4_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM4() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM4_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM4() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM4_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM4_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM5_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM5() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM5_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM5() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM5_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM5_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM6_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM6() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM6_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM6() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM6_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM6_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM7_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM7() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM7_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM7() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM7_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM7_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM12_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM12() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM12_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM12() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM12_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM12_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM13_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM13() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM13_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM13() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM13_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM13_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_TIM14_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM14() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM14_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM14() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_TIM14_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_TIM14_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_WWDG_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_WWDG() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_WWDG_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_WWDG() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_WWDG_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_WWDG_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_IWDG_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_IWDG() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_IWDG_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_IWDG() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_IWDG_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_IWDG_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_I2C1_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_I2C1() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C1_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_I2C1() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C1_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_I2C1_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_I2C2_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_I2C2() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C2_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_I2C2() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C2_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_I2C2_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR1_DBG_I3C1_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_I3C1() SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I3C1_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_I3C1() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I3C1_STOP)
|
||||
#endif /* DBGMCU_APB1FZR1_DBG_I3C1_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB1FZR2_DBG_LPTIM2_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_LPTIM2() SET_BIT(DBGMCU->APB1FZR2, DBGMCU_APB1FZR2_DBG_LPTIM2_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_LPTIM2() CLEAR_BIT(DBGMCU->APB1FZR2, DBGMCU_APB1FZR2_DBG_LPTIM2_STOP)
|
||||
#endif /* DBGMCU_APB1FZR2_DBG_LPTIM2_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB2FZR_DBG_TIM1_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM1() SET_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM1_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM1() CLEAR_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM1_STOP)
|
||||
#endif /* DBGMCU_APB2FZR_DBG_TIM1_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB2FZR_DBG_TIM8_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM8() SET_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM8_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM8() CLEAR_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM8_STOP)
|
||||
#endif /* DBGMCU_APB2FZR_DBG_TIM8_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB2FZR_DBG_TIM15_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM15() SET_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM15_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM15() CLEAR_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM15_STOP)
|
||||
#endif /* DBGMCU_APB2FZR_DBG_TIM15_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB2FZR_DBG_TIM16_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM16() SET_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM16_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM16() CLEAR_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM16_STOP)
|
||||
#endif /* DBGMCU_APB2FZR_DBG_TIM16_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB2FZR_DBG_TIM17_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_TIM17() SET_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM17_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_TIM17() CLEAR_BIT(DBGMCU->APB2FZR, DBGMCU_APB2FZR_DBG_TIM17_STOP)
|
||||
#endif /* DBGMCU_APB2FZR_DBG_TIM17_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_I2C3_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_I2C3() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_I2C3_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_I2C3() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_I2C3_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_I2C3_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_I2C4_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_I2C4() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_I2C4_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_I2C4() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_I2C4_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_I2C4_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_I3C2_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_I3C2() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_I3C2_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_I3C2() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_I3C2_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_I3C2_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_LPTIM1_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_LPTIM1() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM1_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_LPTIM1() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM1_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_LPTIM1_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_LPTIM3_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_LPTIM3() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM3_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_LPTIM3() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM3_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_LPTIM3_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_LPTIM4_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_LPTIM4() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM4_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_LPTIM4() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM4_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_LPTIM4_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_LPTIM5_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_LPTIM5() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM5_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_LPTIM5() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM5_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_LPTIM5_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_LPTIM6_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_LPTIM6() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM6_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_LPTIM6() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_LPTIM6_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_LPTIM6_STOP */
|
||||
|
||||
#if defined(DBGMCU_APB3FZR_DBG_RTC_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_RTC() SET_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_RTC_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_RTC() CLEAR_BIT(DBGMCU->APB3FZR, DBGMCU_APB3FZR_DBG_RTC_STOP)
|
||||
#endif /* DBGMCU_APB3FZR_DBG_RTC_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH0_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_0() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH0_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_0() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH0_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH0_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH1_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_1() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH1_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_1() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH1_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH1_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH2_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_2() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH2_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_2() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH2_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH2_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH3_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_3() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH3_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_3() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH3_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH3_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH4_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_4() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH4_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_4() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH4_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH4_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH5_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_5() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH5_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_5() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH5_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH5_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH6_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_6() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH6_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_6() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH6_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH6_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH7_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_7() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH7_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_7() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH7_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH7_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH8_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_8() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH8_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_8() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH8_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH8_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH9_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_9() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH9_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_9() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH9_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH9_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH10_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_10() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH10_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_10() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH10_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH10_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA1_CH11_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA1_11() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH11_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA1_11() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA1_CH11_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA1_CH11_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH0_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_0() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH0_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_0() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH0_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH0_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH1_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_1() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH1_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_1() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH1_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH1_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH2_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_2() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH2_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_2() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH2_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH2_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH3_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_3() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH3_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_3() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH3_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH3_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH4_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_4() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH4_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_4() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH4_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH4_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH5_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_5() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH5_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_5() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH5_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH5_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH6_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_6() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH6_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_6() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH6_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH6_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH7_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_7() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH7_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_7() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH7_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH7_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH8_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_8() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH8_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_8() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH8_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH8_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH9_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_9() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH9_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_9() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH9_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH9_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH10_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_10() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH10_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_10() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH10_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH10_STOP */
|
||||
|
||||
#if defined(DBGMCU_AHB1FZR_DBG_GPDMA2_CH11_STOP)
|
||||
#define __HAL_DBGMCU_FREEZE_GPDMA2_11() SET_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH11_STOP)
|
||||
#define __HAL_DBGMCU_UNFREEZE_GPDMA2_11() CLEAR_BIT(DBGMCU->AHB1FZR, DBGMCU_AHB1FZR_DBG_GPDMA2_CH11_STOP)
|
||||
#endif /* DBGMCU_AHB1FZR_DBG_GPDMA2_CH11_STOP */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup SBS_Exported_Macros SBS Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @brief Floating Point Unit interrupt enable/disable macros
|
||||
* @param __INTERRUPT__: This parameter can be a value of @ref SBS_FPU_Interrupts
|
||||
*/
|
||||
#define __HAL_SBS_FPU_INTERRUPT_ENABLE(__INTERRUPT__) do {assert_param(IS_SBS_FPU_INTERRUPT((__INTERRUPT__)));\
|
||||
SET_BIT(SBS->FPUIMR, (__INTERRUPT__));\
|
||||
}while(0)
|
||||
|
||||
#define __HAL_SBS_FPU_INTERRUPT_DISABLE(__INTERRUPT__) do {assert_param(IS_SBS_FPU_INTERRUPT((__INTERRUPT__)));\
|
||||
CLEAR_BIT(SBS->FPUIMR, (__INTERRUPT__));\
|
||||
}while(0)
|
||||
|
||||
/** @brief SBS Break ECC lock.
|
||||
* Enable and lock the connection of Flash ECC error connection to TIM1/8/15/16/17 Break input.
|
||||
* @note The selected configuration is locked and can be unlocked only by system reset.
|
||||
*/
|
||||
#define __HAL_SBS_BREAK_ECC_LOCK() SET_BIT(SBS->CFGR2, SBS_CFGR2_ECCL)
|
||||
|
||||
/** @brief SBS Break Cortex-M33 Lockup lock.
|
||||
* Enable and lock the connection of Cortex-M33 LOCKUP (Hardfault) output to TIM1/8/15/16/17 Break input.
|
||||
* @note The selected configuration is locked and can be unlocked only by system reset.
|
||||
*/
|
||||
#define __HAL_SBS_BREAK_LOCKUP_LOCK() SET_BIT(SBS->CFGR2, SBS_CFGR2_CLL)
|
||||
|
||||
/** @brief SBS Break PVD lock.
|
||||
* Enable and lock the PVD connection to Timer1/8/15/16/17 Break input, as well as the PVDE and PLS[2:0]
|
||||
* in the PWR_CR2 register.
|
||||
* @note The selected configuration is locked and can be unlocked only by system reset.
|
||||
*/
|
||||
#define __HAL_SBS_BREAK_PVD_LOCK() SET_BIT(SBS->CFGR2, SBS_CFGR2_PVDL)
|
||||
|
||||
/** @brief SBS Break SRAM double ECC lock.
|
||||
* Enable and lock the connection of SRAM double ECC error to TIM1/8/15/16/17 Break input.
|
||||
* @note The selected configuration is locked and can be unlocked only by system reset.
|
||||
*/
|
||||
#define __HAL_SBS_BREAK_SRAM_ECC_LOCK() SET_BIT(SBS->CFGR2, SBS_CFGR2_SEL)
|
||||
|
||||
/** @brief Fast-mode Plus driving capability enable/disable macros
|
||||
* @param __FASTMODEPLUS__: This parameter can be a value of :
|
||||
* @arg @ref SBS_FASTMODEPLUS_PB6 Fast-mode Plus driving capability activation on PB6
|
||||
* @arg @ref SBS_FASTMODEPLUS_PB7 Fast-mode Plus driving capability activation on PB7
|
||||
* @arg @ref SBS_FASTMODEPLUS_PB8 Fast-mode Plus driving capability activation on PB8
|
||||
* @arg @ref SBS_FASTMODEPLUS_PB9 Fast-mode Plus driving capability activation on PB9
|
||||
*/
|
||||
#define __HAL_SBS_FASTMODEPLUS_ENABLE(__FASTMODEPLUS__) do {assert_param(IS_SBS_FASTMODEPLUS((__FASTMODEPLUS__)));\
|
||||
SET_BIT(SBS->PMCR, (__FASTMODEPLUS__));\
|
||||
}while(0)
|
||||
|
||||
#define __HAL_SBS_FASTMODEPLUS_DISABLE(__FASTMODEPLUS__) do {assert_param(IS_SBS_FASTMODEPLUS((__FASTMODEPLUS__)));\
|
||||
CLEAR_BIT(SBS->PMCR, (__FASTMODEPLUS__));\
|
||||
}while(0)
|
||||
|
||||
/** @brief Check SBS Memories Erase Status Flags.
|
||||
* @param __FLAG__: specifies the flag to check.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg @ref SBS_MEMORIES_ERASE_FLAG_IPMEE Status of End Of Erase for ICACHE and PKA RAMs
|
||||
* @arg @ref SBS_MEMORIES_ERASE_FLAG_MCLR Status of Erase after Power-on Reset ((SRAM2, BKPRAM,
|
||||
* ICACHE, DCACHE, PKA RAMs)
|
||||
* @retval The new state of __FLAG__ (TRUE or FALSE).
|
||||
*/
|
||||
#define __HAL_SBS_GET_MEMORIES_ERASE_STATUS(__FLAG__) ((((SBS->MESR) & (__FLAG__))!= 0) ? 1 : 0)
|
||||
|
||||
/** @brief Clear SBS Memories Erase Status Flags.
|
||||
* @param __FLAG__: specifies the flag to clear.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg @ref SBS_MEMORIES_ERASE_FLAG_IPMEE Status of End Of Erase for ICACHE and PKA RAMs
|
||||
* @arg @ref SBS_MEMORIES_ERASE_FLAG_MCLR Status of Erase after Power-on Reset ((SRAM2, BKPRAM,
|
||||
* ICACHE, DCACHE, PKA RAMs)
|
||||
*/
|
||||
#define __HAL_SBS_CLEAR_MEMORIES_ERASE_STATUS(__FLAG__) do {assert_param(IS_SBS_MEMORIES_ERASE_FLAG((__FLAG__)));\
|
||||
WRITE_REG(SBS->MESR, (__FLAG__));\
|
||||
}while(0)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
|
||||
/** @defgroup SBS_Private_Macros SBS Private Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define IS_SBS_FPU_INTERRUPT(__INTERRUPT__) ((((__INTERRUPT__) & SBS_IT_FPU_IOC) == SBS_IT_FPU_IOC) || \
|
||||
(((__INTERRUPT__) & SBS_IT_FPU_DZC) == SBS_IT_FPU_DZC) || \
|
||||
(((__INTERRUPT__) & SBS_IT_FPU_UFC) == SBS_IT_FPU_UFC) || \
|
||||
(((__INTERRUPT__) & SBS_IT_FPU_OFC) == SBS_IT_FPU_OFC) || \
|
||||
(((__INTERRUPT__) & SBS_IT_FPU_IDC) == SBS_IT_FPU_IDC) || \
|
||||
(((__INTERRUPT__) & SBS_IT_FPU_IXC) == SBS_IT_FPU_IXC))
|
||||
|
||||
#define IS_SBS_BREAK_CONFIG(__CONFIG__) (((__CONFIG__) == SBS_BREAK_FLASH_ECC) || \
|
||||
((__CONFIG__) == SBS_BREAK_PVD) || \
|
||||
((__CONFIG__) == SBS_BREAK_SRAM_ECC) || \
|
||||
((__CONFIG__) == SBS_BREAK_LOCKUP))
|
||||
|
||||
#if defined(VREFBUF)
|
||||
#define IS_VREFBUF_VOLTAGE_SCALE(__SCALE__) (((__SCALE__) == VREFBUF_VOLTAGE_SCALE0) || \
|
||||
((__SCALE__) == VREFBUF_VOLTAGE_SCALE1) || \
|
||||
((__SCALE__) == VREFBUF_VOLTAGE_SCALE2) || \
|
||||
((__SCALE__) == VREFBUF_VOLTAGE_SCALE3))
|
||||
|
||||
#define IS_VREFBUF_HIGH_IMPEDANCE(__VALUE__) (((__VALUE__) == VREFBUF_HIGH_IMPEDANCE_DISABLE) || \
|
||||
((__VALUE__) == VREFBUF_HIGH_IMPEDANCE_ENABLE))
|
||||
|
||||
#define IS_VREFBUF_TRIMMING(__VALUE__) (((__VALUE__) > 0U) && ((__VALUE__) <= VREFBUF_CCR_TRIM))
|
||||
#endif /* VREFBUF*/
|
||||
|
||||
#if defined(SBS_FASTMODEPLUS_PB9)
|
||||
#define IS_SBS_FASTMODEPLUS(__PIN__) ((((__PIN__) & SBS_FASTMODEPLUS_PB6) == SBS_FASTMODEPLUS_PB6) || \
|
||||
(((__PIN__) & SBS_FASTMODEPLUS_PB7) == SBS_FASTMODEPLUS_PB7) || \
|
||||
(((__PIN__) & SBS_FASTMODEPLUS_PB8) == SBS_FASTMODEPLUS_PB8) || \
|
||||
(((__PIN__) & SBS_FASTMODEPLUS_PB9) == SBS_FASTMODEPLUS_PB9))
|
||||
#else
|
||||
#define IS_SBS_FASTMODEPLUS(__PIN__) ((((__PIN__) & SBS_FASTMODEPLUS_PB6) == SBS_FASTMODEPLUS_PB6) || \
|
||||
(((__PIN__) & SBS_FASTMODEPLUS_PB7) == SBS_FASTMODEPLUS_PB7) || \
|
||||
(((__PIN__) & SBS_FASTMODEPLUS_PB8) == SBS_FASTMODEPLUS_PB8))
|
||||
#endif /* SBS_FASTMODEPLUS_PB9 */
|
||||
|
||||
#define IS_SBS_HDPL(__LEVEL__) (((__LEVEL__) == SBS_HDPL_VALUE_0) || ((__LEVEL__) == SBS_HDPL_VALUE_1) || \
|
||||
((__LEVEL__) == SBS_HDPL_VALUE_2) || ((__LEVEL__) == SBS_HDPL_VALUE_3))
|
||||
|
||||
#define IS_SBS_OBKHDPL_SELECTION(__SELECT__) (((__SELECT__) == SBS_OBKHDPL_INCR_0) || \
|
||||
((__SELECT__) == SBS_OBKHDPL_INCR_1) || \
|
||||
((__SELECT__) == SBS_OBKHDPL_INCR_2) || \
|
||||
((__SELECT__) == SBS_OBKHDPL_INCR_3))
|
||||
|
||||
#define IS_SBS_ITEMS_ATTRIBUTES(__ITEM__) ((((__ITEM__) & SBS_CLK) == SBS_CLK) || \
|
||||
(((__ITEM__) & SBS_CLASSB) == SBS_CLASSB) || \
|
||||
(((__ITEM__) & SBS_FPU) == SBS_FPU) || \
|
||||
(((__ITEM__) & ~(SBS_ALL)) == 0U))
|
||||
|
||||
#define IS_SBS_ATTRIBUTES(__ATTRIBUTES__) (((__ATTRIBUTES__) == SBS_SEC) ||\
|
||||
((__ATTRIBUTES__) == SBS_NSEC))
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
|
||||
#define IS_SBS_LOCK_ITEMS(__ITEM__) ((((__ITEM__) & SBS_MPU_NSEC) == SBS_MPU_NSEC) || \
|
||||
(((__ITEM__) & SBS_VTOR_NSEC) == SBS_VTOR_NSEC) || \
|
||||
(((__ITEM__) & SBS_SAU) == SBS_SAU) || \
|
||||
(((__ITEM__) & SBS_MPU_SEC) == SBS_MPU_SEC) || \
|
||||
(((__ITEM__) & SBS_VTOR_AIRCR_SEC) == SBS_VTOR_AIRCR_SEC) || \
|
||||
(((__ITEM__) & ~(SBS_LOCK_ALL)) == 0U))
|
||||
|
||||
#else
|
||||
|
||||
#define IS_SBS_LOCK_ITEMS(__ITEM__) ((((__ITEM__) & SBS_MPU_NSEC) == SBS_MPU_NSEC) || \
|
||||
(((__ITEM__) & SBS_VTOR_NSEC) == SBS_VTOR_NSEC) || \
|
||||
(((__ITEM__) & ~(SBS_LOCK_ALL)) == 0U))
|
||||
|
||||
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup HAL_Private_Macros HAL Private Macros
|
||||
* @{
|
||||
*/
|
||||
#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ) || \
|
||||
((FREQ) == HAL_TICK_FREQ_100HZ) || \
|
||||
((FREQ) == HAL_TICK_FREQ_1KHZ))
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group1
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Initialization and de-initialization functions ******************************/
|
||||
HAL_StatusTypeDef HAL_Init(void);
|
||||
HAL_StatusTypeDef HAL_DeInit(void);
|
||||
void HAL_MspInit(void);
|
||||
void HAL_MspDeInit(void);
|
||||
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group2
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Peripheral Control functions ************************************************/
|
||||
void HAL_IncTick(void);
|
||||
void HAL_Delay(uint32_t Delay);
|
||||
uint32_t HAL_GetTick(void);
|
||||
uint32_t HAL_GetTickPrio(void);
|
||||
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq);
|
||||
HAL_TickFreqTypeDef HAL_GetTickFreq(void);
|
||||
void HAL_SuspendTick(void);
|
||||
void HAL_ResumeTick(void);
|
||||
uint32_t HAL_GetHalVersion(void);
|
||||
uint32_t HAL_GetREVID(void);
|
||||
uint32_t HAL_GetDEVID(void);
|
||||
uint32_t HAL_GetUIDw0(void);
|
||||
uint32_t HAL_GetUIDw1(void);
|
||||
uint32_t HAL_GetUIDw2(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group3
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* DBGMCU Peripheral Control functions *****************************************/
|
||||
void HAL_DBGMCU_EnableDBGStopMode(void);
|
||||
void HAL_DBGMCU_DisableDBGStopMode(void);
|
||||
void HAL_DBGMCU_EnableDBGStandbyMode(void);
|
||||
void HAL_DBGMCU_DisableDBGStandbyMode(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group4
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* VREFBUF Control functions ****************************************************/
|
||||
#if defined(VREFBUF)
|
||||
void HAL_VREFBUF_VoltageScalingConfig(uint32_t VoltageScaling);
|
||||
void HAL_VREFBUF_HighImpedanceConfig(uint32_t Mode);
|
||||
void HAL_VREFBUF_TrimmingConfig(uint32_t TrimmingValue);
|
||||
HAL_StatusTypeDef HAL_EnableVREFBUF(void);
|
||||
void HAL_DisableVREFBUF(void);
|
||||
#endif /* VREFBUF */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group5
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* SBS System Configuration functions *******************************************/
|
||||
void HAL_SBS_ETHInterfaceSelect(uint32_t SBS_ETHInterface);
|
||||
void HAL_SBS_EnableVddIO1CompensationCell(void);
|
||||
void HAL_SBS_DisableVddIO1CompensationCell(void);
|
||||
void HAL_SBS_EnableVddIO2CompensationCell(void);
|
||||
void HAL_SBS_DisableVddIO2CompensationCell(void);
|
||||
void HAL_SBS_VDDCompensationCodeSelect(uint32_t SBS_CompCode);
|
||||
void HAL_SBS_VDDIOCompensationCodeSelect(uint32_t SBS_CompCode);
|
||||
uint32_t HAL_SBS_GetVddIO1CompensationCellReadyFlag(void);
|
||||
uint32_t HAL_SBS_GetVddIO2CompensationCellReadyFlag(void);
|
||||
void HAL_SBS_VDDCompensationCodeConfig(uint32_t SBS_PMOSCode, uint32_t SBS_NMOSCode);
|
||||
void HAL_SBS_VDDIOCompensationCodeConfig(uint32_t SBS_PMOSCode, uint32_t SBS_NMOSCode);
|
||||
uint32_t HAL_SBS_GetNMOSVddCompensationValue(void);
|
||||
uint32_t HAL_SBS_GetPMOSVddCompensationValue(void);
|
||||
uint32_t HAL_SBS_GetNMOSVddIO2CompensationValue(void);
|
||||
uint32_t HAL_SBS_GetPMOSVddIO2CompensationValue(void);
|
||||
void HAL_SBS_FLASH_EnableECCNMI(void);
|
||||
void HAL_SBS_FLASH_DisableECCNMI(void);
|
||||
uint32_t HAL_SBS_FLASH_ECCNMI_IsDisabled(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group6
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* SBS Boot control functions ***************************************************/
|
||||
void HAL_SBS_IncrementHDPLValue(void);
|
||||
uint32_t HAL_SBS_GetHDPLValue(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group7
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* SBS Hardware secure storage control functions ********************************/
|
||||
void HAL_SBS_EPOCHSelection(uint32_t Epoch_Selection);
|
||||
uint32_t HAL_SBS_GetEPOCHSelection(void);
|
||||
void HAL_SBS_SetOBKHDPL(uint32_t OBKHDPL_Value);
|
||||
uint32_t HAL_SBS_GetOBKHDPL(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group8
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* SBS Debug control functions ***************************************************/
|
||||
void HAL_SBS_OpenAccessPort(void);
|
||||
void HAL_SBS_OpenDebug(void);
|
||||
HAL_StatusTypeDef HAL_SBS_ConfigDebugLevel(uint32_t Level);
|
||||
uint32_t HAL_SBS_GetDebugLevel(void);
|
||||
void HAL_SBS_LockDebugConfig(void);
|
||||
void HAL_SBS_ConfigDebugSecurity(uint32_t Security);
|
||||
uint32_t HAL_SBS_GetDebugSecurity(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group9
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* SBS Lock functions ********************************************/
|
||||
void HAL_SBS_Lock(uint32_t Item);
|
||||
HAL_StatusTypeDef HAL_SBS_GetLock(uint32_t *pItem);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup HAL_Exported_Functions_Group10
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* SBS Attributes functions ********************************************/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
void HAL_SBS_ConfigAttributes(uint32_t Item, uint32_t Attributes);
|
||||
HAL_StatusTypeDef HAL_SBS_GetConfigAttributes(uint32_t Item, uint32_t *pAttributes);
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32H5xx_HAL_H */
|
||||
|
||||
429
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_cortex.h
Normal file
429
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_cortex.h
Normal file
@@ -0,0 +1,429 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_cortex.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of CORTEX HAL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32H5xx_HAL_CORTEX_H
|
||||
#define __STM32H5xx_HAL_CORTEX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX CORTEX
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/** @defgroup CORTEX_Exported_Types CORTEX Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition
|
||||
* @{
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Enable; /*!< Specifies the status of the region.
|
||||
This parameter can be a value of @ref CORTEX_MPU_Region_Enable */
|
||||
uint8_t Number; /*!< Specifies the index of the region to protect.
|
||||
This parameter can be a value of @ref CORTEX_MPU_Region_Number */
|
||||
uint32_t BaseAddress; /*!< Specifies the base address of the region to protect. */
|
||||
uint32_t LimitAddress; /*!< Specifies the limit address of the region to protect. */
|
||||
uint8_t AttributesIndex; /*!< Specifies the memory attributes index.
|
||||
This parameter can be a value of @ref CORTEX_MPU_Attributes_Number */
|
||||
uint8_t AccessPermission; /*!< Specifies the region access permission type. This parameter
|
||||
can be a value of @ref CORTEX_MPU_Region_Permission_Attributes */
|
||||
uint8_t DisableExec; /*!< Specifies the instruction access status.
|
||||
This parameter can be a value of @ref CORTEX_MPU_Instruction_Access */
|
||||
uint8_t IsShareable; /*!< Specifies the shareability status of the protected region.
|
||||
This parameter can be a value of @ref CORTEX_MPU_Access_Shareable */
|
||||
} MPU_Region_InitTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Attributes_Initialization_Structure_definition MPU Attributes
|
||||
* Initialization Structure Definition
|
||||
* @{
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Number; /*!< Specifies the number of the memory attributes to configure.
|
||||
This parameter can be a value of @ref CORTEX_MPU_Attributes_Number */
|
||||
|
||||
uint8_t Attributes; /*!< Specifies the memory attributes value. Attributes This parameter
|
||||
can be a combination of @ref CORTEX_MPU_Attributes */
|
||||
|
||||
} MPU_Attributes_InitTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group
|
||||
* @{
|
||||
*/
|
||||
#define NVIC_PRIORITYGROUP_0 0x7U /*!< 0 bit for pre-emption priority,
|
||||
4 bits for subpriority */
|
||||
#define NVIC_PRIORITYGROUP_1 0x6U /*!< 1 bit for pre-emption priority,
|
||||
3 bits for subpriority */
|
||||
#define NVIC_PRIORITYGROUP_2 0x5U /*!< 2 bits for pre-emption priority,
|
||||
2 bits for subpriority */
|
||||
#define NVIC_PRIORITYGROUP_3 0x4U /*!< 3 bits for pre-emption priority,
|
||||
1 bit for subpriority */
|
||||
#define NVIC_PRIORITYGROUP_4 0x3U /*!< 4 bits for pre-emption priority,
|
||||
0 bit for subpriority */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_SysTick_clock_source CORTEX SysTick clock source
|
||||
* @{
|
||||
*/
|
||||
#define SYSTICK_CLKSOURCE_HCLK_DIV8 0x0U /*!< AHB clock divided by 8 selected as SysTick clock source */
|
||||
#define SYSTICK_CLKSOURCE_LSI 0x1U /*!< LSI clock selected as SysTick clock source */
|
||||
#define SYSTICK_CLKSOURCE_LSE 0x2U /*!< LSE clock selected as SysTick clock source */
|
||||
#define SYSTICK_CLKSOURCE_HCLK 0x4U /*!< AHB clock selected as SysTick clock source */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control CORTEX MPU HFNMI and PRIVILEGED Access control
|
||||
* @{
|
||||
*/
|
||||
#define MPU_HFNMI_PRIVDEF_NONE 0U /*!< Background region access not allowed, MPU disabled for Hardfaults, NMIs, and exception handlers when FAULTMASK=1 */
|
||||
#define MPU_HARDFAULT_NMI 2U /*!< Background region access not allowed, MPU enabled for Hardfaults, NMIs, and exception handlers when FAULTMASK=1 */
|
||||
#define MPU_PRIVILEGED_DEFAULT 4U /*!< Background region privileged-only access allowed, MPU disabled for Hardfaults, NMIs, and exception handlers when FAULTMASK=1 */
|
||||
#define MPU_HFNMI_PRIVDEF 6U /*!< Background region privileged-only access allowed, MPU enabled for Hardfaults, NMIs, and exception handlers when FAULTMASK=1 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable
|
||||
* @{
|
||||
*/
|
||||
#define MPU_REGION_ENABLE 1U /*!< Enable region */
|
||||
#define MPU_REGION_DISABLE 0U /*!< Disable region */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access
|
||||
* @{
|
||||
*/
|
||||
#define MPU_INSTRUCTION_ACCESS_ENABLE 0U /*!< Execute attribute */
|
||||
#define MPU_INSTRUCTION_ACCESS_DISABLE 1U /*!< Execute never attribute */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable
|
||||
* @{
|
||||
*/
|
||||
#define MPU_ACCESS_NOT_SHAREABLE 0U /*!< Not shareable attribute */
|
||||
#define MPU_ACCESS_OUTER_SHAREABLE 2U /*!< Outer shareable attribute */
|
||||
#define MPU_ACCESS_INNER_SHAREABLE 3U /*!< Inner shareable attribute */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes
|
||||
* @{
|
||||
*/
|
||||
#define MPU_REGION_PRIV_RW 0U /*!< Read/write privileged-only attribute */
|
||||
#define MPU_REGION_ALL_RW 1U /*!< Read/write privileged/unprivileged attribute */
|
||||
#define MPU_REGION_PRIV_RO 2U /*!< Read-only privileged-only attribute */
|
||||
#define MPU_REGION_ALL_RO 3U /*!< Read-only privileged/unprivileged attribute */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number
|
||||
* @{
|
||||
*/
|
||||
#define MPU_REGION_NUMBER0 0U /*!< MPU region number 0 */
|
||||
#define MPU_REGION_NUMBER1 1U /*!< MPU region number 1 */
|
||||
#define MPU_REGION_NUMBER2 2U /*!< MPU region number 2 */
|
||||
#define MPU_REGION_NUMBER3 3U /*!< MPU region number 3 */
|
||||
#define MPU_REGION_NUMBER4 4U /*!< MPU region number 4 */
|
||||
#define MPU_REGION_NUMBER5 5U /*!< MPU region number 5 */
|
||||
#define MPU_REGION_NUMBER6 6U /*!< MPU region number 6 */
|
||||
#define MPU_REGION_NUMBER7 7U /*!< MPU region number 7 */
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#define MPU_REGION_NUMBER8 8U /*!< MPU region number 8 */
|
||||
#define MPU_REGION_NUMBER9 9U /*!< MPU region number 9 */
|
||||
#define MPU_REGION_NUMBER10 10U /*!< MPU region number 10 */
|
||||
#define MPU_REGION_NUMBER11 11U /*!< MPU region number 11 */
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Attributes_Number CORTEX MPU Memory Attributes Number
|
||||
* @{
|
||||
*/
|
||||
#define MPU_ATTRIBUTES_NUMBER0 0U /*!< MPU attribute number 0 */
|
||||
#define MPU_ATTRIBUTES_NUMBER1 1U /*!< MPU attribute number 1 */
|
||||
#define MPU_ATTRIBUTES_NUMBER2 2U /*!< MPU attribute number 2 */
|
||||
#define MPU_ATTRIBUTES_NUMBER3 3U /*!< MPU attribute number 3 */
|
||||
#define MPU_ATTRIBUTES_NUMBER4 4U /*!< MPU attribute number 4 */
|
||||
#define MPU_ATTRIBUTES_NUMBER5 5U /*!< MPU attribute number 5 */
|
||||
#define MPU_ATTRIBUTES_NUMBER6 6U /*!< MPU attribute number 6 */
|
||||
#define MPU_ATTRIBUTES_NUMBER7 7U /*!< MPU attribute number 7 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_MPU_Attributes CORTEX MPU Attributes
|
||||
* @{
|
||||
*/
|
||||
/* Device memory attributes */
|
||||
#define MPU_DEVICE_nGnRnE 0x0U /*!< Device non-Gathering, non-Reordering, no Early write acknowledgement */
|
||||
#define MPU_DEVICE_nGnRE 0x4U /*!< Device non-Gathering, non-Reordering, Early write acknowledgement */
|
||||
#define MPU_DEVICE_nGRE 0x8U /*!< Device non-Gathering, Reordering, Early write acknowledgement */
|
||||
#define MPU_DEVICE_GRE 0xCU /*!< Device Gathering, Reordering, Early write acknowledgement */
|
||||
|
||||
/* Normal memory attributes */
|
||||
/* To set with INNER_OUTER() macro for both inner/outer cache attributes */
|
||||
|
||||
/* Non-cacheable memory attribute */
|
||||
#define MPU_NOT_CACHEABLE 0x4U /*!< Normal memory, non-cacheable. */
|
||||
|
||||
/* Cacheable memory attributes: combination of cache write policy, transient and allocation */
|
||||
/* - cache write policy */
|
||||
#define MPU_WRITE_THROUGH 0x0U /*!< Normal memory, write-through. */
|
||||
#define MPU_WRITE_BACK 0x4U /*!< Normal memory, write-back. */
|
||||
/* - transient mode attribute */
|
||||
#define MPU_TRANSIENT 0x0U /*!< Normal memory, transient. */
|
||||
#define MPU_NON_TRANSIENT 0x8U /*!< Normal memory, non-transient. */
|
||||
/* - allocation attribute */
|
||||
#define MPU_NO_ALLOCATE 0x0U /*!< Normal memory, no allocate. */
|
||||
#define MPU_W_ALLOCATE 0x1U /*!< Normal memory, write allocate. */
|
||||
#define MPU_R_ALLOCATE 0x2U /*!< Normal memory, read allocate. */
|
||||
#define MPU_RW_ALLOCATE 0x3U /*!< Normal memory, read/write allocate. */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macros -----------------------------------------------------------*/
|
||||
/** @defgroup CORTEX_Exported_Macros CORTEX Exported Macros
|
||||
* @{
|
||||
*/
|
||||
#define OUTER(__ATTR__) ((__ATTR__) << 4U)
|
||||
#define INNER_OUTER(__ATTR__) ((__ATTR__) | ((__ATTR__) << 4U))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_Exported_Functions_Group1 NVIC functions
|
||||
* @brief NVIC functions
|
||||
* @{
|
||||
*/
|
||||
/* NVIC functions *****************************/
|
||||
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);
|
||||
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
|
||||
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
|
||||
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn);
|
||||
void HAL_NVIC_SystemReset(void);
|
||||
uint32_t HAL_NVIC_GetPriorityGrouping(void);
|
||||
void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *const pPreemptPriority,
|
||||
uint32_t *const pSubPriority);
|
||||
uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn);
|
||||
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn);
|
||||
void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn);
|
||||
uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_Exported_Functions_Group2 SYSTICK functions
|
||||
* @brief SYSTICK functions
|
||||
* @{
|
||||
*/
|
||||
/* SYSTICK functions ***********************************************/
|
||||
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);
|
||||
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);
|
||||
uint32_t HAL_SYSTICK_GetCLKSourceConfig(void);
|
||||
void HAL_SYSTICK_IRQHandler(void);
|
||||
void HAL_SYSTICK_Callback(void);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CORTEX_Exported_Functions_Group3 MPU functions
|
||||
* @brief MPU functions
|
||||
* @{
|
||||
*/
|
||||
/* MPU functions ***********************************************/
|
||||
void HAL_MPU_Enable(uint32_t MPU_Control);
|
||||
void HAL_MPU_Disable(void);
|
||||
void HAL_MPU_EnableRegion(uint32_t RegionNumber);
|
||||
void HAL_MPU_DisableRegion(uint32_t RegionNumber);
|
||||
void HAL_MPU_ConfigRegion(const MPU_Region_InitTypeDef *const pMPU_RegionInit);
|
||||
void HAL_MPU_ConfigMemoryAttributes(const MPU_Attributes_InitTypeDef *const pMPU_AttributesInit);
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* MPU_NS Control functions ***********************************************/
|
||||
void HAL_MPU_Enable_NS(uint32_t MPU_Control);
|
||||
void HAL_MPU_Disable_NS(void);
|
||||
void HAL_MPU_EnableRegion_NS(uint32_t RegionNumber);
|
||||
void HAL_MPU_DisableRegion_NS(uint32_t RegionNumber);
|
||||
void HAL_MPU_ConfigRegion_NS(const MPU_Region_InitTypeDef *const pMPU_RegionInit);
|
||||
void HAL_MPU_ConfigMemoryAttributes_NS(const MPU_Attributes_InitTypeDef *const pMPU_AttributesInit);
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/** @defgroup CORTEX_Private_Macros CORTEX Private Macros
|
||||
* @{
|
||||
*/
|
||||
#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \
|
||||
((GROUP) == NVIC_PRIORITYGROUP_1) || \
|
||||
((GROUP) == NVIC_PRIORITYGROUP_2) || \
|
||||
((GROUP) == NVIC_PRIORITYGROUP_3) || \
|
||||
((GROUP) == NVIC_PRIORITYGROUP_4))
|
||||
|
||||
#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < (1UL<<__NVIC_PRIO_BITS))
|
||||
|
||||
#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < (1UL<<__NVIC_PRIO_BITS))
|
||||
|
||||
#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) > SysTick_IRQn)
|
||||
|
||||
#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_LSI) || \
|
||||
((SOURCE) == SYSTICK_CLKSOURCE_LSE) || \
|
||||
((SOURCE) == SYSTICK_CLKSOURCE_HCLK)|| \
|
||||
((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8))
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#define IS_MPU_INSTANCE(INSTANCE) (((INSTANCE) == MPU) || ((INSTANCE) == MPU_NS))
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \
|
||||
((STATE) == MPU_REGION_DISABLE))
|
||||
|
||||
#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \
|
||||
((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE))
|
||||
|
||||
#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_OUTER_SHAREABLE) || \
|
||||
((STATE) == MPU_ACCESS_INNER_SHAREABLE) || \
|
||||
((STATE) == MPU_ACCESS_NOT_SHAREABLE))
|
||||
|
||||
#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_PRIV_RW) || \
|
||||
((TYPE) == MPU_REGION_ALL_RW) || \
|
||||
((TYPE) == MPU_REGION_PRIV_RO) || \
|
||||
((TYPE) == MPU_REGION_ALL_RO))
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#define IS_MPU_REGION_NUMBER(NUMBER) (((NUMBER) == MPU_REGION_NUMBER0) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER1) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER2) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER3) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER4) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER5) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER6) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER7) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER8) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER9) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER10)|| \
|
||||
((NUMBER) == MPU_REGION_NUMBER11))
|
||||
|
||||
#define IS_MPU_REGION_NUMBER_NS(NUMBER) (((NUMBER) == MPU_REGION_NUMBER0) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER1) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER2) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER3) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER4) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER5) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER6) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER7))
|
||||
#else
|
||||
#define IS_MPU_REGION_NUMBER(NUMBER) (((NUMBER) == MPU_REGION_NUMBER0) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER1) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER2) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER3) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER4) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER5) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER6) || \
|
||||
((NUMBER) == MPU_REGION_NUMBER7))
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
#define IS_MPU_ATTRIBUTES_NUMBER(NUMBER) (((NUMBER) == MPU_ATTRIBUTES_NUMBER0) || \
|
||||
((NUMBER) == MPU_ATTRIBUTES_NUMBER1) || \
|
||||
((NUMBER) == MPU_ATTRIBUTES_NUMBER2) || \
|
||||
((NUMBER) == MPU_ATTRIBUTES_NUMBER3) || \
|
||||
((NUMBER) == MPU_ATTRIBUTES_NUMBER4) || \
|
||||
((NUMBER) == MPU_ATTRIBUTES_NUMBER5) || \
|
||||
((NUMBER) == MPU_ATTRIBUTES_NUMBER6) || \
|
||||
((NUMBER) == MPU_ATTRIBUTES_NUMBER7))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __STM32H5xx_HAL_CORTEX_H */
|
||||
|
||||
|
||||
231
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_def.h
Normal file
231
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_def.h
Normal file
@@ -0,0 +1,231 @@
|
||||
/**
|
||||
**********************************************************************************************************************
|
||||
* @file stm32h5xx_hal_def.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains HAL common defines, enumeration, macros and
|
||||
* structures definitions.
|
||||
**********************************************************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
**********************************************************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
|
||||
#ifndef __STM32H5xx_HAL_DEF
|
||||
#define __STM32H5xx_HAL_DEF
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Includes ----------------------------------------------------------------------------------------------------------*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#include <arm_cmse.h>
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
#include "stm32h5xx.h"
|
||||
#include "Legacy/stm32_hal_legacy.h" /* Aliases file for old names compatibility */
|
||||
#include <stddef.h>
|
||||
#include <math.h>
|
||||
|
||||
/* Exported types ----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief HAL Status structures definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HAL_OK = 0x00,
|
||||
HAL_ERROR = 0x01,
|
||||
HAL_BUSY = 0x02,
|
||||
HAL_TIMEOUT = 0x03
|
||||
} HAL_StatusTypeDef;
|
||||
|
||||
/**
|
||||
* @brief HAL Lock structures definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HAL_UNLOCKED = 0x00,
|
||||
HAL_LOCKED = 0x01
|
||||
} HAL_LockTypeDef;
|
||||
|
||||
/* Exported macros ---------------------------------------------------------------------------------------------------*/
|
||||
|
||||
#define HAL_MAX_DELAY 0xFFFFFFFFU
|
||||
#define ARMCC_MIN_VERSION 6010050
|
||||
|
||||
#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) == (BIT))
|
||||
#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == 0U)
|
||||
|
||||
#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \
|
||||
do{ \
|
||||
(__HANDLE__)->__PPP_DMA_FIELD__ = &(__DMA_HANDLE__); \
|
||||
(__DMA_HANDLE__).Parent = (__HANDLE__); \
|
||||
} while(0)
|
||||
|
||||
#if !defined(UNUSED)
|
||||
#define UNUSED(x) ((void)(x))
|
||||
#endif /* UNUSED */
|
||||
|
||||
/** @brief Reset the Handle's State field.
|
||||
* @param __HANDLE__: specifies the Peripheral Handle.
|
||||
* @note This macro can be used for the following purpose:
|
||||
* - When the Handle is declared as local variable; before passing it as parameter
|
||||
* to HAL_PPP_Init() for the first time, it is mandatory to use this macro
|
||||
* to set to 0 the Handle's "State" field.
|
||||
* Otherwise, "State" field may have any random value and the first time the function
|
||||
* HAL_PPP_Init() is called, the low level hardware initialization will be missed
|
||||
* (i.e. HAL_PPP_MspInit() will not be executed).
|
||||
* - When there is a need to reconfigure the low level hardware: instead of calling
|
||||
* HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init().
|
||||
* In this later function, when the Handle's "State" field is set to 0, it will execute the function
|
||||
* HAL_PPP_MspInit() which will reconfigure the low level hardware.
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0)
|
||||
|
||||
#if (USE_RTOS == 1)
|
||||
/* Reserved for future use */
|
||||
#error " USE_RTOS should be 0 in the current HAL release "
|
||||
#else
|
||||
#define __HAL_LOCK(__HANDLE__) \
|
||||
do{ \
|
||||
if((__HANDLE__)->Lock == HAL_LOCKED) \
|
||||
{ \
|
||||
return HAL_BUSY; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
(__HANDLE__)->Lock = HAL_LOCKED; \
|
||||
} \
|
||||
}while (0)
|
||||
|
||||
#define __HAL_UNLOCK(__HANDLE__) \
|
||||
do{ \
|
||||
(__HANDLE__)->Lock = HAL_UNLOCKED; \
|
||||
}while (0)
|
||||
#endif /* USE_RTOS */
|
||||
|
||||
#if defined ( __GNUC__ )
|
||||
#ifndef __weak
|
||||
#define __weak __attribute__((weak))
|
||||
#endif /* __weak */
|
||||
#ifndef __packed
|
||||
#define __packed __attribute__((__packed__))
|
||||
#endif /* __packed */
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= ARMCC_MIN_VERSION)
|
||||
#ifndef __weak
|
||||
#define __weak __WEAK
|
||||
#endif /* __weak */
|
||||
#ifndef __packed
|
||||
#define __packed __PACKED
|
||||
#endif /* __packed */
|
||||
#endif
|
||||
|
||||
/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4"
|
||||
must be used instead */
|
||||
#if defined (__GNUC__) /* GNU Compiler */
|
||||
#ifndef __ALIGN_END
|
||||
#define __ALIGN_END __attribute__ ((aligned (4)))
|
||||
#endif /* __ALIGN_END */
|
||||
#ifndef __ALIGN_BEGIN
|
||||
#define __ALIGN_BEGIN
|
||||
#endif /* __ALIGN_BEGIN */
|
||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= ARMCC_MIN_VERSION)
|
||||
#ifndef __ALIGN_END
|
||||
#define __ALIGN_END __ALIGNED(4)
|
||||
#endif /* __ALIGN_END */
|
||||
#ifndef __ALIGN_BEGIN
|
||||
#define __ALIGN_BEGIN
|
||||
#endif /* __ALIGN_BEGIN */
|
||||
#else
|
||||
#ifndef __ALIGN_END
|
||||
#define __ALIGN_END
|
||||
#endif /* __ALIGN_END */
|
||||
#ifndef __ALIGN_BEGIN
|
||||
#if defined (__CC_ARM) /* ARM Compiler */
|
||||
#define __ALIGN_BEGIN __align(4)
|
||||
#elif defined (__ICCARM__) /* IAR Compiler */
|
||||
#define __ALIGN_BEGIN
|
||||
#endif /* __CC_ARM */
|
||||
#endif /* __ALIGN_BEGIN */
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
/* Macro to get variable aligned on 32-bytes,needed for cache maintenance purpose */
|
||||
#if defined (__GNUC__) /* GNU Compiler */
|
||||
#define ALIGN_32BYTES(buf) buf __attribute__ ((aligned (32)))
|
||||
#elif defined (__ICCARM__) /* IAR Compiler */
|
||||
#define ALIGN_32BYTES(buf) _Pragma("data_alignment=32") buf
|
||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= ARMCC_MIN_VERSION)
|
||||
#define ALIGN_32BYTES(buf) __ALIGNED(32) buf
|
||||
#elif defined (__CC_ARM) /* ARM Compiler */
|
||||
#define ALIGN_32BYTES(buf) __align(32) buf
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
/**
|
||||
* @brief __RAM_FUNC definition
|
||||
*/
|
||||
#if defined ( __CC_ARM ) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= ARMCC_MIN_VERSION))
|
||||
|
||||
/* ARM Compiler
|
||||
|
||||
RAM functions are defined using the toolchain options.
|
||||
Functions that are executed in RAM should reside in a separate source module.
|
||||
Using the 'Options for File' dialog you can simply change the 'Code / Const'
|
||||
area of a module to a memory space in physical RAM.
|
||||
Available memory areas are declared in the 'Target' tab of the 'Options for Target'
|
||||
dialog.
|
||||
*/
|
||||
#define __RAM_FUNC HAL_StatusTypeDef
|
||||
|
||||
#elif defined ( __ICCARM__ )
|
||||
/* ICCARM Compiler
|
||||
|
||||
RAM functions are defined using a specific toolchain keyword "__ramfunc".
|
||||
*/
|
||||
#define __RAM_FUNC __ramfunc HAL_StatusTypeDef
|
||||
|
||||
#elif defined ( __GNUC__ )
|
||||
/* GNU Compiler
|
||||
|
||||
RAM functions are defined using a specific toolchain attribute
|
||||
"__attribute__((section(".RamFunc")))".
|
||||
*/
|
||||
#define __RAM_FUNC HAL_StatusTypeDef __attribute__((section(".RamFunc")))
|
||||
|
||||
#endif /* defined ( __CC_ARM ) || ((__ARMCC_VERSION) && (__ARMCC_VERSION >= ARMCC_MIN_VERSION)) */
|
||||
|
||||
/**
|
||||
* @brief __NOINLINE definition
|
||||
*/
|
||||
#if defined ( __CC_ARM ) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= ARMCC_MIN_VERSION)) || defined ( __GNUC__ )
|
||||
/* ARM & GNUCompiler
|
||||
|
||||
*/
|
||||
#define __NOINLINE __attribute__ ( (noinline) )
|
||||
|
||||
#elif defined ( __ICCARM__ )
|
||||
/* ICCARM Compiler
|
||||
|
||||
*/
|
||||
#define __NOINLINE _Pragma("optimize = no_inline")
|
||||
|
||||
#endif /* ( __CC_ARM ) || ((__ARMCC_VERSION) && (__ARMCC_VERSION >= ARMCC_MIN_VERSION)) || defined ( __GNUC__ ) */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* ___STM32H5xx_HAL_DEF */
|
||||
|
||||
1179
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_dma.h
Normal file
1179
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_dma.h
Normal file
File diff suppressed because it is too large
Load Diff
735
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_dma_ex.h
Normal file
735
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_dma_ex.h
Normal file
@@ -0,0 +1,735 @@
|
||||
/**
|
||||
**********************************************************************************************************************
|
||||
* @file stm32h5xx_hal_dma_ex.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of DMA HAL extension module.
|
||||
**********************************************************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
**********************************************************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
|
||||
#ifndef STM32H5xx_HAL_DMA_EX_H
|
||||
#define STM32H5xx_HAL_DMA_EX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ----------------------------------------------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup DMAEx
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ----------------------------------------------------------------------------------------------------*/
|
||||
/** @defgroup DMAEx_Exported_Types DMAEx Exported Types
|
||||
* @brief DMAEx Exported types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief DMAEx Data Handling Configuration Structure Definition.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t DataExchange; /*!< Specifies the DMA channel data exchange mode.
|
||||
This parameter can be a value of @ref DMAEx_Data_Exchange */
|
||||
|
||||
uint32_t DataAlignment; /*!< Specifies the DMA channel data padding and alignment mode
|
||||
This parameter can be a value of @ref DMAEx_Data_Alignment */
|
||||
|
||||
} DMA_DataHandlingConfTypeDef;
|
||||
|
||||
/**
|
||||
* @brief DMAEx Trigger Configuration Structure Definition.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t TriggerMode; /*!< Specifies the DMA channel trigger mode.
|
||||
This parameter can be a value of @ref DMAEx_Trigger_Mode */
|
||||
|
||||
uint32_t TriggerPolarity; /*!< Specifies the DMA channel trigger event polarity.
|
||||
This parameter can be a value of @ref DMAEx_Trigger_Polarity */
|
||||
|
||||
uint32_t TriggerSelection; /*!< Specifies the DMA channel trigger event selection.
|
||||
This parameter can be a value of @ref DMAEx_Trigger_Selection */
|
||||
|
||||
} DMA_TriggerConfTypeDef;
|
||||
|
||||
/**
|
||||
* @brief DMAEx Repeated Block Configuration Structure Definition.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t RepeatCount; /*!< Specifies the DMA channel repeat count (the number of repetitions of block).
|
||||
This parameter can be a value between 1 and 2048 */
|
||||
|
||||
int32_t SrcAddrOffset; /*!< Specifies the DMA channel single/burst source address offset :
|
||||
This parameter can be a value between -8191 and 8191.
|
||||
* If source address offset > 0 => Increment the source address by offset from where
|
||||
the last single/burst transfer ends.
|
||||
* If source address offset < 0 => Decrement the source address by offset from where
|
||||
the last single/burst transfer ends.
|
||||
* If source address offset == 0 => The next single/burst source address starts from
|
||||
where the last transfer ends */
|
||||
|
||||
int32_t DestAddrOffset; /*!< Specifies the DMA channel single/burst destination address offset signed value :
|
||||
This parameter can be a value between -8191 and 8191.
|
||||
* If destination address offset > 0 => Increment the destination address by offset
|
||||
from where the last single/burst transfer ends.
|
||||
* If destination address offset < 0 => Decrement the destination address by offset
|
||||
from where the last single/burst transfer ends.
|
||||
* If destination address offset == 0 => The next single/burst destination address
|
||||
starts from where the last transfer ends. */
|
||||
|
||||
int32_t BlkSrcAddrOffset; /*!< Specifies the DMA channel block source address offset signed value :
|
||||
This parameter can be a value between -65535 and 65535.
|
||||
* If block source address offset > 0 => Increment the block source address by offset
|
||||
from where the last block ends.
|
||||
* If block source address offset < 0 => Decrement the next block source address by
|
||||
offset from where the last block ends.
|
||||
* If block source address offset == 0 => the next block source address starts from
|
||||
where the last block ends */
|
||||
|
||||
int32_t BlkDestAddrOffset; /*!< Specifies the DMA channel block destination address offset signed value :
|
||||
This parameter can be a value between -65535 and 65535.
|
||||
* If block destination address offset > 0 => Increment the block destination address
|
||||
by offset from where the last block ends.
|
||||
* If block destination address offset < 0 => Decrement the next block destination
|
||||
address by offset from where the last block ends.
|
||||
* If block destination address offset == 0 => the next block destination address
|
||||
starts from where the last block ends */
|
||||
|
||||
} DMA_RepeatBlockConfTypeDef;
|
||||
|
||||
/**
|
||||
* @brief DMAEx Queue State Enumeration Definition.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HAL_DMA_QUEUE_STATE_RESET = 0x00U, /*!< DMA queue empty */
|
||||
HAL_DMA_QUEUE_STATE_READY = 0x01U, /*!< DMA queue ready for use */
|
||||
HAL_DMA_QUEUE_STATE_BUSY = 0x02U /*!< DMA queue execution on going */
|
||||
|
||||
} HAL_DMA_QStateTypeDef;
|
||||
|
||||
/**
|
||||
* @brief DMAEx Linked-List Node Configuration Structure Definition.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t NodeType; /*!< Specifies the DMA channel node type.
|
||||
This parameter can be a value of @ref DMAEx_Node_Type */
|
||||
|
||||
DMA_InitTypeDef Init; /*!< Specifies the DMA channel basic configuration */
|
||||
|
||||
DMA_DataHandlingConfTypeDef DataHandlingConfig; /*!< Specifies the DMA channel data handling channel configuration */
|
||||
|
||||
DMA_TriggerConfTypeDef TriggerConfig; /*!< Specifies the DMA channel trigger configuration */
|
||||
|
||||
DMA_RepeatBlockConfTypeDef RepeatBlockConfig; /*!< Specifies the DMA channel repeated block configuration */
|
||||
|
||||
uint32_t SrcAddress; /*!< Specifies the source memory address */
|
||||
uint32_t DstAddress; /*!< Specifies the destination memory address */
|
||||
uint32_t DataSize; /*!< Specifies the source data size in bytes */
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
uint32_t SrcSecure; /*!< Specifies the source security attribute */
|
||||
uint32_t DestSecure; /*!< Specifies the destination security attribute */
|
||||
#endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
|
||||
|
||||
} DMA_NodeConfTypeDef;
|
||||
|
||||
/**
|
||||
* @brief DMAEx Linked-List Node Structure Definition.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t LinkRegisters[8U]; /*!< Physical Node register description */
|
||||
uint32_t NodeInfo; /*!< Node information */
|
||||
|
||||
} DMA_NodeTypeDef;
|
||||
|
||||
/**
|
||||
* @brief DMAEx Linked-List Queue Structure Definition.
|
||||
*/
|
||||
typedef struct __DMA_QListTypeDef
|
||||
{
|
||||
DMA_NodeTypeDef *Head; /*!< Specifies the queue head node */
|
||||
|
||||
DMA_NodeTypeDef *FirstCircularNode; /*!< Specifies the queue first circular node */
|
||||
|
||||
uint32_t NodeNumber; /*!< Specifies the queue node number */
|
||||
|
||||
__IO HAL_DMA_QStateTypeDef State; /*!< Specifies the queue state */
|
||||
|
||||
__IO uint32_t ErrorCode; /*!< Specifies the queue error code */
|
||||
|
||||
__IO uint32_t Type; /*!< Specifies whether the queue is static or dynamic */
|
||||
|
||||
} DMA_QListTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants ------------------------------------------------------------------------------------------------*/
|
||||
/** @defgroup DMAEx_Exported_Constants DMAEx Exported Constants
|
||||
* @brief DMAEx Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup Queue_Error_Codes Queue Error Codes
|
||||
* @brief Queue Error Codes
|
||||
* @{
|
||||
*/
|
||||
#define HAL_DMA_QUEUE_ERROR_NONE (0x00U) /*!< No error */
|
||||
#define HAL_DMA_QUEUE_ERROR_BUSY (0x01U) /*!< Error busy */
|
||||
#define HAL_DMA_QUEUE_ERROR_EMPTY (0x02U) /*!< Error unallowed operation for empty queue */
|
||||
#define HAL_DMA_QUEUE_ERROR_UNSUPPORTED (0x03U) /*!< Error unsupported feature */
|
||||
#define HAL_DMA_QUEUE_ERROR_INVALIDTYPE (0x04U) /*!< Error incompatible node type or circular initialization
|
||||
and queue circular types are incompatible */
|
||||
#define HAL_DMA_QUEUE_ERROR_OUTOFRANGE (0x05U) /*!< Error out of range node memory */
|
||||
#define HAL_DMA_QUEUE_ERROR_NOTFOUND (0x06U) /*!< Error node not found in queue */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_LinkedList_Mode DMAEx LinkedList Mode
|
||||
* @brief DMAEx LinkedList Mode
|
||||
* @{
|
||||
*/
|
||||
#define DMA_LINKEDLIST_NORMAL DMA_LINKEDLIST /*!< Linear linked-list DMA channel transfer */
|
||||
#define DMA_LINKEDLIST_CIRCULAR (DMA_LINKEDLIST | (0x01U)) /*!< Circular linked-list DMA channel transfer */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Data_Alignment DMAEx Data Alignment
|
||||
* @brief DMAEx Data Alignment
|
||||
* @{
|
||||
*/
|
||||
#define DMA_DATA_RIGHTALIGN_ZEROPADDED 0x00000000U /*!< If source data width < destination data width
|
||||
=> Right aligned padded with 0 up to destination data
|
||||
width */
|
||||
#define DMA_DATA_RIGHTALIGN_LEFTTRUNC 0x00000000U /*!< If source data width > destination data width
|
||||
=> Right aligned left Truncated down to destination
|
||||
data width */
|
||||
#define DMA_DATA_RIGHTALIGN_SIGNEXT DMA_CTR1_PAM_0 /*!< If source data width < destination data width
|
||||
=> Right Aligned padded with sign extended up to
|
||||
destination data width */
|
||||
#define DMA_DATA_LEFTALIGN_RIGHTTRUNC DMA_CTR1_PAM_0 /*!< If source data width > destination data width
|
||||
=> Left Aligned Right Truncated down to the
|
||||
destination data width */
|
||||
#define DMA_DATA_PACK DMA_CTR1_PAM_1 /*!< If source data width < destination data width
|
||||
=> Packed at the destination data width */
|
||||
#define DMA_DATA_UNPACK DMA_CTR1_PAM_1 /*!< If source data width > destination data width
|
||||
=> Unpacked at the destination data width */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Data_Exchange DMAEx Data Exchange
|
||||
* @brief DMAEx Data Exchange
|
||||
* @{
|
||||
*/
|
||||
#define DMA_EXCHANGE_NONE 0x00000000U /*!< No data exchange */
|
||||
#define DMA_EXCHANGE_DEST_BYTE DMA_CTR1_DBX /*!< Destination Byte exchange when destination data width is > Byte */
|
||||
#define DMA_EXCHANGE_DEST_HALFWORD DMA_CTR1_DHX /*!< Destination Half-Word exchange when destination data width is > Half-Word */
|
||||
#define DMA_EXCHANGE_SRC_BYTE DMA_CTR1_SBX /*!< Source Byte endianness exchange when source data width is word */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Trigger_Polarity DMAEx Trigger Polarity
|
||||
* @brief DMAEx Trigger Polarity
|
||||
* @{
|
||||
*/
|
||||
#define DMA_TRIG_POLARITY_MASKED 0x00000000U /*!< No trigger of the selected DMA request. Masked trigger event */
|
||||
#define DMA_TRIG_POLARITY_RISING DMA_CTR2_TRIGPOL_0 /*!< Trigger of the selected DMA request on the rising edge of the selected trigger event input */
|
||||
#define DMA_TRIG_POLARITY_FALLING DMA_CTR2_TRIGPOL_1 /*!< Trigger of the selected DMA request on the falling edge of the selected trigger event input */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Trigger_Mode DMAEx Trigger Mode
|
||||
* @brief DMAEx Trigger Mode
|
||||
* @{
|
||||
*/
|
||||
#define DMA_TRIGM_BLOCK_TRANSFER 0x00000000U /*!< A block transfer is conditioned by (at least) one hit trigger */
|
||||
#define DMA_TRIGM_REPEATED_BLOCK_TRANSFER DMA_CTR2_TRIGM_0 /*!< A repeated block transfer is conditioned by (at least) one hit trigger */
|
||||
#define DMA_TRIGM_LLI_LINK_TRANSFER DMA_CTR2_TRIGM_1 /*!< A LLI link transfer is conditioned by (at least) one hit trigger */
|
||||
#define DMA_TRIGM_SINGLE_BURST_TRANSFER DMA_CTR2_TRIGM /*!< A single/burst transfer is conditioned by (at least) one hit trigger */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Trigger_Selection DMAEx Trigger Selection
|
||||
* @brief DMAEx Trigger Selection
|
||||
* @{
|
||||
*/
|
||||
/* GPDMA1 triggers */
|
||||
#define GPDMA1_TRIGGER_EXTI_LINE0 0U /*!< GPDMA1 HW Trigger signal is EXTI_LINE0 */
|
||||
#define GPDMA1_TRIGGER_EXTI_LINE1 1U /*!< GPDMA1 HW Trigger signal is EXTI_LINE1 */
|
||||
#define GPDMA1_TRIGGER_EXTI_LINE2 2U /*!< GPDMA1 HW Trigger signal is EXTI_LINE2 */
|
||||
#define GPDMA1_TRIGGER_EXTI_LINE3 3U /*!< GPDMA1 HW Trigger signal is EXTI_LINE3 */
|
||||
#define GPDMA1_TRIGGER_EXTI_LINE4 4U /*!< GPDMA1 HW Trigger signal is EXTI_LINE4 */
|
||||
#define GPDMA1_TRIGGER_EXTI_LINE5 5U /*!< GPDMA1 HW Trigger signal is EXTI_LINE5 */
|
||||
#define GPDMA1_TRIGGER_EXTI_LINE6 6U /*!< GPDMA1 HW Trigger signal is EXTI_LINE6 */
|
||||
#define GPDMA1_TRIGGER_EXTI_LINE7 7U /*!< GPDMA1 HW Trigger signal is EXTI_LINE7 */
|
||||
#define GPDMA1_TRIGGER_TAMP_TRG1 8U /*!< GPDMA1 HW Trigger signal is TAMP_TRG1 */
|
||||
#define GPDMA1_TRIGGER_TAMP_TRG2 9U /*!< GPDMA1 HW Trigger signal is TAMP_TRG2 */
|
||||
#if defined (TAMP_CR1_TAMP3E)
|
||||
#define GPDMA1_TRIGGER_TAMP_TRG3 10U /*!< GPDMA1 HW Trigger signal is TAMP_TRG3 */
|
||||
#endif /* TAMP_CR1_TAMP3E */
|
||||
#define GPDMA1_TRIGGER_LPTIM1_CH1 11U /*!< GPDMA1 HW Trigger signal is LPTIM1_CH1 */
|
||||
#define GPDMA1_TRIGGER_LPTIM1_CH2 12U /*!< GPDMA1 HW Trigger signal is LPTIM1_CH2 */
|
||||
#define GPDMA1_TRIGGER_LPTIM2_CH1 13U /*!< GPDMA1 HW Trigger signal is LPTIM2_CH1 */
|
||||
#define GPDMA1_TRIGGER_LPTIM2_CH2 14U /*!< GPDMA1 HW Trigger signal is LPTIM2_CH2 */
|
||||
#define GPDMA1_TRIGGER_RTC_ALRA_TRG 15U /*!< GPDMA1 HW Trigger signal is RTC_ALRA_TRG */
|
||||
#define GPDMA1_TRIGGER_RTC_ALRB_TRG 16U /*!< GPDMA1 HW Trigger signal is RTC_ALRB_TRG */
|
||||
#define GPDMA1_TRIGGER_RTC_WUT_TRG 17U /*!< GPDMA1 HW Trigger signal is RTC_WUT_TRG */
|
||||
#define GPDMA1_TRIGGER_GPDMA1_CH0_TCF 18U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH0_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA1_CH1_TCF 19U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH1_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA1_CH2_TCF 20U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH2_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA1_CH3_TCF 21U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH3_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA1_CH4_TCF 22U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH4_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA1_CH5_TCF 23U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH5_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA1_CH6_TCF 24U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH6_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA1_CH7_TCF 25U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH7_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA2_CH0_TCF 26U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH0_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA2_CH1_TCF 27U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH1_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA2_CH2_TCF 28U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH2_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA2_CH3_TCF 29U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH3_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA2_CH4_TCF 30U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH4_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA2_CH5_TCF 31U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH5_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA2_CH6_TCF 32U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH6_TCF */
|
||||
#define GPDMA1_TRIGGER_GPDMA2_CH7_TCF 33U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH7_TCF */
|
||||
#define GPDMA1_TRIGGER_TIM2_TRGO 34U /*!< GPDMA1 HW Trigger signal is TIM2_TRGO */
|
||||
#if defined (TIM15)
|
||||
#define GPDMA1_TRIGGER_TIM15_TRGO 35U /*!< GPDMA1 HW Trigger signal is TIM15_TRGO */
|
||||
#endif /* TIM15 */
|
||||
#if defined (TIM12)
|
||||
#define GPDMA1_TRIGGER_TIM12_TRGO 36U /*!< GPDMA1 HW Trigger signal is TIM12_TRGO */
|
||||
#endif /* TIM12 */
|
||||
#if defined (LPTIM3)
|
||||
#define GPDMA1_TRIGGER_LPTIM3_CH1 37U /*!< GPDMA1 HW Trigger signal is LPTIM3_CH1 */
|
||||
#define GPDMA1_TRIGGER_LPTIM3_CH2 38U /*!< GPDMA1 HW Trigger signal is LPTIM3_CH2 */
|
||||
#endif /* LPTIM3 */
|
||||
#if defined (LPTIM4)
|
||||
#define GPDMA1_TRIGGER_LPTIM4_AIT 39U /*!< GPDMA1 HW Trigger signal is LPTIM4_AIT */
|
||||
#endif /* LPTIM4 */
|
||||
#if defined (LPTIM5)
|
||||
#define GPDMA1_TRIGGER_LPTIM5_CH1 40U /*!< GPDMA1 HW Trigger signal is LPTIM5_CH1 */
|
||||
#define GPDMA1_TRIGGER_LPTIM5_CH2 41U /*!< GPDMA1 HW Trigger signal is LPTIM5_CH2 */
|
||||
#endif /* LPTIM5 */
|
||||
#if defined (LPTIM6)
|
||||
#define GPDMA1_TRIGGER_LPTIM6_CH1 42U /*!< GPDMA1 HW Trigger signal is LPTIM6_CH1 */
|
||||
#define GPDMA1_TRIGGER_LPTIM6_CH2 43U /*!< GPDMA1 HW Trigger signal is LPTIM6_CH2 */
|
||||
#endif /* LPTIM6 */
|
||||
#if defined (COMP1)
|
||||
#define GPDMA1_TRIGGER_COMP1_OUT 44U /*!< GPDMA1 HW Trigger signal is COMP1_OUT */
|
||||
#endif /* COMP1 */
|
||||
#if defined (STM32H503xx) || defined(STM32H523xx) || defined(STM32H533xx)
|
||||
#define GPDMA1_TRIGGER_EVENTOUT 45U /*!< GPDMA1 HW Trigger signal is EVENTOUT */
|
||||
#endif /* STM32H503xx || STM32H523xx || STM32H533xx */
|
||||
|
||||
/* GPDMA2 triggers */
|
||||
#define GPDMA2_TRIGGER_EXTI_LINE0 0U /*!< GPDMA2 HW Trigger signal is EXTI_LINE0 */
|
||||
#define GPDMA2_TRIGGER_EXTI_LINE1 1U /*!< GPDMA2 HW Trigger signal is EXTI_LINE1 */
|
||||
#define GPDMA2_TRIGGER_EXTI_LINE2 2U /*!< GPDMA2 HW Trigger signal is EXTI_LINE2 */
|
||||
#define GPDMA2_TRIGGER_EXTI_LINE3 3U /*!< GPDMA2 HW Trigger signal is EXTI_LINE3 */
|
||||
#define GPDMA2_TRIGGER_EXTI_LINE4 4U /*!< GPDMA2 HW Trigger signal is EXTI_LINE4 */
|
||||
#define GPDMA2_TRIGGER_EXTI_LINE5 5U /*!< GPDMA2 HW Trigger signal is EXTI_LINE5 */
|
||||
#define GPDMA2_TRIGGER_EXTI_LINE6 6U /*!< GPDMA2 HW Trigger signal is EXTI_LINE6 */
|
||||
#define GPDMA2_TRIGGER_EXTI_LINE7 7U /*!< GPDMA2 HW Trigger signal is EXTI_LINE7 */
|
||||
#define GPDMA2_TRIGGER_TAMP_TRG1 8U /*!< GPDMA2 HW Trigger signal is TAMP_TRG1 */
|
||||
#define GPDMA2_TRIGGER_TAMP_TRG2 9U /*!< GPDMA2 HW Trigger signal is TAMP_TRG2 */
|
||||
#define GPDMA2_TRIGGER_TAMP_TRG3 10U /*!< GPDMA2 HW Trigger signal is TAMP_TRG3 */
|
||||
#define GPDMA2_TRIGGER_LPTIM1_CH1 11U /*!< GPDMA2 HW Trigger signal is LPTIM1_CH1 */
|
||||
#define GPDMA2_TRIGGER_LPTIM1_CH2 12U /*!< GPDMA2 HW Trigger signal is LPTIM1_CH2 */
|
||||
#define GPDMA2_TRIGGER_LPTIM2_CH1 13U /*!< GPDMA2 HW Trigger signal is LPTIM2_CH1 */
|
||||
#define GPDMA2_TRIGGER_LPTIM2_CH2 14U /*!< GPDMA2 HW Trigger signal is LPTIM2_CH2 */
|
||||
#define GPDMA2_TRIGGER_RTC_ALRA_TRG 15U /*!< GPDMA2 HW Trigger signal is RTC_ALRA_TRG */
|
||||
#define GPDMA2_TRIGGER_RTC_ALRB_TRG 16U /*!< GPDMA2 HW Trigger signal is RTC_ALRB_TRG */
|
||||
#define GPDMA2_TRIGGER_RTC_WUT_TRG 17U /*!< GPDMA2 HW Trigger signal is RTC_WUT_TRG */
|
||||
#define GPDMA2_TRIGGER_GPDMA1_CH0_TCF 18U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH0_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA1_CH1_TCF 19U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH1_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA1_CH2_TCF 20U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH2_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA1_CH3_TCF 21U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH3_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA1_CH4_TCF 22U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH4_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA1_CH5_TCF 23U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH5_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA1_CH6_TCF 24U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH6_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA1_CH7_TCF 25U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH7_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA2_CH0_TCF 26U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH0_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA2_CH1_TCF 27U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH1_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA2_CH2_TCF 28U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH2_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA2_CH3_TCF 29U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH3_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA2_CH4_TCF 30U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH4_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA2_CH5_TCF 31U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH5_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA2_CH6_TCF 32U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH6_TCF */
|
||||
#define GPDMA2_TRIGGER_GPDMA2_CH7_TCF 33U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH7_TCF */
|
||||
#define GPDMA2_TRIGGER_TIM2_TRGO 34U /*!< GPDMA2 HW Trigger signal is TIM2_TRGO */
|
||||
#if defined (TIM15)
|
||||
#define GPDMA2_TRIGGER_TIM15_TRGO 35U /*!< GPDMA2 HW Trigger signal is TIM15_TRGO */
|
||||
#endif /* TIM15 */
|
||||
#if defined (TIM12)
|
||||
#define GPDMA2_TRIGGER_TIM12_TRGO 36U /*!< GPDMA2 HW Trigger signal is TIM12_TRGO */
|
||||
#endif /* TIM12 */
|
||||
#if defined (LPTIM3)
|
||||
#define GPDMA2_TRIGGER_LPTIM3_CH1 37U /*!< GPDMA2 HW Trigger signal is LPTIM3_CH1 */
|
||||
#define GPDMA2_TRIGGER_LPTIM3_CH2 38U /*!< GPDMA2 HW Trigger signal is LPTIM3_CH2 */
|
||||
#endif /* LPTIM3 */
|
||||
#if defined (LPTIM4)
|
||||
#define GPDMA2_TRIGGER_LPTIM4_AIT 39U /*!< GPDMA2 HW Trigger signal is LPTIM4_AIT */
|
||||
#endif /* LPTIM4 */
|
||||
#if defined (LPTIM5)
|
||||
#define GPDMA2_TRIGGER_LPTIM5_CH1 40U /*!< GPDMA2 HW Trigger signal is LPTIM5_CH1 */
|
||||
#define GPDMA2_TRIGGER_LPTIM5_CH2 41U /*!< GPDMA2 HW Trigger signal is LPTIM5_CH2 */
|
||||
#endif /* LPTIM5 */
|
||||
#if defined (LPTIM6)
|
||||
#define GPDMA2_TRIGGER_LPTIM6_CH1 42U /*!< GPDMA2 HW Trigger signal is LPTIM6_CH1 */
|
||||
#define GPDMA2_TRIGGER_LPTIM6_CH2 43U /*!< GPDMA2 HW Trigger signal is LPTIM6_CH2 */
|
||||
#endif /* LPTIM6 */
|
||||
#if defined (COMP1)
|
||||
#define GPDMA2_TRIGGER_COMP1_OUT 44U /*!< GPDMA2 HW Trigger signal is COMP1_OUT */
|
||||
#endif /* COMP1 */
|
||||
#if defined (STM32H503xx) || defined(STM32H523xx) || defined(STM32H533xx)
|
||||
#define GPDMA2_TRIGGER_EVENTOUT 45U /*!< GPDMA2 HW Trigger signal is EVENTOUT */
|
||||
#endif /* STM32H503xx || STM32H523xx || STM32H533xx */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Node_Type DMAEx Node Type
|
||||
* @brief DMAEx Node Type
|
||||
* @{
|
||||
*/
|
||||
#define DMA_GPDMA_LINEAR_NODE (DMA_CHANNEL_TYPE_GPDMA | DMA_CHANNEL_TYPE_LINEAR_ADDR) /*!< Defines the GPDMA linear addressing node type */
|
||||
#define DMA_GPDMA_2D_NODE (DMA_CHANNEL_TYPE_GPDMA | DMA_CHANNEL_TYPE_2D_ADDR) /*!< Defines the GPDMA 2 dimension addressing node type */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Link_Allocated_Port DMAEx Linked-List Allocated Port
|
||||
* @brief DMAEx Linked-List Allocated Port
|
||||
* @{
|
||||
*/
|
||||
#define DMA_LINK_ALLOCATED_PORT0 0x00000000U /*!< Link allocated port 0 */
|
||||
#define DMA_LINK_ALLOCATED_PORT1 DMA_CCR_LAP /*!< Link allocated port 1 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Link_Step_Mode DMAEx Link Step Mode
|
||||
* @brief DMAEx Link Step Mode
|
||||
* @{
|
||||
*/
|
||||
#define DMA_LSM_FULL_EXECUTION 0x00000000U /*!< Channel is executed for the full linked-list */
|
||||
#define DMA_LSM_1LINK_EXECUTION DMA_CCR_LSM /*!< Channel is executed once for the current LLI */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported functions ------------------------------------------------------------------------------------------------*/
|
||||
/** @defgroup DMAEx_Exported_Functions DMAEx Exported Functions
|
||||
* @brief DMAEx Exported functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Exported_Functions_Group1 Linked-List Initialization and De-Initialization Functions
|
||||
* @brief Linked-List Initialization and De-Initialization Functions
|
||||
* @{
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_Init(DMA_HandleTypeDef *const hdma);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_DeInit(DMA_HandleTypeDef *const hdma);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Exported_Functions_Group2 Linked-List IO Operation Functions
|
||||
* @brief Linked-List IO Operation Functions
|
||||
* @{
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_Start(DMA_HandleTypeDef *const hdma);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_Start_IT(DMA_HandleTypeDef *const hdma);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Exported_Functions_Group3 Linked-List Management Functions
|
||||
* @brief Linked-List Management Functions
|
||||
* @{
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_BuildNode(DMA_NodeConfTypeDef const *const pNodeConfig,
|
||||
DMA_NodeTypeDef *const pNode);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_GetNodeConfig(DMA_NodeConfTypeDef *const pNodeConfig,
|
||||
DMA_NodeTypeDef const *const pNode);
|
||||
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_InsertNode(DMA_QListTypeDef *const pQList,
|
||||
DMA_NodeTypeDef *const pPrevNode,
|
||||
DMA_NodeTypeDef *const pNewNode);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_InsertNode_Head(DMA_QListTypeDef *const pQList,
|
||||
DMA_NodeTypeDef *const pNewNode);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_InsertNode_Tail(DMA_QListTypeDef *const pQList,
|
||||
DMA_NodeTypeDef *const pNewNode);
|
||||
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode(DMA_QListTypeDef *const pQList,
|
||||
DMA_NodeTypeDef *const pNode);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode_Head(DMA_QListTypeDef *const pQList);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode_Tail(DMA_QListTypeDef *const pQList);
|
||||
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode(DMA_QListTypeDef *const pQList,
|
||||
DMA_NodeTypeDef *const pOldNode,
|
||||
DMA_NodeTypeDef *const pNewNode);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode_Head(DMA_QListTypeDef *const pQList,
|
||||
DMA_NodeTypeDef *const pNewNode);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode_Tail(DMA_QListTypeDef *const pQList,
|
||||
DMA_NodeTypeDef *const pNewNode);
|
||||
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_ResetQ(DMA_QListTypeDef *const pQList);
|
||||
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_InsertQ(DMA_QListTypeDef *const pSrcQList,
|
||||
DMA_NodeTypeDef const *const pPrevNode,
|
||||
DMA_QListTypeDef *const pDestQList);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_InsertQ_Head(DMA_QListTypeDef *const pSrcQList,
|
||||
DMA_QListTypeDef *const pDestQList);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_InsertQ_Tail(DMA_QListTypeDef *const pSrcQList,
|
||||
DMA_QListTypeDef *const pDestQList);
|
||||
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_SetCircularModeConfig(DMA_QListTypeDef *const pQList,
|
||||
DMA_NodeTypeDef *const pFirstCircularNode);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_SetCircularMode(DMA_QListTypeDef *const pQList);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_ClearCircularMode(DMA_QListTypeDef *const pQList);
|
||||
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_ConvertQToDynamic(DMA_QListTypeDef *const pQList);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_ConvertQToStatic(DMA_QListTypeDef *const pQList);
|
||||
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_LinkQ(DMA_HandleTypeDef *const hdma,
|
||||
DMA_QListTypeDef *const pQList);
|
||||
HAL_StatusTypeDef HAL_DMAEx_List_UnLinkQ(DMA_HandleTypeDef *const hdma);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Exported_Functions_Group4 Data Handling, Repeated Block and Trigger Configuration Functions
|
||||
* @brief Data Handling, Repeated Block and Trigger Configuration Functions
|
||||
* @{
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_DMAEx_ConfigDataHandling(DMA_HandleTypeDef *const hdma,
|
||||
DMA_DataHandlingConfTypeDef const *const pConfigDataHandling);
|
||||
HAL_StatusTypeDef HAL_DMAEx_ConfigTrigger(DMA_HandleTypeDef *const hdma,
|
||||
DMA_TriggerConfTypeDef const *const pConfigTrigger);
|
||||
HAL_StatusTypeDef HAL_DMAEx_ConfigRepeatBlock(DMA_HandleTypeDef *const hdma,
|
||||
DMA_RepeatBlockConfTypeDef const *const pConfigRepeatBlock);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Exported_Functions_Group5 Suspend and Resume Operation Functions
|
||||
* @brief Suspend and Resume Operation Functions
|
||||
* @{
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_DMAEx_Suspend(DMA_HandleTypeDef *const hdma);
|
||||
HAL_StatusTypeDef HAL_DMAEx_Suspend_IT(DMA_HandleTypeDef *const hdma);
|
||||
HAL_StatusTypeDef HAL_DMAEx_Resume(DMA_HandleTypeDef *const hdma);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup DMAEx_Exported_Functions_Group6 FIFO Status Function
|
||||
* @brief FIFO Status Function
|
||||
* @{
|
||||
*/
|
||||
uint32_t HAL_DMAEx_GetFifoLevel(DMA_HandleTypeDef const *const hdma);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private types -----------------------------------------------------------------------------------------------------*/
|
||||
/** @defgroup DMAEx_Private_Types DMAEx Private Types
|
||||
* @brief DMAEx Private Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief DMA Node in Queue Information Structure Definition.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t cllr_offset; /* CLLR register offset */
|
||||
|
||||
uint32_t previousnode_addr; /* Previous node address */
|
||||
|
||||
uint32_t currentnode_pos; /* Current node position */
|
||||
|
||||
uint32_t currentnode_addr; /* Current node address */
|
||||
|
||||
uint32_t nextnode_addr; /* Next node address */
|
||||
|
||||
} DMA_NodeInQInfoTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private constants -------------------------------------------------------------------------------------------------*/
|
||||
/** @defgroup DMAEx_Private_Constants DMAEx Private Constants
|
||||
* @brief DMAEx Private Constants
|
||||
* @{
|
||||
*/
|
||||
#define DMA_LINKEDLIST (0x0080U) /* DMA channel linked-list mode */
|
||||
|
||||
#define DMA_CHANNEL_TYPE_LINEAR_ADDR (0x0001U) /* DMA channel linear addressing mode */
|
||||
#define DMA_CHANNEL_TYPE_2D_ADDR (0x0002U) /* DMA channel 2D addressing mode */
|
||||
#define DMA_CHANNEL_TYPE_GPDMA (0x0020U) /* GPDMA channel node */
|
||||
|
||||
#define NODE_TYPE_MASK (0x00FFU) /* DMA channel node type */
|
||||
#define NODE_CLLR_IDX (0x0700U) /* DMA channel node CLLR index mask */
|
||||
#define NODE_CLLR_IDX_POS (0x0008U) /* DMA channel node CLLR index position */
|
||||
|
||||
#define NODE_MAXIMUM_SIZE (0x0008U) /* Amount of registers of the node */
|
||||
|
||||
#define NODE_STATIC_FORMAT (0x0000U) /* DMA channel node static format */
|
||||
#define NODE_DYNAMIC_FORMAT (0x0001U) /* DMA channel node dynamic format */
|
||||
|
||||
#define UPDATE_CLLR_POSITION (0x0000U) /* DMA channel update CLLR position */
|
||||
#define UPDATE_CLLR_VALUE (0x0001U) /* DMA channel update CLLR value */
|
||||
|
||||
#define LASTNODE_ISNOT_CIRCULAR (0x0000U) /* Last node is not first circular node */
|
||||
#define LASTNODE_IS_CIRCULAR (0x0001U) /* Last node is first circular node */
|
||||
|
||||
#define QUEUE_TYPE_STATIC (0x0000U) /* DMA channel static queue */
|
||||
#define QUEUE_TYPE_DYNAMIC (0x0001U) /* DMA channel dynamic queue */
|
||||
|
||||
#define NODE_CTR1_DEFAULT_OFFSET (0x0000U) /* CTR1 default offset */
|
||||
#define NODE_CTR2_DEFAULT_OFFSET (0x0001U) /* CTR2 default offset */
|
||||
#define NODE_CBR1_DEFAULT_OFFSET (0x0002U) /* CBR1 default offset */
|
||||
#define NODE_CSAR_DEFAULT_OFFSET (0x0003U) /* CSAR default offset */
|
||||
#define NODE_CDAR_DEFAULT_OFFSET (0x0004U) /* CDAR default offset */
|
||||
#define NODE_CTR3_DEFAULT_OFFSET (0x0005U) /* CTR3 2D addressing default offset */
|
||||
#define NODE_CBR2_DEFAULT_OFFSET (0x0006U) /* CBR2 2D addressing default offset */
|
||||
#define NODE_CLLR_2D_DEFAULT_OFFSET (0x0007U) /* CLLR 2D addressing default offset */
|
||||
#define NODE_CLLR_LINEAR_DEFAULT_OFFSET (0x0005U) /* CLLR linear addressing default offset */
|
||||
|
||||
#define DMA_BURST_ADDR_OFFSET_MIN (-8192L) /* DMA burst minimum address offset */
|
||||
#define DMA_BURST_ADDR_OFFSET_MAX (8192L) /* DMA burst maximum address offset */
|
||||
#define DMA_BLOCK_ADDR_OFFSET_MIN (-65536L) /* DMA block minimum address offset */
|
||||
#define DMA_BLOCK_ADDR_OFFSET_MAX (65536L) /* DMA block maximum address offset */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ----------------------------------------------------------------------------------------------------*/
|
||||
/** @defgroup DMAEx_Private_Macros DMAEx Private Macros
|
||||
* @brief DMAEx Private Macros
|
||||
* @{
|
||||
*/
|
||||
#define IS_DMA_DATA_ALIGNMENT(ALIGNMENT) \
|
||||
(((ALIGNMENT) == DMA_DATA_RIGHTALIGN_ZEROPADDED) || \
|
||||
((ALIGNMENT) == DMA_DATA_RIGHTALIGN_SIGNEXT) || \
|
||||
((ALIGNMENT) == DMA_DATA_PACK))
|
||||
|
||||
#define IS_DMA_DATA_EXCHANGE(EXCHANGE) \
|
||||
(((EXCHANGE) & (~(DMA_EXCHANGE_SRC_BYTE | DMA_EXCHANGE_DEST_BYTE | DMA_EXCHANGE_DEST_HALFWORD))) == 0U)
|
||||
|
||||
#define IS_DMA_REPEAT_COUNT(COUNT) \
|
||||
(((COUNT) > 0U) && ((COUNT) <= (DMA_CBR1_BRC >> DMA_CBR1_BRC_Pos)))
|
||||
|
||||
#define IS_DMA_BURST_ADDR_OFFSET(BURST_ADDR_OFFSET) \
|
||||
(((BURST_ADDR_OFFSET) > DMA_BURST_ADDR_OFFSET_MIN) && \
|
||||
((BURST_ADDR_OFFSET) < DMA_BURST_ADDR_OFFSET_MAX))
|
||||
|
||||
#define IS_DMA_BLOCK_ADDR_OFFSET(BLOCK_ADDR_OFFSET) \
|
||||
(((BLOCK_ADDR_OFFSET) > DMA_BLOCK_ADDR_OFFSET_MIN) && \
|
||||
((BLOCK_ADDR_OFFSET) < DMA_BLOCK_ADDR_OFFSET_MAX))
|
||||
|
||||
#define IS_DMA_LINK_ALLOCATED_PORT(LINK_ALLOCATED_PORT) \
|
||||
(((LINK_ALLOCATED_PORT) & (~(DMA_CCR_LAP))) == 0U)
|
||||
|
||||
#define IS_DMA_LINK_STEP_MODE(MODE) \
|
||||
(((MODE) == DMA_LSM_FULL_EXECUTION) || \
|
||||
((MODE) == DMA_LSM_1LINK_EXECUTION))
|
||||
|
||||
#define IS_DMA_TRIGGER_MODE(MODE) \
|
||||
(((MODE) == DMA_TRIGM_BLOCK_TRANSFER) || \
|
||||
((MODE) == DMA_TRIGM_REPEATED_BLOCK_TRANSFER) || \
|
||||
((MODE) == DMA_TRIGM_LLI_LINK_TRANSFER) || \
|
||||
((MODE) == DMA_TRIGM_SINGLE_BURST_TRANSFER))
|
||||
|
||||
#define IS_DMA_TCEM_LINKEDLIST_EVENT_MODE(MODE) \
|
||||
(((MODE) == DMA_TCEM_BLOCK_TRANSFER) || \
|
||||
((MODE) == DMA_TCEM_REPEATED_BLOCK_TRANSFER) || \
|
||||
((MODE) == DMA_TCEM_EACH_LL_ITEM_TRANSFER) || \
|
||||
((MODE) == DMA_TCEM_LAST_LL_ITEM_TRANSFER))
|
||||
|
||||
#define IS_DMA_LINKEDLIST_MODE(MODE) \
|
||||
(((MODE) == DMA_LINKEDLIST_NORMAL) || \
|
||||
((MODE) == DMA_LINKEDLIST_CIRCULAR))
|
||||
|
||||
#define IS_DMA_TRIGGER_POLARITY(POLARITY) \
|
||||
(((POLARITY) == DMA_TRIG_POLARITY_MASKED) || \
|
||||
((POLARITY) == DMA_TRIG_POLARITY_RISING) || \
|
||||
((POLARITY) == DMA_TRIG_POLARITY_FALLING))
|
||||
|
||||
#if defined (I3C2)
|
||||
#define IS_DMA_TRIGGER_SELECTION(TRIGGER) ((TRIGGER) <= GPDMA1_TRIGGER_EVENTOUT)
|
||||
#else
|
||||
#define IS_DMA_TRIGGER_SELECTION(TRIGGER) ((TRIGGER) <= GPDMA1_TRIGGER_LPTIM6_CH2)
|
||||
#endif /* I3C2 */
|
||||
|
||||
#define IS_DMA_NODE_TYPE(TYPE) \
|
||||
(((TYPE) == DMA_GPDMA_LINEAR_NODE) || \
|
||||
((TYPE) == DMA_GPDMA_2D_NODE))
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/* Private functions -------------------------------------------------------------------------------------------------*/
|
||||
/** @defgroup DMAEx_Private_Functions DMAEx Private Functions
|
||||
* @brief DMAEx Private Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* STM32H5xx_HAL_DMA_EX_H */
|
||||
483
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_exti.h
Normal file
483
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_exti.h
Normal file
@@ -0,0 +1,483 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_exti.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of EXTI HAL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32H5xx_HAL_EXTI_H
|
||||
#define STM32H5xx_HAL_EXTI_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI EXTI
|
||||
* @brief EXTI HAL module driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/** @defgroup EXTI_Exported_Types EXTI Exported Types
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HAL_EXTI_COMMON_CB_ID = 0x00U,
|
||||
HAL_EXTI_RISING_CB_ID = 0x01U,
|
||||
HAL_EXTI_FALLING_CB_ID = 0x02U,
|
||||
} EXTI_CallbackIDTypeDef;
|
||||
|
||||
|
||||
/**
|
||||
* @brief EXTI Handle structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t Line; /*!< Exti line number */
|
||||
void (* RisingCallback)(void); /*!< Exti rising callback */
|
||||
void (* FallingCallback)(void); /*!< Exti falling callback */
|
||||
} EXTI_HandleTypeDef;
|
||||
|
||||
/**
|
||||
* @brief EXTI Configuration structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t Line; /*!< The Exti line to be configured. This parameter
|
||||
can be a value of @ref EXTI_Line */
|
||||
uint32_t Mode; /*!< The Exit Mode to be configured for a core.
|
||||
This parameter can be a combination of @ref EXTI_Mode */
|
||||
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
|
||||
can be a value of @ref EXTI_Trigger */
|
||||
uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
|
||||
This parameter is only possible for line 0 to 15. It
|
||||
can be a value of @ref EXTI_GPIOSel */
|
||||
} EXTI_ConfigTypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/** @defgroup EXTI_Exported_Constants EXTI Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI_Line EXTI Line
|
||||
* @{
|
||||
*/
|
||||
#define EXTI_LINE_0 (EXTI_GPIO | EXTI_REG1 | 0x00U)
|
||||
#define EXTI_LINE_1 (EXTI_GPIO | EXTI_REG1 | 0x01U)
|
||||
#define EXTI_LINE_2 (EXTI_GPIO | EXTI_REG1 | 0x02U)
|
||||
#define EXTI_LINE_3 (EXTI_GPIO | EXTI_REG1 | 0x03U)
|
||||
#define EXTI_LINE_4 (EXTI_GPIO | EXTI_REG1 | 0x04U)
|
||||
#define EXTI_LINE_5 (EXTI_GPIO | EXTI_REG1 | 0x05U)
|
||||
#define EXTI_LINE_6 (EXTI_GPIO | EXTI_REG1 | 0x06U)
|
||||
#define EXTI_LINE_7 (EXTI_GPIO | EXTI_REG1 | 0x07U)
|
||||
#define EXTI_LINE_8 (EXTI_GPIO | EXTI_REG1 | 0x08U)
|
||||
#define EXTI_LINE_9 (EXTI_GPIO | EXTI_REG1 | 0x09U)
|
||||
#define EXTI_LINE_10 (EXTI_GPIO | EXTI_REG1 | 0x0AU)
|
||||
#define EXTI_LINE_11 (EXTI_GPIO | EXTI_REG1 | 0x0BU)
|
||||
#define EXTI_LINE_12 (EXTI_GPIO | EXTI_REG1 | 0x0CU)
|
||||
#define EXTI_LINE_13 (EXTI_GPIO | EXTI_REG1 | 0x0DU)
|
||||
#define EXTI_LINE_14 (EXTI_GPIO | EXTI_REG1 | 0x0EU)
|
||||
#define EXTI_LINE_15 (EXTI_GPIO | EXTI_REG1 | 0x0FU)
|
||||
#define EXTI_LINE_16 (EXTI_CONFIG | EXTI_REG1 | 0x10U)
|
||||
#define EXTI_LINE_17 (EXTI_DIRECT | EXTI_REG1 | 0x11U)
|
||||
#if defined(EXTI_IMR1_IM18)
|
||||
#define EXTI_LINE_18 (EXTI_DIRECT | EXTI_REG1 | 0x12U)
|
||||
#endif /* EXTI_IMR1_IM18 */
|
||||
#define EXTI_LINE_19 (EXTI_DIRECT | EXTI_REG1 | 0x13U)
|
||||
#if defined(EXTI_IMR1_IM20)
|
||||
#define EXTI_LINE_20 (EXTI_DIRECT | EXTI_REG1 | 0x14U)
|
||||
#endif /* EXTI_IMR1_IM20 */
|
||||
#define EXTI_LINE_21 (EXTI_DIRECT | EXTI_REG1 | 0x15U)
|
||||
#define EXTI_LINE_22 (EXTI_DIRECT | EXTI_REG1 | 0x16U)
|
||||
#if defined(EXTI_IMR1_IM23)
|
||||
#define EXTI_LINE_23 (EXTI_DIRECT | EXTI_REG1 | 0x17U)
|
||||
#endif /* EXTI_IMR1_IM23 */
|
||||
#define EXTI_LINE_24 (EXTI_DIRECT | EXTI_REG1 | 0x18U)
|
||||
#define EXTI_LINE_25 (EXTI_DIRECT | EXTI_REG1 | 0x19U)
|
||||
#define EXTI_LINE_26 (EXTI_DIRECT | EXTI_REG1 | 0x1AU)
|
||||
#define EXTI_LINE_27 (EXTI_DIRECT | EXTI_REG1 | 0x1BU)
|
||||
#define EXTI_LINE_28 (EXTI_DIRECT | EXTI_REG1 | 0x1CU)
|
||||
#define EXTI_LINE_29 (EXTI_DIRECT | EXTI_REG1 | 0x1DU)
|
||||
#if defined(EXTI_IMR1_IM30)
|
||||
#define EXTI_LINE_30 (EXTI_DIRECT | EXTI_REG1 | 0x1EU)
|
||||
#endif /* EXTI_IMR1_IM30 */
|
||||
#define EXTI_LINE_31 (EXTI_DIRECT | EXTI_REG1 | 0x1FU)
|
||||
#if defined(EXTI_IMR2_IM32)
|
||||
#define EXTI_LINE_32 (EXTI_DIRECT | EXTI_REG2 | 0x00U)
|
||||
#endif /* EXTI_IMR2_IM32 */
|
||||
#if defined(EXTI_IMR2_IM33)
|
||||
#define EXTI_LINE_33 (EXTI_DIRECT | EXTI_REG2 | 0x01U)
|
||||
#endif /* EXTI_IMR2_IM33 */
|
||||
#if defined(EXTI_IMR2_IM34)
|
||||
#define EXTI_LINE_34 (EXTI_DIRECT | EXTI_REG2 | 0x02U)
|
||||
#endif /* EXTI_IMR2_IM34 */
|
||||
#if defined(EXTI_IMR2_IM35)
|
||||
#define EXTI_LINE_35 (EXTI_DIRECT | EXTI_REG2 | 0x03U)
|
||||
#endif /* EXTI_IMR2_IM35 */
|
||||
#if defined(EXTI_IMR2_IM36)
|
||||
#define EXTI_LINE_36 (EXTI_DIRECT | EXTI_REG2 | 0x04U)
|
||||
#endif /* EXTI_IMR2_IM36 */
|
||||
#define EXTI_LINE_37 (EXTI_DIRECT | EXTI_REG2 | 0x05U)
|
||||
#define EXTI_LINE_38 (EXTI_DIRECT | EXTI_REG2 | 0x06U)
|
||||
#define EXTI_LINE_39 (EXTI_DIRECT | EXTI_REG2 | 0x07U)
|
||||
#define EXTI_LINE_40 (EXTI_DIRECT | EXTI_REG2 | 0x08U)
|
||||
#define EXTI_LINE_41 (EXTI_DIRECT | EXTI_REG2 | 0x09U)
|
||||
#define EXTI_LINE_42 (EXTI_DIRECT | EXTI_REG2 | 0x0AU)
|
||||
#if defined(EXTI_IMR2_IM43)
|
||||
#define EXTI_LINE_43 (EXTI_DIRECT | EXTI_REG2 | 0x0BU)
|
||||
#endif /* EXTI_IMR2_IM43 */
|
||||
#if defined(EXTI_IMR2_IM44)
|
||||
#define EXTI_LINE_44 (EXTI_DIRECT | EXTI_REG2 | 0x0CU)
|
||||
#endif /* EXTI_IMR2_IM44 */
|
||||
#if defined(EXTI_IMR2_IM45)
|
||||
#endif /* EXTI_IMR2_IM45 */
|
||||
#define EXTI_LINE_45 (EXTI_DIRECT | EXTI_REG2 | 0x0DU)
|
||||
#if defined(ETH)
|
||||
#define EXTI_LINE_46 (EXTI_CONFIG | EXTI_REG2 | 0x0EU)
|
||||
#endif /* ETH */
|
||||
#define EXTI_LINE_47 (EXTI_DIRECT | EXTI_REG2 | 0x0FU)
|
||||
#if defined(EXTI_IMR2_IM48)
|
||||
#define EXTI_LINE_48 (EXTI_DIRECT | EXTI_REG2 | 0x10U)
|
||||
#endif /* EXTI_IMR2_IM48 */
|
||||
#define EXTI_LINE_49 (EXTI_DIRECT | EXTI_REG2 | 0x11U)
|
||||
#define EXTI_LINE_50 (EXTI_CONFIG | EXTI_REG2 | 0x12U)
|
||||
#if defined(EXTI_IMR2_IM51)
|
||||
#define EXTI_LINE_51 (EXTI_DIRECT | EXTI_REG2 | 0x13U)
|
||||
#endif /* EXTI_IMR2_IM51 */
|
||||
#if defined(EXTI_IMR2_IM52)
|
||||
#define EXTI_LINE_52 (EXTI_DIRECT | EXTI_REG2 | 0x14U)
|
||||
#endif /* EXTI_IMR2_IM52 */
|
||||
#define EXTI_LINE_53 (EXTI_CONFIG | EXTI_REG2 | 0x15U)
|
||||
#if defined(EXTI_IMR2_IM54)
|
||||
#define EXTI_LINE_54 (EXTI_DIRECT | EXTI_REG2 | 0x16U)
|
||||
#endif /* EXTI_IMR2_IM54 */
|
||||
#if defined(EXTI_IMR2_IM55)
|
||||
#define EXTI_LINE_55 (EXTI_DIRECT | EXTI_REG2 | 0x17U)
|
||||
#endif /* EXTI_IMR2_IM55 */
|
||||
#if defined(EXTI_IMR2_IM56)
|
||||
#define EXTI_LINE_56 (EXTI_DIRECT | EXTI_REG2 | 0x18U)
|
||||
#endif /* EXTI_IMR2_IM56 */
|
||||
#if defined(EXTI_IMR2_IM57)
|
||||
#define EXTI_LINE_57 (EXTI_DIRECT | EXTI_REG2 | 0x19U)
|
||||
#endif /* EXTI_IMR2_IM57 */
|
||||
#if defined(EXTI_IMR2_IM58)
|
||||
#if defined(I3C2)
|
||||
#define EXTI_LINE_58 (EXTI_DIRECT | EXTI_REG2 | 0x1AU)
|
||||
#endif /* I3C2 */
|
||||
#endif /* EXTI_IMR2_IM58 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI_Mode EXTI Mode
|
||||
* @{
|
||||
*/
|
||||
#define EXTI_MODE_NONE 0x00000000U
|
||||
#define EXTI_MODE_INTERRUPT 0x00000001U
|
||||
#define EXTI_MODE_EVENT 0x00000002U
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI_Trigger EXTI Trigger
|
||||
* @{
|
||||
*/
|
||||
#define EXTI_TRIGGER_NONE 0x00000000U
|
||||
#define EXTI_TRIGGER_RISING 0x00000001U
|
||||
#define EXTI_TRIGGER_FALLING 0x00000002U
|
||||
#define EXTI_TRIGGER_RISING_FALLING (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI_GPIOSel EXTI GPIOSel
|
||||
* @brief
|
||||
* @{
|
||||
*/
|
||||
#define EXTI_GPIOA 0x00000000U
|
||||
#define EXTI_GPIOB 0x00000001U
|
||||
#define EXTI_GPIOC 0x00000002U
|
||||
#define EXTI_GPIOD 0x00000003U
|
||||
#if defined(GPIOE)
|
||||
#define EXTI_GPIOE 0x00000004U
|
||||
#endif /* GPIOE */
|
||||
#if defined(GPIOF)
|
||||
#define EXTI_GPIOF 0x00000005U
|
||||
#endif /* GPIOF */
|
||||
#if defined(GPIOG)
|
||||
#define EXTI_GPIOG 0x00000006U
|
||||
#endif /* GPIOG */
|
||||
#define EXTI_GPIOH 0x00000007U
|
||||
#if defined(GPIOI)
|
||||
#define EXTI_GPIOI 0x00000008U
|
||||
#endif /* GPIOI */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI_Line_attributes EXTI line attributes
|
||||
* @brief EXTI line secure or non-secure and privileged or non-privileged attributes
|
||||
* @note secure and non-secure attributes are only available from secure state when the system
|
||||
* implement the security (TZEN=1)
|
||||
* @{
|
||||
*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/*!< Secure line attribute */
|
||||
#define EXTI_LINE_SEC (EXTI_LINE_ATTR_SEC_MASK | 0x00000001U)
|
||||
/*!< Non-secure line attribute */
|
||||
#define EXTI_LINE_NSEC (EXTI_LINE_ATTR_SEC_MASK | 0x00000000U)
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/*!< Privileged line attribute */
|
||||
#define EXTI_LINE_PRIV (EXTI_LINE_ATTR_PRIV_MASK | 0x00000002U)
|
||||
/*!< Non-privileged line attribute */
|
||||
#define EXTI_LINE_NPRIV (EXTI_LINE_ATTR_PRIV_MASK | 0x00000000U)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/** @defgroup EXTI_Security_Privilege_Configuration EXTI Security Privilege Configuration
|
||||
* @brief EXTI security and privilege configurations
|
||||
* @{
|
||||
*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* Security and privilege configuration open, can be modified */
|
||||
#define EXTI_ATTRIBUTES_UNLOCKED 0x00000000U
|
||||
/* Security and privilege configuration locked, can no longer be modified */
|
||||
#define EXTI_ATTRIBUTES_LOCKED 0x00000001U
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/** @defgroup EXTI_Exported_Macros EXTI Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private constants --------------------------------------------------------*/
|
||||
/** @defgroup EXTI_Private_Constants EXTI Private Constants
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief EXTI Line property definition
|
||||
*/
|
||||
#define EXTI_PROPERTY_SHIFT 24U
|
||||
#define EXTI_DIRECT (0x01U << EXTI_PROPERTY_SHIFT)
|
||||
#define EXTI_CONFIG (0x02U << EXTI_PROPERTY_SHIFT)
|
||||
#define EXTI_GPIO ((0x04U << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
|
||||
#define EXTI_RESERVED (0x08U << EXTI_PROPERTY_SHIFT)
|
||||
#define EXTI_PROPERTY_MASK (EXTI_DIRECT | EXTI_CONFIG | EXTI_GPIO)
|
||||
|
||||
/**
|
||||
* @brief EXTI Register and bit usage
|
||||
*/
|
||||
#define EXTI_REG_SHIFT 16U
|
||||
#define EXTI_REG1 (0x00U << EXTI_REG_SHIFT)
|
||||
#define EXTI_REG2 (0x01U << EXTI_REG_SHIFT)
|
||||
#define EXTI_REG_MASK (EXTI_REG1 | EXTI_REG2)
|
||||
#define EXTI_PIN_MASK 0x0000001FU
|
||||
|
||||
/**
|
||||
* @brief EXTI Mask for interrupt & event mode
|
||||
*/
|
||||
#define EXTI_MODE_MASK (EXTI_MODE_EVENT | EXTI_MODE_INTERRUPT)
|
||||
|
||||
/**
|
||||
* @brief EXTI Mask for trigger possibilities
|
||||
*/
|
||||
#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
|
||||
|
||||
/**
|
||||
* @brief EXTI Line number
|
||||
*/
|
||||
#if defined(EXTI_IMR2_IM58)
|
||||
#define EXTI_LINE_NB 59U
|
||||
#elif defined(EXTI_IMR2_IM57)
|
||||
#define EXTI_LINE_NB 58U
|
||||
#else
|
||||
#define EXTI_LINE_NB 54U
|
||||
#endif /* EXTI_IMR2_IM58 */
|
||||
|
||||
/**
|
||||
* @brief EXTI Mask for secure & privilege attributes
|
||||
*/
|
||||
#define EXTI_LINE_ATTR_SEC_MASK 0x100U
|
||||
#define EXTI_LINE_ATTR_PRIV_MASK 0x200U
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/** @defgroup EXTI_Private_Macros EXTI Private Macros
|
||||
* @{
|
||||
*/
|
||||
#define IS_EXTI_LINE(__EXTI_LINE__) ((((__EXTI_LINE__) & ~(EXTI_PROPERTY_MASK | \
|
||||
EXTI_REG_MASK | EXTI_PIN_MASK)) == 0x00U) \
|
||||
&&((((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_DIRECT) || \
|
||||
(((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
|
||||
(((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
|
||||
(((__EXTI_LINE__) & (EXTI_REG_MASK | EXTI_PIN_MASK)) < \
|
||||
(((EXTI_LINE_NB / 32U) << EXTI_REG_SHIFT) | (EXTI_LINE_NB % 32U))))
|
||||
|
||||
#define IS_EXTI_MODE(__EXTI_LINE__) ((((__EXTI_LINE__) & EXTI_MODE_MASK) != 0x00U) && \
|
||||
(((__EXTI_LINE__) & ~EXTI_MODE_MASK) == 0x00U))
|
||||
|
||||
#define IS_EXTI_TRIGGER(__EXTI_LINE__) (((__EXTI_LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
|
||||
|
||||
#define IS_EXTI_PENDING_EDGE(__EXTI_LINE__) (((__EXTI_LINE__) == EXTI_TRIGGER_RISING) || \
|
||||
((__EXTI_LINE__) == EXTI_TRIGGER_FALLING))
|
||||
|
||||
#define IS_EXTI_CONFIG_LINE(__EXTI_LINE__) (((__EXTI_LINE__) & EXTI_CONFIG) != 0x00U)
|
||||
|
||||
#if defined(GPIOI)
|
||||
#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
|
||||
((__PORT__) == EXTI_GPIOB) || \
|
||||
((__PORT__) == EXTI_GPIOC) || \
|
||||
((__PORT__) == EXTI_GPIOD) || \
|
||||
((__PORT__) == EXTI_GPIOE) || \
|
||||
((__PORT__) == EXTI_GPIOF) || \
|
||||
((__PORT__) == EXTI_GPIOG) || \
|
||||
((__PORT__) == EXTI_GPIOH) || \
|
||||
((__PORT__) == EXTI_GPIOI))
|
||||
#elif defined(GPIOE)
|
||||
#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
|
||||
((__PORT__) == EXTI_GPIOB) || \
|
||||
((__PORT__) == EXTI_GPIOC) || \
|
||||
((__PORT__) == EXTI_GPIOD) || \
|
||||
((__PORT__) == EXTI_GPIOE) || \
|
||||
((__PORT__) == EXTI_GPIOF) || \
|
||||
((__PORT__) == EXTI_GPIOG) || \
|
||||
((__PORT__) == EXTI_GPIOH))
|
||||
#else
|
||||
#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
|
||||
((__PORT__) == EXTI_GPIOB) || \
|
||||
((__PORT__) == EXTI_GPIOC) || \
|
||||
((__PORT__) == EXTI_GPIOD) || \
|
||||
((__PORT__) == EXTI_GPIOH))
|
||||
#endif /* GPIOI */
|
||||
|
||||
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
|
||||
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
|
||||
#define IS_EXTI_LINE_ATTRIBUTES(__ATTRIBUTES__) (((((__ATTRIBUTES__) & EXTI_LINE_SEC) == EXTI_LINE_SEC) || \
|
||||
(((__ATTRIBUTES__) & EXTI_LINE_NSEC) == EXTI_LINE_NSEC) || \
|
||||
(((__ATTRIBUTES__) & EXTI_LINE_PRIV) == EXTI_LINE_PRIV) || \
|
||||
(((__ATTRIBUTES__) & EXTI_LINE_NPRIV) == EXTI_LINE_NPRIV)) && \
|
||||
(((__ATTRIBUTES__) & ~(EXTI_LINE_SEC|EXTI_LINE_NSEC|EXTI_LINE_PRIV| \
|
||||
EXTI_LINE_NPRIV)) == 0U))
|
||||
|
||||
#else
|
||||
|
||||
#define IS_EXTI_LINE_ATTRIBUTES(__ATTRIBUTES__) (((((__ATTRIBUTES__) & EXTI_LINE_PRIV) == EXTI_LINE_PRIV) || \
|
||||
(((__ATTRIBUTES__) & EXTI_LINE_NPRIV) == EXTI_LINE_NPRIV)) && \
|
||||
(((__ATTRIBUTES__) & ~(EXTI_LINE_PRIV|EXTI_LINE_NPRIV)) == 0U))
|
||||
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
/** @defgroup EXTI_Exported_Functions EXTI Exported Functions
|
||||
* @brief EXTI Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI_Exported_Functions_Group1 Configuration functions
|
||||
* @brief Configuration functions
|
||||
* @{
|
||||
*/
|
||||
/* Configuration functions ****************************************************/
|
||||
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig);
|
||||
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig);
|
||||
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(const EXTI_HandleTypeDef *hexti);
|
||||
HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID,
|
||||
void (*pPendingCbfn)(void));
|
||||
HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI_Exported_Functions_Group2 IO operation functions
|
||||
* @brief IO operation functions
|
||||
* @{
|
||||
*/
|
||||
/* IO operation functions *****************************************************/
|
||||
void HAL_EXTI_IRQHandler(const EXTI_HandleTypeDef *hexti);
|
||||
uint32_t HAL_EXTI_GetPending(const EXTI_HandleTypeDef *hexti, uint32_t Edge);
|
||||
void HAL_EXTI_ClearPending(const EXTI_HandleTypeDef *hexti, uint32_t Edge);
|
||||
void HAL_EXTI_GenerateSWI(const EXTI_HandleTypeDef *hexti);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup EXTI_Exported_Functions_Group3 EXTI line attributes management functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* EXTI line attributes management functions **********************************/
|
||||
void HAL_EXTI_ConfigLineAttributes(uint32_t ExtiLine, uint32_t LineAttributes);
|
||||
HAL_StatusTypeDef HAL_EXTI_GetConfigLineAttributes(uint32_t ExtiLine, uint32_t *pLineAttributes);
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
HAL_StatusTypeDef HAL_EXTI_LockConfigAttributes(void);
|
||||
HAL_StatusTypeDef HAL_EXTI_GetLockConfigAttributes(uint32_t *const pLockState);
|
||||
#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32H5xx_HAL_EXTI_H */
|
||||
823
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_flash.h
Normal file
823
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_flash.h
Normal file
@@ -0,0 +1,823 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_flash.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of FLASH HAL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32H5xx_HAL_FLASH_H
|
||||
#define STM32H5xx_HAL_FLASH_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup FLASH
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/** @defgroup FLASH_Exported_Types FLASH Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief FLASH handle Structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
HAL_LockTypeDef Lock; /*!< FLASH locking object */
|
||||
|
||||
uint32_t ErrorCode; /*!< FLASH error code */
|
||||
|
||||
uint32_t ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not
|
||||
in IT context */
|
||||
|
||||
uint32_t Address; /*!< Internal variable to save address selected for program */
|
||||
|
||||
uint32_t Bank; /*!< Internal variable to save current bank selected during erase in
|
||||
IT context */
|
||||
|
||||
uint32_t Sector; /*!< Internal variable to define the current sector which is erasing */
|
||||
|
||||
uint32_t NbSectorsToErase; /*!< Internal variable to save the remaining sectors to erase in
|
||||
IT context */
|
||||
|
||||
} FLASH_ProcessTypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/** @defgroup FLASH_Exported_Constants FLASH Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Flag_definition FLASH Flag definition
|
||||
* @brief Flag definition
|
||||
* @{
|
||||
*/
|
||||
#define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */
|
||||
#define FLASH_FLAG_WBNE FLASH_SR_WBNE /*!< FLASH Write Buffer Not Empty flag */
|
||||
#define FLASH_FLAG_DBNE FLASH_SR_DBNE /*!< FLASH data Buffer Not Empty flag */
|
||||
#define FLASH_FLAG_EOP FLASH_SR_EOP /*!< FLASH End Of operation flag */
|
||||
#define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /*!< FLASH Write Protection Error flag */
|
||||
#define FLASH_FLAG_PGSERR FLASH_SR_PGSERR /*!< FLASH Program Sequence Error flag */
|
||||
#define FLASH_FLAG_STRBERR FLASH_SR_STRBERR /*!< FLASH Strobe Error flag */
|
||||
#define FLASH_FLAG_INCERR FLASH_SR_INCERR /*!< FLASH Inconsistency Error flag */
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define FLASH_FLAG_OBKERR FLASH_SR_OBKERR /*!< FLASH OBK Error flag */
|
||||
#define FLASH_FLAG_OBKWERR FLASH_SR_OBKWERR /*!< FLASH OBK Write Error flag */
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#define FLASH_FLAG_OPTCHANGEERR FLASH_SR_OPTCHANGEERR /*!< FLASH Option Byte change Error flag */
|
||||
#define FLASH_FLAG_ECCC FLASH_ECCR_ECCC /*!< FLASH ECC Correction flag */
|
||||
#define FLASH_FLAG_ECCD FLASH_ECCR_ECCD /*!< FLASH ECC Detection flag */
|
||||
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define FLASH_FLAG_SR_ERRORS (FLASH_SR_WRPERR | FLASH_SR_PGSERR | \
|
||||
FLASH_SR_STRBERR | FLASH_SR_INCERR | \
|
||||
FLASH_SR_OBKERR | FLASH_SR_OBKWERR | \
|
||||
FLASH_SR_OPTCHANGEERR)
|
||||
#else
|
||||
#define FLASH_FLAG_SR_ERRORS (FLASH_SR_WRPERR | FLASH_SR_PGSERR | \
|
||||
FLASH_SR_STRBERR | FLASH_SR_INCERR | \
|
||||
FLASH_SR_OPTCHANGEERR)
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#define FLASH_FLAG_ECCR_ERRORS (FLASH_FLAG_ECCC | FLASH_FLAG_ECCD)
|
||||
#define FLASH_FLAG_ALL_ERRORS (FLASH_FLAG_SR_ERRORS | FLASH_FLAG_ECCR_ERRORS) /*!< All FLASH error flags */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Interrupt_definition FLASH Interrupts definition
|
||||
* @brief FLASH Interrupt definition
|
||||
* @{
|
||||
*/
|
||||
#define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation interrupt enable */
|
||||
#define FLASH_IT_WRPERR FLASH_CR_WRPERRIE /*!< Write Protection Error interrupt enable */
|
||||
#define FLASH_IT_PGSERR FLASH_CR_PGSERRIE /*!< Program Sequence Error interrupt enable */
|
||||
#define FLASH_IT_STRBERR FLASH_CR_STRBERRIE /*!< Strobe Error interrupt enable */
|
||||
#define FLASH_IT_INCERR FLASH_CR_INCERRIE /*!< Inconsistency Error interrupt enable */
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define FLASH_IT_OBKERR FLASH_CR_OBKERRIE /*!< OBK Error interrupt enable */
|
||||
#define FLASH_IT_OBKWERR FLASH_CR_OBKWERRIE /*!< OBK Write Error interrupt enable */
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#define FLASH_IT_OPTCHANGEERR FLASH_CR_OPTCHANGEERRIE /*!< Option Byte change Error interrupt enable */
|
||||
#define FLASH_IT_ECCC FLASH_ECCR_ECCIE /*!< Single ECC Error Correction interrupt enable */
|
||||
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define FLASH_IT_ALL (FLASH_IT_EOP | FLASH_IT_WRPERR | \
|
||||
FLASH_IT_PGSERR | FLASH_IT_STRBERR | \
|
||||
FLASH_IT_INCERR | FLASH_IT_OBKERR | \
|
||||
FLASH_IT_OBKWERR | FLASH_IT_OPTCHANGEERR | \
|
||||
FLASH_IT_ECCC) /*!< All Flash interrupt sources */
|
||||
#else
|
||||
#define FLASH_IT_ALL (FLASH_IT_EOP | FLASH_IT_WRPERR | \
|
||||
FLASH_IT_PGSERR | FLASH_IT_STRBERR | \
|
||||
FLASH_IT_INCERR | FLASH_IT_OPTCHANGEERR | \
|
||||
FLASH_IT_ECCC) /*!< All Flash interrupt sources */
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Error_Code FLASH Error Code
|
||||
* @brief FLASH Error Code
|
||||
* @{
|
||||
*/
|
||||
#define HAL_FLASH_ERROR_NONE 0x00000000U /*!< No error */
|
||||
#define HAL_FLASH_ERROR_WRP FLASH_FLAG_WRPERR /*!< Write Protection Error */
|
||||
#define HAL_FLASH_ERROR_PGS FLASH_FLAG_PGSERR /*!< Program Sequence Error */
|
||||
#define HAL_FLASH_ERROR_STRB FLASH_FLAG_STRBERR /*!< Strobe Error */
|
||||
#define HAL_FLASH_ERROR_INC FLASH_FLAG_INCERR /*!< Inconsistency Error */
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define HAL_FLASH_ERROR_OBK FLASH_FLAG_OBKERR /*!< OBK Error */
|
||||
#define HAL_FLASH_ERROR_OBKW FLASH_FLAG_OBKWERR /*!< OBK Write Error */
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#define HAL_FLASH_ERROR_OB_CHANGE FLASH_FLAG_OPTCHANGEERR /*!< Option Byte Change Error */
|
||||
#define HAL_FLASH_ERROR_ECCC FLASH_FLAG_ECCC /*!< ECC Single Correction Error */
|
||||
#define HAL_FLASH_ERROR_ECCD FLASH_FLAG_ECCD /*!< ECC Double Detection Error */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Type_Program FLASH Program Type
|
||||
* @{
|
||||
*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#define FLASH_TYPEPROGRAM_QUADWORD FLASH_CR_PG /*!< Program a quad-word
|
||||
(128-bit) at a specified secure address */
|
||||
#define FLASH_TYPEPROGRAM_QUADWORD_NS (FLASH_CR_PG | FLASH_NON_SECURE_MASK) /*!< Program a quad-word
|
||||
(128-bit) at a specified non-secure address */
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define FLASH_TYPEPROGRAM_QUADWORD_OBK (FLASH_CR_PG | FLASH_OBK) /*!< Program a quad-word
|
||||
(128-bit) of OBK to current sector */
|
||||
#define FLASH_TYPEPROGRAM_QUADWORD_OBK_ALT (FLASH_CR_PG | FLASH_OBK | FLASH_OBKCFGR_ALT_SECT) /*!< Program a quad-word
|
||||
(128-bit) of OBK to alternate sector */
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#if defined (FLASH_EDATAR_EDATA_EN)
|
||||
#define FLASH_TYPEPROGRAM_HALFWORD_EDATA (FLASH_CR_PG | FLASH_EDATA_HALFWORD) /*!< Program a flash
|
||||
high-cycle data half-word (16-bit)at a specified secure address */
|
||||
#define FLASH_TYPEPROGRAM_HALFWORD_EDATA_NS (FLASH_CR_PG | FLASH_EDATA_HALFWORD | FLASH_NON_SECURE_MASK) /*!< Program a flash
|
||||
high-cycle data half-word (16-bit)at a specified non-secure address */
|
||||
#define FLASH_TYPEPROGRAM_WORD_EDATA (FLASH_CR_PG | FLASH_EDATA_WORD) /*!< Program a flash
|
||||
high-cycle data word (32-bit)at a specified secure address */
|
||||
#define FLASH_TYPEPROGRAM_WORD_EDATA_NS (FLASH_CR_PG | FLASH_EDATA_WORD | FLASH_NON_SECURE_MASK) /*!< Program a flash
|
||||
high-cycle data word (32-bit)at a specified non-secure address */
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
#else
|
||||
#define FLASH_TYPEPROGRAM_QUADWORD FLASH_CR_PG /*!< Program a quad-word
|
||||
(128-bit) at a specified address */
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define FLASH_TYPEPROGRAM_QUADWORD_OBK (FLASH_CR_PG | FLASH_OBK) /*!< Program a quad-word
|
||||
(128-bit) of OBK to current sector */
|
||||
#define FLASH_TYPEPROGRAM_QUADWORD_OBK_ALT (FLASH_CR_PG | FLASH_OBK | FLASH_OBKCFGR_ALT_SECT) /*!< Program a quad-word
|
||||
(128-bit) of OBK to alternate sector */
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#if defined (FLASH_EDATAR_EDATA_EN)
|
||||
#define FLASH_TYPEPROGRAM_HALFWORD_EDATA (FLASH_CR_PG | FLASH_EDATA_HALFWORD) /*!< Program a flash
|
||||
high-cycle data half-word (16-bit)at a specified address */
|
||||
#define FLASH_TYPEPROGRAM_WORD_EDATA (FLASH_CR_PG | FLASH_EDATA_WORD) /*!< Program a flash
|
||||
high-cycle data half-word (32-bit)at a specified address */
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
#define FLASH_TYPEPROGRAM_HALFWORD_OTP (FLASH_CR_PG | FLASH_OTP | FLASH_NON_SECURE_MASK) /*!< Program an OTP
|
||||
half-word (16-bit)at a specified address */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Latency FLASH Latency
|
||||
* @{
|
||||
*/
|
||||
#define FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS /*!< FLASH Zero wait cycle */
|
||||
#define FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS /*!< FLASH One wait cycle */
|
||||
#define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS /*!< FLASH Two wait cycles */
|
||||
#define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS /*!< FLASH Three wait cycles */
|
||||
#define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS /*!< FLASH Four wait cycles */
|
||||
#define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS /*!< FLASH Five wait cycles */
|
||||
#define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS /*!< FLASH Six wait cycles */
|
||||
#define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS /*!< FLASH Seven wait cycles */
|
||||
#define FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS /*!< FLASH Eight wait cycle */
|
||||
#define FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS /*!< FLASH Nine wait cycle */
|
||||
#define FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS /*!< FLASH Ten wait cycles */
|
||||
#define FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS /*!< FLASH Eleven wait cycles */
|
||||
#define FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS /*!< FLASH Twelve wait cycles */
|
||||
#define FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS /*!< FLASH Thirteen wait cycles */
|
||||
#define FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS /*!< FLASH Fourteen wait cycles */
|
||||
#define FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS /*!< FLASH Fifteen wait cycles */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Keys FLASH Keys
|
||||
* @{
|
||||
*/
|
||||
#define FLASH_KEY1 0x45670123U
|
||||
#define FLASH_KEY2 0xCDEF89ABU
|
||||
#define FLASH_OPT_KEY1 0x08192A3BU
|
||||
#define FLASH_OPT_KEY2 0x4C5D6E7FU
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define FLASH_OBK_KEY1 0x192A083BU
|
||||
#define FLASH_OBK_KEY2 0x6E7F4C5DU
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Sectors FLASH Sectors
|
||||
* @{
|
||||
*/
|
||||
#define FLASH_SECTOR_0 0U /*!< Sector Number 0 */
|
||||
#define FLASH_SECTOR_1 1U /*!< Sector Number 1 */
|
||||
#define FLASH_SECTOR_2 2U /*!< Sector Number 2 */
|
||||
#define FLASH_SECTOR_3 3U /*!< Sector Number 3 */
|
||||
#define FLASH_SECTOR_4 4U /*!< Sector Number 4 */
|
||||
#define FLASH_SECTOR_5 5U /*!< Sector Number 5 */
|
||||
#define FLASH_SECTOR_6 6U /*!< Sector Number 6 */
|
||||
#define FLASH_SECTOR_7 7U /*!< Sector Number 7 */
|
||||
#if (FLASH_SECTOR_NB >= 32)
|
||||
#define FLASH_SECTOR_8 8U /*!< Sector Number 8 */
|
||||
#define FLASH_SECTOR_9 9U /*!< Sector Number 9 */
|
||||
#define FLASH_SECTOR_10 10U /*!< Sector Number 10 */
|
||||
#define FLASH_SECTOR_11 11U /*!< Sector Number 11 */
|
||||
#define FLASH_SECTOR_12 12U /*!< Sector Number 12 */
|
||||
#define FLASH_SECTOR_13 13U /*!< Sector Number 13 */
|
||||
#define FLASH_SECTOR_14 14U /*!< Sector Number 14 */
|
||||
#define FLASH_SECTOR_15 15U /*!< Sector Number 15 */
|
||||
#define FLASH_SECTOR_16 16U /*!< Sector Number 16 */
|
||||
#define FLASH_SECTOR_17 17U /*!< Sector Number 17 */
|
||||
#define FLASH_SECTOR_18 18U /*!< Sector Number 18 */
|
||||
#define FLASH_SECTOR_19 19U /*!< Sector Number 19 */
|
||||
#define FLASH_SECTOR_20 20U /*!< Sector Number 20 */
|
||||
#define FLASH_SECTOR_21 21U /*!< Sector Number 21 */
|
||||
#define FLASH_SECTOR_22 22U /*!< Sector Number 22 */
|
||||
#define FLASH_SECTOR_23 23U /*!< Sector Number 23 */
|
||||
#define FLASH_SECTOR_24 24U /*!< Sector Number 24 */
|
||||
#define FLASH_SECTOR_25 25U /*!< Sector Number 25 */
|
||||
#define FLASH_SECTOR_26 26U /*!< Sector Number 26 */
|
||||
#define FLASH_SECTOR_27 27U /*!< Sector Number 27 */
|
||||
#define FLASH_SECTOR_28 28U /*!< Sector Number 28 */
|
||||
#define FLASH_SECTOR_29 29U /*!< Sector Number 29 */
|
||||
#define FLASH_SECTOR_30 30U /*!< Sector Number 30 */
|
||||
#define FLASH_SECTOR_31 31U /*!< Sector Number 31 */
|
||||
#endif /* (FLASH_SECTOR_NB >= 32) */
|
||||
#if (FLASH_SECTOR_NB >= 128)
|
||||
#define FLASH_SECTOR_32 32U /*!< Sector Number 32 */
|
||||
#define FLASH_SECTOR_33 33U /*!< Sector Number 33 */
|
||||
#define FLASH_SECTOR_34 34U /*!< Sector Number 34 */
|
||||
#define FLASH_SECTOR_35 35U /*!< Sector Number 35 */
|
||||
#define FLASH_SECTOR_36 36U /*!< Sector Number 36 */
|
||||
#define FLASH_SECTOR_37 37U /*!< Sector Number 37 */
|
||||
#define FLASH_SECTOR_38 38U /*!< Sector Number 38 */
|
||||
#define FLASH_SECTOR_39 39U /*!< Sector Number 39 */
|
||||
#define FLASH_SECTOR_40 40U /*!< Sector Number 40 */
|
||||
#define FLASH_SECTOR_41 41U /*!< Sector Number 41 */
|
||||
#define FLASH_SECTOR_42 42U /*!< Sector Number 42 */
|
||||
#define FLASH_SECTOR_43 43U /*!< Sector Number 43 */
|
||||
#define FLASH_SECTOR_44 44U /*!< Sector Number 44 */
|
||||
#define FLASH_SECTOR_45 45U /*!< Sector Number 45 */
|
||||
#define FLASH_SECTOR_46 46U /*!< Sector Number 46 */
|
||||
#define FLASH_SECTOR_47 47U /*!< Sector Number 47 */
|
||||
#define FLASH_SECTOR_48 48U /*!< Sector Number 48 */
|
||||
#define FLASH_SECTOR_49 49U /*!< Sector Number 49 */
|
||||
#define FLASH_SECTOR_50 50U /*!< Sector Number 50 */
|
||||
#define FLASH_SECTOR_51 51U /*!< Sector Number 51 */
|
||||
#define FLASH_SECTOR_52 52U /*!< Sector Number 52 */
|
||||
#define FLASH_SECTOR_53 53U /*!< Sector Number 53 */
|
||||
#define FLASH_SECTOR_54 54U /*!< Sector Number 54 */
|
||||
#define FLASH_SECTOR_55 55U /*!< Sector Number 55 */
|
||||
#define FLASH_SECTOR_56 56U /*!< Sector Number 56 */
|
||||
#define FLASH_SECTOR_57 57U /*!< Sector Number 57 */
|
||||
#define FLASH_SECTOR_58 58U /*!< Sector Number 58 */
|
||||
#define FLASH_SECTOR_59 59U /*!< Sector Number 59 */
|
||||
#define FLASH_SECTOR_60 60U /*!< Sector Number 60 */
|
||||
#define FLASH_SECTOR_61 61U /*!< Sector Number 61 */
|
||||
#define FLASH_SECTOR_62 62U /*!< Sector Number 62 */
|
||||
#define FLASH_SECTOR_63 63U /*!< Sector Number 63 */
|
||||
#define FLASH_SECTOR_64 64U /*!< Sector Number 64 */
|
||||
#define FLASH_SECTOR_65 65U /*!< Sector Number 65 */
|
||||
#define FLASH_SECTOR_66 66U /*!< Sector Number 66 */
|
||||
#define FLASH_SECTOR_67 67U /*!< Sector Number 67 */
|
||||
#define FLASH_SECTOR_68 68U /*!< Sector Number 68 */
|
||||
#define FLASH_SECTOR_69 69U /*!< Sector Number 69 */
|
||||
#define FLASH_SECTOR_70 70U /*!< Sector Number 70 */
|
||||
#define FLASH_SECTOR_71 71U /*!< Sector Number 71 */
|
||||
#define FLASH_SECTOR_72 72U /*!< Sector Number 72 */
|
||||
#define FLASH_SECTOR_73 73U /*!< Sector Number 73 */
|
||||
#define FLASH_SECTOR_74 74U /*!< Sector Number 74 */
|
||||
#define FLASH_SECTOR_75 75U /*!< Sector Number 75 */
|
||||
#define FLASH_SECTOR_76 76U /*!< Sector Number 76 */
|
||||
#define FLASH_SECTOR_77 77U /*!< Sector Number 77 */
|
||||
#define FLASH_SECTOR_78 78U /*!< Sector Number 78 */
|
||||
#define FLASH_SECTOR_79 79U /*!< Sector Number 79 */
|
||||
#define FLASH_SECTOR_80 80U /*!< Sector Number 80 */
|
||||
#define FLASH_SECTOR_81 81U /*!< Sector Number 81 */
|
||||
#define FLASH_SECTOR_82 82U /*!< Sector Number 82 */
|
||||
#define FLASH_SECTOR_83 83U /*!< Sector Number 83 */
|
||||
#define FLASH_SECTOR_84 84U /*!< Sector Number 84 */
|
||||
#define FLASH_SECTOR_85 85U /*!< Sector Number 85 */
|
||||
#define FLASH_SECTOR_86 86U /*!< Sector Number 86 */
|
||||
#define FLASH_SECTOR_87 87U /*!< Sector Number 87 */
|
||||
#define FLASH_SECTOR_88 88U /*!< Sector Number 88 */
|
||||
#define FLASH_SECTOR_89 89U /*!< Sector Number 89 */
|
||||
#define FLASH_SECTOR_90 90U /*!< Sector Number 90 */
|
||||
#define FLASH_SECTOR_91 91U /*!< Sector Number 91 */
|
||||
#define FLASH_SECTOR_92 92U /*!< Sector Number 92 */
|
||||
#define FLASH_SECTOR_93 93U /*!< Sector Number 93 */
|
||||
#define FLASH_SECTOR_94 94U /*!< Sector Number 94 */
|
||||
#define FLASH_SECTOR_95 95U /*!< Sector Number 95 */
|
||||
#define FLASH_SECTOR_96 96U /*!< Sector Number 96 */
|
||||
#define FLASH_SECTOR_97 97U /*!< Sector Number 97 */
|
||||
#define FLASH_SECTOR_98 98U /*!< Sector Number 98 */
|
||||
#define FLASH_SECTOR_99 99U /*!< Sector Number 99 */
|
||||
#define FLASH_SECTOR_100 100U /*!< Sector Number 100 */
|
||||
#define FLASH_SECTOR_101 101U /*!< Sector Number 101 */
|
||||
#define FLASH_SECTOR_102 102U /*!< Sector Number 102 */
|
||||
#define FLASH_SECTOR_103 103U /*!< Sector Number 103 */
|
||||
#define FLASH_SECTOR_104 104U /*!< Sector Number 104 */
|
||||
#define FLASH_SECTOR_105 105U /*!< Sector Number 105 */
|
||||
#define FLASH_SECTOR_106 106U /*!< Sector Number 106 */
|
||||
#define FLASH_SECTOR_107 107U /*!< Sector Number 107 */
|
||||
#define FLASH_SECTOR_108 108U /*!< Sector Number 108 */
|
||||
#define FLASH_SECTOR_109 109U /*!< Sector Number 109 */
|
||||
#define FLASH_SECTOR_110 110U /*!< Sector Number 110 */
|
||||
#define FLASH_SECTOR_111 111U /*!< Sector Number 111 */
|
||||
#define FLASH_SECTOR_112 112U /*!< Sector Number 112 */
|
||||
#define FLASH_SECTOR_113 113U /*!< Sector Number 113 */
|
||||
#define FLASH_SECTOR_114 114U /*!< Sector Number 114 */
|
||||
#define FLASH_SECTOR_115 115U /*!< Sector Number 115 */
|
||||
#define FLASH_SECTOR_116 116U /*!< Sector Number 116 */
|
||||
#define FLASH_SECTOR_117 117U /*!< Sector Number 117 */
|
||||
#define FLASH_SECTOR_118 118U /*!< Sector Number 118 */
|
||||
#define FLASH_SECTOR_119 119U /*!< Sector Number 119 */
|
||||
#define FLASH_SECTOR_120 120U /*!< Sector Number 120 */
|
||||
#define FLASH_SECTOR_121 121U /*!< Sector Number 121 */
|
||||
#define FLASH_SECTOR_122 122U /*!< Sector Number 122 */
|
||||
#define FLASH_SECTOR_123 123U /*!< Sector Number 123 */
|
||||
#define FLASH_SECTOR_124 124U /*!< Sector Number 124 */
|
||||
#define FLASH_SECTOR_125 125U /*!< Sector Number 125 */
|
||||
#define FLASH_SECTOR_126 126U /*!< Sector Number 126 */
|
||||
#define FLASH_SECTOR_127 127U /*!< Sector Number 127 */
|
||||
#endif /* (FLASH_SECTOR_NB >= 128) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macros ------------------------------------------------------------*/
|
||||
/** @defgroup FLASH_Exported_Macros FLASH Exported Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Set the FLASH Latency.
|
||||
* @param __LATENCY__: FLASH Latency
|
||||
* This parameter can be one of the following values :
|
||||
* @arg FLASH_LATENCY_0: FLASH Zero wait state
|
||||
* @arg FLASH_LATENCY_1: FLASH One wait state
|
||||
* @arg FLASH_LATENCY_2: FLASH Two wait states
|
||||
* @arg FLASH_LATENCY_3: FLASH Three wait states
|
||||
* @arg FLASH_LATENCY_4: FLASH Four wait states
|
||||
* @arg FLASH_LATENCY_5: FLASH Five wait states
|
||||
* @arg FLASH_LATENCY_6: FLASH Six wait states
|
||||
* @arg FLASH_LATENCY_7: FLASH Seven wait states
|
||||
* @arg FLASH_LATENCY_8: FLASH Eight wait states
|
||||
* @arg FLASH_LATENCY_9: FLASH Nine wait states
|
||||
* @arg FLASH_LATENCY_10: FLASH Ten wait states
|
||||
* @arg FLASH_LATENCY_11: FLASH Eleven wait states
|
||||
* @arg FLASH_LATENCY_12: FLASH Twelve wait states
|
||||
* @arg FLASH_LATENCY_13: FLASH Thirteen wait states
|
||||
* @arg FLASH_LATENCY_14: FLASH Fourteen wait states
|
||||
* @arg FLASH_LATENCY_15: FLASH Fifteen wait states
|
||||
* @retval none
|
||||
*/
|
||||
#define __HAL_FLASH_SET_LATENCY(__LATENCY__) MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (__LATENCY__))
|
||||
|
||||
/**
|
||||
* @brief Get the FLASH Latency.
|
||||
* @retval FLASH Latency
|
||||
* This return value can be one of the following values :
|
||||
* @arg FLASH_LATENCY_0: FLASH Zero wait state
|
||||
* @arg FLASH_LATENCY_1: FLASH One wait state
|
||||
* @arg FLASH_LATENCY_2: FLASH Two wait states
|
||||
* @arg FLASH_LATENCY_3: FLASH Three wait states
|
||||
* @arg FLASH_LATENCY_4: FLASH Four wait states
|
||||
* @arg FLASH_LATENCY_5: FLASH Five wait states
|
||||
* @arg FLASH_LATENCY_6: FLASH Six wait states
|
||||
* @arg FLASH_LATENCY_7: FLASH Seven wait states
|
||||
* @arg FLASH_LATENCY_8: FLASH Eight wait states
|
||||
* @arg FLASH_LATENCY_9: FLASH Nine wait states
|
||||
* @arg FLASH_LATENCY_10: FLASH Ten wait states
|
||||
* @arg FLASH_LATENCY_11: FLASH Eleven wait states
|
||||
* @arg FLASH_LATENCY_12: FLASH Twelve wait states
|
||||
* @arg FLASH_LATENCY_13: FLASH Thirteen wait states
|
||||
* @arg FLASH_LATENCY_14: FLASH Fourteen wait states
|
||||
* @arg FLASH_LATENCY_15: FLASH Fifteen wait states
|
||||
*/
|
||||
#define __HAL_FLASH_GET_LATENCY() READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)
|
||||
|
||||
/**
|
||||
* @brief Enable the specified FLASH interrupt.
|
||||
* @param __INTERRUPT__ : FLASH interrupt
|
||||
* This parameter can be any combination of the following values:
|
||||
* @arg FLASH_IT_EOP : End of FLASH Operation Interrupt
|
||||
* @arg FLASH_IT_WRPERR : Write Protection Error Interrupt
|
||||
* @arg FLASH_IT_PGSERR : Program Sequence Error Interrupt
|
||||
* @arg FLASH_IT_STRBERR : Strobe Error Interrupt
|
||||
* @arg FLASH_IT_INCERR : Inconsistency Error Interrupt
|
||||
* @arg FLASH_IT_OBKERR : OBK Error Interrupt
|
||||
* @arg FLASH_IT_OBKWERR : OBK Write Error Interrupt
|
||||
* @arg FLASH_IT_OPTCHANGEERR : Option Byte Change Error Interrupt
|
||||
* @arg FLASH_IT_ECCC : Single ECC Error Correction Interrupt
|
||||
* @retval none
|
||||
*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* Enable secure FLASH interrupts from the secure world */
|
||||
#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) do { if(((__INTERRUPT__) & FLASH_IT_ECCC) != 0U) \
|
||||
{ SET_BIT(FLASH->ECCCORR, FLASH_IT_ECCC); } \
|
||||
if(((__INTERRUPT__) & FLASH_IT_OPTCHANGEERR) != 0U) \
|
||||
{ SET_BIT(FLASH->NSCR, FLASH_IT_OPTCHANGEERR); } \
|
||||
if(((__INTERRUPT__) & (~FLASH_IT_ECCC)) != 0U) \
|
||||
{ SET_BIT(FLASH->SECCR, ((__INTERRUPT__) & (~(FLASH_IT_ECCC | \
|
||||
FLASH_IT_OPTCHANGEERR)))); }\
|
||||
} while(0)
|
||||
/* Enable non-secure FLASH interrupts from the secure world */
|
||||
#define __HAL_FLASH_ENABLE_IT_NS(__INTERRUPT__) do { if(((__INTERRUPT__) & FLASH_IT_ECCC) != 0U) \
|
||||
{ SET_BIT(FLASH->ECCCORR, FLASH_IT_ECCC); } \
|
||||
if(((__INTERRUPT__) & (~FLASH_IT_ECCC)) != 0U) \
|
||||
{ SET_BIT(FLASH->NSCR, ((__INTERRUPT__) & (~FLASH_IT_ECCC))); } \
|
||||
} while(0)
|
||||
#else
|
||||
/* Enable non-secure FLASH interrupts from the non-secure world */
|
||||
#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) do { if(((__INTERRUPT__) & FLASH_IT_ECCC) != 0U) \
|
||||
{ SET_BIT(FLASH->ECCCORR, FLASH_IT_ECCC); } \
|
||||
if(((__INTERRUPT__) & (~FLASH_IT_ECCC)) != 0U) \
|
||||
{ SET_BIT(FLASH->NSCR, ((__INTERRUPT__) & (~FLASH_IT_ECCC))); } \
|
||||
} while(0)
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @brief Disable the specified FLASH interrupt.
|
||||
* @param __INTERRUPT__ : FLASH interrupt
|
||||
* This parameter can be any combination of the following values:
|
||||
* @arg FLASH_IT_EOP : End of FLASH Operation Interrupt
|
||||
* @arg FLASH_IT_WRPERR : Write Protection Error Interrupt
|
||||
* @arg FLASH_IT_PGSERR : Program Sequence Error Interrupt
|
||||
* @arg FLASH_IT_STRBERR : Strobe Error Interrupt
|
||||
* @arg FLASH_IT_INCERR : Inconsistency Error Interrupt
|
||||
* @arg FLASH_IT_OBKERR : OBK Error Interrupt
|
||||
* @arg FLASH_IT_OBKWERR : OBK Write Error Interrupt
|
||||
* @arg FLASH_IT_OPTCHANGEERR : Option Byte Change Error Interrupt
|
||||
* @arg FLASH_IT_ECCC : Single ECC Error Correction Interrupt
|
||||
* @retval none
|
||||
*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* Disable secure FLASH interrupts from the secure world */
|
||||
#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) do { if(((__INTERRUPT__) & FLASH_IT_ECCC) != 0U) \
|
||||
{ CLEAR_BIT(FLASH->ECCCORR, FLASH_IT_ECCC); } \
|
||||
if(((__INTERRUPT__) & FLASH_IT_OPTCHANGEERR) != 0U) \
|
||||
{ CLEAR_BIT(FLASH->NSCR, FLASH_IT_OPTCHANGEERR); } \
|
||||
if(((__INTERRUPT__) & (~(FLASH_IT_ECCC | FLASH_IT_OPTCHANGEERR))) \
|
||||
!= 0U){ CLEAR_BIT(FLASH->SECCR, ((__INTERRUPT__) & \
|
||||
(~(FLASH_IT_ECCC | FLASH_IT_OPTCHANGEERR)))); }\
|
||||
} while(0)
|
||||
/* Disable non-secure FLASH interrupts from the secure world */
|
||||
#define __HAL_FLASH_DISABLE_IT_NS(__INTERRUPT__) do { if(((__INTERRUPT__) & FLASH_IT_ECCC) != 0U) { CLEAR_BIT \
|
||||
(FLASH->ECCCORR, FLASH_IT_ECCC); } \
|
||||
if(((__INTERRUPT__) & (~FLASH_IT_ECCC)) != 0U) \
|
||||
{ CLEAR_BIT(FLASH->NSCR, ((__INTERRUPT__) & (~FLASH_IT_ECCC)));\
|
||||
} \
|
||||
} while(0)
|
||||
#else
|
||||
/* Disable non-secure FLASH interrupts from the non-secure world */
|
||||
#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) do { if(((__INTERRUPT__) & FLASH_IT_ECCC) != 0U) { CLEAR_BIT \
|
||||
(FLASH->ECCCORR, FLASH_IT_ECCC); } \
|
||||
if(((__INTERRUPT__) & (~FLASH_IT_ECCC)) != 0U) { CLEAR_BIT \
|
||||
(FLASH->NSCR, ((__INTERRUPT__) & (~FLASH_IT_ECCC))); } \
|
||||
} while(0)
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @brief Checks whether the specified FLASH flag is set or not.
|
||||
* @param __FLAG__: specifies the FLASH flag to check.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg FLASH_FLAG_BSY : FLASH Busy flag
|
||||
* @arg FLASH_FLAG_WBNE : Write Buffer Not Empty flag
|
||||
* @arg FLASH_FLAG_EOP : End Of Operation flag
|
||||
* @arg FLASH_FLAG_WRPERR : Write Protection Error flag
|
||||
* @arg FLASH_FLAG_PGSERR : Program Sequence Error flag
|
||||
* @arg FLASH_FLAG_STRBERR : Strobe Error flag
|
||||
* @arg FLASH_FLAG_INCERR : Inconsistency Error flag
|
||||
* @arg FLASH_FLAG_OBKERR : OBK Error flag
|
||||
* @arg FLASH_FLAG_OBKWERR : OBK Write Error flag
|
||||
* @arg FLASH_FLAG_OPTCHANGEERR : Option Byte Change Error flag
|
||||
* @arg FLASH_FLAG_ECCC : Single ECC Error Correction flag
|
||||
* @arg FLASH_FLAG_ECCD : Double Detection ECC Error flag
|
||||
* @retval The new state of FLASH_FLAG (SET or RESET).
|
||||
*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* Get secure FLASH flags from the secure world */
|
||||
#define __HAL_FLASH_GET_FLAG(__FLAG__) ((((__FLAG__) & (FLASH_FLAG_ECCC)) != 0U) ? \
|
||||
(READ_BIT(FLASH->ECCCORR, (__FLAG__)) == (__FLAG__)) : \
|
||||
(((__FLAG__) & (FLASH_FLAG_ECCD)) != 0U) ? \
|
||||
(READ_BIT(FLASH->ECCDETR, (__FLAG__)) == (__FLAG__)) : \
|
||||
((((__FLAG__) & (FLASH_FLAG_OPTCHANGEERR)) != 0U) ? \
|
||||
(READ_BIT(FLASH->NSSR, (__FLAG__)) == (__FLAG__)) : \
|
||||
(READ_BIT(FLASH->SECSR, (__FLAG__)) == (__FLAG__))))
|
||||
/* Get non-secure FLASH flags from the secure world */
|
||||
#define __HAL_FLASH_GET_FLAG_NS(__FLAG__) ((((__FLAG__) & (FLASH_FLAG_ECCC)) != 0U) ? \
|
||||
(READ_BIT(FLASH->ECCCORR, (__FLAG__)) == (__FLAG__)) : \
|
||||
(((__FLAG__) & (FLASH_FLAG_ECCD)) != 0U) ? \
|
||||
(READ_BIT(FLASH->ECCDETR, (__FLAG__)) == (__FLAG__)) : \
|
||||
(READ_BIT(FLASH->NSSR, (__FLAG__)) == (__FLAG__))))
|
||||
#else
|
||||
/* Get non-secure FLASH flags from the non-secure world */
|
||||
#define __HAL_FLASH_GET_FLAG(__FLAG__) ((((__FLAG__) & (FLASH_FLAG_ECCC)) != 0U) ? \
|
||||
(READ_BIT(FLASH->ECCCORR, (__FLAG__)) == (__FLAG__)) : \
|
||||
(((__FLAG__) & (FLASH_FLAG_ECCD)) != 0U) ? \
|
||||
(READ_BIT(FLASH->ECCDETR, (__FLAG__)) == (__FLAG__)) : \
|
||||
(READ_BIT(FLASH->NSSR, (__FLAG__)) == (__FLAG__)))
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @brief Clear the specified FLASH flag.
|
||||
* @param __FLAG__: specifies the FLASH flags to clear.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg FLASH_FLAG_BSY : FLASH Busy flag
|
||||
* @arg FLASH_FLAG_WBNE : Write Buffer Not Empty flag
|
||||
* @arg FLASH_FLAG_EOP : End Of Operation flag
|
||||
* @arg FLASH_FLAG_WRPERR : Write Protection Error flag
|
||||
* @arg FLASH_FLAG_PGSERR : Program Sequence Error flag
|
||||
* @arg FLASH_FLAG_STRBERR : Strobe Error flag
|
||||
* @arg FLASH_FLAG_INCERR : Inconsistency Error flag
|
||||
* @arg FLASH_FLAG_OBKERR : OBK Error flag
|
||||
* @arg FLASH_FLAG_OBKWERR : OBK Write Error flag
|
||||
* @arg FLASH_FLAG_OPTCHANGEERR : Option Byte Change Error flag
|
||||
* @arg FLASH_FLAG_ECCC : Single ECC Error Correction flag
|
||||
* @arg FLASH_FLAG_ECCD : Double Detection ECC Error flag
|
||||
* @arg FLASH_FLAG_ALL_ERRORS: All errors flags
|
||||
* @retval none
|
||||
*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* Clear secure FLASH flags from the secure world */
|
||||
#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) do { if(((__FLAG__) & FLASH_FLAG_ECCC) != 0U) { SET_BIT(FLASH->ECCCORR,\
|
||||
((__FLAG__) & FLASH_FLAG_ECCC)); } \
|
||||
if(((__FLAG__) & FLASH_FLAG_ECCD) != 0U) { SET_BIT(FLASH->ECCDETR,\
|
||||
((__FLAG__) & FLASH_FLAG_ECCD)); } \
|
||||
if(((__FLAG__) & FLASH_FLAG_OPTCHANGEERR) != 0U) { SET_BIT \
|
||||
(FLASH->NSCCR, ((__FLAG__) & (FLASH_FLAG_OPTCHANGEERR))); } \
|
||||
if(((__FLAG__) & ~(FLASH_FLAG_ECCR_ERRORS | \
|
||||
FLASH_FLAG_OPTCHANGEERR)) != 0U) { WRITE_REG(FLASH->SECCCR, \
|
||||
((__FLAG__) & ~(FLASH_FLAG_ECCR_ERRORS | \
|
||||
FLASH_FLAG_OPTCHANGEERR))); } \
|
||||
} while(0)
|
||||
/* Clear non-secure FLASH flags from the secure world */
|
||||
#define __HAL_FLASH_CLEAR_FLAG_NS(__FLAG__) do { if(((__FLAG__) & FLASH_FLAG_ECCC) != 0U) { SET_BIT(FLASH->ECCCORR,\
|
||||
((__FLAG__) & FLASH_FLAG_ECCC)); } \
|
||||
if(((__FLAG__) & FLASH_FLAG_ECCD) != 0U) { SET_BIT(FLASH->ECCDETR,\
|
||||
((__FLAG__) & FLASH_FLAG_ECCD)); } \
|
||||
if(((__FLAG__) & (~FLASH_FLAG_ECCR_ERRORS)) != 0U) { WRITE_REG \
|
||||
(FLASH->NSCCR, ((__FLAG__) & (~FLASH_FLAG_ECCR_ERRORS))); } \
|
||||
} while(0)
|
||||
#else
|
||||
/* Clear non-secure FLASH flags from the non-secure world */
|
||||
#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) do { if(((__FLAG__) & FLASH_FLAG_ECCC) != 0U) { SET_BIT(FLASH->ECCCORR,\
|
||||
((__FLAG__) & FLASH_FLAG_ECCC)); } \
|
||||
if(((__FLAG__) & FLASH_FLAG_ECCD) != 0U) { SET_BIT(FLASH->ECCDETR,\
|
||||
((__FLAG__) & FLASH_FLAG_ECCD)); } \
|
||||
if(((__FLAG__) & (~FLASH_FLAG_ECCR_ERRORS)) != 0U) { WRITE_REG \
|
||||
(FLASH->NSCCR, ((__FLAG__) & (~FLASH_FLAG_ECCR_ERRORS))); } \
|
||||
} while(0)
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Include FLASH HAL Extension module */
|
||||
#include "stm32h5xx_hal_flash_ex.h"
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
/** @addtogroup FLASH_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
/** @addtogroup FLASH_Exported_Functions_Group1
|
||||
* @{
|
||||
*/
|
||||
/* Program operation functions */
|
||||
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress);
|
||||
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress);
|
||||
/* FLASH IRQ handler method */
|
||||
void HAL_FLASH_IRQHandler(void);
|
||||
/* Callbacks in non blocking modes */
|
||||
void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);
|
||||
void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup FLASH_Exported_Functions_Group2
|
||||
* @{
|
||||
*/
|
||||
/* Peripheral Control functions */
|
||||
HAL_StatusTypeDef HAL_FLASH_Unlock(void);
|
||||
HAL_StatusTypeDef HAL_FLASH_Lock(void);
|
||||
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);
|
||||
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);
|
||||
/* Option bytes control */
|
||||
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup FLASH_Exported_Functions_Group3
|
||||
* @{
|
||||
*/
|
||||
/* Peripheral State functions */
|
||||
uint32_t HAL_FLASH_GetError(void);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/** @defgroup FLASH_Private_Variables FLASH Private Variables
|
||||
* @{
|
||||
*/
|
||||
extern FLASH_ProcessTypeDef pFlash;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
/** @defgroup FLASH_Private_Constants FLASH Private Constants
|
||||
* @{
|
||||
*/
|
||||
#define FLASH_TIMEOUT_VALUE 1000U /*!< 1 s */
|
||||
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define FLASH_OBK 0x10000000U
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
|
||||
#define FLASH_OTP 0x20000000U
|
||||
|
||||
#if defined (FLASH_EDATAR_EDATA_EN)
|
||||
#define FLASH_EDATA_HALFWORD 0x40000000U
|
||||
#define FLASH_EDATA_WORD 0x60000000U
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
|
||||
#define FLASH_NON_SECURE_MASK 0x80000000U
|
||||
|
||||
#define FLASH_EDATA_SECTOR_NB 8U /*!< Maximum number of FLASH high-cycle data sectors */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/** @defgroup FLASH_Private_Macros FLASH Private Macros
|
||||
* @{
|
||||
*/
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#if defined (FLASH_SR_OBKERR) && defined (FLASH_EDATAR_EDATA_EN)
|
||||
#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_QUADWORD) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_QUADWORD_NS) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_HALFWORD_OTP) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_HALFWORD_EDATA) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_HALFWORD_EDATA_NS) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_WORD_EDATA) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_WORD_EDATA_NS) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_QUADWORD_OBK) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_QUADWORD_OBK_ALT))
|
||||
#else
|
||||
#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_QUADWORD) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_QUADWORD_NS) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_HALFWORD_OTP))
|
||||
#endif /* FLASH_SR_OBKERR && FLASH_EDATAR_EDATA_EN */
|
||||
#else
|
||||
#if defined (FLASH_SR_OBKERR) && defined (FLASH_EDATAR_EDATA_EN)
|
||||
#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_QUADWORD) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_HALFWORD_OTP) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_HALFWORD_EDATA) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_WORD_EDATA) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_QUADWORD_OBK) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_QUADWORD_OBK_ALT))
|
||||
#else
|
||||
#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_QUADWORD) || \
|
||||
((VALUE) == FLASH_TYPEPROGRAM_HALFWORD_OTP))
|
||||
#endif /* FLASH_SR_OBKERR && FLASH_EDATAR_EDATA_EN */
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#define IS_FLASH_USER_MEM_ADDRESS(ADDRESS) ((((ADDRESS) >= FLASH_BASE) && ((ADDRESS) < (FLASH_BASE+FLASH_SIZE))) || \
|
||||
(((ADDRESS) >= FLASH_BASE_NS) && ((ADDRESS) < (FLASH_BASE_NS+FLASH_SIZE))))
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define IS_FLASH_OBK_ADDRESS(ADDRESS) ((((ADDRESS) >= FLASH_OBK_BASE) && \
|
||||
((ADDRESS) < (FLASH_OBK_BASE+FLASH_OBK_SIZE))) || \
|
||||
(((ADDRESS) >= FLASH_OBK_BASE_NS) && \
|
||||
((ADDRESS) < (FLASH_OBK_BASE_NS+FLASH_OBK_SIZE))))
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#if defined (FLASH_EDATAR_EDATA_EN)
|
||||
#define IS_FLASH_EDATA_ADDRESS(ADDRESS) ((((ADDRESS) >= FLASH_EDATA_BASE_S) && \
|
||||
((ADDRESS) < (FLASH_EDATA_BASE_S+FLASH_EDATA_SIZE))) || \
|
||||
(((ADDRESS) >= FLASH_EDATA_BASE_NS) && \
|
||||
((ADDRESS) < (FLASH_EDATA_BASE_NS+FLASH_EDATA_SIZE))))
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
#else
|
||||
#define IS_FLASH_USER_MEM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && \
|
||||
((ADDRESS) < (FLASH_BASE+FLASH_SIZE)))
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
#define IS_FLASH_OBK_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_OBK_BASE) && \
|
||||
((ADDRESS) < (FLASH_OBK_BASE + FLASH_OBK_SIZE)))
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#if defined (FLASH_EDATAR_EDATA_EN)
|
||||
#define IS_FLASH_EDATA_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_EDATA_BASE_NS) && \
|
||||
((ADDRESS) < (FLASH_EDATA_BASE_NS + FLASH_EDATA_SIZE)))
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
#define IS_FLASH_OTP_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_OTP_BASE) && \
|
||||
((ADDRESS) < (FLASH_OTP_BASE + FLASH_OTP_SIZE)))
|
||||
|
||||
#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || \
|
||||
((BANK) == FLASH_BANK_2) || \
|
||||
((BANK) == FLASH_BANK_BOTH))
|
||||
|
||||
#define IS_FLASH_BANK_EXCLUSIVE(BANK) (((BANK) == FLASH_BANK_1) || \
|
||||
((BANK) == FLASH_BANK_2))
|
||||
|
||||
#define IS_FLASH_SECTOR(SECTOR) ((SECTOR) < FLASH_SECTOR_NB)
|
||||
|
||||
#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \
|
||||
((LATENCY) == FLASH_LATENCY_1) || \
|
||||
((LATENCY) == FLASH_LATENCY_2) || \
|
||||
((LATENCY) == FLASH_LATENCY_3) || \
|
||||
((LATENCY) == FLASH_LATENCY_4) || \
|
||||
((LATENCY) == FLASH_LATENCY_5) || \
|
||||
((LATENCY) == FLASH_LATENCY_6) || \
|
||||
((LATENCY) == FLASH_LATENCY_7) || \
|
||||
((LATENCY) == FLASH_LATENCY_8) || \
|
||||
((LATENCY) == FLASH_LATENCY_9) || \
|
||||
((LATENCY) == FLASH_LATENCY_10) || \
|
||||
((LATENCY) == FLASH_LATENCY_11) || \
|
||||
((LATENCY) == FLASH_LATENCY_12) || \
|
||||
((LATENCY) == FLASH_LATENCY_13) || \
|
||||
((LATENCY) == FLASH_LATENCY_14) || \
|
||||
((LATENCY) == FLASH_LATENCY_15))
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
#define IS_FLASH_SECURE_OPERATION() ((pFlash.ProcedureOnGoing & FLASH_NON_SECURE_MASK) == 0U)
|
||||
#else
|
||||
#define IS_FLASH_SECURE_OPERATION() (1U == 0U)
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
/** @defgroup FLASH_Private_Functions FLASH Private Functions
|
||||
* @{
|
||||
*/
|
||||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32H5xx_HAL_FLASH_H */
|
||||
1069
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_flash_ex.h
Normal file
1069
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_flash_ex.h
Normal file
File diff suppressed because it is too large
Load Diff
410
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_gpio.h
Normal file
410
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_gpio.h
Normal file
@@ -0,0 +1,410 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_gpio.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of GPIO HAL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32H5xx_HAL_GPIO_H
|
||||
#define STM32H5xx_HAL_GPIO_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup GPIO GPIO
|
||||
* @brief GPIO HAL module driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/** @defgroup GPIO_Exported_Types GPIO Exported Types
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief GPIO Init structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t Pin; /*!< Specifies the GPIO pins to be configured.
|
||||
This parameter can be a value of @ref GPIO_pins */
|
||||
|
||||
uint32_t Mode; /*!< Specifies the operating mode for the selected pins.
|
||||
This parameter can be a value of @ref GPIO_mode */
|
||||
|
||||
uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
|
||||
This parameter can be a value of @ref GPIO_pull */
|
||||
|
||||
uint32_t Speed; /*!< Specifies the speed for the selected pins.
|
||||
This parameter can be a value of @ref GPIO_speed */
|
||||
|
||||
uint32_t Alternate; /*!< Peripheral to be connected to the selected pins
|
||||
This parameter can be a value of @ref GPIOEx_Alternate_function_selection */
|
||||
} GPIO_InitTypeDef;
|
||||
|
||||
/**
|
||||
* @brief GPIO Bit SET and Bit RESET enumeration
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
GPIO_PIN_RESET = 0U,
|
||||
GPIO_PIN_SET
|
||||
} GPIO_PinState;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/** @defgroup GPIO_Exported_Constants GPIO Exported Constants
|
||||
* @{
|
||||
*/
|
||||
/** @defgroup GPIO_pins GPIO pins
|
||||
* @{
|
||||
*/
|
||||
#define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */
|
||||
#define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */
|
||||
#define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */
|
||||
#define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */
|
||||
#define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */
|
||||
#define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */
|
||||
#define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */
|
||||
#define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */
|
||||
#define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */
|
||||
#define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */
|
||||
#define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */
|
||||
#define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */
|
||||
#define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */
|
||||
#define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */
|
||||
#define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */
|
||||
#define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */
|
||||
#define GPIO_PIN_ALL ((uint16_t)0xFFFF) /* All pins selected */
|
||||
|
||||
#define GPIO_PIN_MASK (0x0000FFFFU) /* PIN mask for assert test */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup GPIO_mode GPIO mode
|
||||
* @brief GPIO Configuration Mode
|
||||
* Elements values convention: 0xX0yz00YZ
|
||||
* - X : GPIO mode or EXTI Mode
|
||||
* - y : External IT or Event trigger detection
|
||||
* - z : IO configuration on External IT or Event
|
||||
* - Y : Output type (Push Pull or Open Drain)
|
||||
* - Z : IO Direction mode (Input, Output, (Alternate or Analog))
|
||||
* @{
|
||||
*/
|
||||
/*!< Input Floating Mode */
|
||||
#define GPIO_MODE_INPUT (0x00000000U)
|
||||
/*!< Output Push Pull Mode */
|
||||
#define GPIO_MODE_OUTPUT_PP (0x00000001U)
|
||||
/*!< Output Open Drain Mode */
|
||||
#define GPIO_MODE_OUTPUT_OD (0x00000011U)
|
||||
/*!< Alternate Function Push Pull Mode */
|
||||
#define GPIO_MODE_AF_PP (0x00000002U)
|
||||
/*!< Alternate Function Open Drain Mode */
|
||||
#define GPIO_MODE_AF_OD (0x00000012U)
|
||||
/*!< Analog Mode */
|
||||
#define GPIO_MODE_ANALOG (0x00000003U)
|
||||
/*!< External Interrupt Mode with Rising edge trigger detection */
|
||||
#define GPIO_MODE_IT_RISING (0x10110000U)
|
||||
/*!< External Interrupt Mode with Falling edge trigger detection */
|
||||
#define GPIO_MODE_IT_FALLING (0x10210000U)
|
||||
/*!< External Interrupt Mode with Rising/Falling edge trigger detection */
|
||||
#define GPIO_MODE_IT_RISING_FALLING (0x10310000U)
|
||||
/*!< External Event Mode with Rising edge trigger detection */
|
||||
#define GPIO_MODE_EVT_RISING (0x10120000U)
|
||||
/*!< External Event Mode with Falling edge trigger detection */
|
||||
#define GPIO_MODE_EVT_FALLING (0x10220000U)
|
||||
/*!< External Event Mode with Rising/Falling edge trigger detection */
|
||||
#define GPIO_MODE_EVT_RISING_FALLING (0x10320000U)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup GPIO_speed GPIO speed
|
||||
* @brief GPIO Output Maximum frequency
|
||||
* @{
|
||||
*/
|
||||
#define GPIO_SPEED_FREQ_LOW (0x00000000U) /*!< Low speed */
|
||||
#define GPIO_SPEED_FREQ_MEDIUM (0x00000001U) /*!< Medium speed */
|
||||
#define GPIO_SPEED_FREQ_HIGH (0x00000002U) /*!< High speed */
|
||||
#define GPIO_SPEED_FREQ_VERY_HIGH (0x00000003U) /*!< Very-high speed */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup GPIO_pull GPIO pull
|
||||
* @brief GPIO Pull-Up or Pull-Down Activation
|
||||
* @{
|
||||
*/
|
||||
#define GPIO_NOPULL (0x00000000U) /*!< No Pull-up or Pull-down activation */
|
||||
#define GPIO_PULLUP (0x00000001U) /*!< Pull-up activation */
|
||||
#define GPIO_PULLDOWN (0x00000002U) /*!< Pull-down activation */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
|
||||
/** @defgroup GPIO_attributes GPIO attributes
|
||||
* @brief GPIO pin secure or non-secure attributes
|
||||
* @{
|
||||
*/
|
||||
#define GPIO_PIN_SEC (0x00000001U) /*!< Secure pin attribute */
|
||||
#define GPIO_PIN_NSEC (0x00000000U) /*!< Non-secure pin attribute */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/** @defgroup GPIO_Exported_Macros GPIO Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified EXTI line is rising edge asserted or not.
|
||||
* @param __EXTI_LINE__: specifies the EXTI line to check.
|
||||
* This parameter can be GPIO_PIN_x where x can be(0..15)
|
||||
* @retval The new state of __EXTI_LINE__ (SET or RESET).
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 & (__EXTI_LINE__))
|
||||
|
||||
/**
|
||||
* @brief Clear the EXTI's line rising pending bits.
|
||||
* @param __EXTI_LINE__: specifies the EXTI lines to clear.
|
||||
* This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 = (__EXTI_LINE__))
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified EXTI line is falling edge asserted or not.
|
||||
* @param __EXTI_LINE__: specifies the EXTI line to check.
|
||||
* This parameter can be GPIO_PIN_x where x can be(0..15)
|
||||
* @retval The new state of __EXTI_LINE__ (SET or RESET).
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 & (__EXTI_LINE__))
|
||||
|
||||
/**
|
||||
* @brief Clear the EXTI's line falling pending bits.
|
||||
* @param __EXTI_LINE__: specifies the EXTI lines to clear.
|
||||
* This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 = (__EXTI_LINE__))
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified EXTI line is asserted or not.
|
||||
* @param __EXTI_LINE__: specifies the EXTI line to check.
|
||||
* This parameter can be GPIO_PIN_x where x can be(0..15)
|
||||
* @retval The new state of __EXTI_LINE__ (SET or RESET).
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (__HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) || \
|
||||
__HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__))
|
||||
|
||||
/**
|
||||
* @brief Clear the EXTI's line pending bits.
|
||||
* @param __EXTI_LINE__: specifies the EXTI lines to clear.
|
||||
* This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) \
|
||||
do { \
|
||||
__HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__); \
|
||||
__HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__); \
|
||||
} while(0)
|
||||
|
||||
|
||||
/**
|
||||
* @brief Generate a Software interrupt on selected EXTI line(s).
|
||||
* @param __EXTI_LINE__: specifies the EXTI line to set.
|
||||
* This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER1 = (__EXTI_LINE__))
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified EXTI line flag is set or not.
|
||||
* @param __EXTI_LINE__ specifies the EXTI line flag to check.
|
||||
* This parameter can be GPIO_PIN_x where x can be(0..15)
|
||||
* @retval The new state of __EXTI_LINE__ (SET or RESET).
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__)
|
||||
|
||||
/**
|
||||
* @brief Clear the EXTI line pending flags.
|
||||
* @param __EXTI_LINE__ specifies the EXTI lines flags to clear.
|
||||
* This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/** @defgroup GPIO_Private_Macros GPIO Private Macros
|
||||
* @{
|
||||
*/
|
||||
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
|
||||
|
||||
#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\
|
||||
(((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U))
|
||||
|
||||
#define IS_GPIO_SINGLE_PIN(__PIN__) (((__PIN__) == GPIO_PIN_0) ||\
|
||||
((__PIN__) == GPIO_PIN_1) ||\
|
||||
((__PIN__) == GPIO_PIN_2) ||\
|
||||
((__PIN__) == GPIO_PIN_3) ||\
|
||||
((__PIN__) == GPIO_PIN_4) ||\
|
||||
((__PIN__) == GPIO_PIN_5) ||\
|
||||
((__PIN__) == GPIO_PIN_6) ||\
|
||||
((__PIN__) == GPIO_PIN_7) ||\
|
||||
((__PIN__) == GPIO_PIN_8) ||\
|
||||
((__PIN__) == GPIO_PIN_9) ||\
|
||||
((__PIN__) == GPIO_PIN_10) ||\
|
||||
((__PIN__) == GPIO_PIN_11) ||\
|
||||
((__PIN__) == GPIO_PIN_12) ||\
|
||||
((__PIN__) == GPIO_PIN_13) ||\
|
||||
((__PIN__) == GPIO_PIN_14) ||\
|
||||
((__PIN__) == GPIO_PIN_15))
|
||||
|
||||
#define IS_GPIO_COMMON_PIN(__RESETMASK__, __SETMASK__) \
|
||||
(((uint32_t)(__RESETMASK__) & (uint32_t)(__SETMASK__)) == 0x00u)
|
||||
|
||||
#define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_MODE_INPUT) ||\
|
||||
((__MODE__) == GPIO_MODE_OUTPUT_PP) ||\
|
||||
((__MODE__) == GPIO_MODE_OUTPUT_OD) ||\
|
||||
((__MODE__) == GPIO_MODE_AF_PP) ||\
|
||||
((__MODE__) == GPIO_MODE_AF_OD) ||\
|
||||
((__MODE__) == GPIO_MODE_IT_RISING) ||\
|
||||
((__MODE__) == GPIO_MODE_IT_FALLING) ||\
|
||||
((__MODE__) == GPIO_MODE_IT_RISING_FALLING) ||\
|
||||
((__MODE__) == GPIO_MODE_EVT_RISING) ||\
|
||||
((__MODE__) == GPIO_MODE_EVT_FALLING) ||\
|
||||
((__MODE__) == GPIO_MODE_EVT_RISING_FALLING) ||\
|
||||
((__MODE__) == GPIO_MODE_ANALOG))
|
||||
|
||||
#define IS_GPIO_SPEED(__SPEED__) (((__SPEED__) == GPIO_SPEED_FREQ_LOW) ||\
|
||||
((__SPEED__) == GPIO_SPEED_FREQ_MEDIUM) ||\
|
||||
((__SPEED__) == GPIO_SPEED_FREQ_HIGH) ||\
|
||||
((__SPEED__) == GPIO_SPEED_FREQ_VERY_HIGH))
|
||||
|
||||
#define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_NOPULL) ||\
|
||||
((__PULL__) == GPIO_PULLUP) || \
|
||||
((__PULL__) == GPIO_PULLDOWN))
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
|
||||
#define IS_GPIO_PIN_ATTRIBUTES(__ATTRIBUTES__) (((__ATTRIBUTES__) == GPIO_PIN_SEC) ||\
|
||||
((__ATTRIBUTES__) == GPIO_PIN_NSEC))
|
||||
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Include GPIO HAL Extended module */
|
||||
#include "stm32h5xx_hal_gpio_ex.h"
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
/** @addtogroup GPIO_Exported_Functions GPIO Exported Functions
|
||||
* @brief GPIO Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup GPIO_Exported_Functions_Group1 Initialization/de-initialization functions
|
||||
* @brief Initialization and Configuration functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Initialization and de-initialization functions *****************************/
|
||||
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, const GPIO_InitTypeDef *pGPIO_Init);
|
||||
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup GPIO_Exported_Functions_Group2 IO operation functions
|
||||
* @brief IO operation functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* IO operation functions *****************************************************/
|
||||
GPIO_PinState HAL_GPIO_ReadPin(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
|
||||
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
|
||||
void HAL_GPIO_WriteMultipleStatePin(GPIO_TypeDef *GPIOx, uint16_t PinReset, uint16_t PinSet);
|
||||
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
|
||||
void HAL_GPIO_EnableHighSPeedLowVoltage(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
|
||||
void HAL_GPIO_DisableHighSPeedLowVoltage(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
|
||||
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
|
||||
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
|
||||
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin);
|
||||
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
|
||||
/** @addtogroup GPIO_Exported_Functions_Group3 IO attributes management functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* IO attributes management functions *****************************************/
|
||||
void HAL_GPIO_ConfigPinAttributes(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, uint32_t PinAttributes);
|
||||
HAL_StatusTypeDef HAL_GPIO_GetConfigPinAttributes(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin,
|
||||
uint32_t *pPinAttributes);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32H5xx_HAL_GPIO_H */
|
||||
502
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_gpio_ex.h
Normal file
502
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_gpio_ex.h
Normal file
@@ -0,0 +1,502 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_gpio_ex.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of GPIO HAL Extended module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32H5xx_HAL_GPIO_EX_H
|
||||
#define STM32H5xx_HAL_GPIO_EX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup GPIOEx GPIOEx
|
||||
* @brief GPIO Extended HAL module driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup GPIOEx_Alternate_function_selection GPIOEx Alternate function selection
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief AF 0 selection
|
||||
*/
|
||||
#define GPIO_AF0_RTC_50HZ ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */
|
||||
#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */
|
||||
#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */
|
||||
#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */
|
||||
#define GPIO_AF0_CSLEEP ((uint8_t)0x00) /* CSLEEP Alternate Function mapping */
|
||||
#define GPIO_AF0_CSTOP ((uint8_t)0x00) /* CSTOP Alternate Function mapping */
|
||||
#define GPIO_AF0_CRS ((uint8_t)0x00) /* CRS Alternate Function mapping */
|
||||
|
||||
/**
|
||||
* @brief AF 1 selection
|
||||
*/
|
||||
#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */
|
||||
#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */
|
||||
#if defined(TIM16)
|
||||
#define GPIO_AF1_TIM16 ((uint8_t)0x01) /* TIM16 Alternate Function mapping */
|
||||
#endif /* TIM16 */
|
||||
#if defined(TIM17)
|
||||
#define GPIO_AF1_TIM17 ((uint8_t)0x01) /* TIM17 Alternate Function mapping */
|
||||
#endif /* TIM17 */
|
||||
#if !defined(STM32H503xx)
|
||||
#define GPIO_AF1_LPTIM1 ((uint8_t)0x01) /* LPTIM1 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
|
||||
/**
|
||||
* @brief AF 2 selection
|
||||
*/
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF2_LPTIM1 ((uint8_t)0x02) /* LPTIM1 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
#if defined(LPTIM3)
|
||||
#define GPIO_AF2_LPTIM3 ((uint8_t)0x02) /* LPTIM3 Alternate Function mapping */
|
||||
#endif /* LPTIM3 */
|
||||
#if defined(SAI1)
|
||||
#define GPIO_AF2_SAI1 ((uint8_t)0x02) /* SAI1 Alternate Function mapping */
|
||||
#endif /* SAI1 */
|
||||
#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */
|
||||
#if defined(TIM4)
|
||||
#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */
|
||||
#endif /* TIM4 */
|
||||
#if defined(TIM5)
|
||||
#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */
|
||||
#endif /* TIM5 */
|
||||
#if (defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF2_TIM8 ((uint8_t)0x02) /* TIM8 Alternate Function mapping */
|
||||
#endif /* STM32H533xx || STM32H523xx */
|
||||
#if defined(TIM12)
|
||||
#define GPIO_AF2_TIM12 ((uint8_t)0x02) /* TIM12 Alternate Function mapping */
|
||||
#endif /* TIM12 */
|
||||
#if defined(TIM15)
|
||||
#define GPIO_AF2_TIM15 ((uint8_t)0x02) /* TIM15 Alternate Function mapping */
|
||||
#endif /* TIM15 */
|
||||
|
||||
/**
|
||||
* @brief AF 3 selection
|
||||
*/
|
||||
#define GPIO_AF3_I3C1 ((uint8_t)0x03) /* I3C1 Alternate Function mapping */
|
||||
#if defined(I3C2)
|
||||
#define GPIO_AF3_I3C2 ((uint8_t)0x03) /* I3C2 Alternate Function mapping */
|
||||
#endif /* I3C2 */
|
||||
#define GPIO_AF3_LPTIM2 ((uint8_t)0x03) /* LPTIM2 Alternate Function mapping */
|
||||
#if defined(LPTIM3)
|
||||
#define GPIO_AF3_LPTIM3 ((uint8_t)0x03) /* LPTIM3 Alternate Function mapping */
|
||||
#endif /* LPTIM3 */
|
||||
#define GPIO_AF3_LPUART1 ((uint8_t)0x03) /* LPUART1 Alternate Function mapping */
|
||||
#if defined(OCTOSPI1)
|
||||
#define GPIO_AF3_OCTOSPI1 ((uint8_t)0x03) /* OCTOSPI1 Alternate Function mapping */
|
||||
#endif /* OCTOSPI1 */
|
||||
#if !defined(STM32H503xx)
|
||||
#define GPIO_AF3_TIM1 ((uint8_t)0x03) /* TIM1 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
#if defined(TIM8)
|
||||
#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */
|
||||
#endif /* TIM8 */
|
||||
|
||||
/**
|
||||
* @brief AF 4 selection
|
||||
*/
|
||||
#if defined(CEC)
|
||||
#define GPIO_AF4_CEC ((uint8_t)0x04) /* CEC Alternate Function mapping */
|
||||
#endif /* CEC */
|
||||
#if defined(DCMI)
|
||||
#define GPIO_AF4_DCMI ((uint8_t)0x04) /* DCMI Alternate Function mapping */
|
||||
#endif /* DCMI */
|
||||
#if defined(PSSI)
|
||||
#define GPIO_AF4_PSSI ((uint8_t)0x04) /* PSSI Alternate Function mapping */
|
||||
#endif /* PSSI */
|
||||
#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */
|
||||
#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */
|
||||
#if defined(I2C3)
|
||||
#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */
|
||||
#endif /* I2C3 */
|
||||
#if defined(I2C4)
|
||||
#define GPIO_AF4_I2C4 ((uint8_t)0x04) /* I2C4 Alternate Function mapping */
|
||||
#endif /* I2C4 */
|
||||
#define GPIO_AF4_LPTIM1 ((uint8_t)0x04) /* LPTIM1 Alternate Function mapping */
|
||||
#define GPIO_AF4_LPTIM2 ((uint8_t)0x04) /* LPTIM2 Alternate Function mapping */
|
||||
#define GPIO_AF4_SPI1 ((uint8_t)0x04) /* SPI1 Alternate Function mapping */
|
||||
#if (defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF4_SPI3 ((uint8_t)0x04) /* SPI3 Alternate Function mapping */
|
||||
#endif /* STM32H533xx || STM32H523xx */
|
||||
#if defined(TIM15)
|
||||
#define GPIO_AF4_TIM15 ((uint8_t)0x04) /* TIM15 Alternate Function mapping */
|
||||
#endif /* TIM15 */
|
||||
#define GPIO_AF4_USART1 ((uint8_t)0x04) /* USART1 Alternate Function mapping */
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF4_USART2 ((uint8_t)0x04) /* USART2 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
|
||||
/**
|
||||
* @brief AF 5 selection
|
||||
*/
|
||||
#if defined(CEC)
|
||||
#define GPIO_AF5_CEC ((uint8_t)0x05) /* CEC Alternate Function mapping */
|
||||
#endif /* CEC */
|
||||
#if !defined(STM32H503xx)
|
||||
#define GPIO_AF5_I3C1 ((uint8_t)0x05) /* I3C1 Alternate Function mapping */
|
||||
#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
#define GPIO_AF5_LPTIM1 ((uint8_t)0x05) /* LPTIM1 Alternate Function mapping */
|
||||
#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */
|
||||
#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2 Alternate Function mapping */
|
||||
#if defined(SPI4)
|
||||
#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */
|
||||
#endif /* SPI4 */
|
||||
#if defined(SPI5)
|
||||
#define GPIO_AF5_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */
|
||||
#endif /* SPI5 */
|
||||
#if defined(SPI6)
|
||||
#define GPIO_AF5_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */
|
||||
#endif /* SPI6 */
|
||||
|
||||
/**
|
||||
* @brief AF 6 selection
|
||||
*/
|
||||
#if defined(I2C4)
|
||||
#define GPIO_AF6_I2C4 ((uint8_t)0x06) /* I2C4 Alternate Function mapping */
|
||||
#endif /* I2C4 */
|
||||
#if defined(OCTOSPI1)
|
||||
#define GPIO_AF6_OCTOSPI1 ((uint8_t)0x06) /* OCTOSPI1 Alternate Function mapping */
|
||||
#endif /* OCTOSPI1 */
|
||||
#if defined(SAI1)
|
||||
#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */
|
||||
#endif /* SAI1 */
|
||||
#if (defined(STM32H503xx) || defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF6_SPI1 ((uint8_t)0x06) /* SPI1 Alternate Function mapping */
|
||||
#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* SPI2 Alternate Function mapping */
|
||||
#endif /* STM32H503xx || STM32H533xx || STM32H523xx */
|
||||
#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3 Alternate Function mapping */
|
||||
#if defined(SPI4)
|
||||
#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4 Alternate Function mapping */
|
||||
#endif /* SPI4 */
|
||||
#if defined(UART4)
|
||||
#define GPIO_AF6_UART4 ((uint8_t)0x06) /* UART4 Alternate Function mapping */
|
||||
#endif /* UART4 */
|
||||
#if (defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF6_USART6 ((uint8_t)0x06) /* USART6 Alternate Function mapping */
|
||||
#endif /* STM32H533xx || STM32H523xx */
|
||||
#if defined(UART12)
|
||||
#define GPIO_AF6_UART12 ((uint8_t)0x06) /* UART12 Alternate Function mapping */
|
||||
#endif /* UART12 */
|
||||
#if defined(USART10)
|
||||
#define GPIO_AF6_USART10 ((uint8_t)0x06) /* USART10 Alternate Function mapping */
|
||||
#endif /* USART10 */
|
||||
#if defined(UCPD1)
|
||||
#define GPIO_AF6_UCPD1 ((uint8_t)0x06) /* UCPD1 Alternate Function mapping */
|
||||
#endif /* UCPD1 */
|
||||
|
||||
/**
|
||||
* @brief AF 7 selection
|
||||
*/
|
||||
#if defined(SDMMC1)
|
||||
#define GPIO_AF7_SDMMC1 ((uint8_t)0x07) /* SDMMC1 Alternate Function mapping */
|
||||
#endif /* SDMMC1 */
|
||||
#define GPIO_AF7_SPI2 ((uint8_t)0x07) /* SPI2 Alternate Function mapping */
|
||||
#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3 Alternate Function mapping */
|
||||
#if defined(SPI6)
|
||||
#define GPIO_AF7_SPI6 ((uint8_t)0x07) /* SPI6 Alternate Function mapping */
|
||||
#endif /* SPI6 */
|
||||
#if defined(UART7)
|
||||
#define GPIO_AF7_UART7 ((uint8_t)0x07) /* UART7 Alternate Function mapping */
|
||||
#endif /* UART7 */
|
||||
#if defined(UART8)
|
||||
#define GPIO_AF7_UART8 ((uint8_t)0x07) /* UART8 Alternate Function mapping */
|
||||
#endif /* UART8 */
|
||||
#if defined(UART12)
|
||||
#define GPIO_AF7_UART12 ((uint8_t)0x07) /* UART12 Alternate Function mapping */
|
||||
#endif /* UART12 */
|
||||
#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */
|
||||
#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */
|
||||
#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */
|
||||
#if defined(USART6)
|
||||
#define GPIO_AF7_USART6 ((uint8_t)0x07) /* USART6 Alternate Function mapping */
|
||||
#endif /* USART6 */
|
||||
#if defined(USART10)
|
||||
#define GPIO_AF7_USART10 ((uint8_t)0x07) /* USART10 Alternate Function mapping */
|
||||
#endif /* USART10 */
|
||||
#if defined(USART11)
|
||||
#define GPIO_AF7_USART11 ((uint8_t)0x07) /* USART11 Alternate Function mapping */
|
||||
#endif /* USART11 */
|
||||
|
||||
/**
|
||||
* @brief AF 8 selection
|
||||
*/
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF8_I2C2 ((uint8_t)0x08) /* I2C2 Alternate Function mapping */
|
||||
#define GPIO_AF8_I3C1 ((uint8_t)0x08) /* I3C1 Alternate Function mapping */
|
||||
#define GPIO_AF8_USART1 ((uint8_t)0x08) /* USART1 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
#define GPIO_AF8_LPUART1 ((uint8_t)0x08) /* LPUART1 Alternate Function mapping */
|
||||
#if defined(SAI2)
|
||||
#define GPIO_AF8_SAI2 ((uint8_t)0x08) /* SAI2 Alternate Function mapping */
|
||||
#endif /* SAI2 */
|
||||
#if defined(SDMMC1)
|
||||
#define GPIO_AF8_SDMMC1 ((uint8_t)0x08) /* SDMMC1 Alternate Function mapping */
|
||||
#endif /* SDMMC1 */
|
||||
#if defined(SPI6)
|
||||
#define GPIO_AF8_SPI6 ((uint8_t)0x08) /* SPI6 Alternate Function mapping */
|
||||
#endif /* SPI6 */
|
||||
#if defined(UART4)
|
||||
#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */
|
||||
#endif /* UART4 */
|
||||
#if defined(UART5)
|
||||
#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */
|
||||
#endif /* UART5 */
|
||||
#if defined(UART8)
|
||||
#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */
|
||||
#endif /* UART8 */
|
||||
|
||||
/**
|
||||
* @brief AF 9 selection
|
||||
*/
|
||||
#define GPIO_AF9_FDCAN1 ((uint8_t)0x09) /* FDCAN1 Alternate Function mapping */
|
||||
#if defined(FDCAN2)
|
||||
#define GPIO_AF9_FDCAN2 ((uint8_t)0x09) /* FDCAN2 Alternate Function mapping */
|
||||
#endif /* FDCAN2 */
|
||||
#if defined(FMC_BANK1)
|
||||
#define GPIO_AF9_FMC ((uint8_t)0x09) /* FMC Alternate Function mapping */
|
||||
#endif /* FMC_BANK1 */
|
||||
#if defined(OCTOSPI1)
|
||||
#define GPIO_AF9_OCTOSPI1 ((uint8_t)0x09) /* OCTOSPI1 Alternate Function mapping */
|
||||
#endif /* OCTOSPI1 */
|
||||
#if defined(SDMMC2)
|
||||
#define GPIO_AF9_SDMMC2 ((uint8_t)0x09) /* SDMMC2 Alternate Function mapping */
|
||||
#endif /* SDMMC2 */
|
||||
#if defined(TIM13)
|
||||
#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */
|
||||
#endif /* TIM13 */
|
||||
#if defined(TIM14)
|
||||
#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */
|
||||
#endif /* TIM14 */
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF9_USART2 ((uint8_t)0x09) /* USART2 Alternate Function mapping */
|
||||
#define GPIO_AF9_USART3 ((uint8_t)0x09) /* USART3 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
#if (defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */
|
||||
#define GPIO_AF9_I3C2 ((uint8_t)0x09) /* I3C2 Alternate Function mapping */
|
||||
#endif /* STM32H533xx || STM32H523xx */
|
||||
|
||||
/**
|
||||
* @brief AF 10 selection
|
||||
*/
|
||||
#define GPIO_AF10_CRS ((uint8_t)0x0A) /* CRS Alternate Function mapping */
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF10_I3C1 ((uint8_t)0x0A) /* I3C1 Alternate Function mapping */
|
||||
#define GPIO_AF10_SPI3 ((uint8_t)0x0A) /* SPI3 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
#if (defined(STM32H503xx) || defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF10_I3C2 ((uint8_t)0x0A) /* I3C2 Alternate Function mapping */
|
||||
#endif /* STM32H503xx || STM32H533xx || STM32H523xx */
|
||||
#if defined(FMC_BANK1)
|
||||
#define GPIO_AF10_FMC ((uint8_t)0x0A) /* FMC Alternate Function mapping */
|
||||
#endif /* FMC_BANK1 */
|
||||
#if defined(OCTOSPI1)
|
||||
#define GPIO_AF10_OCTOSPI1 ((uint8_t)0x0A) /* OCTOSPI1 Alternate Function mapping */
|
||||
#endif /* OCTOSPI1 */
|
||||
#if defined(SAI2)
|
||||
#define GPIO_AF10_SAI2 ((uint8_t)0x0A) /* SAI2 Alternate Function mapping */
|
||||
#endif /* SAI2 */
|
||||
#if (defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF10_SDMMC1 ((uint8_t)0x0A) /* SDMMC1 Alternate Function mapping */
|
||||
#endif /* STM32H533xx || STM32H523xx */
|
||||
#if defined(SDMMC2)
|
||||
#define GPIO_AF10_SDMMC2 ((uint8_t)0x0A) /* SDMMC2 Alternate Function mapping */
|
||||
#endif /* SDMMC2 */
|
||||
#if defined(TIM8)
|
||||
#define GPIO_AF10_TIM8 ((uint8_t)0x0A) /* TIM8 Alternate Function mapping */
|
||||
#endif /* TIM8 */
|
||||
#if defined(USB_DRD_FS)
|
||||
#define GPIO_AF10_USB ((uint8_t)0x0A) /* USB Alternate Function mapping */
|
||||
#endif /* USB_DRD_FS */
|
||||
#if defined(LTDC)
|
||||
#define GPIO_AF10_LTDC ((uint8_t)0x0A) /* LTDC Alternate Function mapping */
|
||||
#endif /* LTDC */
|
||||
|
||||
/**
|
||||
* @brief AF 11 selection
|
||||
*/
|
||||
#if defined(ETH)
|
||||
#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETH Alternate Function mapping */
|
||||
#endif /* ETH */
|
||||
#if defined(FMC_BANK1)
|
||||
#define GPIO_AF11_FMC ((uint8_t)0x0B) /* FMC Alternate Function mapping */
|
||||
#endif /* FMC_BANK1 */
|
||||
#if defined(OCTOSPI1)
|
||||
#define GPIO_AF11_OCTOSPI1 ((uint8_t)0x0B) /* OCTOSPI1 Alternate Function mapping */
|
||||
#endif /* OCTOSPI1 */
|
||||
#if (defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF11_SDMMC1 ((uint8_t)0x0B) /* SDMMC1 Alternate Function mapping */
|
||||
#endif /* STM32H533xx || STM32H523xx */
|
||||
#if defined(SDMMC2)
|
||||
#define GPIO_AF11_SDMMC2 ((uint8_t)0x0B) /* SDMMC2 Alternate Function mapping */
|
||||
#endif /* SDMMC2 */
|
||||
#if defined(UART7)
|
||||
#define GPIO_AF11_UART7 ((uint8_t)0x0B) /* UART7 Alternate Function mapping */
|
||||
#endif /* UART7 */
|
||||
#if defined(UART9)
|
||||
#define GPIO_AF11_UART9 ((uint8_t)0x0B) /* UART9 Alternate Function mapping */
|
||||
#endif /* UART9 */
|
||||
#if defined(UCPD1)
|
||||
#define GPIO_AF11_UCPD1 ((uint8_t)0x0B) /* UCPD1 Alternate Function mapping */
|
||||
#endif /* UCPD1 */
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF11_I2C1 ((uint8_t)0x0B) /* I2C1 Alternate Function mapping */
|
||||
#define GPIO_AF11_I2C2 ((uint8_t)0x0B) /* I2C2 Alternate Function mapping */
|
||||
#define GPIO_AF11_SPI2 ((uint8_t)0x0B) /* SPI2 Alternate Function mapping */
|
||||
#define GPIO_AF11_USART2 ((uint8_t)0x0B) /* USART2 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
|
||||
/**
|
||||
* @brief AF 12 selection
|
||||
*/
|
||||
#if defined(FMC_BANK1)
|
||||
#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */
|
||||
#endif /* FMC_BANK1 */
|
||||
#if defined(SDMMC1)
|
||||
#define GPIO_AF12_SDMMC1 ((uint8_t)0x0C) /* SDMMC1 Alternate Function mapping */
|
||||
#endif /* SDMMC1 */
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF12_COMP1 ((uint8_t)0x0C) /* COMP1 Alternate Function mapping */
|
||||
#define GPIO_AF12_SPI1 ((uint8_t)0x0C) /* SPI1 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
|
||||
/**
|
||||
* @brief AF 13 selection
|
||||
*/
|
||||
#if defined(DCMI)
|
||||
#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */
|
||||
#define GPIO_AF13_PSSI ((uint8_t)0x0D) /* PSSI Alternate Function mapping */
|
||||
#endif /* DCMI */
|
||||
#if defined(FMC_BANK1)
|
||||
#define GPIO_AF13_FMC ((uint8_t)0x0D) /* FMC Alternate Function mapping */
|
||||
#endif /* FMC_BANK1 */
|
||||
#if defined(LPTIM5)
|
||||
#define GPIO_AF13_LPTIM5 ((uint8_t)0x0D) /* LPTIM5 Alternate Function mapping */
|
||||
#endif /* LPTIM5 */
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF13_USART2 ((uint8_t)0x0D) /* USART2 Alternate Function mapping */
|
||||
#define GPIO_AF13_USART3 ((uint8_t)0x0D) /* USART3 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
|
||||
/**
|
||||
* @brief AF 14 selection
|
||||
*/
|
||||
#if defined(STM32H503xx)
|
||||
#define GPIO_AF14_LPTIM1 ((uint8_t)0x0E) /* LPTIM1 Alternate Function mapping */
|
||||
#define GPIO_AF14_LPTIM2 ((uint8_t)0x0E) /* LPTIM2 Alternate Function mapping */
|
||||
#define GPIO_AF14_TIM1 ((uint8_t)0x0E) /* TIM1 Alternate Function mapping */
|
||||
#define GPIO_AF14_TIM2 ((uint8_t)0x0E) /* TIM2 Alternate Function mapping */
|
||||
#define GPIO_AF14_TIM3 ((uint8_t)0x0E) /* TIM3 Alternate Function mapping */
|
||||
#endif /* STM32H503xx */
|
||||
#if defined(LPTIM3)
|
||||
#define GPIO_AF14_LPTIM3 ((uint8_t)0x0E) /* LPTIM3 Alternate Function mapping */
|
||||
#endif /* LPTIM3 */
|
||||
#if defined(LPTIM4)
|
||||
#define GPIO_AF14_LPTIM4 ((uint8_t)0x0E) /* LPTIM4 Alternate Function mapping */
|
||||
#endif /* LPTIM4 */
|
||||
#if defined(LPTIM5)
|
||||
#define GPIO_AF14_LPTIM5 ((uint8_t)0x0E) /* LPTIM5 Alternate Function mapping */
|
||||
#endif /* LPTIM5 */
|
||||
#if defined(LPTIM6)
|
||||
#define GPIO_AF14_LPTIM6 ((uint8_t)0x0E) /* LPTIM6 Alternate Function mapping */
|
||||
#endif /* LPTIM6 */
|
||||
#if defined(STM32H573xx) || defined(STM32H563xx) || defined(STM32H562xx) || defined(STM32H533xx) || defined(STM32H523xx)
|
||||
#define GPIO_AF14_TIM2 ((uint8_t)0x0E) /* TIM2 Alternate Function mapping */
|
||||
#endif /* STM32H573xx || STM32H563xx || STM32H562xx || STM32H533xx || STM32H523xx */
|
||||
#if defined(UART5)
|
||||
#define GPIO_AF14_UART5 ((uint8_t)0x0E) /* UART5 Alternate Function mapping */
|
||||
#endif /* UART5 */
|
||||
#if (defined(STM32H533xx) || defined(STM32H523xx))
|
||||
#define GPIO_AF14_USART6 ((uint8_t)0x0E) /* USART6 Alternate Function mapping */
|
||||
#endif /* STM32H533xx || STM32H523xx */
|
||||
|
||||
/**
|
||||
* @brief AF 15 selection
|
||||
*/
|
||||
#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */
|
||||
|
||||
#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x0F)
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/** @defgroup GPIOEx_Exported_Macros GPIOEx Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup GPIOEx_Get_Port_Index GPIOEx_Get Port Index
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/* GPIO_Peripheral_Memory_Mapping Peripheral Memory Mapping */
|
||||
|
||||
#if defined(STM32H573xx) || defined(STM32H563xx) || defined(STM32H562xx) || defined(STM32H533xx) || \
|
||||
defined(STM32H523xx) || defined(STM32H503xx)
|
||||
#define GPIO_GET_INDEX(__GPIOx__) (((uint32_t )(__GPIOx__) & (~GPIOA_BASE)) >> 10)
|
||||
#endif /* (defined(STM32H573xx) || defined(STM32H563xx) || defined(STM32H562xx) || defined(STM32H533xx) || \
|
||||
defined(STM32H523xx) || defined(STM32H503xx) */
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32H5xx_HAL_GPIO_EX_H */
|
||||
300
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_icache.h
Normal file
300
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_icache.h
Normal file
@@ -0,0 +1,300 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_icache.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of ICACHE HAL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion ------------------------------------*/
|
||||
#ifndef STM32H5xx_HAL_ICACHE_H
|
||||
#define STM32H5xx_HAL_ICACHE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes -----------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
#if defined(ICACHE)
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup ICACHE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types -----------------------------------------------------------*/
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
/** @defgroup ICACHE_Exported_Types ICACHE Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief HAL ICACHE region configuration structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t BaseAddress; /*!< Configures the Base address of Region i to be remapped */
|
||||
|
||||
uint32_t RemapAddress; /*!< Configures the Remap address of Region i to be remapped */
|
||||
|
||||
uint32_t Size; /*!< Configures the Region size.
|
||||
This parameter can be a value of @ref ICACHE_Region_Size */
|
||||
|
||||
uint32_t TrafficRoute; /*!< Selects the traffic route.
|
||||
This parameter can be a value of @ref ICACHE_Traffic_Route */
|
||||
|
||||
uint32_t OutputBurstType; /*!< Selects the output burst type.
|
||||
This parameter can be a value of @ref ICACHE_Output_Burst_Type */
|
||||
} ICACHE_RegionConfigTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
|
||||
/* Exported constants -------------------------------------------------------*/
|
||||
/** @defgroup ICACHE_Exported_Constants ICACHE Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_WaysSelection Ways selection
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_1WAY 0U /*!< 1-way cache (direct mapped cache) */
|
||||
#define ICACHE_2WAYS ICACHE_CR_WAYSEL /*!< 2-ways set associative cache (default) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_Monitor_Type Monitor type
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_MONITOR_HIT_MISS (ICACHE_CR_HITMEN | ICACHE_CR_MISSMEN) /*!< Hit & Miss monitoring */
|
||||
#define ICACHE_MONITOR_HIT ICACHE_CR_HITMEN /*!< Hit monitoring */
|
||||
#define ICACHE_MONITOR_MISS ICACHE_CR_MISSMEN /*!< Miss monitoring */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
/** @defgroup ICACHE_Region Remapped Region number
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_REGION_0 0U /*!< Region 0 */
|
||||
#define ICACHE_REGION_1 1U /*!< Region 1 */
|
||||
#define ICACHE_REGION_2 2U /*!< Region 2 */
|
||||
#define ICACHE_REGION_3 3U /*!< Region 3 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_Region_Size Remapped Region size
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_REGIONSIZE_2MB 1U /*!< Region size 2MB */
|
||||
#define ICACHE_REGIONSIZE_4MB 2U /*!< Region size 4MB */
|
||||
#define ICACHE_REGIONSIZE_8MB 3U /*!< Region size 8MB */
|
||||
#define ICACHE_REGIONSIZE_16MB 4U /*!< Region size 16MB */
|
||||
#define ICACHE_REGIONSIZE_32MB 5U /*!< Region size 32MB */
|
||||
#define ICACHE_REGIONSIZE_64MB 6U /*!< Region size 64MB */
|
||||
#define ICACHE_REGIONSIZE_128MB 7U /*!< Region size 128MB */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_Traffic_Route Remapped Traffic route
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_MASTER1_PORT 0U /*!< Master1 port */
|
||||
#define ICACHE_MASTER2_PORT ICACHE_CRRx_MSTSEL /*!< Master2 port */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_Output_Burst_Type Remapped Output burst type
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_OUTPUT_BURST_WRAP 0U /*!< WRAP */
|
||||
#define ICACHE_OUTPUT_BURST_INCR ICACHE_CRRx_HBURST /*!< INCR */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
|
||||
/** @defgroup ICACHE_Interrupts Interrupts
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_IT_BUSYEND ICACHE_IER_BSYENDIE /*!< Busy end interrupt */
|
||||
#define ICACHE_IT_ERROR ICACHE_IER_ERRIE /*!< Cache error interrupt */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_Flags Flags
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_FLAG_BUSY ICACHE_SR_BUSYF /*!< Busy flag */
|
||||
#define ICACHE_FLAG_BUSYEND ICACHE_SR_BSYENDF /*!< Busy end flag */
|
||||
#define ICACHE_FLAG_ERROR ICACHE_SR_ERRF /*!< Cache error flag */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macros ----------------------------------------------------------*/
|
||||
/** @defgroup ICACHE_Exported_Macros ICACHE Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_Flags_Interrupts_Management Flags and Interrupts Management
|
||||
* @brief macros to manage the specified ICACHE flags and interrupts.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @brief Enable ICACHE interrupts.
|
||||
* @param __INTERRUPT__ specifies the ICACHE interrupt sources to be enabled.
|
||||
* This parameter can be any combination of the following values:
|
||||
* @arg @ref ICACHE_IT_BUSYEND Busy end interrupt
|
||||
* @arg @ref ICACHE_IT_ERROR Cache error interrupt
|
||||
*/
|
||||
#define __HAL_ICACHE_ENABLE_IT(__INTERRUPT__) SET_BIT(ICACHE->IER, (__INTERRUPT__))
|
||||
|
||||
/** @brief Disable ICACHE interrupts.
|
||||
* @param __INTERRUPT__ specifies the ICACHE interrupt sources to be disabled.
|
||||
* This parameter can be any combination of the following values:
|
||||
* @arg @ref ICACHE_IT_BUSYEND Busy end interrupt
|
||||
* @arg @ref ICACHE_IT_ERROR Cache error interrupt
|
||||
*/
|
||||
#define __HAL_ICACHE_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(ICACHE->IER, (__INTERRUPT__))
|
||||
|
||||
/** @brief Check whether the specified ICACHE interrupt source is enabled or not.
|
||||
* @param __INTERRUPT__ specifies the ICACHE interrupt source to check.
|
||||
* This parameter can be any combination of the following values:
|
||||
* @arg @ref ICACHE_IT_BUSYEND Busy end interrupt
|
||||
* @arg @ref ICACHE_IT_ERROR Cache error interrupt
|
||||
* @retval The state of __INTERRUPT__ (0 or 1).
|
||||
*/
|
||||
#define __HAL_ICACHE_GET_IT_SOURCE(__INTERRUPT__) \
|
||||
((READ_BIT(ICACHE->IER, (__INTERRUPT__)) == (__INTERRUPT__)) ? 1U : 0U)
|
||||
|
||||
/** @brief Check whether the selected ICACHE flag is set or not.
|
||||
* @param __FLAG__ specifies the flag to check.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg @ref ICACHE_FLAG_BUSY Busy flag
|
||||
* @arg @ref ICACHE_FLAG_BUSYEND Busy end flag
|
||||
* @arg @ref ICACHE_FLAG_ERROR Cache error flag
|
||||
* @retval The state of __FLAG__ (0 or 1).
|
||||
*/
|
||||
#define __HAL_ICACHE_GET_FLAG(__FLAG__) ((READ_BIT(ICACHE->SR, (__FLAG__)) != 0U) ? 1U : 0U)
|
||||
|
||||
/** @brief Clear the selected ICACHE flags.
|
||||
* @param __FLAG__ specifies the ICACHE flags to clear.
|
||||
* This parameter can be any combination of the following values:
|
||||
* @arg @ref ICACHE_FLAG_BUSYEND Busy end flag
|
||||
* @arg @ref ICACHE_FLAG_ERROR Cache error flag
|
||||
*/
|
||||
#define __HAL_ICACHE_CLEAR_FLAG(__FLAG__) WRITE_REG(ICACHE->FCR, (__FLAG__))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported functions -------------------------------------------------------*/
|
||||
/** @addtogroup ICACHE_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup ICACHE_Exported_Functions_Group1
|
||||
* @brief Initialization and control functions
|
||||
* @{
|
||||
*/
|
||||
/* Peripheral Control functions **********************************************/
|
||||
HAL_StatusTypeDef HAL_ICACHE_Enable(void);
|
||||
HAL_StatusTypeDef HAL_ICACHE_Disable(void);
|
||||
uint32_t HAL_ICACHE_IsEnabled(void);
|
||||
HAL_StatusTypeDef HAL_ICACHE_ConfigAssociativityMode(uint32_t AssociativityMode);
|
||||
HAL_StatusTypeDef HAL_ICACHE_DeInit(void);
|
||||
|
||||
/******* Invalidate in blocking mode (Polling) */
|
||||
HAL_StatusTypeDef HAL_ICACHE_Invalidate(void);
|
||||
/******* Invalidate in non-blocking mode (Interrupt) */
|
||||
HAL_StatusTypeDef HAL_ICACHE_Invalidate_IT(void);
|
||||
/******* Wait for Invalidate complete in blocking mode (Polling) */
|
||||
HAL_StatusTypeDef HAL_ICACHE_WaitForInvalidateComplete(void);
|
||||
|
||||
/******* Performance instruction cache monitoring functions */
|
||||
HAL_StatusTypeDef HAL_ICACHE_Monitor_Start(uint32_t MonitorType);
|
||||
HAL_StatusTypeDef HAL_ICACHE_Monitor_Stop(uint32_t MonitorType);
|
||||
HAL_StatusTypeDef HAL_ICACHE_Monitor_Reset(uint32_t MonitorType);
|
||||
uint32_t HAL_ICACHE_Monitor_GetHitValue(void);
|
||||
uint32_t HAL_ICACHE_Monitor_GetMissValue(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup ICACHE_Exported_Functions_Group2
|
||||
* @brief IRQ and callback functions
|
||||
* @{
|
||||
*/
|
||||
/******* IRQHandler and Callbacks used in non-blocking mode (Interrupt) */
|
||||
void HAL_ICACHE_IRQHandler(void);
|
||||
void HAL_ICACHE_InvalidateCompleteCallback(void);
|
||||
void HAL_ICACHE_ErrorCallback(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
/** @addtogroup ICACHE_Exported_Functions_Group3
|
||||
* @brief Memory remapped regions functions
|
||||
* @{
|
||||
*/
|
||||
/******* Memory remapped regions functions */
|
||||
HAL_StatusTypeDef HAL_ICACHE_EnableRemapRegion(uint32_t Region, const ICACHE_RegionConfigTypeDef *const pRegionConfig);
|
||||
HAL_StatusTypeDef HAL_ICACHE_DisableRemapRegion(uint32_t Region);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* ICACHE */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32H5xx_HAL_ICACHE_H */
|
||||
695
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_pwr.h
Normal file
695
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_pwr.h
Normal file
@@ -0,0 +1,695 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_pwr.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of PWR HAL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32H5xx_HAL_PWR_H
|
||||
#define STM32H5xx_HAL_PWR_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup PWR
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWR_Exported_Types PWR Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief PWR PVD configuration structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t PVDLevel; /*!< Specifies the PVD detection level.
|
||||
This parameter can be a value of
|
||||
@ref PWR_PVD_Detection_Level. */
|
||||
|
||||
uint32_t Mode; /*!< Specifies the operating mode for the selected pins.
|
||||
This parameter can be a value of @ref PWR_PVD_Mode. */
|
||||
} PWR_PVDTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWR_Exported_Constants PWR Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_PVD_Detection_Level Programmable Voltage Detection Level
|
||||
* @{
|
||||
*/
|
||||
#define PWR_PVDLEVEL_0 0x00000000UL /*!< PVD threshold around 1.95 V */
|
||||
#define PWR_PVDLEVEL_1 (PWR_VMCR_PLS_0) /*!< PVD threshold around 2.1 V */
|
||||
#define PWR_PVDLEVEL_2 (PWR_VMCR_PLS_1) /*!< PVD threshold around 2.25 V */
|
||||
#define PWR_PVDLEVEL_3 (PWR_VMCR_PLS_0 | PWR_VMCR_PLS_1) /*!< PVD threshold around 2.4 V */
|
||||
#define PWR_PVDLEVEL_4 (PWR_VMCR_PLS_2) /*!< PVD threshold around 2.55 V */
|
||||
#define PWR_PVDLEVEL_5 (PWR_VMCR_PLS_0 | PWR_VMCR_PLS_2) /*!< PVD threshold around 2.7 V */
|
||||
#define PWR_PVDLEVEL_6 (PWR_VMCR_PLS_1 | PWR_VMCR_PLS_2) /*!< PVD threshold around 2.85 V */
|
||||
#define PWR_PVDLEVEL_7 (PWR_VMCR_PLS) /*!< External input analog voltage
|
||||
(compared internally to VREFINT) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_PVD_Mode PWR PVD Mode
|
||||
* @{
|
||||
*/
|
||||
#define PWR_PVD_MODE_NORMAL (0x00U) /*!< Basic Mode is used */
|
||||
#define PWR_PVD_MODE_IT_RISING (0x05U) /*!< External Interrupt Mode with Rising edge trigger detection */
|
||||
#define PWR_PVD_MODE_IT_FALLING (0x06U) /*!< External Interrupt Mode with Falling
|
||||
edge trigger detection */
|
||||
#define PWR_PVD_MODE_IT_RISING_FALLING (0x07U) /*!< External Interrupt Mode with Rising/Falling
|
||||
edge trigger detection */
|
||||
#define PWR_PVD_MODE_EVENT_RISING (0x09U) /*!< Event Mode with Rising edge trigger detection */
|
||||
#define PWR_PVD_MODE_EVENT_FALLING (0x0AU) /*!< Event Mode with Falling edge trigger detection */
|
||||
#define PWR_PVD_MODE_EVENT_RISING_FALLING (0x0BU) /*!< Event Mode with Rising/Falling edge trigger detection */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_Regulator_In_LowPower_Mode PWR Regulator State in SLEEP/STOP Mode
|
||||
* @{
|
||||
*/
|
||||
#define PWR_MAINREGULATOR_ON (0x00U) /*!< Main Regulator ON in Run Mode */
|
||||
#define PWR_LOWPOWERREGULATOR_ON (0x00U) /*!< Main Regulator ON in Low Power Mode */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_SLEEP_Mode_Entry PWR SLEEP Mode Entry
|
||||
* @{
|
||||
*/
|
||||
#define PWR_SLEEPENTRY_WFI (0x01U) /*!< Wait For Interruption instruction to enter Sleep mode */
|
||||
#define PWR_SLEEPENTRY_WFE (0x02U) /*!< Wait For Event instruction to enter Sleep mode */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_STOP_Mode_Entry PWR STOP Mode Entry
|
||||
* @{
|
||||
*/
|
||||
#define PWR_STOPENTRY_WFI (0x01U) /*!< Wait For Interruption instruction to enter Stop mode */
|
||||
#define PWR_STOPENTRY_WFE (0x02U) /*!< Wait For Event instruction to enter Stop mode */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_Flags PWR Flags
|
||||
* @{
|
||||
*/
|
||||
#define PWR_FLAG_STOPF (0x01U) /*!< STOP flag */
|
||||
#define PWR_FLAG_SBF (0x02U) /*!< STANDBY flag */
|
||||
#define PWR_FLAG_VOSRDY (0x03U) /*!< Voltage scaling ready flag */
|
||||
#define PWR_FLAG_ACTVOSRDY (0x04U) /*!< Currently applied VOS ready flag */
|
||||
#define PWR_FLAG_BRR (0x05U) /*!< Backup regulator ready flag */
|
||||
#define PWR_FLAG_VBATL (0x06U) /*!< Backup domain voltage level flag (versus low threshold) */
|
||||
#define PWR_FLAG_VBATH (0x07U) /*!< Backup domain voltage level flag (versus high threshold) */
|
||||
#define PWR_FLAG_TEMPL (0x08U) /*!< Temperature level flag (versus low threshold) */
|
||||
#define PWR_FLAG_TEMPH (0x09U) /*!< Temperature level flag (versus high threshold) */
|
||||
#define PWR_FLAG_AVDO (0x0AU) /*!< VDDA voltage detector output flag */
|
||||
#define PWR_FLAG_VDDIO2RDY (0x0BU) /*!< VDDIO2 voltage detector output flag */
|
||||
#define PWR_FLAG_PVDO (0x0CU) /*!< VDD voltage detector output flag */
|
||||
#define PWR_FLAG_USB33RDY (0x0DU) /*!< VDDUSB33 ready flag */
|
||||
|
||||
#define PWR_WAKEUP_FLAG1 (0x10U) /*!< Wake up line 1 flag */
|
||||
#define PWR_WAKEUP_FLAG2 (0x20U) /*!< Wake up line 2 flag */
|
||||
#define PWR_WAKEUP_FLAG3 (0x30U) /*!< Wake up line 3 flag */
|
||||
#define PWR_WAKEUP_FLAG4 (0x40U) /*!< Wake up line 4 flag */
|
||||
#define PWR_WAKEUP_FLAG5 (0x50U) /*!< Wake up line 5 flag */
|
||||
#define PWR_WAKEUP_FLAG6 (0x60U) /*!< Wake up line 6 flag */
|
||||
#define PWR_WAKEUP_FLAG7 (0x70U) /*!< Wake up line 7 flag */
|
||||
#define PWR_WAKEUP_FLAG8 (0x80U) /*!< Wake up line 8 flag */
|
||||
#define PWR_WAKEUP_ALL_FLAG (0x90U) /*!< Wakeup flag all */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_WakeUp_Pins PWREx Wake-Up Pins
|
||||
* @{
|
||||
*/
|
||||
/* High level and No pull (default configuration) */
|
||||
#define PWR_WAKEUP_PIN1 PWR_WUCR_WUPEN1
|
||||
#define PWR_WAKEUP_PIN2 PWR_WUCR_WUPEN2
|
||||
#define PWR_WAKEUP_PIN3 PWR_WUCR_WUPEN3
|
||||
#define PWR_WAKEUP_PIN4 PWR_WUCR_WUPEN4
|
||||
#define PWR_WAKEUP_PIN5 PWR_WUCR_WUPEN5
|
||||
#if defined (PWR_WUCR_WUPEN6)
|
||||
#define PWR_WAKEUP_PIN6 PWR_WUCR_WUPEN6
|
||||
#define PWR_WAKEUP_PIN7 PWR_WUCR_WUPEN7
|
||||
#define PWR_WAKEUP_PIN8 PWR_WUCR_WUPEN8
|
||||
#endif /* PWR_WUCR_WUPEN6 */
|
||||
|
||||
/* High level and No pull */
|
||||
#define PWR_WAKEUP_PIN1_HIGH PWR_WUCR_WUPEN1
|
||||
#define PWR_WAKEUP_PIN2_HIGH PWR_WUCR_WUPEN2
|
||||
#define PWR_WAKEUP_PIN3_HIGH PWR_WUCR_WUPEN3
|
||||
#define PWR_WAKEUP_PIN4_HIGH PWR_WUCR_WUPEN4
|
||||
#define PWR_WAKEUP_PIN5_HIGH PWR_WUCR_WUPEN5
|
||||
#if defined (PWR_WUCR_WUPEN6)
|
||||
#define PWR_WAKEUP_PIN6_HIGH PWR_WUCR_WUPEN6
|
||||
#define PWR_WAKEUP_PIN7_HIGH PWR_WUCR_WUPEN7
|
||||
#define PWR_WAKEUP_PIN8_HIGH PWR_WUCR_WUPEN8
|
||||
#endif /* PWR_WUCR_WUPEN6 */
|
||||
|
||||
/* Low level and No pull */
|
||||
#define PWR_WAKEUP_PIN1_LOW (PWR_WUCR_WUPP1 | PWR_WUCR_WUPEN1)
|
||||
#define PWR_WAKEUP_PIN2_LOW (PWR_WUCR_WUPP2 | PWR_WUCR_WUPEN2)
|
||||
#define PWR_WAKEUP_PIN3_LOW (PWR_WUCR_WUPP3 | PWR_WUCR_WUPEN3)
|
||||
#define PWR_WAKEUP_PIN4_LOW (PWR_WUCR_WUPP4 | PWR_WUCR_WUPEN4)
|
||||
#define PWR_WAKEUP_PIN5_LOW (PWR_WUCR_WUPP5 | PWR_WUCR_WUPEN5)
|
||||
#if defined (PWR_WUCR_WUPEN6)
|
||||
#define PWR_WAKEUP_PIN6_LOW (PWR_WUCR_WUPP6 | PWR_WUCR_WUPEN6)
|
||||
#define PWR_WAKEUP_PIN7_LOW (PWR_WUCR_WUPP7 | PWR_WUCR_WUPEN7)
|
||||
#define PWR_WAKEUP_PIN8_LOW (PWR_WUCR_WUPP8 | PWR_WUCR_WUPEN8)
|
||||
#endif /* PWR_WUCR_WUPEN6 */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_Items PWR Items
|
||||
* @{
|
||||
*/
|
||||
#if defined(PWR_SECCFGR_WUP1SEC)
|
||||
#define PWR_WKUP1 (PWR_SECCFGR_WUP1SEC) /*!< WUP1 secure protection */
|
||||
#define PWR_WKUP2 (PWR_SECCFGR_WUP2SEC) /*!< WUP2 secure protection */
|
||||
#define PWR_WKUP3 (PWR_SECCFGR_WUP3SEC) /*!< WUP3 secure protection */
|
||||
#define PWR_WKUP4 (PWR_SECCFGR_WUP4SEC) /*!< WUP4 secure protection */
|
||||
#define PWR_WKUP5 (PWR_SECCFGR_WUP5SEC) /*!< WUP5 secure protection */
|
||||
#define PWR_WKUP6 (PWR_SECCFGR_WUP6SEC) /*!< WUP6 secure protection */
|
||||
#define PWR_WKUP7 (PWR_SECCFGR_WUP7SEC) /*!< WUP7 secure protection */
|
||||
#define PWR_WKUP8 (PWR_SECCFGR_WUP8SEC) /*!< WUP8 secure protection */
|
||||
#define PWR_RET (PWR_SECCFGR_RETSEC) /*!< IO Retention secure protection */
|
||||
#define PWR_LPM (PWR_SECCFGR_LPMSEC) /*!< Low power modes secure protection */
|
||||
#define PWR_SCM (PWR_SECCFGR_SCMSEC) /*!< Voltage detection and monitoring secure protection */
|
||||
#define PWR_VB (PWR_SECCFGR_VBSEC) /*!< Backup domain secure protection */
|
||||
#define PWR_VUSB (PWR_SECCFGR_VUSBSEC) /*!< Voltage USB secure protection */
|
||||
#define PWR_ALL (PWR_WKUP1 | PWR_WKUP2 | PWR_WKUP3 | PWR_WKUP4 | \
|
||||
PWR_WKUP5 | PWR_WKUP6 | PWR_WKUP7 | PWR_WKUP8 | \
|
||||
PWR_LPM | PWR_SCM | PWR_VB | PWR_VUSB | \
|
||||
PWR_RET)
|
||||
#else
|
||||
#define PWR_ALL 0xFF /*!< Dummy Value */
|
||||
#endif /* PWR_SECCFGR_WUP1SEC */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_Attributes PWR Attributes
|
||||
* @brief PWR Privilege/NPrivilege and Secure/NSecure Attributes
|
||||
* @{
|
||||
*/
|
||||
#if defined(PWR_PRIVCFGR_NSPRIV)
|
||||
#define PWR_NSEC_PRIV (PWR_ITEM_ATTR_NSEC_PRIV_MASK | 0x01U) /*!< NSecure and Privileged attribute */
|
||||
#define PWR_NSEC_NPRIV (PWR_ITEM_ATTR_NSEC_PRIV_MASK) /*!< NSecure and NPrivileged attribute */
|
||||
#else
|
||||
#define PWR_PRIV (PWR_ITEM_ATTR_NSEC_PRIV_MASK | 0x01U) /*!< Privileged attribute */
|
||||
#define PWR_NPRIV (PWR_ITEM_ATTR_NSEC_PRIV_MASK) /*!< NPrivileged attribute */
|
||||
#endif /* PWR_PRIVCFGR_NSPRIV */
|
||||
#define PWR_SEC_PRIV (PWR_ITEM_ATTR_SEC_PRIV_MASK | 0x02U) /*!< Secure and Privileged attribute */
|
||||
#define PWR_SEC_NPRIV (PWR_ITEM_ATTR_SEC_PRIV_MASK) /*!< Secure and NPrivileged attribute */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macros -----------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWR_Exported_Macros PWR Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @brief Check PWR flags are set or not.
|
||||
* @param __FLAG__ : Specifies the flag to check.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg @ref PWR_FLAG_STOPF : Stop flag.
|
||||
* Indicates that the device was resumed from Stop mode.
|
||||
* @arg @ref PWR_FLAG_SBF : Standby flag.
|
||||
* Indicates that the device was resumed from Standby mode.
|
||||
* @arg @ref PWR_FLAG_VOSRDY : Voltage scaling ready flag.
|
||||
* Indicates that the Vcore level at or above VOS selected level.
|
||||
* @arg @ref PWR_FLAG_ACTVOSRDY : Currently applied VOS ready flag.
|
||||
* Indicates that Vcore is equal to the current
|
||||
* voltage scaling provided by ACTVOS.
|
||||
* @arg @ref PWR_FLAG_BRR : Backup regulator ready flag. This bit is not
|
||||
* reset when the device wakes up from STANDBY
|
||||
* mode or by a system reset or power-on reset.
|
||||
* @arg @ref PWR_FLAG_VBATL : Backup domain voltage level flag (versus low threshold).
|
||||
* Indicates the backup domain voltage
|
||||
* level is equal or above low threshold.
|
||||
* @arg @ref PWR_FLAG_VBATH : Backup domain voltage level flag (versus high threshold).
|
||||
* Indicates the backup domain voltage
|
||||
* level is equal or above high threshold.
|
||||
* @arg @ref PWR_FLAG_TEMPL : Temperature level flag (versus low threshold).
|
||||
* Indicates the temperature is equal or above low threshold.
|
||||
* @arg @ref PWR_FLAG_TEMPH : Temperature level flag (versus high threshold).
|
||||
* Indicates the temperature is equal or above high threshold.
|
||||
* @arg @ref PWR_FLAG_AVDO : Regulator selection flag.
|
||||
* Indicates the regulator selected.
|
||||
* @arg @ref PWR_FLAG_VDDIO2RDY : VDDIO2 ready flag (versus 0.9 V threshold).
|
||||
* Indicates that VDDIO2 is equal or above the threshold
|
||||
* of the VDDIO2 voltage monitor (around 0.9 V).
|
||||
* @arg @ref PWR_FLAG_PVDO : Voltage detector output flag.
|
||||
* Indicates that Vdd is equal or above
|
||||
* the PVD threshold selected by PVDLS.
|
||||
* @arg @ref PWR_FLAG_USB33RDY : VDDUSB ready flag (versus 1.2 V threshold).
|
||||
* Indicates that VDDUSB is equal or above the threshold
|
||||
* of the VDDUSB voltage monitor (around 1.2 V).
|
||||
* @arg @ref PWR_WAKEUP_FLAG1 : Wakeup flag 1.
|
||||
* Indicates that a wakeup event was received from the WKUP line 1.
|
||||
* @arg @ref PWR_WAKEUP_FLAG2 : Wakeup flag 2.
|
||||
* Indicates that a wakeup event was received from the WKUP line 2.
|
||||
* @arg @ref PWR_WAKEUP_FLAG3 : Wakeup flag 3.
|
||||
* Indicates that a wakeup event was received from the WKUP line 3.
|
||||
* @arg @ref PWR_WAKEUP_FLAG4 : Wakeup flag 4.
|
||||
* Indicates that a wakeup event was received from the WKUP line 4.
|
||||
* @arg @ref PWR_WAKEUP_FLAG5 : Wakeup flag 5.
|
||||
* Indicates that a wakeup event was received from the WKUP line 5.
|
||||
* @arg @ref PWR_WAKEUP_FLAG6 : Wakeup flag 6.
|
||||
* Indicates that a wakeup event was received from the WKUP line 6.
|
||||
* @arg @ref PWR_WAKEUP_FLAG7 : Wakeup flag 7.
|
||||
* Indicates that a wakeup event was received from the WKUP line 7.
|
||||
* @arg @ref PWR_WAKEUP_FLAG8 : Wakeup flag 8.
|
||||
* Indicates that a wakeup event was received from the WKUP line 8.
|
||||
* @note The PWR_WAKEUP_FLAG6, PWR_WAKEUP_FLAG7 AND PWR_WAKEUP_FLAG8 are not available for STM32H503xx devices.
|
||||
* @retval The state of __FLAG__ (TRUE or FALSE).
|
||||
*/
|
||||
#if defined (PWR_WUSR_WUF6)
|
||||
#define __HAL_PWR_GET_FLAG(__FLAG__) \
|
||||
(((__FLAG__) == PWR_FLAG_STOPF) ? (READ_BIT(PWR->PMSR, PWR_PMSR_STOPF) == PWR_PMSR_STOPF) : \
|
||||
((__FLAG__) == PWR_FLAG_SBF) ? (READ_BIT(PWR->PMSR, PWR_PMSR_SBF) == PWR_PMSR_SBF) : \
|
||||
((__FLAG__) == PWR_FLAG_VOSRDY) ? (READ_BIT(PWR->VOSSR, PWR_VOSSR_VOSRDY) == PWR_VOSSR_VOSRDY) : \
|
||||
((__FLAG__) == PWR_FLAG_ACTVOSRDY) ? (READ_BIT(PWR->VOSSR, PWR_VOSSR_ACTVOSRDY) == PWR_VOSSR_ACTVOSRDY) : \
|
||||
((__FLAG__) == PWR_FLAG_BRR) ? (READ_BIT(PWR->BDSR, PWR_BDSR_BRRDY) == PWR_BDSR_BRRDY) : \
|
||||
((__FLAG__) == PWR_FLAG_VBATL) ? (READ_BIT(PWR->BDSR, PWR_BDSR_VBATL) == PWR_BDSR_VBATL) : \
|
||||
((__FLAG__) == PWR_FLAG_VBATH) ? (READ_BIT(PWR->BDSR, PWR_BDSR_VBATH) == PWR_BDSR_VBATH) : \
|
||||
((__FLAG__) == PWR_FLAG_TEMPL) ? (READ_BIT(PWR->BDSR, PWR_BDSR_TEMPL) == PWR_BDSR_TEMPL) : \
|
||||
((__FLAG__) == PWR_FLAG_TEMPH) ? (READ_BIT(PWR->BDSR, PWR_BDSR_TEMPH) == PWR_BDSR_TEMPH) : \
|
||||
((__FLAG__) == PWR_FLAG_AVDO) ? (READ_BIT(PWR->VMSR, PWR_VMSR_AVDO) == PWR_VMSR_AVDO) : \
|
||||
((__FLAG__) == PWR_FLAG_VDDIO2RDY) ? (READ_BIT(PWR->VMSR, PWR_VMSR_VDDIO2RDY) == PWR_VMSR_VDDIO2RDY) : \
|
||||
((__FLAG__) == PWR_FLAG_PVDO) ? (READ_BIT(PWR->VMSR, PWR_VMSR_PVDO) == PWR_VMSR_PVDO) : \
|
||||
((__FLAG__) == PWR_FLAG_USB33RDY) ? (READ_BIT(PWR->VMSR, PWR_VMSR_USB33RDY) == PWR_VMSR_USB33RDY) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG1) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF1) == PWR_WUSR_WUF1) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG2) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF2) == PWR_WUSR_WUF2) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG3) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF3) == PWR_WUSR_WUF3) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG4) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF4) == PWR_WUSR_WUF4) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG5) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF5) == PWR_WUSR_WUF5) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG6) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF6) == PWR_WUSR_WUF6) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG7) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF7) == PWR_WUSR_WUF7) : \
|
||||
(READ_BIT(PWR->WUSR, PWR_WUSR_WUF8) == PWR_WUSR_WUF8))
|
||||
#else
|
||||
#define __HAL_PWR_GET_FLAG(__FLAG__) \
|
||||
(((__FLAG__) == PWR_FLAG_STOPF) ? (READ_BIT(PWR->PMSR, PWR_PMSR_STOPF) == PWR_PMSR_STOPF) : \
|
||||
((__FLAG__) == PWR_FLAG_SBF) ? (READ_BIT(PWR->PMSR, PWR_PMSR_SBF) == PWR_PMSR_SBF) : \
|
||||
((__FLAG__) == PWR_FLAG_VOSRDY) ? (READ_BIT(PWR->VOSSR, PWR_VOSSR_VOSRDY) == PWR_VOSSR_VOSRDY) : \
|
||||
((__FLAG__) == PWR_FLAG_ACTVOSRDY) ? (READ_BIT(PWR->VOSSR, PWR_VOSSR_ACTVOSRDY) == PWR_VOSSR_ACTVOSRDY) : \
|
||||
((__FLAG__) == PWR_FLAG_BRR) ? (READ_BIT(PWR->BDSR, PWR_BDSR_BRRDY) == PWR_BDSR_BRRDY) : \
|
||||
((__FLAG__) == PWR_FLAG_VBATL) ? (READ_BIT(PWR->BDSR, PWR_BDSR_VBATL) == PWR_BDSR_VBATL) : \
|
||||
((__FLAG__) == PWR_FLAG_VBATH) ? (READ_BIT(PWR->BDSR, PWR_BDSR_VBATH) == PWR_BDSR_VBATH) : \
|
||||
((__FLAG__) == PWR_FLAG_TEMPL) ? (READ_BIT(PWR->BDSR, PWR_BDSR_TEMPL) == PWR_BDSR_TEMPL) : \
|
||||
((__FLAG__) == PWR_FLAG_TEMPH) ? (READ_BIT(PWR->BDSR, PWR_BDSR_TEMPH) == PWR_BDSR_TEMPH) : \
|
||||
((__FLAG__) == PWR_FLAG_AVDO) ? (READ_BIT(PWR->VMSR, PWR_VMSR_AVDO) == PWR_VMSR_AVDO) : \
|
||||
((__FLAG__) == PWR_FLAG_VDDIO2RDY) ? (READ_BIT(PWR->VMSR, PWR_VMSR_VDDIO2RDY) == PWR_VMSR_VDDIO2RDY) : \
|
||||
((__FLAG__) == PWR_FLAG_PVDO) ? (READ_BIT(PWR->VMSR, PWR_VMSR_PVDO) == PWR_VMSR_PVDO) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG1) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF1) == PWR_WUSR_WUF1) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG2) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF2) == PWR_WUSR_WUF2) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG3) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF3) == PWR_WUSR_WUF3) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG4) ? (READ_BIT(PWR->WUSR, PWR_WUSR_WUF4) == PWR_WUSR_WUF4) : \
|
||||
(READ_BIT(PWR->WUSR, PWR_WUSR_WUF5) == PWR_WUSR_WUF5))
|
||||
#endif /* PWR_WUSR_WUF6 */
|
||||
|
||||
/** @brief Clear PWR flags.
|
||||
* @param __FLAG__ : Specifies the flag to clear.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg @ref PWR_FLAG_STOPF : STOP flag.
|
||||
* Indicates that the device was resumed from STOP mode.
|
||||
* @arg @ref PWR_FLAG_SBF : STANDBY flag.
|
||||
* Indicates that the device was resumed from STANDBY mode.
|
||||
* @arg @ref PWR_WAKEUP_FLAG1 : Wakeup flag 1.
|
||||
* Indicates that a wakeup event was received from the WKUP line 1.
|
||||
* @arg @ref PWR_WAKEUP_FLAG2 : Wakeup flag 2.
|
||||
* Indicates that a wakeup event was received from the WKUP line 2.
|
||||
* @arg @ref PWR_WAKEUP_FLAG3 : Wakeup flag 3.
|
||||
* Indicates that a wakeup event was received from the WKUP line 3.
|
||||
* @arg @ref PWR_WAKEUP_FLAG4 : Wakeup flag 4.
|
||||
* Indicates that a wakeup event was received from the WKUP line 4.
|
||||
* @arg @ref PWR_WAKEUP_FLAG5 : Wakeup flag 5.
|
||||
* Indicates that a wakeup event was received from the WKUP line 5.
|
||||
* @arg @ref PWR_WAKEUP_FLAG6 : Wakeup flag 6.
|
||||
* Indicates that a wakeup event was received from the WKUP line 6.
|
||||
* @arg @ref PWR_WAKEUP_FLAG7 : Wakeup flag 7.
|
||||
* Indicates that a wakeup event was received from the WKUP line 7.
|
||||
* @arg @ref PWR_WAKEUP_FLAG8 : Wakeup flag 8.
|
||||
* Indicates that a wakeup event was received from the WKUP line 8.
|
||||
* @note The PWR_WAKEUP_FLAG6, PWR_WAKEUP_FLAG7 AND PWR_WAKEUP_FLAG8 are not available for STM32H503xx devices.
|
||||
* @retval None.
|
||||
*/
|
||||
#if defined (PWR_WUSCR_CWUF6)
|
||||
#define __HAL_PWR_CLEAR_FLAG(__FLAG__) \
|
||||
(((__FLAG__) == PWR_FLAG_STOPF) ? (SET_BIT(PWR->PMCR, PWR_PMCR_CSSF)) : \
|
||||
((__FLAG__) == PWR_FLAG_SBF) ? (SET_BIT(PWR->PMCR, PWR_PMCR_CSSF)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG1) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF1)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG2) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF2)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG3) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF3)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG4) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF4)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG5) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF5)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG6) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF6)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG7) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF7)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG8) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF8)) : \
|
||||
(SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF)))
|
||||
#else
|
||||
#define __HAL_PWR_CLEAR_FLAG(__FLAG__) \
|
||||
(((__FLAG__) == PWR_FLAG_STOPF) ? (SET_BIT(PWR->PMCR, PWR_PMCR_CSSF)) : \
|
||||
((__FLAG__) == PWR_FLAG_SBF) ? (SET_BIT(PWR->PMCR, PWR_PMCR_CSSF)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG1) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF1)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG2) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF2)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG3) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF3)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG4) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF4)) : \
|
||||
((__FLAG__) == PWR_WAKEUP_FLAG5) ? (SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF5)) : \
|
||||
(SET_BIT(PWR->WUSCR, PWR_WUSCR_CWUF)))
|
||||
#endif /* PWR_WUSCR_CWUF6 */
|
||||
|
||||
/**
|
||||
* @brief Enable the PVD Extended Interrupt Line.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Disable the PVD Extended Interrupt Line.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Enable the PVD Event Line.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Disable the PVD Event Line.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Enable the PVD Extended Interrupt Rising Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Disable the PVD Extended Interrupt Rising Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Enable the PVD Extended Interrupt Falling Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Disable the PVD Extended Interrupt Falling Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Enable the PVD Extended Interrupt Rising & Falling Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() \
|
||||
do \
|
||||
{ \
|
||||
__HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE(); \
|
||||
__HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); \
|
||||
} while(0)
|
||||
|
||||
/**
|
||||
* @brief Disable the PVD Extended Interrupt Rising & Falling Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() \
|
||||
do \
|
||||
{ \
|
||||
__HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE(); \
|
||||
__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); \
|
||||
} while(0)
|
||||
|
||||
/**
|
||||
* @brief Generate a Software Interrupt on selected EXTI line.
|
||||
* @retval None
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER1, PWR_EXTI_LINE_PVD)
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified PVD EXTI Rising interrupt flag is set or not.
|
||||
* @retval EXTI PVD Line Status.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_GET_RISING_FLAG() \
|
||||
((READ_BIT(EXTI->RPR1, PWR_EXTI_LINE_PVD) == PWR_EXTI_LINE_PVD) ? 1UL : 0UL)
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified PVD EXTI Falling interrupt flag is set or not.
|
||||
* @retval EXTI PVD Line Status.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_GET_FALLING_FLAG()\
|
||||
((READ_BIT(EXTI->FPR1, PWR_EXTI_LINE_PVD) == PWR_EXTI_LINE_PVD) ? 1UL : 0UL)
|
||||
|
||||
/**
|
||||
* @brief Clear the PVD EXTI Interrupt Rising flag.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_CLEAR_RISING_FLAG() WRITE_REG(EXTI->RPR1, PWR_EXTI_LINE_PVD);
|
||||
|
||||
/**
|
||||
* @brief Clear the PVD EXTI Interrupt Falling flag.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_CLEAR_FALLING_FLAG() WRITE_REG(EXTI->FPR1, PWR_EXTI_LINE_PVD);
|
||||
|
||||
/**
|
||||
* @brief Clear the PVD EXTI Interrupt flag.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() \
|
||||
do \
|
||||
{ \
|
||||
WRITE_REG(EXTI->RPR1, PWR_EXTI_LINE_PVD); \
|
||||
WRITE_REG(EXTI->FPR1, PWR_EXTI_LINE_PVD); \
|
||||
} while(0)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWR_Private_Constants PWR Private Constants
|
||||
* @{
|
||||
*/
|
||||
/* Define PVD extended interrupts and event line */
|
||||
#define PWR_EXTI_LINE_PVD EXTI_IMR1_IM16 /*!< PVD EXTI Line */
|
||||
|
||||
/* Defines wake up lines shift */
|
||||
#define PWR_EWUP_MASK (0x0FFF3F3FU)
|
||||
|
||||
/* Defines attribute */
|
||||
#define PWR_ITEM_ATTR_NSEC_PRIV_MASK (0x10U) /*!< NSecure Privilege / NPrivilege attribute item mask */
|
||||
#define PWR_ITEM_ATTR_SEC_PRIV_MASK (0x20U) /*!< Secure Privilege / NPrivilege attribute item mask */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWR_Private_Macros PWR Private Macros
|
||||
* @{
|
||||
*/
|
||||
#if defined(PWR_WUCR_WUPEN6)
|
||||
/* Check wake up pin parameter */
|
||||
#define IS_PWR_WAKEUP_PIN(PIN) \
|
||||
(((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN3) || ((PIN) == PWR_WAKEUP_PIN4) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN5) || ((PIN) == PWR_WAKEUP_PIN6) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN7) || ((PIN) == PWR_WAKEUP_PIN8) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN1_HIGH) || ((PIN) == PWR_WAKEUP_PIN2_HIGH) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN3_HIGH) || ((PIN) == PWR_WAKEUP_PIN4_HIGH) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN5_HIGH) || ((PIN) == PWR_WAKEUP_PIN6_HIGH) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN7_HIGH) || ((PIN) == PWR_WAKEUP_PIN8_HIGH) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN1_LOW) || ((PIN) == PWR_WAKEUP_PIN2_LOW) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN3_LOW) || ((PIN) == PWR_WAKEUP_PIN4_LOW) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN5_LOW) || ((PIN) == PWR_WAKEUP_PIN6_LOW) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN7_LOW) || ((PIN) == PWR_WAKEUP_PIN8_LOW))
|
||||
#else
|
||||
/* Check wake up pin parameter */
|
||||
#define IS_PWR_WAKEUP_PIN(PIN) \
|
||||
(((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN3) || ((PIN) == PWR_WAKEUP_PIN4) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN5) || ((PIN) == PWR_WAKEUP_PIN1_HIGH) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN2_HIGH) || ((PIN) == PWR_WAKEUP_PIN3_HIGH) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN4_HIGH) || ((PIN) == PWR_WAKEUP_PIN5_HIGH) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN1_LOW) || ((PIN) == PWR_WAKEUP_PIN2_LOW) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN3_LOW) || ((PIN) == PWR_WAKEUP_PIN4_LOW) ||\
|
||||
((PIN) == PWR_WAKEUP_PIN5_LOW))
|
||||
#endif /* PWR_WUCR_WUPEN6 */
|
||||
|
||||
/* PVD level check macro */
|
||||
#define IS_PWR_PVD_LEVEL(LEVEL) \
|
||||
(((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1) ||\
|
||||
((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3) ||\
|
||||
((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5) ||\
|
||||
((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7))
|
||||
|
||||
/* PVD mode check macro */
|
||||
#define IS_PWR_PVD_MODE(MODE) \
|
||||
(((MODE) == PWR_PVD_MODE_NORMAL) ||\
|
||||
((MODE) == PWR_PVD_MODE_IT_RISING) ||\
|
||||
((MODE) == PWR_PVD_MODE_IT_FALLING) ||\
|
||||
((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) ||\
|
||||
((MODE) == PWR_PVD_MODE_EVENT_RISING) ||\
|
||||
((MODE) == PWR_PVD_MODE_EVENT_FALLING) ||\
|
||||
((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING))
|
||||
|
||||
/* SLEEP mode entry check macro */
|
||||
#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE))
|
||||
|
||||
/* STOP mode entry check macro */
|
||||
#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE))
|
||||
|
||||
#if defined (PWR_SECCFGR_WUP1SEC)
|
||||
/* PWR items check macro */
|
||||
#define IS_PWR_ITEMS_ATTRIBUTES(ITEM) ((((ITEM) & (~PWR_ALL)) == 0U) && ((ITEM) != 0U))
|
||||
#endif /* PWR_SECCFGR_WUP1SEC */
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* PWR attribute check macro (Secure) */
|
||||
#define IS_PWR_ATTRIBUTES(ATTRIBUTES) \
|
||||
((((~(((ATTRIBUTES) & 0xF0U) >> 4U)) &((ATTRIBUTES) & 0x0FU)) == 0U) && (((ATTRIBUTES) & 0xFFFFFFCCU) == 0U))
|
||||
#elif defined(PWR_PRIVCFGR_NSPRIV)
|
||||
/* PWR attribute check macro (NSecure) */
|
||||
#define IS_PWR_ATTRIBUTES(ATTRIBUTES) (((ATTRIBUTES) == PWR_NSEC_NPRIV) || ((ATTRIBUTES) == PWR_NSEC_PRIV))
|
||||
#else
|
||||
/* PWR attribute check macro (NSecure) */
|
||||
#define IS_PWR_ATTRIBUTES(ATTRIBUTES) (((ATTRIBUTES) == PWR_NPRIV) || ((ATTRIBUTES) == PWR_PRIV))
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Include PWR HAL Extended module */
|
||||
#include "stm32h5xx_hal_pwr_ex.h"
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @addtogroup PWR_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup PWR_Exported_Functions_Group1
|
||||
* @{
|
||||
*/
|
||||
/* Initialization and de-initialization functions *****************************/
|
||||
void HAL_PWR_DeInit(void);
|
||||
void HAL_PWR_EnableBkUpAccess(void);
|
||||
void HAL_PWR_DisableBkUpAccess(void);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup PWR_Exported_Functions_Group2
|
||||
* @{
|
||||
*/
|
||||
/* Programmable voltage detector functions ************************************/
|
||||
HAL_StatusTypeDef HAL_PWR_ConfigPVD(const PWR_PVDTypeDef *sConfigPVD);
|
||||
void HAL_PWR_EnablePVD(void);
|
||||
void HAL_PWR_DisablePVD(void);
|
||||
|
||||
/* Wake up pins configuration functions ***************************************/
|
||||
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinPolarity);
|
||||
void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);
|
||||
|
||||
/* Low power modes configuration functions ************************************/
|
||||
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry);
|
||||
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);
|
||||
void HAL_PWR_EnterSTANDBYMode(void);
|
||||
|
||||
/* Sleep on exit and sev on pending configuration functions *******************/
|
||||
void HAL_PWR_EnableSleepOnExit(void);
|
||||
void HAL_PWR_DisableSleepOnExit(void);
|
||||
void HAL_PWR_EnableSEVOnPend(void);
|
||||
void HAL_PWR_DisableSEVOnPend(void);
|
||||
|
||||
/* Interrupt handler functions ************************************************/
|
||||
void HAL_PWR_PVD_IRQHandler(void);
|
||||
void HAL_PWR_PVDCallback(void);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup PWR_Exported_Functions_Group3
|
||||
* @{
|
||||
*/
|
||||
/* Privileges and security configuration functions ****************************/
|
||||
void HAL_PWR_ConfigAttributes(uint32_t Item, uint32_t Attributes);
|
||||
HAL_StatusTypeDef HAL_PWR_GetConfigAttributes(uint32_t Item, uint32_t *pAttributes);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* STM32H5xx_HAL_PWR_H */
|
||||
562
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_pwr_ex.h
Normal file
562
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_pwr_ex.h
Normal file
@@ -0,0 +1,562 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_pwr_ex.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of PWR HAL Extended module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32H5xx_HAL_PWR_EX_H
|
||||
#define STM32H5xx_HAL_PWR_EX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal_def.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup PWREx
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Types PWR Extended Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief PWREx AVD configuration structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t AVDLevel; /*!< AVDLevel: Specifies the AVD detection level. This
|
||||
parameter can be a value of @ref
|
||||
PWREx_AVD_detection_level
|
||||
*/
|
||||
|
||||
uint32_t Mode; /*!< Mode: Specifies the EXTI operating mode for the AVD
|
||||
event. This parameter can be a value of @ref
|
||||
PWREx_AVD_Mode.
|
||||
*/
|
||||
} PWREx_AVDTypeDef;
|
||||
|
||||
/**
|
||||
* @brief PWREx Wakeup pin configuration structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t WakeUpPin; /*!< WakeUpPin: Specifies the Wake-Up pin to be enabled.
|
||||
This parameter can be a value of @ref
|
||||
PWREx_WakeUp_Pins
|
||||
*/
|
||||
|
||||
uint32_t PinPolarity; /*!< PinPolarity: Specifies the Wake-Up pin polarity.
|
||||
This parameter can be a value of @ref
|
||||
PWREx_PIN_Polarity
|
||||
*/
|
||||
|
||||
uint32_t PinPull; /*!< PinPull: Specifies the Wake-Up pin pull. This
|
||||
parameter can be a value of @ref
|
||||
PWREx_PIN_Pull
|
||||
*/
|
||||
} PWREx_WakeupPinTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Constants PWR Extended Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_Supply_configuration PWREx Supply configuration
|
||||
* @{
|
||||
*/
|
||||
#define PWR_EXTERNAL_SOURCE_SUPPLY PWR_SCCR_BYPASS /*!< The SMPS disabled and the LDO Bypass. The Core domains
|
||||
are supplied from an external source */
|
||||
|
||||
#if defined (SMPS)
|
||||
#define PWR_SUPPLY_CONFIG_MASK (PWR_SCCR_SMPSEN | PWR_SCCR_LDOEN | PWR_SCCR_BYPASS)
|
||||
#else
|
||||
#define PWR_SUPPLY_CONFIG_MASK (PWR_SCCR_LDOEN | PWR_SCCR_BYPASS)
|
||||
#endif /* defined (SMPS) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_PIN_Polarity PWREx Pin Polarity configuration
|
||||
* @{
|
||||
*/
|
||||
#define PWR_PIN_POLARITY_HIGH (0x00000000U)
|
||||
#define PWR_PIN_POLARITY_LOW (0x00000001U)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_PIN_Pull PWREx Pin Pull configuration
|
||||
* @{
|
||||
*/
|
||||
#define PWR_PIN_NO_PULL (0x00000000U)
|
||||
#define PWR_PIN_PULL_UP (0x00000001U)
|
||||
#define PWR_PIN_PULL_DOWN (0x00000002U)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_AVD_detection_level PWREx AVD detection level
|
||||
* @{
|
||||
*/
|
||||
#define PWR_AVDLEVEL_0 (0x00000000U) /*!< Analog voltage detector level 0 selection : 1V7 */
|
||||
#define PWR_AVDLEVEL_1 PWR_VMCR_ALS_0 /*!< Analog voltage detector level 1 selection : 2V1 */
|
||||
#define PWR_AVDLEVEL_2 PWR_VMCR_ALS_1 /*!< Analog voltage detector level 2 selection : 2V5 */
|
||||
#define PWR_AVDLEVEL_3 PWR_VMCR_ALS /*!< Analog voltage detector level 3 selection : 2V8 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_AVD_Mode PWREx AVD Mode
|
||||
* @{
|
||||
*/
|
||||
#define PWR_AVD_MODE_NORMAL (0x00000000U)/*!< Basic mode is used */
|
||||
#define PWR_AVD_MODE_IT_RISING (0x00010001U)/*!< External Interrupt Mode with Rising edge trigger detection*/
|
||||
#define PWR_AVD_MODE_IT_FALLING (0x00010002U)/*!< External Interrupt Mode with
|
||||
Falling edge trigger detection */
|
||||
#define PWR_AVD_MODE_IT_RISING_FALLING (0x00010003U)/*!< External Interrupt Mode with
|
||||
Rising/Falling edge trigger detection */
|
||||
#define PWR_AVD_MODE_EVENT_RISING (0x00020001U)/*!< Event Mode with Rising edge trigger detection */
|
||||
#define PWR_AVD_MODE_EVENT_FALLING (0x00020002U)/*!< Event Mode with Falling edge trigger detection */
|
||||
#define PWR_AVD_MODE_EVENT_RISING_FALLING (0x00020003U)/*!< Event Mode with Rising/Falling edge trigger detection */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_Regulator_Voltage_Scale PWREx Regulator Voltage Scale
|
||||
* @{
|
||||
*/
|
||||
#define PWR_REGULATOR_VOLTAGE_SCALE0 PWR_VOSCR_VOS /*!< Voltage scaling range 0 */
|
||||
#define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_VOSCR_VOS_1 /*!< Voltage scaling range 1 */
|
||||
#define PWR_REGULATOR_VOLTAGE_SCALE2 PWR_VOSCR_VOS_0 /*!< Voltage scaling range 2 */
|
||||
#define PWR_REGULATOR_VOLTAGE_SCALE3 (0U) /*!< Voltage scaling range 3 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_System_Stop_Mode_Voltage_Scale PWREx System Stop Mode Voltage Scale
|
||||
* @{
|
||||
*/
|
||||
#define PWR_REGULATOR_SVOS_SCALE5 (PWR_PMCR_SVOS_0)
|
||||
#define PWR_REGULATOR_SVOS_SCALE4 (PWR_PMCR_SVOS_1)
|
||||
#define PWR_REGULATOR_SVOS_SCALE3 (PWR_PMCR_SVOS_0 | PWR_PMCR_SVOS_1)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_VBAT_Battery_Charging_Selection PWR Extended Battery Charging Resistor Selection
|
||||
* @{
|
||||
*/
|
||||
#define PWR_BATTERY_CHARGING_RESISTOR_5 (0U) /*!< VBAT charging through a 5 kOhms resistor */
|
||||
#define PWR_BATTERY_CHARGING_RESISTOR_1_5 PWR_BDCR_VBRS /*!< VBAT charging through a 1.5 kOhms resistor */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_Memory_Shut_Off Memory shut-off block selection
|
||||
* @{
|
||||
*/
|
||||
#define PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO /*!< RAM1 shut-off control in Stop mode */
|
||||
#if defined (PWR_PMCR_SRAM2_16SO)
|
||||
#define PWR_RAM2_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16SO /*!< RAM2 16k byte shut-off control in Stop mode */
|
||||
#define PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO /*!< RAM2 48k byte shut-off control in Stop mode */
|
||||
#elif defined (PWR_PMCR_SRAM2_16LSO)
|
||||
#define PWR_RAM2_LOW_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16LSO /*!< RAM2 low 16k byte shut-off control in Stop mode */
|
||||
#define PWR_RAM2_HIGH_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16HSO /*!< RAM2 High 16k byte shut-off control in Stop mode */
|
||||
#define PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO /*!< RAM2 48k byte shut-off control in Stop mode */
|
||||
#else
|
||||
#define PWR_RAM2_MEMORY_BLOCK PWR_PMCR_SRAM2SO /*!< RAM2 shut-off control in Stop mode */
|
||||
#endif /* PWR_PMCR_SRAM2_16SO */
|
||||
#if defined (PWR_PMCR_SRAM3SO)
|
||||
#define PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO /*!< RAM3 shut-off control in Stop mode */
|
||||
#endif /* PWR_PMCR_SRAM3SO */
|
||||
#if defined (PWR_PMCR_ETHERNETSO)
|
||||
#define PWR_ETHERNET_MEMORY_BLOCK PWR_PMCR_ETHERNETSO /*!< Ethernet shut-off control in Stop mode */
|
||||
#endif /* PWR_PMCR_ETHERNETSO */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_AVD_EXTI_Line PWREx AVD EXTI Line 16
|
||||
* @{
|
||||
*/
|
||||
#define PWR_EXTI_LINE_AVD EXTI_IMR1_IM16 /*!< External interrupt line 16
|
||||
Connected to the AVD EXTI Line */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macros -----------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Macros PWR Extended Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable the AVD EXTI Line 16.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Disable the AVD EXTI Line 16
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Enable event on AVD EXTI Line 16.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Disable event on AVD EXTI Line 16.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Enable the AVD Extended Interrupt Rising Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Disable the AVD Extended Interrupt Rising Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Enable the AVD Extended Interrupt Falling Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Disable the AVD Extended Interrupt Falling Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Enable the AVD Extended Interrupt Rising and Falling Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_ENABLE_RISING_FALLING_EDGE() \
|
||||
do { \
|
||||
__HAL_PWR_AVD_EXTI_ENABLE_RISING_EDGE(); \
|
||||
__HAL_PWR_AVD_EXTI_ENABLE_FALLING_EDGE(); \
|
||||
} while(0);
|
||||
|
||||
/**
|
||||
* @brief Disable the AVD Extended Interrupt Rising & Falling Trigger.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_DISABLE_RISING_FALLING_EDGE() \
|
||||
do { \
|
||||
__HAL_PWR_AVD_EXTI_DISABLE_RISING_EDGE(); \
|
||||
__HAL_PWR_AVD_EXTI_DISABLE_FALLING_EDGE(); \
|
||||
} while(0);
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified AVD EXTI Rising interrupt flag is set or not.
|
||||
* @retval EXTI AVD Line Status.
|
||||
*/
|
||||
|
||||
#define __HAL_PWR_PVD_AVD_EXTI_GET_RISING_FLAG() ((READ_BIT(EXTI->RPR1, PWR_EXTI_LINE_AVD)\
|
||||
== PWR_EXTI_LINE_AVD) ? 1UL : 0UL)
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified AVD EXTI Falling interrupt flag is set or not.
|
||||
* @retval EXTI AVD Line Status.
|
||||
*/
|
||||
|
||||
#define __HAL_PWR_PVD_AVD_EXTI_GET_FALLING_FLAG() ((READ_BIT(EXTI->FPR1, PWR_EXTI_LINE_AVD)\
|
||||
== PWR_EXTI_LINE_AVD) ? 1UL : 0UL)
|
||||
|
||||
/**
|
||||
* @brief Clear the AVD EXTI flag.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_PVD_AVD_EXTI_CLEAR_FLAG() \
|
||||
do \
|
||||
{ \
|
||||
WRITE_REG(EXTI->RPR1, PWR_EXTI_LINE_AVD); \
|
||||
WRITE_REG(EXTI->FPR1, PWR_EXTI_LINE_AVD); \
|
||||
} while(0)
|
||||
|
||||
/**
|
||||
* @brief Generates a Software interrupt on AVD EXTI line.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_AVD_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER1, PWR_EXTI_LINE_AVD)
|
||||
|
||||
/**
|
||||
* @brief Configure the main internal regulator output voltage.
|
||||
* @note This macro is similar to HAL_PWREx_ControlVoltageScaling() API but
|
||||
* doesn't check whether or not VOSREADY flag is set. User may resort
|
||||
* to __HAL_PWR_GET_FLAG() macro to check VOSF bit state.
|
||||
* @param __REGULATOR__ : Specifies the regulator output voltage to achieve a
|
||||
* tradeoff between performance and power consumption.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg @ref PWR_REGULATOR_VOLTAGE_SCALE0 : Regulator voltage output scale 0.
|
||||
* Provides a typical output voltage at 1.2 V.
|
||||
* Used when system clock frequency is up to 160 MHz.
|
||||
* @arg @ref PWR_REGULATOR_VOLTAGE_SCALE1 : Regulator voltage output scale 1.
|
||||
* Provides a typical output voltage at 1.1 V.
|
||||
* Used when system clock frequency is up to 100 MHz.
|
||||
* @arg @ref PWR_REGULATOR_VOLTAGE_SCALE2 : Regulator voltage output scale 2.
|
||||
* Provides a typical output voltage at 1.0 V.
|
||||
* Used when system clock frequency is up to 50 MHz.
|
||||
* @arg @ref PWR_REGULATOR_VOLTAGE_SCALE3 : Regulator voltage output scale 3.
|
||||
* Provides a typical output voltage at 0.9 V.
|
||||
* Used when system clock frequency is up to 24 MHz.
|
||||
* @retval None.
|
||||
*/
|
||||
#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) \
|
||||
do \
|
||||
{ \
|
||||
__IO uint32_t tmpreg; \
|
||||
MODIFY_REG(PWR->VOSCR, PWR_VOSCR_VOS, (__REGULATOR__)); \
|
||||
/* Delay after an RCC peripheral clock enabling */ \
|
||||
tmpreg = READ_BIT(PWR->VOSCR, PWR_VOSCR_VOS); \
|
||||
UNUSED(tmpreg); \
|
||||
} while(0)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWREx_Private_Constants PWR Extended Private Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_AVD_Mode_Mask PWR Extended AVD Mode Mask
|
||||
* @{
|
||||
*/
|
||||
#define AVD_MODE_IT (0x00010000U)
|
||||
#define AVD_MODE_EVT (0x00020000U)
|
||||
#define AVD_RISING_EDGE (0x00000001U)
|
||||
#define AVD_FALLING_EDGE (0x00000002U)
|
||||
#define AVD_RISING_FALLING_EDGE (0x00000003U)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWREx_Private_Macros PWR Extended Private Macros
|
||||
* @{
|
||||
*/
|
||||
/* Check PWR regulator configuration parameter */
|
||||
#define IS_PWR_SUPPLY(PWR_SOURCE) ((PWR_SOURCE) == PWR_EXTERNAL_SOURCE_SUPPLY)
|
||||
|
||||
/* Check wake up pin polarity parameter */
|
||||
#define IS_PWR_WAKEUP_PIN_POLARITY(POLARITY) (((POLARITY) == PWR_PIN_POLARITY_HIGH) ||\
|
||||
((POLARITY) == PWR_PIN_POLARITY_LOW))
|
||||
|
||||
/* Check wake up pin pull configuration parameter */
|
||||
#define IS_PWR_WAKEUP_PIN_PULL(PULL) (((PULL) == PWR_PIN_NO_PULL) ||\
|
||||
((PULL) == PWR_PIN_PULL_UP) ||\
|
||||
((PULL) == PWR_PIN_PULL_DOWN))
|
||||
|
||||
/* Check wake up flag parameter */
|
||||
#define IS_PWR_WAKEUP_FLAG(FLAG) (((FLAG) == PWR_WAKEUP_FLAG1) ||\
|
||||
((FLAG) == PWR_WAKEUP_FLAG2) ||\
|
||||
((FLAG) == PWR_WAKEUP_FLAG3) ||\
|
||||
((FLAG) == PWR_WAKEUP_FLAG4) ||\
|
||||
((FLAG) == PWR_WAKEUP_FLAG5) ||\
|
||||
((FLAG) == PWR_WAKEUP_FLAG6) ||\
|
||||
((FLAG) == PWR_WAKEUP_FLAG_ALL))
|
||||
|
||||
/* Voltage scaling range check macro */
|
||||
#define IS_PWR_VOLTAGE_SCALING_RANGE(RANGE) (((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE0) ||\
|
||||
((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE1) ||\
|
||||
((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE2) ||\
|
||||
((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE3))
|
||||
|
||||
/* Check PWR regulator configuration in STOP mode parameter */
|
||||
#define IS_PWR_STOP_MODE_REGULATOR_VOLTAGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_SVOS_SCALE3) ||\
|
||||
((VOLTAGE) == PWR_REGULATOR_SVOS_SCALE4) ||\
|
||||
((VOLTAGE) == PWR_REGULATOR_SVOS_SCALE5))
|
||||
|
||||
/* Battery charging resistor selection check macro */
|
||||
#define IS_PWR_BATTERY_RESISTOR_SELECT(RESISTOR) (((RESISTOR) == PWR_BATTERY_CHARGING_RESISTOR_5) ||\
|
||||
((RESISTOR) == PWR_BATTERY_CHARGING_RESISTOR_1_5))
|
||||
|
||||
/* Check memory block parameter */
|
||||
#if defined (PWR_PMCR_SRAM2_16SO)
|
||||
#define IS_PWR_MEMORY_BLOCK(BLOCK) (((BLOCK) == PWR_ETHERNET_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM3_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM2_16_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM2_48_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM1_MEMORY_BLOCK))
|
||||
#elif defined (PWR_PMCR_SRAM2_16LSO)
|
||||
#define IS_PWR_MEMORY_BLOCK(BLOCK) (((BLOCK) == PWR_RAM3_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM2_LOW_16_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM2_HIGH_16_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM2_48_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM1_MEMORY_BLOCK))
|
||||
#else
|
||||
#define IS_PWR_MEMORY_BLOCK(BLOCK) (((BLOCK) == PWR_RAM2_MEMORY_BLOCK) || \
|
||||
((BLOCK) == PWR_RAM1_MEMORY_BLOCK))
|
||||
#endif /* PWR_PMCR_SRAM2_16SO */
|
||||
|
||||
/* Check wake up flag parameter */
|
||||
#define IS_PWR_AVD_LEVEL(LEVEL) (((LEVEL) == PWR_AVDLEVEL_0) ||\
|
||||
((LEVEL) == PWR_AVDLEVEL_1) ||\
|
||||
((LEVEL) == PWR_AVDLEVEL_2) ||\
|
||||
((LEVEL) == PWR_AVDLEVEL_3))
|
||||
|
||||
/* Check AVD mode parameter */
|
||||
#define IS_PWR_AVD_MODE(MODE) (((MODE) == PWR_AVD_MODE_IT_RISING) ||\
|
||||
((MODE) == PWR_AVD_MODE_IT_FALLING) ||\
|
||||
((MODE) == PWR_AVD_MODE_IT_RISING_FALLING) ||\
|
||||
((MODE) == PWR_AVD_MODE_EVENT_RISING) ||\
|
||||
((MODE) == PWR_AVD_MODE_EVENT_FALLING) ||\
|
||||
((MODE) == PWR_AVD_MODE_NORMAL) ||\
|
||||
((MODE) == PWR_AVD_MODE_EVENT_RISING_FALLING))
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup PWREx_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup PWREx_Exported_Functions_Group1
|
||||
* @{
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_PWREx_ConfigSupply(uint32_t SupplySource);
|
||||
uint32_t HAL_PWREx_GetSupplyConfig(void);
|
||||
HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling);
|
||||
uint32_t HAL_PWREx_GetVoltageRange(void);
|
||||
HAL_StatusTypeDef HAL_PWREx_ControlStopModeVoltageScaling(uint32_t VoltageScaling);
|
||||
uint32_t HAL_PWREx_GetStopModeVoltageRange(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup PWREx_Exported_Functions_Group2
|
||||
* @{
|
||||
*/
|
||||
void HAL_PWREx_ConfigAVD(const PWREx_AVDTypeDef *sConfigAVD);
|
||||
void HAL_PWREx_EnableAVD(void);
|
||||
void HAL_PWREx_DisableAVD(void);
|
||||
#if defined (PWR_USBSCR_USB33DEN)
|
||||
void HAL_PWREx_EnableUSBVoltageDetector(void);
|
||||
void HAL_PWREx_DisableUSBVoltageDetector(void);
|
||||
void HAL_PWREx_EnableVddUSB(void);
|
||||
void HAL_PWREx_DisableVddUSB(void);
|
||||
#endif /* PWR_USBSCR_USB33DEN */
|
||||
void HAL_PWREx_EnableMonitoring(void);
|
||||
void HAL_PWREx_DisableMonitoring(void);
|
||||
void HAL_PWREx_EnableUCPDStandbyMode(void);
|
||||
void HAL_PWREx_DisableUCPDStandbyMode(void);
|
||||
void HAL_PWREx_EnableUCPDDeadBattery(void);
|
||||
void HAL_PWREx_DisableUCPDDeadBattery(void);
|
||||
void HAL_PWREx_EnableBatteryCharging(uint32_t ResistorValue);
|
||||
void HAL_PWREx_DisableBatteryCharging(void);
|
||||
void HAL_PWREx_EnableAnalogBooster(void);
|
||||
void HAL_PWREx_DisableAnalogBooster(void);
|
||||
void HAL_PWREx_PVD_AVD_IRQHandler(void);
|
||||
void HAL_PWREx_PVD_AVD_Rising_Callback(void);
|
||||
void HAL_PWREx_PVD_AVD_Falling_Callback(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup PWREx_Exported_Functions_Group3
|
||||
* @{
|
||||
*/
|
||||
|
||||
void HAL_PWREx_EnableWakeUpPin(const PWREx_WakeupPinTypeDef *sPinParams);
|
||||
void HAL_PWREx_DisableWakeUpPin(uint32_t WakeUpPinx);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup PWREx_Exported_Functions_Group4
|
||||
* @{
|
||||
*/
|
||||
void HAL_PWREx_EnableFlashPowerDown(void);
|
||||
void HAL_PWREx_DisableFlashPowerDown(void);
|
||||
void HAL_PWREx_EnableMemoryShutOff(uint32_t MemoryBlock);
|
||||
void HAL_PWREx_DisableMemoryShutOff(uint32_t MemoryBlock);
|
||||
HAL_StatusTypeDef HAL_PWREx_EnableBkupRAMRetention(void);
|
||||
void HAL_PWREx_DisableBkupRAMRetention(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup PWREx_Exported_Functions_Group5
|
||||
* @{
|
||||
*/
|
||||
void HAL_PWREx_EnableStandbyIORetention(void);
|
||||
void HAL_PWREx_DisableStandbyIORetention(void);
|
||||
void HAL_PWREx_EnableStandbyJTAGIORetention(void);
|
||||
void HAL_PWREx_DisableStandbyJTAGIORetention(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
#endif /* STM32H5xx_HAL_PWR_EX_H */
|
||||
5174
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_rcc.h
Normal file
5174
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_rcc.h
Normal file
File diff suppressed because it is too large
Load Diff
3849
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_rcc_ex.h
Normal file
3849
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_rcc_ex.h
Normal file
File diff suppressed because it is too large
Load Diff
2537
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_tim.h
Normal file
2537
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_tim.h
Normal file
File diff suppressed because it is too large
Load Diff
1386
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_tim_ex.h
Normal file
1386
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_hal_tim_ex.h
Normal file
File diff suppressed because it is too large
Load Diff
2813
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_bus.h
Normal file
2813
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_bus.h
Normal file
File diff suppressed because it is too large
Load Diff
1388
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_cortex.h
Normal file
1388
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_cortex.h
Normal file
File diff suppressed because it is too large
Load Diff
797
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_crs.h
Normal file
797
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_crs.h
Normal file
@@ -0,0 +1,797 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_ll_crs.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of CRS LL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32H5xx_LL_CRS_H
|
||||
#define STM32H5xx_LL_CRS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_LL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(CRS)
|
||||
|
||||
/** @defgroup CRS_LL CRS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
/** @defgroup CRS_LL_Private_Constants CRS Private Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Defines used for the bit position in the register and perform offsets*/
|
||||
#define CRS_POSITION_TRIM (CRS_CR_TRIM_Pos) /* bit position in CR reg */
|
||||
#define CRS_POSITION_FECAP (CRS_ISR_FECAP_Pos) /* bit position in ISR reg */
|
||||
#define CRS_POSITION_FELIM (CRS_CFGR_FELIM_Pos) /* bit position in CFGR reg */
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/** @defgroup CRS_LL_Exported_Constants CRS Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EC_GET_FLAG Get Flags Defines
|
||||
* @brief Flags defines which can be used with LL_CRS_ReadReg function
|
||||
* @{
|
||||
*/
|
||||
#define LL_CRS_ISR_SYNCOKF CRS_ISR_SYNCOKF
|
||||
#define LL_CRS_ISR_SYNCWARNF CRS_ISR_SYNCWARNF
|
||||
#define LL_CRS_ISR_ERRF CRS_ISR_ERRF
|
||||
#define LL_CRS_ISR_ESYNCF CRS_ISR_ESYNCF
|
||||
#define LL_CRS_ISR_SYNCERR CRS_ISR_SYNCERR
|
||||
#define LL_CRS_ISR_SYNCMISS CRS_ISR_SYNCMISS
|
||||
#define LL_CRS_ISR_TRIMOVF CRS_ISR_TRIMOVF
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EC_IT IT Defines
|
||||
* @brief IT defines which can be used with LL_CRS_ReadReg and LL_CRS_WriteReg functions
|
||||
* @{
|
||||
*/
|
||||
#define LL_CRS_CR_SYNCOKIE CRS_CR_SYNCOKIE
|
||||
#define LL_CRS_CR_SYNCWARNIE CRS_CR_SYNCWARNIE
|
||||
#define LL_CRS_CR_ERRIE CRS_CR_ERRIE
|
||||
#define LL_CRS_CR_ESYNCIE CRS_CR_ESYNCIE
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EC_SYNC_DIV Synchronization Signal Divider
|
||||
* @{
|
||||
*/
|
||||
#define LL_CRS_SYNC_DIV_1 0x00000000U /*!< Synchro Signal not divided (default) */
|
||||
#define LL_CRS_SYNC_DIV_2 CRS_CFGR_SYNCDIV_0 /*!< Synchro Signal divided by 2 */
|
||||
#define LL_CRS_SYNC_DIV_4 CRS_CFGR_SYNCDIV_1 /*!< Synchro Signal divided by 4 */
|
||||
#define LL_CRS_SYNC_DIV_8 (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 8 */
|
||||
#define LL_CRS_SYNC_DIV_16 CRS_CFGR_SYNCDIV_2 /*!< Synchro Signal divided by 16 */
|
||||
#define LL_CRS_SYNC_DIV_32 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 32 */
|
||||
#define LL_CRS_SYNC_DIV_64 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_1) /*!< Synchro Signal divided by 64 */
|
||||
#define LL_CRS_SYNC_DIV_128 CRS_CFGR_SYNCDIV /*!< Synchro Signal divided by 128 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EC_SYNC_SOURCE Synchronization Signal Source
|
||||
* @{
|
||||
*/
|
||||
#define LL_CRS_SYNC_SOURCE_GPIO 0x00000000U /*!< Synchro Signal source GPIO */
|
||||
#define LL_CRS_SYNC_SOURCE_LSE CRS_CFGR_SYNCSRC_0 /*!< Synchro Signal source LSE */
|
||||
#define LL_CRS_SYNC_SOURCE_USB CRS_CFGR_SYNCSRC_1 /*!< Synchro Signal source USB SOF (default)*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EC_SYNC_POLARITY Synchronization Signal Polarity
|
||||
* @{
|
||||
*/
|
||||
#define LL_CRS_SYNC_POLARITY_RISING 0x00000000U /*!< Synchro Active on rising edge (default) */
|
||||
#define LL_CRS_SYNC_POLARITY_FALLING CRS_CFGR_SYNCPOL /*!< Synchro Active on falling edge */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EC_FREQERRORDIR Frequency Error Direction
|
||||
* @{
|
||||
*/
|
||||
#define LL_CRS_FREQ_ERROR_DIR_UP 0x00000000U /*!< Upcounting direction, the actual frequency is above the target */
|
||||
#define LL_CRS_FREQ_ERROR_DIR_DOWN CRS_ISR_FEDIR /*!< Downcounting direction, the actual frequency is below the target */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EC_DEFAULTVALUES Default Values
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Reset value of the RELOAD field
|
||||
* @note The reset value of the RELOAD field corresponds to a target frequency of 48 MHz
|
||||
* and a synchronization signal frequency of 1 kHz (SOF signal from USB)
|
||||
*/
|
||||
#define LL_CRS_RELOADVALUE_DEFAULT 0x0000BB7FU
|
||||
|
||||
/**
|
||||
* @brief Reset value of Frequency error limit.
|
||||
*/
|
||||
#define LL_CRS_ERRORLIMIT_DEFAULT 0x00000022U
|
||||
|
||||
/**
|
||||
* @brief Reset value of the HSI48 Calibration field
|
||||
* @note The default value is 32, which corresponds to the middle of the trimming interval.
|
||||
* The trimming step is specified in the product datasheet.
|
||||
* A higher TRIM value corresponds to a higher output frequency.
|
||||
*/
|
||||
#define LL_CRS_HSI48CALIBRATION_DEFAULT 0x00000020U
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/** @defgroup CRS_LL_Exported_Macros CRS Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EM_WRITE_READ Common Write and read registers Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Write a value in CRS register
|
||||
* @param __INSTANCE__ CRS Instance
|
||||
* @param __REG__ Register to be written
|
||||
* @param __VALUE__ Value to be written in the register
|
||||
* @retval None
|
||||
*/
|
||||
#define LL_CRS_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
|
||||
|
||||
/**
|
||||
* @brief Read a value in CRS register
|
||||
* @param __INSTANCE__ CRS Instance
|
||||
* @param __REG__ Register to be read
|
||||
* @retval Register value
|
||||
*/
|
||||
#define LL_CRS_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EM_Exported_Macros_Calculate_Reload Exported_Macros_Calculate_Reload
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Macro to calculate reload value to be set in CRS register according to target and sync frequencies
|
||||
* @note The RELOAD value should be selected according to the ratio between
|
||||
* the target frequency and the frequency of the synchronization source after
|
||||
* prescaling. It is then decreased by one in order to reach the expected
|
||||
* synchronization on the zero value. The formula is the following:
|
||||
* RELOAD = (fTARGET / fSYNC) -1
|
||||
* @param __FTARGET__ Target frequency (value in Hz)
|
||||
* @param __FSYNC__ Synchronization signal frequency (value in Hz)
|
||||
* @retval Reload value (in Hz)
|
||||
*/
|
||||
#define __LL_CRS_CALC_CALCULATE_RELOADVALUE(__FTARGET__, __FSYNC__) (((__FTARGET__) / (__FSYNC__)) - 1U)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
/** @defgroup CRS_LL_Exported_Functions CRS Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EF_Configuration Configuration
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable Frequency error counter
|
||||
* @note When this bit is set, the CRS_CFGR register is write-protected and cannot be modified
|
||||
* @rmtoll CR CEN LL_CRS_EnableFreqErrorCounter
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_EnableFreqErrorCounter(void)
|
||||
{
|
||||
SET_BIT(CRS->CR, CRS_CR_CEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable Frequency error counter
|
||||
* @rmtoll CR CEN LL_CRS_DisableFreqErrorCounter
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_DisableFreqErrorCounter(void)
|
||||
{
|
||||
CLEAR_BIT(CRS->CR, CRS_CR_CEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if Frequency error counter is enabled or not
|
||||
* @rmtoll CR CEN LL_CRS_IsEnabledFreqErrorCounter
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsEnabledFreqErrorCounter(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->CR, CRS_CR_CEN) == (CRS_CR_CEN)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable Automatic trimming counter
|
||||
* @rmtoll CR AUTOTRIMEN LL_CRS_EnableAutoTrimming
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_EnableAutoTrimming(void)
|
||||
{
|
||||
SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable Automatic trimming counter
|
||||
* @rmtoll CR AUTOTRIMEN LL_CRS_DisableAutoTrimming
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_DisableAutoTrimming(void)
|
||||
{
|
||||
CLEAR_BIT(CRS->CR, CRS_CR_AUTOTRIMEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if Automatic trimming is enabled or not
|
||||
* @rmtoll CR AUTOTRIMEN LL_CRS_IsEnabledAutoTrimming
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsEnabledAutoTrimming(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->CR, CRS_CR_AUTOTRIMEN) == (CRS_CR_AUTOTRIMEN)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set HSI48 oscillator smooth trimming
|
||||
* @note When the AUTOTRIMEN bit is set, this field is controlled by hardware and is read-only
|
||||
* @rmtoll CR TRIM LL_CRS_SetHSI48SmoothTrimming
|
||||
* @param Value a number between Min_Data = 0 and Max_Data = 63
|
||||
* @note Default value can be set thanks to @ref LL_CRS_HSI48CALIBRATION_DEFAULT
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_SetHSI48SmoothTrimming(uint32_t Value)
|
||||
{
|
||||
MODIFY_REG(CRS->CR, CRS_CR_TRIM, Value << CRS_POSITION_TRIM);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get HSI48 oscillator smooth trimming
|
||||
* @rmtoll CR TRIM LL_CRS_GetHSI48SmoothTrimming
|
||||
* @retval a number between Min_Data = 0 and Max_Data = 63
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_GetHSI48SmoothTrimming(void)
|
||||
{
|
||||
return (uint32_t)(READ_BIT(CRS->CR, CRS_CR_TRIM) >> CRS_POSITION_TRIM);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set counter reload value
|
||||
* @rmtoll CFGR RELOAD LL_CRS_SetReloadCounter
|
||||
* @param Value a number between Min_Data = 0 and Max_Data = 0xFFFF
|
||||
* @note Default value can be set thanks to @ref LL_CRS_RELOADVALUE_DEFAULT
|
||||
* Otherwise it can be calculated in using macro @ref __LL_CRS_CALC_CALCULATE_RELOADVALUE (_FTARGET_, _FSYNC_)
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_SetReloadCounter(uint32_t Value)
|
||||
{
|
||||
MODIFY_REG(CRS->CFGR, CRS_CFGR_RELOAD, Value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get counter reload value
|
||||
* @rmtoll CFGR RELOAD LL_CRS_GetReloadCounter
|
||||
* @retval a number between Min_Data = 0 and Max_Data = 0xFFFF
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_GetReloadCounter(void)
|
||||
{
|
||||
return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_RELOAD));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set frequency error limit
|
||||
* @rmtoll CFGR FELIM LL_CRS_SetFreqErrorLimit
|
||||
* @param Value a number between Min_Data = 0 and Max_Data = 255
|
||||
* @note Default value can be set thanks to @ref LL_CRS_ERRORLIMIT_DEFAULT
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_SetFreqErrorLimit(uint32_t Value)
|
||||
{
|
||||
MODIFY_REG(CRS->CFGR, CRS_CFGR_FELIM, Value << CRS_POSITION_FELIM);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get frequency error limit
|
||||
* @rmtoll CFGR FELIM LL_CRS_GetFreqErrorLimit
|
||||
* @retval A number between Min_Data = 0 and Max_Data = 255
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_GetFreqErrorLimit(void)
|
||||
{
|
||||
return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_FELIM) >> CRS_POSITION_FELIM);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set division factor for SYNC signal
|
||||
* @rmtoll CFGR SYNCDIV LL_CRS_SetSyncDivider
|
||||
* @param Divider This parameter can be one of the following values:
|
||||
* @arg @ref LL_CRS_SYNC_DIV_1
|
||||
* @arg @ref LL_CRS_SYNC_DIV_2
|
||||
* @arg @ref LL_CRS_SYNC_DIV_4
|
||||
* @arg @ref LL_CRS_SYNC_DIV_8
|
||||
* @arg @ref LL_CRS_SYNC_DIV_16
|
||||
* @arg @ref LL_CRS_SYNC_DIV_32
|
||||
* @arg @ref LL_CRS_SYNC_DIV_64
|
||||
* @arg @ref LL_CRS_SYNC_DIV_128
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_SetSyncDivider(uint32_t Divider)
|
||||
{
|
||||
MODIFY_REG(CRS->CFGR, CRS_CFGR_SYNCDIV, Divider);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get division factor for SYNC signal
|
||||
* @rmtoll CFGR SYNCDIV LL_CRS_GetSyncDivider
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_CRS_SYNC_DIV_1
|
||||
* @arg @ref LL_CRS_SYNC_DIV_2
|
||||
* @arg @ref LL_CRS_SYNC_DIV_4
|
||||
* @arg @ref LL_CRS_SYNC_DIV_8
|
||||
* @arg @ref LL_CRS_SYNC_DIV_16
|
||||
* @arg @ref LL_CRS_SYNC_DIV_32
|
||||
* @arg @ref LL_CRS_SYNC_DIV_64
|
||||
* @arg @ref LL_CRS_SYNC_DIV_128
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_GetSyncDivider(void)
|
||||
{
|
||||
return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_SYNCDIV));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set SYNC signal source
|
||||
* @rmtoll CFGR SYNCSRC LL_CRS_SetSyncSignalSource
|
||||
* @param Source This parameter can be one of the following values:
|
||||
* @arg @ref LL_CRS_SYNC_SOURCE_GPIO
|
||||
* @arg @ref LL_CRS_SYNC_SOURCE_LSE
|
||||
* @arg @ref LL_CRS_SYNC_SOURCE_USB
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_SetSyncSignalSource(uint32_t Source)
|
||||
{
|
||||
MODIFY_REG(CRS->CFGR, CRS_CFGR_SYNCSRC, Source);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get SYNC signal source
|
||||
* @rmtoll CFGR SYNCSRC LL_CRS_GetSyncSignalSource
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_CRS_SYNC_SOURCE_GPIO
|
||||
* @arg @ref LL_CRS_SYNC_SOURCE_LSE
|
||||
* @arg @ref LL_CRS_SYNC_SOURCE_USB
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_GetSyncSignalSource(void)
|
||||
{
|
||||
return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_SYNCSRC));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set input polarity for the SYNC signal source
|
||||
* @rmtoll CFGR SYNCPOL LL_CRS_SetSyncPolarity
|
||||
* @param Polarity This parameter can be one of the following values:
|
||||
* @arg @ref LL_CRS_SYNC_POLARITY_RISING
|
||||
* @arg @ref LL_CRS_SYNC_POLARITY_FALLING
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_SetSyncPolarity(uint32_t Polarity)
|
||||
{
|
||||
MODIFY_REG(CRS->CFGR, CRS_CFGR_SYNCPOL, Polarity);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get input polarity for the SYNC signal source
|
||||
* @rmtoll CFGR SYNCPOL LL_CRS_GetSyncPolarity
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_CRS_SYNC_POLARITY_RISING
|
||||
* @arg @ref LL_CRS_SYNC_POLARITY_FALLING
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_GetSyncPolarity(void)
|
||||
{
|
||||
return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_SYNCPOL));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configure CRS for the synchronization
|
||||
* @rmtoll CR TRIM LL_CRS_ConfigSynchronization\n
|
||||
* CFGR RELOAD LL_CRS_ConfigSynchronization\n
|
||||
* CFGR FELIM LL_CRS_ConfigSynchronization\n
|
||||
* CFGR SYNCDIV LL_CRS_ConfigSynchronization\n
|
||||
* CFGR SYNCSRC LL_CRS_ConfigSynchronization\n
|
||||
* CFGR SYNCPOL LL_CRS_ConfigSynchronization
|
||||
* @param HSI48CalibrationValue a number between Min_Data = 0 and Max_Data = 63
|
||||
* @param ErrorLimitValue a number between Min_Data = 0 and Max_Data = 0xFFFF
|
||||
* @param ReloadValue a number between Min_Data = 0 and Max_Data = 255
|
||||
* @param Settings This parameter can be a combination of the following values:
|
||||
* @arg @ref LL_CRS_SYNC_DIV_1 or @ref LL_CRS_SYNC_DIV_2 or @ref LL_CRS_SYNC_DIV_4 or @ref LL_CRS_SYNC_DIV_8
|
||||
* or @ref LL_CRS_SYNC_DIV_16 or @ref LL_CRS_SYNC_DIV_32 or @ref LL_CRS_SYNC_DIV_64
|
||||
* or @ref LL_CRS_SYNC_DIV_128
|
||||
* @arg @ref LL_CRS_SYNC_SOURCE_GPIO or @ref LL_CRS_SYNC_SOURCE_LSE or @ref LL_CRS_SYNC_SOURCE_USB
|
||||
* @arg @ref LL_CRS_SYNC_POLARITY_RISING or @ref LL_CRS_SYNC_POLARITY_FALLING
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_ConfigSynchronization(uint32_t HSI48CalibrationValue, uint32_t ErrorLimitValue,
|
||||
uint32_t ReloadValue, uint32_t Settings)
|
||||
{
|
||||
MODIFY_REG(CRS->CR, CRS_CR_TRIM, HSI48CalibrationValue);
|
||||
MODIFY_REG(CRS->CFGR,
|
||||
CRS_CFGR_RELOAD | CRS_CFGR_FELIM | CRS_CFGR_SYNCDIV | CRS_CFGR_SYNCSRC | CRS_CFGR_SYNCPOL,
|
||||
ReloadValue | (ErrorLimitValue << CRS_POSITION_FELIM) | Settings);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EF_CRS_Management CRS_Management
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Generate software SYNC event
|
||||
* @rmtoll CR SWSYNC LL_CRS_GenerateEvent_SWSYNC
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_GenerateEvent_SWSYNC(void)
|
||||
{
|
||||
SET_BIT(CRS->CR, CRS_CR_SWSYNC);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the frequency error direction latched in the time of the last
|
||||
* SYNC event
|
||||
* @rmtoll ISR FEDIR LL_CRS_GetFreqErrorDirection
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_CRS_FREQ_ERROR_DIR_UP
|
||||
* @arg @ref LL_CRS_FREQ_ERROR_DIR_DOWN
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_GetFreqErrorDirection(void)
|
||||
{
|
||||
return (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FEDIR));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the frequency error counter value latched in the time of the last SYNC event
|
||||
* @rmtoll ISR FECAP LL_CRS_GetFreqErrorCapture
|
||||
* @retval A number between Min_Data = 0x0000 and Max_Data = 0xFFFF
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_GetFreqErrorCapture(void)
|
||||
{
|
||||
return (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FECAP) >> CRS_POSITION_FECAP);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EF_FLAG_Management FLAG_Management
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Check if SYNC event OK signal occurred or not
|
||||
* @rmtoll ISR SYNCOKF LL_CRS_IsActiveFlag_SYNCOK
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_SYNCOK(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->ISR, CRS_ISR_SYNCOKF) == (CRS_ISR_SYNCOKF)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if SYNC warning signal occurred or not
|
||||
* @rmtoll ISR SYNCWARNF LL_CRS_IsActiveFlag_SYNCWARN
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_SYNCWARN(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->ISR, CRS_ISR_SYNCWARNF) == (CRS_ISR_SYNCWARNF)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if Synchronization or trimming error signal occurred or not
|
||||
* @rmtoll ISR ERRF LL_CRS_IsActiveFlag_ERR
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_ERR(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->ISR, CRS_ISR_ERRF) == (CRS_ISR_ERRF)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if Expected SYNC signal occurred or not
|
||||
* @rmtoll ISR ESYNCF LL_CRS_IsActiveFlag_ESYNC
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_ESYNC(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->ISR, CRS_ISR_ESYNCF) == (CRS_ISR_ESYNCF)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if SYNC error signal occurred or not
|
||||
* @rmtoll ISR SYNCERR LL_CRS_IsActiveFlag_SYNCERR
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_SYNCERR(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->ISR, CRS_ISR_SYNCERR) == (CRS_ISR_SYNCERR)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if SYNC missed error signal occurred or not
|
||||
* @rmtoll ISR SYNCMISS LL_CRS_IsActiveFlag_SYNCMISS
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_SYNCMISS(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->ISR, CRS_ISR_SYNCMISS) == (CRS_ISR_SYNCMISS)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if Trimming overflow or underflow occurred or not
|
||||
* @rmtoll ISR TRIMOVF LL_CRS_IsActiveFlag_TRIMOVF
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_TRIMOVF(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->ISR, CRS_ISR_TRIMOVF) == (CRS_ISR_TRIMOVF)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear the SYNC event OK flag
|
||||
* @rmtoll ICR SYNCOKC LL_CRS_ClearFlag_SYNCOK
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_ClearFlag_SYNCOK(void)
|
||||
{
|
||||
WRITE_REG(CRS->ICR, CRS_ICR_SYNCOKC);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear the SYNC warning flag
|
||||
* @rmtoll ICR SYNCWARNC LL_CRS_ClearFlag_SYNCWARN
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_ClearFlag_SYNCWARN(void)
|
||||
{
|
||||
WRITE_REG(CRS->ICR, CRS_ICR_SYNCWARNC);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear TRIMOVF, SYNCMISS and SYNCERR bits and consequently also
|
||||
* the ERR flag
|
||||
* @rmtoll ICR ERRC LL_CRS_ClearFlag_ERR
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_ClearFlag_ERR(void)
|
||||
{
|
||||
WRITE_REG(CRS->ICR, CRS_ICR_ERRC);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear Expected SYNC flag
|
||||
* @rmtoll ICR ESYNCC LL_CRS_ClearFlag_ESYNC
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_ClearFlag_ESYNC(void)
|
||||
{
|
||||
WRITE_REG(CRS->ICR, CRS_ICR_ESYNCC);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup CRS_LL_EF_IT_Management IT_Management
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable SYNC event OK interrupt
|
||||
* @rmtoll CR SYNCOKIE LL_CRS_EnableIT_SYNCOK
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_EnableIT_SYNCOK(void)
|
||||
{
|
||||
SET_BIT(CRS->CR, CRS_CR_SYNCOKIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable SYNC event OK interrupt
|
||||
* @rmtoll CR SYNCOKIE LL_CRS_DisableIT_SYNCOK
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_DisableIT_SYNCOK(void)
|
||||
{
|
||||
CLEAR_BIT(CRS->CR, CRS_CR_SYNCOKIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if SYNC event OK interrupt is enabled or not
|
||||
* @rmtoll CR SYNCOKIE LL_CRS_IsEnabledIT_SYNCOK
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsEnabledIT_SYNCOK(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->CR, CRS_CR_SYNCOKIE) == (CRS_CR_SYNCOKIE)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable SYNC warning interrupt
|
||||
* @rmtoll CR SYNCWARNIE LL_CRS_EnableIT_SYNCWARN
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_EnableIT_SYNCWARN(void)
|
||||
{
|
||||
SET_BIT(CRS->CR, CRS_CR_SYNCWARNIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable SYNC warning interrupt
|
||||
* @rmtoll CR SYNCWARNIE LL_CRS_DisableIT_SYNCWARN
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_DisableIT_SYNCWARN(void)
|
||||
{
|
||||
CLEAR_BIT(CRS->CR, CRS_CR_SYNCWARNIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if SYNC warning interrupt is enabled or not
|
||||
* @rmtoll CR SYNCWARNIE LL_CRS_IsEnabledIT_SYNCWARN
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsEnabledIT_SYNCWARN(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->CR, CRS_CR_SYNCWARNIE) == (CRS_CR_SYNCWARNIE)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable Synchronization or trimming error interrupt
|
||||
* @rmtoll CR ERRIE LL_CRS_EnableIT_ERR
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_EnableIT_ERR(void)
|
||||
{
|
||||
SET_BIT(CRS->CR, CRS_CR_ERRIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable Synchronization or trimming error interrupt
|
||||
* @rmtoll CR ERRIE LL_CRS_DisableIT_ERR
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_DisableIT_ERR(void)
|
||||
{
|
||||
CLEAR_BIT(CRS->CR, CRS_CR_ERRIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if Synchronization or trimming error interrupt is enabled or not
|
||||
* @rmtoll CR ERRIE LL_CRS_IsEnabledIT_ERR
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsEnabledIT_ERR(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->CR, CRS_CR_ERRIE) == (CRS_CR_ERRIE)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable Expected SYNC interrupt
|
||||
* @rmtoll CR ESYNCIE LL_CRS_EnableIT_ESYNC
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_EnableIT_ESYNC(void)
|
||||
{
|
||||
SET_BIT(CRS->CR, CRS_CR_ESYNCIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable Expected SYNC interrupt
|
||||
* @rmtoll CR ESYNCIE LL_CRS_DisableIT_ESYNC
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_CRS_DisableIT_ESYNC(void)
|
||||
{
|
||||
CLEAR_BIT(CRS->CR, CRS_CR_ESYNCIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if Expected SYNC interrupt is enabled or not
|
||||
* @rmtoll CR ESYNCIE LL_CRS_IsEnabledIT_ESYNC
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_CRS_IsEnabledIT_ESYNC(void)
|
||||
{
|
||||
return ((READ_BIT(CRS->CR, CRS_CR_ESYNCIE) == (CRS_CR_ESYNCIE)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(USE_FULL_LL_DRIVER)
|
||||
/** @defgroup CRS_LL_EF_Init Initialization and de-initialization functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
ErrorStatus LL_CRS_DeInit(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* USE_FULL_LL_DRIVER */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* defined(CRS) */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32H5xx_LL_CRS_H */
|
||||
|
||||
6345
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_dma.h
Normal file
6345
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_dma.h
Normal file
File diff suppressed because it is too large
Load Diff
2267
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_exti.h
Normal file
2267
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_exti.h
Normal file
File diff suppressed because it is too large
Load Diff
1181
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_gpio.h
Normal file
1181
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_gpio.h
Normal file
File diff suppressed because it is too large
Load Diff
788
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_icache.h
Normal file
788
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_icache.h
Normal file
@@ -0,0 +1,788 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_ll_icache.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of ICACHE LL module.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion ------------------------------------*/
|
||||
#ifndef STM32H5xx_LL_ICACHE_H
|
||||
#define STM32H5xx_LL_ICACHE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes -----------------------------------------------------------------*/
|
||||
#include "stm32h5xx.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_LL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(ICACHE)
|
||||
|
||||
/** @defgroup ICACHE_LL ICACHE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
/** @defgroup ICACHE_LL_REGION_CONFIG ICACHE Exported Configuration structure
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief LL ICACHE region configuration structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t BaseAddress; /*!< Configures the C-AHB base address to be remapped */
|
||||
|
||||
uint32_t RemapAddress; /*!< Configures the remap address to be remapped */
|
||||
|
||||
uint32_t Size; /*!< Configures the region size.
|
||||
This parameter can be a value of @ref ICACHE_LL_EC_Region_Size */
|
||||
|
||||
uint32_t TrafficRoute; /*!< Selects the traffic route.
|
||||
This parameter can be a value of @ref ICACHE_LL_EC_Traffic_Route */
|
||||
|
||||
uint32_t OutputBurstType; /*!< Selects the output burst type.
|
||||
This parameter can be a value of @ref ICACHE_LL_EC_Output_Burst_Type */
|
||||
} LL_ICACHE_RegionTypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
|
||||
/* Exported constants -------------------------------------------------------*/
|
||||
/** @defgroup ICACHE_LL_Exported_Constants ICACHE Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EC_WaysSelection Ways selection
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_1WAY 0U /*!< 1-way cache (direct mapped cache) */
|
||||
#define LL_ICACHE_2WAYS ICACHE_CR_WAYSEL /*!< 2-ways set associative cache (default) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EC_Monitor_Type Monitor type
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_MONITOR_HIT ICACHE_CR_HITMEN /*!< Hit monitor counter */
|
||||
#define LL_ICACHE_MONITOR_MISS ICACHE_CR_MISSMEN /*!< Miss monitor counter */
|
||||
#define LL_ICACHE_MONITOR_ALL (ICACHE_CR_HITMEN | ICACHE_CR_MISSMEN) /*!< All monitors counters */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EC_GET_FLAG Get Flags Defines
|
||||
* @brief Flags defines which can be used with LL_ICACHE_ReadReg function
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_SR_BUSYF ICACHE_SR_BUSYF /*!< Busy flag */
|
||||
#define LL_ICACHE_SR_BSYENDF ICACHE_SR_BSYENDF /*!< Busy end flag */
|
||||
#define LL_ICACHE_SR_ERRF ICACHE_SR_ERRF /*!< Cache error flag */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EC_CLEAR_FLAG Clear Flags Defines
|
||||
* @brief Flags defines which can be used with LL_ICACHE_WriteReg function
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_FCR_CBSYENDF ICACHE_FCR_CBSYENDF /*!< Busy end flag */
|
||||
#define LL_ICACHE_FCR_CERRF ICACHE_FCR_CERRF /*!< Cache error flag */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EC_IT IT Defines
|
||||
* @brief IT defines which can be used with LL_ICACHE_ReadReg and LL_ICACHE_WriteReg functions
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_IER_BSYENDIE ICACHE_IER_BSYENDIE /*!< Busy end interrupt */
|
||||
#define LL_ICACHE_IER_ERRIE ICACHE_IER_ERRIE /*!< Cache error interrupt */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
/** @defgroup ICACHE_LL_EC_Region Remapped Region number
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_REGION_0 0U /*!< Region 0 */
|
||||
#define LL_ICACHE_REGION_1 1U /*!< Region 1 */
|
||||
#define LL_ICACHE_REGION_2 2U /*!< Region 2 */
|
||||
#define LL_ICACHE_REGION_3 3U /*!< Region 3 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EC_Region_Size Remapped Region size
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_REGIONSIZE_2MB 1U /*!< Region size 2MB */
|
||||
#define LL_ICACHE_REGIONSIZE_4MB 2U /*!< Region size 4MB */
|
||||
#define LL_ICACHE_REGIONSIZE_8MB 3U /*!< Region size 8MB */
|
||||
#define LL_ICACHE_REGIONSIZE_16MB 4U /*!< Region size 16MB */
|
||||
#define LL_ICACHE_REGIONSIZE_32MB 5U /*!< Region size 32MB */
|
||||
#define LL_ICACHE_REGIONSIZE_64MB 6U /*!< Region size 64MB */
|
||||
#define LL_ICACHE_REGIONSIZE_128MB 7U /*!< Region size 128MB */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EC_Traffic_Route Remapped Traffic route
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_MASTER1_PORT 0U /*!< Master1 port */
|
||||
#define LL_ICACHE_MASTER2_PORT ICACHE_CRRx_MSTSEL /*!< Master2 port */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EC_Output_Burst_Type Remapped Output burst type
|
||||
* @{
|
||||
*/
|
||||
#define LL_ICACHE_OUTPUT_BURST_WRAP 0U /*!< WRAP */
|
||||
#define LL_ICACHE_OUTPUT_BURST_INCR ICACHE_CRRx_HBURST /*!< INCR */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macros ----------------------------------------------------------*/
|
||||
/** @defgroup ICACHE_LL_Exported_Macros ICACHE Exported Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EM_WRITE_READ Common write and read registers Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Write a value in ICACHE register
|
||||
* @param __REG__ Register to be written
|
||||
* @param __VALUE__ Value to be written in the register
|
||||
* @retval None
|
||||
*/
|
||||
#define LL_ICACHE_WriteReg(__REG__, __VALUE__) WRITE_REG(ICACHE->__REG__, (__VALUE__))
|
||||
|
||||
/**
|
||||
* @brief Read a value in ICACHE register
|
||||
* @param __REG__ Register to be read
|
||||
* @retval Register value
|
||||
*/
|
||||
#define LL_ICACHE_ReadReg(__REG__) READ_REG(ICACHE->__REG__)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
/** @defgroup ICACHE_LL_Exported_Functions ICACHE Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EF_Configuration Configuration
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable the ICACHE.
|
||||
* @rmtoll CR EN LL_ICACHE_Enable
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_Enable(void)
|
||||
{
|
||||
SET_BIT(ICACHE->CR, ICACHE_CR_EN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the ICACHE.
|
||||
* @rmtoll CR EN LL_ICACHE_Disable
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_Disable(void)
|
||||
{
|
||||
CLEAR_BIT(ICACHE->CR, ICACHE_CR_EN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return if ICACHE is enabled or not.
|
||||
* @rmtoll CR EN LL_ICACHE_IsEnabled
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_IsEnabled(void)
|
||||
{
|
||||
return ((READ_BIT(ICACHE->CR, ICACHE_CR_EN) == (ICACHE_CR_EN)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Select the ICACHE operating mode.
|
||||
* @rmtoll CR WAYSEL LL_ICACHE_SetMode
|
||||
* @param Mode This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_1WAY
|
||||
* @arg @ref LL_ICACHE_2WAYS
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_SetMode(uint32_t Mode)
|
||||
{
|
||||
MODIFY_REG(ICACHE->CR, ICACHE_CR_WAYSEL, Mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the selected ICACHE operating mode.
|
||||
* @rmtoll CR WAYSEL LL_ICACHE_GetMode
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_1WAY
|
||||
* @arg @ref LL_ICACHE_2WAYS
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_GetMode(void)
|
||||
{
|
||||
return (READ_BIT(ICACHE->CR, ICACHE_CR_WAYSEL));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Invalidate the ICACHE.
|
||||
* @note Until the BSYEND flag is set, the cache is bypassed.
|
||||
* @rmtoll CR CACHEINV LL_ICACHE_Invalidate
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_Invalidate(void)
|
||||
{
|
||||
SET_BIT(ICACHE->CR, ICACHE_CR_CACHEINV);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EF_Monitors Monitors
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable the hit/miss monitor(s).
|
||||
* @rmtoll CR HITMEN LL_ICACHE_EnableMonitors
|
||||
* @rmtoll CR MISSMEN LL_ICACHE_EnableMonitors
|
||||
* @param Monitors This parameter can be one or a combination of the following values:
|
||||
* @arg @ref LL_ICACHE_MONITOR_HIT
|
||||
* @arg @ref LL_ICACHE_MONITOR_MISS
|
||||
* @arg @ref LL_ICACHE_MONITOR_ALL
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_EnableMonitors(uint32_t Monitors)
|
||||
{
|
||||
SET_BIT(ICACHE->CR, Monitors);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the hit/miss monitor(s).
|
||||
* @rmtoll CR HITMEN LL_ICACHE_DisableMonitors
|
||||
* @rmtoll CR MISSMEN LL_ICACHE_DisableMonitors
|
||||
* @param Monitors This parameter can be one or a combination of the following values:
|
||||
* @arg @ref LL_ICACHE_MONITOR_HIT
|
||||
* @arg @ref LL_ICACHE_MONITOR_MISS
|
||||
* @arg @ref LL_ICACHE_MONITOR_ALL
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_DisableMonitors(uint32_t Monitors)
|
||||
{
|
||||
CLEAR_BIT(ICACHE->CR, Monitors);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the monitor(s) is(are) enabled or disabled.
|
||||
* @rmtoll CR HITMEN LL_ICACHE_IsEnabledMonitors
|
||||
* @rmtoll CR MISSMEN LL_ICACHE_IsEnabledMonitors
|
||||
* @param Monitors This parameter can be one or a combination of the following values:
|
||||
* @arg @ref LL_ICACHE_MONITOR_HIT
|
||||
* @arg @ref LL_ICACHE_MONITOR_MISS
|
||||
* @arg @ref LL_ICACHE_MONITOR_ALL
|
||||
* @retval State of parameter value (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_IsEnabledMonitors(uint32_t Monitors)
|
||||
{
|
||||
return ((READ_BIT(ICACHE->CR, Monitors) == (Monitors)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reset the hit/miss monitor(s).
|
||||
* @rmtoll CR HITMRST LL_ICACHE_ResetMonitors
|
||||
* @rmtoll CR MISSMRST LL_ICACHE_ResetMonitors
|
||||
* @param Monitors This parameter can be one or a combination of the following values:
|
||||
* @arg @ref LL_ICACHE_MONITOR_HIT
|
||||
* @arg @ref LL_ICACHE_MONITOR_MISS
|
||||
* @arg @ref LL_ICACHE_MONITOR_ALL
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_ResetMonitors(uint32_t Monitors)
|
||||
{
|
||||
/* Reset */
|
||||
SET_BIT(ICACHE->CR, (Monitors << 2U));
|
||||
/* Release reset */
|
||||
CLEAR_BIT(ICACHE->CR, (Monitors << 2U));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the Hit monitor.
|
||||
* @note Upon reaching the 32-bit maximum value, hit monitor does not wrap.
|
||||
* @rmtoll HMONR HITMON LL_ICACHE_GetHitMonitor
|
||||
* @retval Value between Min_Data=0 and Max_Data=0xFFFFFFFF
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_GetHitMonitor(void)
|
||||
{
|
||||
return (ICACHE->HMONR);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the Miss monitor.
|
||||
* @note Upon reaching the 16-bit maximum value, miss monitor does not wrap.
|
||||
* @rmtoll MMONR MISSMON LL_ICACHE_GetMissMonitor
|
||||
* @retval Value between Min_Data=0 and Max_Data=0xFFFF
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_GetMissMonitor(void)
|
||||
{
|
||||
return (ICACHE->MMONR);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EF_IT_Management IT_Management
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable BSYEND interrupt.
|
||||
* @rmtoll IER BSYENDIE LL_ICACHE_EnableIT_BSYEND
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_EnableIT_BSYEND(void)
|
||||
{
|
||||
SET_BIT(ICACHE->IER, ICACHE_IER_BSYENDIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable BSYEND interrupt.
|
||||
* @rmtoll IER BSYENDIE LL_ICACHE_DisableIT_BSYEND
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_DisableIT_BSYEND(void)
|
||||
{
|
||||
CLEAR_BIT(ICACHE->IER, ICACHE_IER_BSYENDIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the BSYEND Interrupt is enabled or disabled.
|
||||
* @rmtoll IER BSYENDIE LL_ICACHE_IsEnabledIT_BSYEND
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_IsEnabledIT_BSYEND(void)
|
||||
{
|
||||
return ((READ_BIT(ICACHE->IER, ICACHE_IER_BSYENDIE) == (ICACHE_IER_BSYENDIE)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable ERR interrupt.
|
||||
* @rmtoll IER ERRIE LL_ICACHE_EnableIT_ERR
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_EnableIT_ERR(void)
|
||||
{
|
||||
SET_BIT(ICACHE->IER, ICACHE_IER_ERRIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable ERR interrupt.
|
||||
* @rmtoll IER ERRIE LL_ICACHE_DisableIT_ERR
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_DisableIT_ERR(void)
|
||||
{
|
||||
CLEAR_BIT(ICACHE->IER, ICACHE_IER_ERRIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the ERR Interrupt is enabled or disabled.
|
||||
* @rmtoll IER ERRIE LL_ICACHE_IsEnabledIT_ERR
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_IsEnabledIT_ERR(void)
|
||||
{
|
||||
return ((READ_BIT(ICACHE->IER, ICACHE_IER_ERRIE) == (ICACHE_IER_ERRIE)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_LL_EF_FLAG_Management FLAG_Management
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Indicate the status of an ongoing operation flag.
|
||||
* @rmtoll SR BUSYF LL_ICACHE_IsActiveFlag_BUSY
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_IsActiveFlag_BUSY(void)
|
||||
{
|
||||
return ((READ_BIT(ICACHE->SR, ICACHE_SR_BUSYF) == (ICACHE_SR_BUSYF)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Indicate the status of an operation end flag.
|
||||
* @rmtoll SR BSYEND LL_ICACHE_IsActiveFlag_BSYEND
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_IsActiveFlag_BSYEND(void)
|
||||
{
|
||||
return ((READ_BIT(ICACHE->SR, ICACHE_SR_BSYENDF) == (ICACHE_SR_BSYENDF)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Indicate the status of an error flag.
|
||||
* @rmtoll SR ERRF LL_ICACHE_IsActiveFlag_ERR
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_IsActiveFlag_ERR(void)
|
||||
{
|
||||
return ((READ_BIT(ICACHE->SR, ICACHE_SR_ERRF) == (ICACHE_SR_ERRF)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear busy end of operation flag.
|
||||
* @rmtoll FCR CBSYENDF LL_ICACHE_ClearFlag_BSYEND
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_ClearFlag_BSYEND(void)
|
||||
{
|
||||
WRITE_REG(ICACHE->FCR, ICACHE_FCR_CBSYENDF);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear error flag.
|
||||
* @rmtoll FCR ERRF LL_ICACHE_ClearFlag_ERR
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_ClearFlag_ERR(void)
|
||||
{
|
||||
WRITE_REG(ICACHE->FCR, ICACHE_FCR_CERRF);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
/** @defgroup ICACHE_LL_EF_REGION_Management REGION_Management
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable the remapped memory region.
|
||||
* @note The region must have been already configured.
|
||||
* @rmtoll CRRx REN LL_ICACHE_EnableRegion
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_EnableRegion(uint32_t Region)
|
||||
{
|
||||
SET_BIT(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_REN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the remapped memory region.
|
||||
* @rmtoll CRRx REN LL_ICACHE_DisableRegion
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_DisableRegion(uint32_t Region)
|
||||
{
|
||||
CLEAR_BIT(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_REN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return if remapped memory region is enabled or not.
|
||||
* @rmtoll CRRx REN LL_ICACHE_IsEnabledRegion
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @retval State of bit (1 or 0).
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_IsEnabledRegion(uint32_t Region)
|
||||
{
|
||||
return ((READ_BIT(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_REN) == (ICACHE_CRRx_REN)) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Select the memory remapped region base address.
|
||||
* @note The useful bits depends on RSIZE as described in the Reference Manual.
|
||||
* @rmtoll CRRx BASEADDR LL_ICACHE_SetRegionBaseAddress
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @param Address Alias address in the Code region
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_SetRegionBaseAddress(uint32_t Region, uint32_t Address)
|
||||
{
|
||||
MODIFY_REG(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_BASEADDR, ((Address & 0x1FFFFFFFU) >> 21U));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the memory remapped region base address.
|
||||
* @note The base address is the alias in the Code region.
|
||||
* @note The useful bits depends on RSIZE as described in the Reference Manual.
|
||||
* @rmtoll CRRx BASEADDR LL_ICACHE_GetRegionBaseAddress
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @retval Address Alias address in the Code region
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_GetRegionBaseAddress(uint32_t Region)
|
||||
{
|
||||
return (READ_BIT(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_BASEADDR) << 21U);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Select the memory remapped region address.
|
||||
* @note The useful bits depends on RSIZE as described in the Reference Manual.
|
||||
* @rmtoll CRRx REMAPADDR LL_ICACHE_SetRegionRemapAddress
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @param Address Memory address to remap
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_SetRegionRemapAddress(uint32_t Region, uint32_t Address)
|
||||
{
|
||||
MODIFY_REG(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_REMAPADDR, ((Address >> 21U) << ICACHE_CRRx_REMAPADDR_Pos));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the memory remapped region address.
|
||||
* @note The useful bits depends on RSIZE as described in the Reference Manual.
|
||||
* @rmtoll CRRx REMAPADDR LL_ICACHE_GetRegionRemapAddress
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @retval Address Remapped memory address
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_GetRegionRemapAddress(uint32_t Region)
|
||||
{
|
||||
return ((READ_BIT(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_REMAPADDR) >> ICACHE_CRRx_REMAPADDR_Pos) << 21U);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Select the memory remapped region size.
|
||||
* @rmtoll CRRx RSIZE LL_ICACHE_SetRegionSize
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @param Size This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_2MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_4MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_8MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_16MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_32MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_64MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_128MB
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_SetRegionSize(uint32_t Region, uint32_t Size)
|
||||
{
|
||||
MODIFY_REG(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_RSIZE, (Size << ICACHE_CRRx_RSIZE_Pos));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the selected the memory remapped region size.
|
||||
* @rmtoll CRRx RSIZE LL_ICACHE_GetRegionSize
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_2MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_4MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_8MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_16MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_32MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_64MB
|
||||
* @arg @ref LL_ICACHE_REGIONSIZE_128MB
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_GetRegionSize(uint32_t Region)
|
||||
{
|
||||
return (READ_BIT(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_RSIZE) >> ICACHE_CRRx_RSIZE_Pos);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Select the memory remapped region output burst type.
|
||||
* @rmtoll CRRx HBURST LL_ICACHE_SetRegionOutputBurstType
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @param Type This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_OUTPUT_BURST_WRAP
|
||||
* @arg @ref LL_ICACHE_OUTPUT_BURST_INCR
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_SetRegionOutputBurstType(uint32_t Region, uint32_t Type)
|
||||
{
|
||||
MODIFY_REG(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_HBURST, Type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the selected the memory remapped region output burst type.
|
||||
* @rmtoll CRRx HBURST LL_ICACHE_GetRegionOutputBurstType
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_OUTPUT_BURST_WRAP
|
||||
* @arg @ref LL_ICACHE_OUTPUT_BURST_INCR
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_GetRegionOutputBurstType(uint32_t Region)
|
||||
{
|
||||
return (READ_BIT(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_HBURST));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Select the memory remapped region cache master port.
|
||||
* @rmtoll CRRx MSTSEL LL_ICACHE_SetRegionMasterPort
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @param Port This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_MASTER1_PORT
|
||||
* @arg @ref LL_ICACHE_MASTER2_PORT
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_ICACHE_SetRegionMasterPort(uint32_t Region, uint32_t Port)
|
||||
{
|
||||
MODIFY_REG(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_MSTSEL, Port);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the selected the memory remapped region cache master port.
|
||||
* @rmtoll CRRx MSTSEL LL_ICACHE_GetRegionMasterPort
|
||||
* @param Region This parameter can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_REGION_0
|
||||
* @arg @ref LL_ICACHE_REGION_1
|
||||
* @arg @ref LL_ICACHE_REGION_2
|
||||
* @arg @ref LL_ICACHE_REGION_3
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_ICACHE_MASTER1_PORT
|
||||
* @arg @ref LL_ICACHE_MASTER2_PORT
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_ICACHE_GetRegionMasterPort(uint32_t Region)
|
||||
{
|
||||
return (READ_BIT(*((__IO uint32_t *)(&(ICACHE->CRR0) + (1U * Region))), \
|
||||
ICACHE_CRRx_MSTSEL));
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(USE_FULL_LL_DRIVER)
|
||||
/** @defgroup ICACHE_LL_EF_REGION_Init Region Initialization functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
void LL_ICACHE_ConfigRegion(uint32_t Region, const LL_ICACHE_RegionTypeDef *const pICACHE_RegionStruct);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* USE_FULL_LL_DRIVER */
|
||||
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* ICACHE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32H5xx_LL_ICACHE_H */
|
||||
2077
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_pwr.h
Normal file
2077
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_pwr.h
Normal file
File diff suppressed because it is too large
Load Diff
6463
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_rcc.h
Normal file
6463
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_rcc.h
Normal file
File diff suppressed because it is too large
Load Diff
1814
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_system.h
Normal file
1814
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_system.h
Normal file
File diff suppressed because it is too large
Load Diff
365
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_utils.h
Normal file
365
Drivers/STM32H5xx_HAL_Driver/Inc/stm32h5xx_ll_utils.h
Normal file
@@ -0,0 +1,365 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_ll_utils.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header file of UTILS LL module.
|
||||
@verbatim
|
||||
==============================================================================
|
||||
##### How to use this driver #####
|
||||
==============================================================================
|
||||
[..]
|
||||
The LL UTILS driver contains a set of generic APIs that can be
|
||||
used by user:
|
||||
(+) Device electronic signature
|
||||
(+) Timing functions
|
||||
(+) PLL configuration functions
|
||||
|
||||
@endverbatim
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32H5xx_LL_UTILS_H
|
||||
#define __STM32H5xx_LL_UTILS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_LL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup UTILS_LL UTILS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
/** @defgroup UTILS_LL_Private_Constants UTILS Private Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Max delay can be used in LL_mDelay */
|
||||
#define LL_MAX_DELAY 0xFFFFFFFFU
|
||||
|
||||
/**
|
||||
* @brief Unique device ID register base address
|
||||
*/
|
||||
#define UID_BASE_ADDRESS UID_BASE
|
||||
|
||||
/**
|
||||
* @brief Flash size data register base address
|
||||
*/
|
||||
#define FLASHSIZE_BASE_ADDRESS FLASHSIZE_BASE
|
||||
|
||||
/**
|
||||
* @brief Package data register base address
|
||||
*/
|
||||
#define PACKAGE_BASE_ADDRESS PACKAGE_BASE
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/** @defgroup UTILS_LL_Private_Macros UTILS Private Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/** @defgroup UTILS_LL_ES_INIT UTILS Exported structures
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief UTILS PLL structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t PLLM; /*!< Division factor for PLL VCO input clock.
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 63
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_PLL1_SetM(). */
|
||||
|
||||
uint32_t PLLN; /*!< Multiplication factor for PLL VCO output clock.
|
||||
This parameter must be a number between Min_Data = 4 and Max_Data = 512
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_PLL1_SetN(). */
|
||||
|
||||
uint32_t PLLP; /*!< Division for the main system clock.
|
||||
This parameter must be a number between Min_Data = 2 and Max_Data = 128
|
||||
odd division factors are not allowed
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_PLL1_SetP(). */
|
||||
|
||||
uint32_t FRACN; /*!< Fractional part of the multiplication factor for PLL VCO.
|
||||
This parameter can be a value between 0 and 8191
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_PLL1_SetFRACN(). */
|
||||
|
||||
uint32_t VCO_Input; /*!< PLL clock Input range.
|
||||
This parameter can be a value of @ref RCC_LL_EC_PLLINPUTRANGE
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_PLL1_SetVCOInputRange(). */
|
||||
|
||||
uint32_t VCO_Output; /*!< PLL clock Output range.
|
||||
This parameter can be a value of @ref RCC_LL_EC_PLLOUTPUTRANGE
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_PLL1_SetVCOOutputRange(). */
|
||||
|
||||
} LL_UTILS_PLLInitTypeDef;
|
||||
|
||||
/**
|
||||
* @brief UTILS System, AHB and APB buses clock configuration structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t SYSCLKDivider; /*!< The System clock (SYSCLK) divider. This clock is derived from the System clock.
|
||||
This parameter can be a value of @ref RCC_LL_EC_SYSCLK_DIV
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_SetAHBPrescaler(). */
|
||||
|
||||
uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).
|
||||
This parameter can be a value of @ref RCC_LL_EC_APB1_DIV
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_SetAPB1Prescaler(). */
|
||||
|
||||
uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).
|
||||
This parameter can be a value of @ref RCC_LL_EC_APB2_DIV
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_SetAPB2Prescaler(). */
|
||||
|
||||
uint32_t APB3CLKDivider; /*!< The APB3 clock (PCLK3) divider. This clock is derived from the AHB clock (HCLK).
|
||||
This parameter can be a value of @ref RCC_LL_EC_APB3_DIV
|
||||
|
||||
This feature can be modified afterwards using unitary function
|
||||
@ref LL_RCC_SetAPB3Prescaler(). */
|
||||
|
||||
} LL_UTILS_ClkInitTypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/** @defgroup UTILS_LL_Exported_Constants UTILS Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup UTILS_EC_HSE_BYPASS HSE Bypass activation
|
||||
* @{
|
||||
*/
|
||||
#define LL_UTILS_HSEBYPASS_OFF 0x00000000U /*!< HSE Bypass is not enabled */
|
||||
#define LL_UTILS_HSEBYPASS_ON 0x00000001U /*!< HSE Bypass Analog is enabled */
|
||||
#define LL_UTILS_HSEBYPASS_DIGITAL_ON 0x00000002U /*!< HSE Bypass Digital is enabled */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup UTILS_EC_PACKAGETYPE PACKAGE TYPE
|
||||
* @{
|
||||
*/
|
||||
#define LL_UTILS_PACKAGETYPE_LQFP64 0x00000000U /*!< LQFP64 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_VFQFPN68 0x00000001U /*!< VFQFPN68 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_LQFP100 0x00000002U /*!< LQFP100 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_UFBGA176 0x00000003U /*!< UFBGA176+25 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_LQFP144 0x00000004U /*!< LQFP144 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_LQFP48 0x00000005U /*!< LQFP48 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_UFBGA169 0x00000006U /*!< UFBGA169 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_LQFP176 0x00000007U /*!< LQFP176 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_UFQFPN32 0x00000009U /*!< UFQFPN32 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_LQFP100_SMPS 0x0000000AU /*!< LQFP100 with internal SMPS package type */
|
||||
#define LL_UTILS_PACKAGETYPE_UFBGA176_SMPS 0x0000000BU /*!< UFBGA176+25 with internal SMPS package type */
|
||||
#define LL_UTILS_PACKAGETYPE_LQFP144_SMPS 0x0000000CU /*!< LQFP144 with internal SMPS package type */
|
||||
#define LL_UTILS_PACKAGETYPE_LQFP176_SMPS 0x0000000DU /*!< LQFP176 with internal SMPS package type */
|
||||
#define LL_UTILS_PACKAGETYPE_UFBGA169_SMPS 0x0000000EU /*!< UFBGA169 with internal SMPS package type */
|
||||
#define LL_UTILS_PACKAGETYPE_WLCSP25 0x0000000FU /*!< WLCSP25 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_UFQFPN48 0x00000010U /*!< UFQFPN48 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_WLCSP39 0x00000011U /*!< WLCSP39 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_UFBGA100 0x00000014U /*!< UFBGA100 package type */
|
||||
#define LL_UTILS_PACKAGETYPE_UFBGA144 0x00000015U /*!< UFBGA144 package type */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
/** @defgroup UTILS_LL_Exported_Functions UTILS Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup UTILS_EF_DEVICE_ELECTRONIC_SIGNATURE DEVICE ELECTRONIC SIGNATURE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get Word0 of the unique device identifier (UID based on 96 bits)
|
||||
* @retval UID[31:0]: X and Y coordinates on the wafer expressed in BCD format
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_GetUID_Word0(void)
|
||||
{
|
||||
return (uint32_t)(READ_REG(*((uint32_t *)UID_BASE_ADDRESS)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get Word1 of the unique device identifier (UID based on 96 bits)
|
||||
* @retval UID[63:32]: Wafer number (UID[39:32]) & LOT_NUM[23:0] (UID[63:40])
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_GetUID_Word1(void)
|
||||
{
|
||||
return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 4U))));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get Word2 of the unique device identifier (UID based on 96 bits)
|
||||
* @retval UID[95:64]: Lot number (ASCII encoded) - LOT_NUM[55:24]
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_GetUID_Word2(void)
|
||||
{
|
||||
return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 8U))));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get Flash memory size
|
||||
* @note This bitfield indicates the size of the device Flash memory expressed in
|
||||
* Kbytes. As an example, 0x040 corresponds to 64 Kbytes.
|
||||
* @retval FLASH_SIZE[15:0]: Flash memory size
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_GetFlashSize(void)
|
||||
{
|
||||
return (uint32_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS)) & 0xFFFFU);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get Package type
|
||||
* @retval Returned value can be one of the following values:
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_LQFP64
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_VFQFPN68
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_LQFP100
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_UFBGA176
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_LQFP144
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_LQFP48
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_UFBGA169
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_LQFP176
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_UFQFPN32
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_LQFP100_SMPS
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_UFBGA176_SMPS
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_LQFP144_SMPS
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_LQFP176_SMPS
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_UFBGA169_SMPS
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_WLCSP25
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_UFQFPN48
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_WLCSP39
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_UFBGA100
|
||||
* @arg @ref LL_UTILS_PACKAGETYPE_UFBGA144
|
||||
* @note Refer to product datasheet for availability of package on a specific device
|
||||
*/
|
||||
__STATIC_INLINE uint32_t LL_GetPackageType(void)
|
||||
{
|
||||
return (uint32_t)(READ_REG(*((uint16_t *)PACKAGE_BASE_ADDRESS)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup UTILS_LL_EF_DELAY DELAY
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief This function configures the Cortex-M SysTick source of the time base.
|
||||
* @param HCLKFrequency HCLK frequency in Hz (can be calculated thanks to RCC helper macro)
|
||||
* @note When a RTOS is used, it is recommended to avoid changing the SysTick
|
||||
* configuration by calling this function, for a delay use rather osDelay RTOS service.
|
||||
* @param Ticks Number of ticks
|
||||
* @retval None
|
||||
*/
|
||||
__STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks)
|
||||
{
|
||||
/* Configure the SysTick to have interrupt in 1ms time base */
|
||||
SysTick->LOAD = (uint32_t)((HCLKFrequency / Ticks) - 1UL); /* set reload register */
|
||||
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
|
||||
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
|
||||
SysTick_CTRL_ENABLE_Msk; /* Enable the Systick Timer */
|
||||
}
|
||||
|
||||
void LL_Init1msTick(uint32_t HCLKFrequency);
|
||||
void LL_Init1msTick_HCLK_Div8(uint32_t HCLKFrequency);
|
||||
void LL_Init1msTick_LSE(void);
|
||||
void LL_Init1msTick_LSI(void);
|
||||
void LL_mDelay(uint32_t Delay);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup UTILS_EF_SYSTEM SYSTEM
|
||||
* @{
|
||||
*/
|
||||
|
||||
void LL_SetSystemCoreClock(uint32_t HCLKFrequency);
|
||||
ErrorStatus LL_PLL_ConfigSystemClock_CSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct,
|
||||
LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
|
||||
ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct,
|
||||
LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
|
||||
ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency,
|
||||
uint32_t HSEBypass,
|
||||
LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct,
|
||||
LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
|
||||
ErrorStatus LL_SetFlashLatency(uint32_t HCLK_Frequency);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __STM32H5xx_LL_UTILS_H */
|
||||
|
||||
27
Drivers/STM32H5xx_HAL_Driver/LICENSE.md
Normal file
27
Drivers/STM32H5xx_HAL_Driver/LICENSE.md
Normal file
@@ -0,0 +1,27 @@
|
||||
Copyright 2021 STMicroelectronics.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation and/or
|
||||
other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
6
Drivers/STM32H5xx_HAL_Driver/LICENSE.txt
Normal file
6
Drivers/STM32H5xx_HAL_Driver/LICENSE.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
This software component is provided to you as part of a software package and
|
||||
applicable license terms are in the Package_license file. If you received this
|
||||
software component outside of a package or without applicable license terms,
|
||||
the terms of the BSD-3-Clause license shall apply.
|
||||
You may obtain a copy of the BSD-3-Clause at:
|
||||
https://opensource.org/licenses/BSD-3-Clause
|
||||
1329
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal.c
Normal file
1329
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal.c
Normal file
File diff suppressed because it is too large
Load Diff
872
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_cortex.c
Normal file
872
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_cortex.c
Normal file
@@ -0,0 +1,872 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_cortex.c
|
||||
* @author MCD Application Team
|
||||
* @brief CORTEX HAL module driver.
|
||||
* This file provides firmware functions to manage the following
|
||||
* functionalities of the CORTEX:
|
||||
* + Initialization and Configuration functions
|
||||
* + Peripheral Control functions
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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
|
||||
==============================================================================
|
||||
##### How to use this driver #####
|
||||
==============================================================================
|
||||
|
||||
[..]
|
||||
*** How to configure Interrupts using CORTEX HAL driver ***
|
||||
===========================================================
|
||||
[..]
|
||||
This section provides functions allowing to configure the NVIC interrupts (IRQ).
|
||||
The Cortex-M33 exceptions are managed by CMSIS functions.
|
||||
|
||||
(#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping() function.
|
||||
(#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority().
|
||||
(#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ().
|
||||
|
||||
-@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ pre-emption is no more possible.
|
||||
The pending IRQ priority will be managed only by the sub priority.
|
||||
|
||||
-@- IRQ priority order (sorted by highest to lowest priority):
|
||||
(+@) Lowest pre-emption priority
|
||||
(+@) Lowest sub priority
|
||||
(+@) Lowest hardware priority (IRQ number)
|
||||
|
||||
[..]
|
||||
*** How to configure SysTick using CORTEX HAL driver ***
|
||||
========================================================
|
||||
[..]
|
||||
Setup SysTick Timer for time base.
|
||||
|
||||
(+) The HAL_SYSTICK_Config() function calls the SysTick_Config() function which
|
||||
is a CMSIS function that:
|
||||
(++) Configures the SysTick Reload register with value passed as function parameter.
|
||||
(++) Configures the SysTick IRQ priority to the lowest value (0x0F).
|
||||
(++) Resets the SysTick Counter register.
|
||||
(++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK).
|
||||
(++) Enables the SysTick Interrupt.
|
||||
(++) Starts the SysTick Counter.
|
||||
|
||||
(+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro
|
||||
__HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the
|
||||
HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined
|
||||
inside the stm32h5xx_hal_cortex.h file.
|
||||
|
||||
(+) You can change the SysTick IRQ priority by calling the
|
||||
HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function
|
||||
call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function.
|
||||
|
||||
(+) To adjust the SysTick time base, use the following formula:
|
||||
|
||||
Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s)
|
||||
(++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function
|
||||
(++) Reload Value should not exceed 0xFFFFFF
|
||||
|
||||
[..]
|
||||
*** How to configure MPU regions using CORTEX HAL driver ***
|
||||
============================================================
|
||||
[..]
|
||||
This section provides functions allowing to configure the Memory Protection Unit (MPU).
|
||||
|
||||
(#) Disable the MPU using HAL_MPU_Disable().
|
||||
(#) Configure the necessary MPU memory attributes using HAL_MPU_ConfigMemoryAttributes().
|
||||
(#) Configure the necessary MPU regions using HAL_MPU_ConfigRegion() ennsuring that the MPU region configuration link to
|
||||
the right MPU attributes number.
|
||||
(#) Enable the MPU using HAL_MPU_Enable() function.
|
||||
|
||||
-@- The memory management fault exception is enabled in HAL_MPU_Enable() function and the system will enter the memory
|
||||
management fault handler MemManage_Handler() when an illegal memory access is performed.
|
||||
-@- If the MPU has previously been programmed, disable the unused regions to prevent any previous region configuration
|
||||
from affecting the new MPU configuration.
|
||||
-@- MPU APIs ending with '_NS' allow to control the non-secure Memory Protection Unit (MPU_NS) from the secure context
|
||||
|
||||
@endverbatim
|
||||
******************************************************************************
|
||||
|
||||
The table below gives the allowed values of the pre-emption priority and subpriority according
|
||||
to the Priority Grouping configuration performed by HAL_NVIC_SetPriorityGrouping() function.
|
||||
|
||||
========================================================================================================================
|
||||
NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description
|
||||
========================================================================================================================
|
||||
NVIC_PRIORITYGROUP_0 | 0 | 0-15 | 0 bit for pre-emption priority
|
||||
| | | 4 bits for subpriority
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
NVIC_PRIORITYGROUP_1 | 0-1 | 0-7 | 1 bit for pre-emption priority
|
||||
| | | 3 bits for subpriority
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
NVIC_PRIORITYGROUP_2 | 0-3 | 0-3 | 2 bits for pre-emption priority
|
||||
| | | 2 bits for subpriority
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
NVIC_PRIORITYGROUP_3 | 0-7 | 0-1 | 3 bits for pre-emption priority
|
||||
| | | 1 bit for subpriority
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
NVIC_PRIORITYGROUP_4 | 0-15 | 0 | 4 bits for pre-emption priority
|
||||
| | | 0 bit for subpriority
|
||||
========================================================================================================================
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup CORTEX
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifdef HAL_CORTEX_MODULE_ENABLED
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
/** @defgroup CORTEX_Private_Functions CORTEX Private Functions
|
||||
* @{
|
||||
*/
|
||||
static void MPU_ConfigRegion(MPU_Type *MPUx, const MPU_Region_InitTypeDef *const pMPU_RegionInit);
|
||||
static void MPU_ConfigMemoryAttributes(MPU_Type *MPUx, const MPU_Attributes_InitTypeDef *const pMPU_AttributesInit);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @addtogroup CORTEX_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup CORTEX_Exported_Functions_Group1
|
||||
* @brief NVIC functions
|
||||
*
|
||||
@verbatim
|
||||
==============================================================================
|
||||
##### NVIC functions #####
|
||||
==============================================================================
|
||||
[..]
|
||||
This section provides the CORTEX HAL driver functions for NVIC functionalities
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Set the priority grouping field (pre-emption priority and subpriority)
|
||||
* using the required unlock sequence.
|
||||
* @param PriorityGroup: The priority grouping bits length.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg NVIC_PRIORITYGROUP_0: 0 bit for pre-emption priority,
|
||||
* 4 bits for subpriority
|
||||
* @arg NVIC_PRIORITYGROUP_1: 1 bit for pre-emption priority,
|
||||
* 3 bits for subpriority
|
||||
* @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority,
|
||||
* 2 bits for subpriority
|
||||
* @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority,
|
||||
* 1 bit for subpriority
|
||||
* @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority,
|
||||
* 0 bit for subpriority
|
||||
* @note When the NVIC_PRIORITYGROUP_0 is selected, IRQ pre-emption is no more possible.
|
||||
* The pending IRQ priority will be managed only by the subpriority.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
|
||||
|
||||
/* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
|
||||
NVIC_SetPriorityGrouping(PriorityGroup);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the priority of an interrupt.
|
||||
* @param IRQn: External interrupt number.
|
||||
* This parameter can be an enumerator of IRQn_Type enumeration
|
||||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate
|
||||
* CMSIS device file (stm32h5xxxx.h))
|
||||
* @param PreemptPriority: The pre-emption priority for the IRQn channel.
|
||||
* This parameter can be a value between 0 and 15
|
||||
* A lower priority value indicates a higher priority
|
||||
* @param SubPriority: the subpriority level for the IRQ channel.
|
||||
* This parameter can be a value between 0 and 15
|
||||
* A lower priority value indicates a higher priority.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
|
||||
{
|
||||
uint32_t prioritygroup;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
|
||||
assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
|
||||
|
||||
prioritygroup = NVIC_GetPriorityGrouping();
|
||||
|
||||
NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable a device specific interrupt in the NVIC interrupt controller.
|
||||
* @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()
|
||||
* function should be called before.
|
||||
* @param IRQn External interrupt number.
|
||||
* This parameter can be an enumerator of IRQn_Type enumeration
|
||||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate
|
||||
* CMSIS device file (stm32h5xxxx.h))
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
|
||||
|
||||
/* Enable interrupt */
|
||||
NVIC_EnableIRQ(IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable a device specific interrupt in the NVIC interrupt controller.
|
||||
* @param IRQn External interrupt number.
|
||||
* This parameter can be an enumerator of IRQn_Type enumeration
|
||||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate
|
||||
* CMSIS device file (stm32h5xxxx.h))
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
|
||||
|
||||
/* Disable interrupt */
|
||||
NVIC_DisableIRQ(IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initiate a system reset request to reset the MCU.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_NVIC_SystemReset(void)
|
||||
{
|
||||
/* System Reset */
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the priority grouping field from the NVIC Interrupt Controller.
|
||||
* @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field)
|
||||
*/
|
||||
uint32_t HAL_NVIC_GetPriorityGrouping(void)
|
||||
{
|
||||
/* Get the PRIGROUP[10:8] field value */
|
||||
return NVIC_GetPriorityGrouping();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the priority of an interrupt.
|
||||
* @param IRQn: External interrupt number.
|
||||
* This parameter can be an enumerator of IRQn_Type enumeration
|
||||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate
|
||||
* CMSIS device file (stm32h5xxxx.h))
|
||||
* @param PriorityGroup: the priority grouping bits length.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg NVIC_PRIORITYGROUP_0: 0 bit for pre-emption priority,
|
||||
* 4 bits for subpriority
|
||||
* @arg NVIC_PRIORITYGROUP_1: 1 bit for pre-emption priority,
|
||||
* 3 bits for subpriority
|
||||
* @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority,
|
||||
* 2 bits for subpriority
|
||||
* @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority,
|
||||
* 1 bit for subpriority
|
||||
* @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority,
|
||||
* 0 bit for subpriority
|
||||
* @param pPreemptPriority: Pointer on the Preemptive priority value (starting from 0).
|
||||
* @param pSubPriority: Pointer on the Subpriority value (starting from 0).
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *const pPreemptPriority,
|
||||
uint32_t *const pSubPriority)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
|
||||
/* Get priority for Cortex-M system or device specific interrupts */
|
||||
NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set Pending bit of an external interrupt.
|
||||
* @param IRQn External interrupt number
|
||||
* This parameter can be an enumerator of IRQn_Type enumeration
|
||||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate
|
||||
* CMSIS device file (stm32h5xxxx.h))
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn)
|
||||
{
|
||||
/* Set interrupt pending */
|
||||
NVIC_SetPendingIRQ(IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get Pending Interrupt (read the pending register in the NVIC
|
||||
* and return the pending bit for the specified interrupt).
|
||||
* @param IRQn External interrupt number.
|
||||
* This parameter can be an enumerator of IRQn_Type enumeration
|
||||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate
|
||||
* CMSIS device file (stm32h5xxxx.h))
|
||||
* @retval status: - 0 Interrupt status is not pending.
|
||||
* - 1 Interrupt status is pending.
|
||||
*/
|
||||
uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn)
|
||||
{
|
||||
/* Return 1 if pending else 0 */
|
||||
return NVIC_GetPendingIRQ(IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clear the pending bit of an external interrupt.
|
||||
* @param IRQn External interrupt number.
|
||||
* This parameter can be an enumerator of IRQn_Type enumeration
|
||||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate
|
||||
* CMSIS device file (stm32h5xxxx.h))
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn)
|
||||
{
|
||||
/* Clear pending interrupt */
|
||||
NVIC_ClearPendingIRQ(IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get active interrupt (read the active register in NVIC and return the active bit).
|
||||
* @param IRQn External interrupt number
|
||||
* This parameter can be an enumerator of IRQn_Type enumeration
|
||||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate
|
||||
* CMSIS device file (stm32h5xxxx.h))
|
||||
* @retval status: - 0 Interrupt status is not pending.
|
||||
* - 1 Interrupt status is pending.
|
||||
*/
|
||||
uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn)
|
||||
{
|
||||
/* Return 1 if active else 0 */
|
||||
return NVIC_GetActive(IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup CORTEX_Exported_Functions_Group2
|
||||
* @brief SYSTICK functions
|
||||
*
|
||||
@verbatim
|
||||
==============================================================================
|
||||
##### SYSTICK functions #####
|
||||
==============================================================================
|
||||
[..]
|
||||
This section provides the CORTEX HAL driver functions for SYSTICK functionalities
|
||||
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initialize the System Timer with interrupt enabled and start the System Tick Timer (SysTick):
|
||||
* Counter is in free running mode to generate periodic interrupts.
|
||||
* @param TicksNumb: Specifies the ticks Number of ticks between two interrupts.
|
||||
* @retval status: - 0 Function succeeded.
|
||||
* - 1 Function failed.
|
||||
*/
|
||||
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
|
||||
{
|
||||
if ((TicksNumb - 1UL) > SysTick_LOAD_RELOAD_Msk)
|
||||
{
|
||||
/* Reload value impossible */
|
||||
return (1UL);
|
||||
}
|
||||
|
||||
/* Set reload register */
|
||||
WRITE_REG(SysTick->LOAD, (uint32_t)(TicksNumb - 1UL));
|
||||
|
||||
/* Load the SysTick Counter Value */
|
||||
WRITE_REG(SysTick->VAL, 0UL);
|
||||
|
||||
/* Enable SysTick IRQ and SysTick Timer */
|
||||
SET_BIT(SysTick->CTRL, (SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk));
|
||||
|
||||
/* Function successful */
|
||||
return (0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configure the SysTick clock source.
|
||||
* @param CLKSource: specifies the SysTick clock source.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg SYSTICK_CLKSOURCE_LSI: LSI clock selected as SysTick clock source.
|
||||
* @arg SYSTICK_CLKSOURCE_LSE: LSE clock selected as SysTick clock source.
|
||||
* @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.
|
||||
* @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));
|
||||
switch (CLKSource)
|
||||
{
|
||||
/* Select HCLK as Systick clock source */
|
||||
case SYSTICK_CLKSOURCE_HCLK:
|
||||
SET_BIT(SysTick->CTRL, SYSTICK_CLKSOURCE_HCLK);
|
||||
break;
|
||||
/* Select HCLK_DIV8 as Systick clock source */
|
||||
case SYSTICK_CLKSOURCE_HCLK_DIV8:
|
||||
CLEAR_BIT(SysTick->CTRL, SYSTICK_CLKSOURCE_HCLK);
|
||||
MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_SYSTICKSEL, (0x00000000U));
|
||||
break;
|
||||
/* Select LSI as Systick clock source */
|
||||
case SYSTICK_CLKSOURCE_LSI:
|
||||
CLEAR_BIT(SysTick->CTRL, SYSTICK_CLKSOURCE_HCLK);
|
||||
MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_SYSTICKSEL, RCC_CCIPR4_SYSTICKSEL_0);
|
||||
break;
|
||||
/* Select LSE as Systick clock source */
|
||||
case SYSTICK_CLKSOURCE_LSE:
|
||||
CLEAR_BIT(SysTick->CTRL, SYSTICK_CLKSOURCE_HCLK);
|
||||
MODIFY_REG(RCC->CCIPR4, RCC_CCIPR4_SYSTICKSEL, RCC_CCIPR4_SYSTICKSEL_1);
|
||||
break;
|
||||
default:
|
||||
/* Nothing to do */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the SysTick clock source configuration.
|
||||
* @retval SysTick clock source that can be one of the following values:
|
||||
* @arg SYSTICK_CLKSOURCE_LSI: LSI clock selected as SysTick clock source.
|
||||
* @arg SYSTICK_CLKSOURCE_LSE: LSE clock selected as SysTick clock source.
|
||||
* @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.
|
||||
* @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.
|
||||
*/
|
||||
uint32_t HAL_SYSTICK_GetCLKSourceConfig(void)
|
||||
{
|
||||
uint32_t systick_source;
|
||||
uint32_t systick_rcc_source;
|
||||
|
||||
/* Read SysTick->CTRL register for internal or external clock source */
|
||||
if (READ_BIT(SysTick->CTRL, SysTick_CTRL_CLKSOURCE_Msk) != 0U)
|
||||
{
|
||||
/* Internal clock source */
|
||||
systick_source = SYSTICK_CLKSOURCE_HCLK;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* External clock source, check the selected one in RCC */
|
||||
systick_rcc_source = READ_BIT(RCC->CCIPR4, RCC_CCIPR4_SYSTICKSEL);
|
||||
|
||||
switch (systick_rcc_source)
|
||||
{
|
||||
case (0x00000000U):
|
||||
systick_source = SYSTICK_CLKSOURCE_HCLK_DIV8;
|
||||
break;
|
||||
|
||||
case (RCC_CCIPR4_SYSTICKSEL_0):
|
||||
systick_source = SYSTICK_CLKSOURCE_LSI;
|
||||
break;
|
||||
|
||||
case (RCC_CCIPR4_SYSTICKSEL_1):
|
||||
systick_source = SYSTICK_CLKSOURCE_LSE;
|
||||
break;
|
||||
|
||||
default:
|
||||
systick_source = SYSTICK_CLKSOURCE_HCLK_DIV8;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return systick_source;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Handle SYSTICK interrupt request.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_SYSTICK_IRQHandler(void)
|
||||
{
|
||||
HAL_SYSTICK_Callback();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief SYSTICK callback.
|
||||
* @retval None
|
||||
*/
|
||||
__weak void HAL_SYSTICK_Callback(void)
|
||||
{
|
||||
/* NOTE : This function should not be modified, when the callback is needed,
|
||||
the HAL_SYSTICK_Callback could be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup CORTEX_Exported_Functions_Group3
|
||||
* @brief MPU functions
|
||||
*
|
||||
@verbatim
|
||||
==============================================================================
|
||||
##### MPU functions #####
|
||||
==============================================================================
|
||||
[..]
|
||||
This section provides the CORTEX HAL driver functions for MPU functionalities
|
||||
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable the MPU.
|
||||
* @param MPU_Control: Specifies the control mode of the MPU during hard fault,
|
||||
* NMI, FAULTMASK and privileged access to the default memory
|
||||
* This parameter can be one of the following values:
|
||||
* @arg MPU_HFNMI_PRIVDEF_NONE
|
||||
* @arg MPU_HARDFAULT_NMI
|
||||
* @arg MPU_PRIVILEGED_DEFAULT
|
||||
* @arg MPU_HFNMI_PRIVDEF
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_Enable(uint32_t MPU_Control)
|
||||
{
|
||||
__DMB(); /* Data Memory Barrier operation to force any outstanding writes to memory before enabling the MPU */
|
||||
|
||||
/* Enable the MPU */
|
||||
MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
|
||||
|
||||
/* Enable fault exceptions */
|
||||
SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
|
||||
|
||||
/* Follow ARM recommendation with */
|
||||
/* Data Synchronization and Instruction Synchronization Barriers to ensure MPU configuration */
|
||||
__DSB(); /* Ensure that the subsequent instruction is executed only after the write to memory */
|
||||
__ISB(); /* Flush and refill pipeline with updated MPU configuration settings */
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/**
|
||||
* @brief Enable the non-secure MPU.
|
||||
* @param MPU_Control: Specifies the control mode of the MPU during hard fault,
|
||||
* NMI, FAULTMASK and privileged access to the default memory
|
||||
* This parameter can be one of the following values:
|
||||
* @arg MPU_HFNMI_PRIVDEF_NONE
|
||||
* @arg MPU_HARDFAULT_NMI
|
||||
* @arg MPU_PRIVILEGED_DEFAULT
|
||||
* @arg MPU_HFNMI_PRIVDEF
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_Enable_NS(uint32_t MPU_Control)
|
||||
{
|
||||
__DMB(); /* Data Memory Barrier operation to force any outstanding writes to memory before enabling the MPU */
|
||||
|
||||
/* Enable the MPU */
|
||||
MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
|
||||
|
||||
/* Enable fault exceptions */
|
||||
SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
|
||||
|
||||
/* Follow ARM recommendation with */
|
||||
/* Data Synchronization and Instruction Synchronization Barriers to ensure MPU configuration */
|
||||
__DSB(); /* Ensure that the subsequent instruction is executed only after the write to memory */
|
||||
__ISB(); /* Flush and refill pipeline with updated MPU configuration settings */
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @brief Disable the MPU.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_Disable(void)
|
||||
{
|
||||
__DMB(); /* Force any outstanding transfers to complete before disabling MPU */
|
||||
|
||||
/* Disable fault exceptions */
|
||||
SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
|
||||
|
||||
/* Disable the MPU */
|
||||
MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk;
|
||||
|
||||
/* Follow ARM recommendation with */
|
||||
/* Data Synchronization and Instruction Synchronization Barriers to ensure MPU configuration */
|
||||
__DSB(); /* Ensure that the subsequent instruction is executed only after the write to memory */
|
||||
__ISB(); /* Flush and refill pipeline with updated MPU configuration settings */
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/**
|
||||
* @brief Disable the non-secure MPU.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_Disable_NS(void)
|
||||
{
|
||||
__DMB(); /* Force any outstanding transfers to complete before disabling MPU */
|
||||
|
||||
/* Disable fault exceptions */
|
||||
SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
|
||||
|
||||
/* Disable the MPU */
|
||||
MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk;
|
||||
|
||||
/* Follow ARM recommendation with */
|
||||
/* Data Synchronization and Instruction Synchronization Barriers to ensure MPU configuration */
|
||||
__DSB(); /* Ensure that the subsequent instruction is executed only after the write to memory */
|
||||
__ISB(); /* Flush and refill pipeline with updated MPU configuration settings */
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @brief Enable the MPU Region.
|
||||
* @param RegionNumber Specifies the index of the region to enable.
|
||||
* this parameter can be a value of @ref CORTEX_MPU_Region_Number
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_EnableRegion(uint32_t RegionNumber)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_MPU_REGION_NUMBER(RegionNumber));
|
||||
|
||||
/* Set the Region number */
|
||||
MPU->RNR = RegionNumber;
|
||||
|
||||
/* Enable the Region */
|
||||
SET_BIT(MPU->RLAR, MPU_RLAR_EN_Msk);
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/**
|
||||
* @brief Enable the MPU_NS Region.
|
||||
* @param RegionNumber Specifies the index of the region to enable.
|
||||
* this parameter can be a value of @ref CORTEX_MPU_Region_Number
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_EnableRegion_NS(uint32_t RegionNumber)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_MPU_REGION_NUMBER_NS(RegionNumber));
|
||||
|
||||
/* Set the Region number */
|
||||
MPU_NS->RNR = RegionNumber;
|
||||
|
||||
/* Enable the Region */
|
||||
SET_BIT(MPU_NS->RLAR, MPU_RLAR_EN_Msk);
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @brief Disable the MPU Region.
|
||||
* @param RegionNumber Specifies the index of the region to disable.
|
||||
* this parameter can be a value of @ref CORTEX_MPU_Region_Number
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_DisableRegion(uint32_t RegionNumber)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_MPU_REGION_NUMBER(RegionNumber));
|
||||
|
||||
/* Set the Region number */
|
||||
MPU->RNR = RegionNumber;
|
||||
|
||||
/* Disable the Region */
|
||||
CLEAR_BIT(MPU->RLAR, MPU_RLAR_EN_Msk);
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/**
|
||||
* @brief Disable the MPU_NS Region.
|
||||
* @param RegionNumber Specifies the index of the region to disable.
|
||||
* this parameter can be a value of @ref CORTEX_MPU_Region_Number
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_DisableRegion_NS(uint32_t RegionNumber)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_MPU_REGION_NUMBER_NS(RegionNumber));
|
||||
|
||||
/* Set the Region number */
|
||||
MPU_NS->RNR = RegionNumber;
|
||||
|
||||
/* Disable the Region */
|
||||
CLEAR_BIT(MPU_NS->RLAR, MPU_RLAR_EN_Msk);
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @brief Initialize and configure the Region and the memory to be protected.
|
||||
* @param pMPU_RegionInit: Pointer to a MPU_Region_InitTypeDef structure that contains
|
||||
* the initialization and configuration information.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_ConfigRegion(const MPU_Region_InitTypeDef *const pMPU_RegionInit)
|
||||
{
|
||||
MPU_ConfigRegion(MPU, pMPU_RegionInit);
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/**
|
||||
* @brief Initialize and configure the Region and the memory to be protected for non-secure MPU.
|
||||
* @param pMPU_RegionInit: Pointer to a MPU_Region_InitTypeDef structure that contains
|
||||
* the initialization and configuration information.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_ConfigRegion_NS(const MPU_Region_InitTypeDef *const pMPU_RegionInit)
|
||||
{
|
||||
MPU_ConfigRegion(MPU_NS, pMPU_RegionInit);
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @brief Initialize and configure the memory attributes.
|
||||
* @param pMPU_AttributesInit: Pointer to a MPU_Attributes_InitTypeDef structure that contains
|
||||
* the initialization and configuration information.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_ConfigMemoryAttributes(const MPU_Attributes_InitTypeDef *const pMPU_AttributesInit)
|
||||
{
|
||||
MPU_ConfigMemoryAttributes(MPU, pMPU_AttributesInit);
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/**
|
||||
* @brief Initialize and configure the memory attributes for non-secure MPU.
|
||||
* @param pMPU_AttributesInit: Pointer to a MPU_Attributes_InitTypeDef structure that contains
|
||||
* the initialization and configuration information.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_MPU_ConfigMemoryAttributes_NS(const MPU_Attributes_InitTypeDef *const pMPU_AttributesInit)
|
||||
{
|
||||
MPU_ConfigMemoryAttributes(MPU_NS, pMPU_AttributesInit);
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup CORTEX_Private_Functions
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Initialize and configure the Region and the memory to be protected for MPU.
|
||||
* @param MPUx: Pointer to MPU_Type structure
|
||||
* This parameter can be one of the following values:
|
||||
* @arg MPU
|
||||
* @arg MPU_NS
|
||||
* @param pMPU_RegionInit: Pointer to a MPU_Region_InitTypeDef structure that contains
|
||||
* the initialization and configuration information.
|
||||
* @retval None
|
||||
*/
|
||||
static void MPU_ConfigRegion(MPU_Type *MPUx, const MPU_Region_InitTypeDef *const pMPU_RegionInit)
|
||||
{
|
||||
/* Check the parameters */
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
assert_param(IS_MPU_INSTANCE(MPUx));
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
assert_param(IS_MPU_REGION_NUMBER(pMPU_RegionInit->Number));
|
||||
assert_param(IS_MPU_REGION_ENABLE(pMPU_RegionInit->Enable));
|
||||
assert_param(IS_MPU_INSTRUCTION_ACCESS(pMPU_RegionInit->DisableExec));
|
||||
assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(pMPU_RegionInit->AccessPermission));
|
||||
assert_param(IS_MPU_ACCESS_SHAREABLE(pMPU_RegionInit->IsShareable));
|
||||
|
||||
/* Follow ARM recommendation with Data Memory Barrier prior to MPU configuration */
|
||||
__DMB();
|
||||
|
||||
/* Set the Region number */
|
||||
MPUx->RNR = pMPU_RegionInit->Number;
|
||||
|
||||
/* Disable the Region */
|
||||
CLEAR_BIT(MPUx->RLAR, MPU_RLAR_EN_Msk);
|
||||
|
||||
MPUx->RBAR = (((uint32_t)pMPU_RegionInit->BaseAddress & 0xFFFFFFE0UL) |
|
||||
((uint32_t)pMPU_RegionInit->IsShareable << MPU_RBAR_SH_Pos) |
|
||||
((uint32_t)pMPU_RegionInit->AccessPermission << MPU_RBAR_AP_Pos) |
|
||||
((uint32_t)pMPU_RegionInit->DisableExec << MPU_RBAR_XN_Pos));
|
||||
|
||||
MPUx->RLAR = (((uint32_t)pMPU_RegionInit->LimitAddress & 0xFFFFFFE0UL) |
|
||||
((uint32_t)pMPU_RegionInit->AttributesIndex << MPU_RLAR_AttrIndx_Pos) |
|
||||
((uint32_t)pMPU_RegionInit->Enable << MPU_RLAR_EN_Pos));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initialize and configure the memory attributes for MPU.
|
||||
* @param MPUx: Pointer to MPU_Type structure
|
||||
* This parameter can be one of the following values:
|
||||
* @arg MPU
|
||||
* @arg MPU_NS
|
||||
* @param pMPU_AttributesInit: Pointer to a MPU_Attributes_InitTypeDef structure that contains
|
||||
* the initialization and configuration information.
|
||||
* @retval None
|
||||
*/
|
||||
static void MPU_ConfigMemoryAttributes(MPU_Type *MPUx, const MPU_Attributes_InitTypeDef *const pMPU_AttributesInit)
|
||||
{
|
||||
__IO uint32_t *p_mair;
|
||||
uint32_t attr_values;
|
||||
uint32_t attr_number;
|
||||
|
||||
/* Check the parameters */
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
assert_param(IS_MPU_INSTANCE(MPUx));
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
assert_param(IS_MPU_ATTRIBUTES_NUMBER(pMPU_AttributesInit->Number));
|
||||
/* No need to check Attributes value as all 0x0..0xFF possible */
|
||||
|
||||
/* Follow ARM recommendation with Data Memory Barrier prior to MPUx configuration */
|
||||
__DMB();
|
||||
|
||||
if (pMPU_AttributesInit->Number < MPU_ATTRIBUTES_NUMBER4)
|
||||
{
|
||||
/* Program MPU_MAIR0 */
|
||||
p_mair = &(MPUx->MAIR0);
|
||||
attr_number = pMPU_AttributesInit->Number;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Program MPU_MAIR1 */
|
||||
p_mair = &(MPUx->MAIR1);
|
||||
attr_number = (uint32_t)pMPU_AttributesInit->Number - 4U;
|
||||
}
|
||||
|
||||
attr_values = *(p_mair);
|
||||
attr_values &= ~(0xFFUL << (attr_number * 8U));
|
||||
*(p_mair) = attr_values | ((uint32_t)pMPU_AttributesInit->Attributes << (attr_number * 8U));
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
1722
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_dma.c
Normal file
1722
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_dma.c
Normal file
File diff suppressed because it is too large
Load Diff
4762
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_dma_ex.c
Normal file
4762
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_dma_ex.c
Normal file
File diff suppressed because it is too large
Load Diff
874
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_exti.c
Normal file
874
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_exti.c
Normal file
@@ -0,0 +1,874 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_exti.c
|
||||
* @author MCD Application Team
|
||||
* @brief EXTI HAL module driver.
|
||||
* This file provides firmware functions to manage the following
|
||||
* functionalities of the General Purpose Input/Output (EXTI) peripheral:
|
||||
* + Initialization and de-initialization functions
|
||||
* + IO operation functions
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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
|
||||
==============================================================================
|
||||
##### EXTI Peripheral features #####
|
||||
==============================================================================
|
||||
[..]
|
||||
(+) Each Exti line can be configured within this driver.
|
||||
|
||||
(+) Exti line can be configured in 3 different modes
|
||||
(++) Interrupt
|
||||
(++) Event
|
||||
(++) Both of them
|
||||
|
||||
(+) Configurable Exti lines can be configured with 3 different triggers
|
||||
(++) Rising
|
||||
(++) Falling
|
||||
(++) Both of them
|
||||
|
||||
(+) When set in interrupt mode, configurable Exti lines have two diffenrents
|
||||
interrupt pending registers which allow to distinguish which transition
|
||||
occurs:
|
||||
(++) Rising edge pending interrupt
|
||||
(++) Falling
|
||||
|
||||
(+) Exti lines 0 to 15 are linked to gpio pin number 0 to 15. Gpio port can
|
||||
be selected through multiplexer.
|
||||
|
||||
##### How to use this driver #####
|
||||
==============================================================================
|
||||
[..]
|
||||
|
||||
(#) Configure the EXTI line using HAL_EXTI_SetConfigLine().
|
||||
(++) Choose the interrupt line number by setting "Line" member from
|
||||
EXTI_ConfigTypeDef structure.
|
||||
(++) Configure the interrupt and/or event mode using "Mode" member from
|
||||
EXTI_ConfigTypeDef structure.
|
||||
(++) For configurable lines, configure rising and/or falling trigger
|
||||
"Trigger" member from EXTI_ConfigTypeDef structure.
|
||||
(++) For Exti lines linked to gpio, choose gpio port using "GPIOSel"
|
||||
member from GPIO_InitTypeDef structure.
|
||||
|
||||
(#) Get current Exti configuration of a dedicated line using
|
||||
HAL_EXTI_GetConfigLine().
|
||||
(++) Provide exiting handle as parameter.
|
||||
(++) Provide pointer on EXTI_ConfigTypeDef structure as second parameter.
|
||||
|
||||
(#) Clear Exti configuration of a dedicated line using HAL_EXTI_GetConfigLine().
|
||||
(++) Provide exiting handle as parameter.
|
||||
|
||||
(#) Register callback to treat Exti interrupts using HAL_EXTI_RegisterCallback().
|
||||
(++) Provide exiting handle as first parameter.
|
||||
(++) Provide which callback will be registered using one value from
|
||||
EXTI_CallbackIDTypeDef.
|
||||
(++) Provide callback function pointer.
|
||||
|
||||
(#) Get interrupt pending bit using HAL_EXTI_GetPending().
|
||||
|
||||
(#) Clear interrupt pending bit using HAL_EXTI_GetPending().
|
||||
|
||||
(#) Generate software interrupt using HAL_EXTI_GenerateSWI().
|
||||
|
||||
@endverbatim
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup EXTI
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifdef HAL_EXTI_MODULE_ENABLED
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private defines ------------------------------------------------------------*/
|
||||
/** @defgroup EXTI_Private_Constants EXTI Private Constants
|
||||
* @{
|
||||
*/
|
||||
#define EXTI_MODE_OFFSET 0x04U /* 0x10: byte offset between: IMR1/EMR1 and IMR2/EMR2 registers */
|
||||
#define EXTI_CONFIG_OFFSET 0x08U /* 0x20: byte offset between Rising1/Falling1 and Rising2/Falling2
|
||||
configuration registers */
|
||||
#define EXTI_PRIVCFGR_OFFSET 0x08U /* 0x20: byte offset between PRIVCFGR1 and PRIVCFGR2 registers */
|
||||
#define EXTI_SECCFGR_OFFSET 0x08U /* 0x20: byte offset between SECCFGR1 and SECCFGR2 registers */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @addtogroup EXTI_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup EXTI_Exported_Functions_Group1
|
||||
* @brief Configuration functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Configuration functions #####
|
||||
===============================================================================
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Set configuration of a dedicated Exti line.
|
||||
* @param hexti Exti handle.
|
||||
* @param pExtiConfig Pointer on EXTI configuration to be set.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
|
||||
{
|
||||
__IO uint32_t *regaddr;
|
||||
uint32_t regval;
|
||||
uint32_t linepos;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
|
||||
/* Check null pointer */
|
||||
if ((hexti == NULL) || (pExtiConfig == NULL))
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
|
||||
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
|
||||
|
||||
/* Assign line number to handle */
|
||||
hexti->Line = pExtiConfig->Line;
|
||||
|
||||
/* compute line register offset and line mask */
|
||||
offset = ((pExtiConfig->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
|
||||
maskline = (1UL << linepos);
|
||||
|
||||
/* Configure triggers for configurable lines */
|
||||
if ((pExtiConfig->Line & EXTI_CONFIG) != 0U)
|
||||
{
|
||||
assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
|
||||
|
||||
/* Configure rising trigger */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Mask or set line */
|
||||
if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0U)
|
||||
{
|
||||
regval |= maskline;
|
||||
}
|
||||
else
|
||||
{
|
||||
regval &= ~maskline;
|
||||
}
|
||||
|
||||
/* Store rising trigger mode */
|
||||
*regaddr = regval;
|
||||
|
||||
/* Configure falling trigger */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->FTSR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Mask or set line */
|
||||
if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0U)
|
||||
{
|
||||
regval |= maskline;
|
||||
}
|
||||
else
|
||||
{
|
||||
regval &= ~maskline;
|
||||
}
|
||||
|
||||
/* Store falling trigger mode */
|
||||
*regaddr = regval;
|
||||
|
||||
/* Configure gpio port selection in case of gpio exti line */
|
||||
if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
|
||||
{
|
||||
assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
|
||||
assert_param(IS_EXTI_GPIO_PIN(linepos));
|
||||
|
||||
regval = EXTI->EXTICR[(linepos >> 2U) & 0x03UL];
|
||||
regval &= ~(EXTI_EXTICR1_EXTI0 << (EXTI_EXTICR1_EXTI1_Pos * (linepos & 0x03U)));
|
||||
regval |= (pExtiConfig->GPIOSel << (EXTI_EXTICR1_EXTI1_Pos * (linepos & 0x03U)));
|
||||
EXTI->EXTICR[(linepos >> 2U) & 0x03UL] = regval;
|
||||
}
|
||||
}
|
||||
|
||||
/* Configure interrupt mode : read current mode */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Mask or set line */
|
||||
if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0U)
|
||||
{
|
||||
regval |= maskline;
|
||||
}
|
||||
else
|
||||
{
|
||||
regval &= ~maskline;
|
||||
}
|
||||
|
||||
/* Store interrupt mode */
|
||||
*regaddr = regval;
|
||||
|
||||
/* Configure event mode : read current mode */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Mask or set line */
|
||||
if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0U)
|
||||
{
|
||||
regval |= maskline;
|
||||
}
|
||||
else
|
||||
{
|
||||
regval &= ~maskline;
|
||||
}
|
||||
|
||||
/* Store event mode */
|
||||
*regaddr = regval;
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get configuration of a dedicated Exti line.
|
||||
* @param hexti Exti handle.
|
||||
* @param pExtiConfig Pointer on structure to store Exti configuration.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
|
||||
{
|
||||
const __IO uint32_t *regaddr;
|
||||
uint32_t regval;
|
||||
uint32_t linepos;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
|
||||
/* Check null pointer */
|
||||
if ((hexti == NULL) || (pExtiConfig == NULL))
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check the parameter */
|
||||
assert_param(IS_EXTI_LINE(hexti->Line));
|
||||
|
||||
/* Store handle line number to configiguration structure */
|
||||
pExtiConfig->Line = hexti->Line;
|
||||
|
||||
/* compute line register offset and line mask */
|
||||
offset = ((pExtiConfig->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
|
||||
maskline = (1UL << linepos);
|
||||
|
||||
/* 1] Get core mode : interrupt */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Check if selected line is enable */
|
||||
if ((regval & maskline) != 0U)
|
||||
{
|
||||
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
|
||||
}
|
||||
else
|
||||
{
|
||||
pExtiConfig->Mode = EXTI_MODE_NONE;
|
||||
}
|
||||
|
||||
/* Get event mode */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Check if selected line is enable */
|
||||
if ((regval & maskline) != 0U)
|
||||
{
|
||||
pExtiConfig->Mode |= EXTI_MODE_EVENT;
|
||||
}
|
||||
|
||||
/* 2] Get trigger for configurable lines : rising */
|
||||
if ((pExtiConfig->Line & EXTI_CONFIG) != 0U)
|
||||
{
|
||||
regaddr = (__IO uint32_t *)(&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Get default Trigger and GPIOSel configuration */
|
||||
pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
|
||||
pExtiConfig->GPIOSel = 0x00u;
|
||||
|
||||
/* Check if configuration of selected line is enable */
|
||||
if ((regval & maskline) != 0U)
|
||||
{
|
||||
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
|
||||
}
|
||||
|
||||
/* Get falling configuration */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->FTSR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Check if configuration of selected line is enable */
|
||||
if ((regval & maskline) != 0U)
|
||||
{
|
||||
pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
|
||||
}
|
||||
|
||||
/* Get Gpio port selection for gpio lines */
|
||||
if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
|
||||
{
|
||||
assert_param(IS_EXTI_GPIO_PIN(linepos));
|
||||
|
||||
regval = EXTI->EXTICR[(linepos >> 2U) & 0x03UL];
|
||||
pExtiConfig->GPIOSel = (regval >> (EXTI_EXTICR1_EXTI1_Pos * (linepos & 0x03u))) & EXTI_EXTICR1_EXTI0;
|
||||
}
|
||||
}
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Clear whole configuration of a dedicated Exti line.
|
||||
* @param hexti Exti handle.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(const EXTI_HandleTypeDef *hexti)
|
||||
{
|
||||
__IO uint32_t *regaddr;
|
||||
uint32_t regval;
|
||||
uint32_t linepos;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
|
||||
/* Check null pointer */
|
||||
if (hexti == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check the parameter */
|
||||
assert_param(IS_EXTI_LINE(hexti->Line));
|
||||
|
||||
/* compute line register offset and line mask */
|
||||
offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
linepos = (hexti->Line & EXTI_PIN_MASK);
|
||||
maskline = (1UL << linepos);
|
||||
|
||||
/* 1] Clear interrupt mode */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
|
||||
regval = (*regaddr & ~maskline);
|
||||
*regaddr = regval;
|
||||
|
||||
/* 2] Clear event mode */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
|
||||
regval = (*regaddr & ~maskline);
|
||||
*regaddr = regval;
|
||||
|
||||
/* 3] Clear triggers in case of configurable lines */
|
||||
if ((hexti->Line & EXTI_CONFIG) != 0U)
|
||||
{
|
||||
regaddr = (__IO uint32_t *)(&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
regval = (*regaddr & ~maskline);
|
||||
*regaddr = regval;
|
||||
|
||||
regaddr = (__IO uint32_t *)(&EXTI->FTSR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
regval = (*regaddr & ~maskline);
|
||||
*regaddr = regval;
|
||||
|
||||
/* Get Gpio port selection for gpio lines */
|
||||
if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
|
||||
{
|
||||
assert_param(IS_EXTI_GPIO_PIN(linepos));
|
||||
|
||||
regval = EXTI->EXTICR[(linepos >> 2U) & 0x03UL];
|
||||
regval &= ~(EXTI_EXTICR1_EXTI0 << (EXTI_EXTICR1_EXTI1_Pos * (linepos & 0x03U)));
|
||||
EXTI->EXTICR[(linepos >> 2U) & 0x03UL] = regval;
|
||||
}
|
||||
}
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Register callback for a dedicaated Exti line.
|
||||
* @param hexti Exti handle.
|
||||
* @param CallbackID User callback identifier.
|
||||
* This parameter can be one of @arg @ref EXTI_CallbackIDTypeDef values.
|
||||
* @param pPendingCbfn function pointer to be stored as callback.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID,
|
||||
void (*pPendingCbfn)(void))
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
|
||||
switch (CallbackID)
|
||||
{
|
||||
case HAL_EXTI_COMMON_CB_ID:
|
||||
hexti->RisingCallback = pPendingCbfn;
|
||||
hexti->FallingCallback = pPendingCbfn;
|
||||
break;
|
||||
|
||||
case HAL_EXTI_RISING_CB_ID:
|
||||
hexti->RisingCallback = pPendingCbfn;
|
||||
break;
|
||||
|
||||
case HAL_EXTI_FALLING_CB_ID:
|
||||
hexti->FallingCallback = pPendingCbfn;
|
||||
break;
|
||||
|
||||
default:
|
||||
status = HAL_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Store line number as handle private field.
|
||||
* @param hexti Exti handle.
|
||||
* @param ExtiLine Exti line number.
|
||||
* This parameter can be from 0 to @ref EXTI_LINE_NB.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_EXTI_LINE(ExtiLine));
|
||||
|
||||
/* Check null pointer */
|
||||
if (hexti == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Store line number as handle private field */
|
||||
hexti->Line = ExtiLine;
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup EXTI_Exported_Functions_Group2
|
||||
* @brief EXTI IO functions.
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### IO operation functions #####
|
||||
===============================================================================
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Handle EXTI interrupt request.
|
||||
* @param hexti Exti handle.
|
||||
* @retval none.
|
||||
*/
|
||||
void HAL_EXTI_IRQHandler(const EXTI_HandleTypeDef *hexti)
|
||||
{
|
||||
__IO uint32_t *regaddr;
|
||||
uint32_t regval;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
|
||||
/* Compute line register offset and line mask */
|
||||
offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
maskline = (1UL << (hexti->Line & EXTI_PIN_MASK));
|
||||
|
||||
/* Get rising edge pending bit */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->RPR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
regval = (*regaddr & maskline);
|
||||
|
||||
if (regval != 0U)
|
||||
{
|
||||
/* Clear pending bit */
|
||||
*regaddr = maskline;
|
||||
|
||||
/* Call rising callback */
|
||||
if (hexti->RisingCallback != NULL)
|
||||
{
|
||||
hexti->RisingCallback();
|
||||
}
|
||||
}
|
||||
|
||||
/* Get falling edge pending bit */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->FPR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
regval = (*regaddr & maskline);
|
||||
|
||||
if (regval != 0U)
|
||||
{
|
||||
/* Clear pending bit */
|
||||
*regaddr = maskline;
|
||||
|
||||
/* Call rising callback */
|
||||
if (hexti->FallingCallback != NULL)
|
||||
{
|
||||
hexti->FallingCallback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get interrupt pending bit of a dedicated line.
|
||||
* @param hexti Exti handle.
|
||||
* @param Edge Specify which pending edge as to be checked.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg @ref EXTI_TRIGGER_RISING
|
||||
* @arg @ref EXTI_TRIGGER_FALLING
|
||||
* @retval 1 if interrupt is pending else 0.
|
||||
*/
|
||||
uint32_t HAL_EXTI_GetPending(const EXTI_HandleTypeDef *hexti, uint32_t Edge)
|
||||
{
|
||||
const __IO uint32_t *regaddr;
|
||||
uint32_t regval;
|
||||
uint32_t linepos;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_EXTI_LINE(hexti->Line));
|
||||
assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
|
||||
assert_param(IS_EXTI_PENDING_EDGE(Edge));
|
||||
|
||||
/* compute line register offset and line mask */
|
||||
offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
linepos = (hexti->Line & EXTI_PIN_MASK);
|
||||
maskline = (1UL << linepos);
|
||||
|
||||
if (Edge != EXTI_TRIGGER_RISING)
|
||||
{
|
||||
/* Get falling edge pending bit */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->FPR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get rising edge pending bit */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->RPR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
}
|
||||
|
||||
/* return 1 if bit is set else 0 */
|
||||
regval = ((*regaddr & maskline) >> linepos);
|
||||
return regval;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Clear interrupt pending bit of a dedicated line.
|
||||
* @param hexti Exti handle.
|
||||
* @param Edge Specify which pending edge as to be clear.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg @ref EXTI_TRIGGER_RISING
|
||||
* @arg @ref EXTI_TRIGGER_FALLING
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_EXTI_ClearPending(const EXTI_HandleTypeDef *hexti, uint32_t Edge)
|
||||
{
|
||||
__IO uint32_t *regaddr;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_EXTI_LINE(hexti->Line));
|
||||
assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
|
||||
assert_param(IS_EXTI_PENDING_EDGE(Edge));
|
||||
|
||||
/* compute line register offset and line mask */
|
||||
offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
maskline = (1UL << (hexti->Line & EXTI_PIN_MASK));
|
||||
|
||||
if (Edge != EXTI_TRIGGER_RISING)
|
||||
{
|
||||
/* Get falling edge pending register address */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->FPR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get falling edge pending register address */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->RPR1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
}
|
||||
|
||||
/* Clear Pending bit */
|
||||
*regaddr = maskline;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Generate a software interrupt for a dedicated line.
|
||||
* @param hexti Exti handle.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_EXTI_GenerateSWI(const EXTI_HandleTypeDef *hexti)
|
||||
{
|
||||
__IO uint32_t *regaddr;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_EXTI_LINE(hexti->Line));
|
||||
assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
|
||||
|
||||
/* compute line register offset and line mask */
|
||||
offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
maskline = (1UL << (hexti->Line & EXTI_PIN_MASK));
|
||||
|
||||
regaddr = (__IO uint32_t *)(&EXTI->SWIER1 + (EXTI_CONFIG_OFFSET * offset));
|
||||
*regaddr = maskline;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup EXTI_Exported_Functions_Group3 EXTI line attributes management functions
|
||||
* @brief EXTI attributes management functions.
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### EXTI attributes functions #####
|
||||
===============================================================================
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Configure the EXTI line attribute(s).
|
||||
* @note Available attributes are to secure EXTI line and set EXT line as privileged.
|
||||
* Default state is not secure and unprivileged access allowed.
|
||||
* @note Secure and non-secure attributes can only be set from the secure
|
||||
* state when the system implements the security (TZEN=1).
|
||||
* @note Security and privilege attributes can be set independently.
|
||||
* @param ExtiLine Exti line number.
|
||||
* This parameter can be from 0 to @ref EXTI_LINE_NB.
|
||||
* @param LineAttributes can be one or a combination of the following values:
|
||||
* @arg @ref EXTI_LINE_PRIV Privileged-only access
|
||||
* @arg @ref EXTI_LINE_NPRIV Privileged/Non-privileged access
|
||||
* @arg @ref EXTI_LINE_SEC Secure-only access
|
||||
* @arg @ref EXTI_LINE_NSEC Secure/Non-secure access
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_EXTI_ConfigLineAttributes(uint32_t ExtiLine, uint32_t LineAttributes)
|
||||
{
|
||||
__IO uint32_t *regaddr;
|
||||
uint32_t regval;
|
||||
uint32_t linepos;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_EXTI_LINE(ExtiLine));
|
||||
assert_param(IS_EXTI_LINE_ATTRIBUTES(LineAttributes));
|
||||
|
||||
/* compute line register offset and line mask */
|
||||
offset = ((ExtiLine & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
linepos = (ExtiLine & EXTI_PIN_MASK);
|
||||
maskline = (1UL << linepos);
|
||||
|
||||
/* Configure privilege or non-privilege attributes */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->PRIVCFGR1 + (EXTI_PRIVCFGR_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Mask or set line */
|
||||
if ((LineAttributes & EXTI_LINE_PRIV) == EXTI_LINE_PRIV)
|
||||
{
|
||||
regval |= maskline;
|
||||
}
|
||||
else if ((LineAttributes & EXTI_LINE_NPRIV) == EXTI_LINE_NPRIV)
|
||||
{
|
||||
regval &= ~maskline;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* do nothing */
|
||||
}
|
||||
|
||||
/* Store privilege or non-privilege attribute */
|
||||
*regaddr = regval;
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
|
||||
/* Configure secure or non-secure attributes */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->SECCFGR1 + (EXTI_SECCFGR_OFFSET * offset));
|
||||
regval = *regaddr;
|
||||
|
||||
/* Mask or set line */
|
||||
if ((LineAttributes & EXTI_LINE_SEC) == EXTI_LINE_SEC)
|
||||
{
|
||||
regval |= maskline;
|
||||
}
|
||||
else if ((LineAttributes & EXTI_LINE_NSEC) == EXTI_LINE_NSEC)
|
||||
{
|
||||
regval &= ~maskline;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* do nothing */
|
||||
}
|
||||
|
||||
/* Store secure or non-secure attribute */
|
||||
*regaddr = regval;
|
||||
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the EXTI line attribute(s).
|
||||
* @note Secure and non-secure attributes are only available from secure state
|
||||
* when the system implements the security (TZEN=1)
|
||||
* @param ExtiLine Exti line number.
|
||||
* This parameter can be from 0 to @ref EXTI_LINE_NB.
|
||||
* @param pLineAttributes: pointer to return line attributes.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_EXTI_GetConfigLineAttributes(uint32_t ExtiLine, uint32_t *pLineAttributes)
|
||||
{
|
||||
const __IO uint32_t *regaddr;
|
||||
uint32_t linepos;
|
||||
uint32_t maskline;
|
||||
uint32_t offset;
|
||||
uint32_t attributes;
|
||||
|
||||
/* Check null pointer */
|
||||
if (pLineAttributes == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_EXTI_LINE(ExtiLine));
|
||||
|
||||
/* Compute line register offset and line mask */
|
||||
offset = ((ExtiLine & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
|
||||
linepos = (ExtiLine & EXTI_PIN_MASK);
|
||||
maskline = (1UL << linepos);
|
||||
|
||||
/* Get privilege or non-privilege attribute */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->PRIVCFGR1 + (EXTI_PRIVCFGR_OFFSET * offset));
|
||||
|
||||
if ((*regaddr & maskline) != 0U)
|
||||
{
|
||||
attributes = EXTI_LINE_PRIV;
|
||||
}
|
||||
else
|
||||
{
|
||||
attributes = EXTI_LINE_NPRIV;
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
|
||||
/* Get secure or non-secure attribute */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->SECCFGR1 + (EXTI_SECCFGR_OFFSET * offset));
|
||||
|
||||
if ((*regaddr & maskline) != 0U)
|
||||
{
|
||||
attributes |= EXTI_LINE_SEC;
|
||||
}
|
||||
else
|
||||
{
|
||||
attributes |= EXTI_LINE_NSEC;
|
||||
}
|
||||
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/* return value */
|
||||
*pLineAttributes = attributes;
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
#if defined (EXTI_LOCKR_LOCK)
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/**
|
||||
* @brief Lock the global EXTI security and privilege configuration.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_EXTI_LockConfigAttributes(void)
|
||||
{
|
||||
EXTI->LOCKR = EXTI_ATTRIBUTES_LOCKED;
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the global EXTI security and privilege lock configuration.
|
||||
* @param pLockState : Pointer to returned security and privilege configuration
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_EXTI_GetLockConfigAttributes(uint32_t *const pLockState)
|
||||
{
|
||||
uint32_t attributes;
|
||||
const __IO uint32_t *regaddr;
|
||||
|
||||
/* Check null pointer */
|
||||
if (pLockState == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Get security and privilege configuration */
|
||||
regaddr = (__IO uint32_t *)(&EXTI->LOCKR);
|
||||
|
||||
if ((*regaddr & EXTI_LOCKR_LOCK) != 0U)
|
||||
{
|
||||
attributes = EXTI_ATTRIBUTES_LOCKED;
|
||||
}
|
||||
else
|
||||
{
|
||||
attributes = EXTI_ATTRIBUTES_UNLOCKED;
|
||||
}
|
||||
|
||||
/* return value */
|
||||
*pLockState = attributes;
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
|
||||
#endif /* defined (EXTI_LOCKR_LOCK) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* HAL_EXTI_MODULE_ENABLED */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
964
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_flash.c
Normal file
964
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_flash.c
Normal file
@@ -0,0 +1,964 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_flash.c
|
||||
* @author MCD Application Team
|
||||
* @brief FLASH HAL module driver.
|
||||
* This file provides firmware functions to manage the following
|
||||
* functionalities of the internal FLASH memory:
|
||||
* + Program operations functions
|
||||
* + Memory Control functions
|
||||
* + Peripheral Errors functions
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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
|
||||
==============================================================================
|
||||
##### FLASH peripheral features #####
|
||||
==============================================================================
|
||||
|
||||
[..] The Flash memory interface manages CPU AHB C-Bus accesses to the Flash memory.
|
||||
It implements the erase and program Flash memory operations and the read
|
||||
and write protection mechanisms.
|
||||
|
||||
[..] The FLASH main features are:
|
||||
(+) Flash memory read operations
|
||||
(+) Flash memory program/erase operations
|
||||
(+) Read / write protections
|
||||
(+) Option bytes programming
|
||||
(+) TrustZone aware
|
||||
(+) Watermark-based area protection
|
||||
(+) Block-based sector protection
|
||||
(+) Error code correction (ECC)
|
||||
|
||||
|
||||
##### How to use this driver #####
|
||||
==============================================================================
|
||||
[..]
|
||||
This driver provides functions and macros to configure and program the FLASH
|
||||
memory of all STM32H5xx devices.
|
||||
|
||||
(#) FLASH Memory IO Programming functions:
|
||||
(++) Lock and Unlock the FLASH interface using HAL_FLASH_Unlock() and
|
||||
HAL_FLASH_Lock() functions
|
||||
(++) Flash memory programming by 128 bits (user area, OBKeys) and 16 bits (OTP and Flash high-cycle
|
||||
data area)
|
||||
(++) There Two modes of programming :
|
||||
(+++) Polling mode using HAL_FLASH_Program() function
|
||||
(+++) Interrupt mode using HAL_FLASH_Program_IT() function
|
||||
|
||||
(#) Interrupts and flags management functions :
|
||||
(++) Handle FLASH interrupts by calling HAL_FLASH_IRQHandler()
|
||||
(++) Callback functions are called when the flash operations are finished :
|
||||
HAL_FLASH_EndOfOperationCallback() when everything is ok, otherwise
|
||||
HAL_FLASH_OperationErrorCallback()
|
||||
(++) Get error flag status by calling HAL_FLASH_GetError()
|
||||
|
||||
(#) Option bytes management functions :
|
||||
(++) Lock and Unlock the option bytes using HAL_FLASH_OB_Unlock() and
|
||||
HAL_FLASH_OB_Lock() functions
|
||||
(++) Launch the reload of the option bytes using HAL_FLASH_OB_Launch() function.
|
||||
In this case, a reset is generated
|
||||
[..]
|
||||
In addition to these functions, this driver includes a set of macros allowing
|
||||
to handle the following operations:
|
||||
(+) Set the latency
|
||||
(+) Enable/Disable the FLASH interrupts
|
||||
(+) Monitor the FLASH flags status
|
||||
[..]
|
||||
(@) The contents of the Flash memory are not guaranteed if a device reset occurs during
|
||||
a Flash memory operation.
|
||||
|
||||
@endverbatim
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH FLASH
|
||||
* @brief FLASH HAL module driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifdef HAL_FLASH_MODULE_ENABLED
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/** @defgroup FLASH_Private_Variables FLASH Private Variables
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Variable used for Program/Erase sectors under interruption
|
||||
*/
|
||||
FLASH_ProcessTypeDef pFlash = {.Lock = HAL_UNLOCKED, \
|
||||
.ErrorCode = HAL_FLASH_ERROR_NONE, \
|
||||
.ProcedureOnGoing = 0U, \
|
||||
.Address = 0U, \
|
||||
.Bank = FLASH_BANK_1, \
|
||||
.Sector = 0U, \
|
||||
.NbSectorsToErase = 0U
|
||||
};
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/** @defgroup FLASH_Private_Functions FLASH Private Functions
|
||||
* @{
|
||||
*/
|
||||
static void FLASH_Program_QuadWord(uint32_t FlashAddress, uint32_t DataAddress);
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
static void FLASH_Program_QuadWord_OBK(uint32_t FlashAddress, uint32_t DataAddress);
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
static void FLASH_Program_HalfWord(uint32_t FlashAddress, uint32_t DataAddress);
|
||||
#if defined(FLASH_EDATAR_EDATA_EN)
|
||||
static void FLASH_Program_Word(uint32_t FlashAddress, uint32_t DataAddress);
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
/* Exported functions ---------------------------------------------------------*/
|
||||
|
||||
/** @defgroup FLASH_Exported_Functions FLASH Exported functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions
|
||||
* @brief Programming operation functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Programming operation functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
This subsection provides a set of functions allowing to manage the FLASH
|
||||
program operations.
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Program a quad-word at a specified address.
|
||||
* @param TypeProgram Indicate the way to program at a specified address.
|
||||
* This parameter can be a value of @ref FLASH_Type_Program
|
||||
* @param FlashAddress specifies the address to be programmed.
|
||||
* This parameter shall be aligned to the Flash word (128-bit)
|
||||
* @param DataAddress specifies the address of data to be programmed
|
||||
* This parameter shall be 32-bit aligned
|
||||
* @retval HAL_StatusTypeDef HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress)
|
||||
{
|
||||
HAL_StatusTypeDef status;
|
||||
__IO uint32_t *reg_cr;
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
__IO uint32_t *reg_obkcfgr;
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
|
||||
|
||||
/* Reset error code */
|
||||
pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;
|
||||
|
||||
/* Wait for last operation to be completed */
|
||||
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
|
||||
|
||||
if (status == HAL_OK)
|
||||
{
|
||||
/* Set current operation type */
|
||||
pFlash.ProcedureOnGoing = TypeProgram;
|
||||
|
||||
/* Access to SECCR or NSCR depends on operation type */
|
||||
#if defined (FLASH_OPTSR2_TZEN)
|
||||
reg_cr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCR) : &(FLASH_NS->NSCR);
|
||||
#else
|
||||
reg_cr = &(FLASH_NS->NSCR);
|
||||
#endif /* FLASH_OPTSR2_TZEN */
|
||||
|
||||
if ((TypeProgram & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_QUADWORD)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_USER_MEM_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program a quad-word (128-bit) at a specified address */
|
||||
FLASH_Program_QuadWord(FlashAddress, DataAddress);
|
||||
}
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
else if ((TypeProgram == FLASH_TYPEPROGRAM_QUADWORD_OBK) || (TypeProgram == FLASH_TYPEPROGRAM_QUADWORD_OBK_ALT))
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_OBK_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program a quad-word (128-bit) of OBK at a specified address */
|
||||
FLASH_Program_QuadWord_OBK(FlashAddress, DataAddress);
|
||||
}
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#if defined (FLASH_EDATAR_EDATA_EN)
|
||||
else if ((TypeProgram & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_HALFWORD_EDATA)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_EDATA_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program a Flash high-cycle data half-word at a specified address */
|
||||
FLASH_Program_HalfWord(FlashAddress, DataAddress);
|
||||
}
|
||||
else if ((TypeProgram & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_WORD_EDATA)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_EDATA_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program a Flash high-cycle data half-word at a specified address */
|
||||
FLASH_Program_Word(FlashAddress, DataAddress);
|
||||
}
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
else
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_OTP_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program an OTP half-word at a specified address */
|
||||
FLASH_Program_HalfWord(FlashAddress, DataAddress);
|
||||
}
|
||||
|
||||
/* Wait for last operation to be completed */
|
||||
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
|
||||
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
/* If the program operation is completed, disable the PG */
|
||||
CLEAR_BIT((*reg_cr), (TypeProgram & ~(FLASH_NON_SECURE_MASK | FLASH_OBK | FLASH_OTP | FLASH_OBKCFGR_ALT_SECT)));
|
||||
|
||||
/* Clear alternate sector bit */
|
||||
if (TypeProgram == FLASH_TYPEPROGRAM_QUADWORD_OBK_ALT)
|
||||
{
|
||||
reg_obkcfgr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECOBKCFGR) : &(FLASH_NS->NSOBKCFGR);
|
||||
CLEAR_BIT((*reg_obkcfgr), FLASH_OBKCFGR_ALT_SECT);
|
||||
}
|
||||
#else
|
||||
/* If the program operation is completed, disable the PG */
|
||||
CLEAR_BIT((*reg_cr), (TypeProgram & ~(FLASH_NON_SECURE_MASK | FLASH_OTP)));
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
}
|
||||
/* return status */
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Program a quad-word at a specified address with interrupt enabled.
|
||||
* @param TypeProgram Indicate the way to program at a specified address.
|
||||
* This parameter can be a value of @ref FLASH_Type_Program
|
||||
* @param FlashAddress specifies the address to be programmed.
|
||||
* This parameter shall be aligned to the Flash word (128-bit)
|
||||
* @param DataAddress specifies the address of data to be programmed
|
||||
* This parameter shall be 32-bit aligned
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t FlashAddress, uint32_t DataAddress)
|
||||
{
|
||||
HAL_StatusTypeDef status;
|
||||
__IO uint32_t *reg_cr;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
|
||||
|
||||
/* Reset error code */
|
||||
pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;
|
||||
|
||||
/* Wait for last operation to be completed */
|
||||
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
|
||||
|
||||
if (status != HAL_OK)
|
||||
{
|
||||
/* Process Unlocked */
|
||||
__HAL_UNLOCK(&pFlash);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Set internal variables used by the IRQ handler */
|
||||
pFlash.ProcedureOnGoing = TypeProgram;
|
||||
pFlash.Address = FlashAddress;
|
||||
|
||||
/* Access to SECCR or NSCR depends on operation type */
|
||||
#if defined (FLASH_OPTSR2_TZEN)
|
||||
reg_cr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCR) : &(FLASH_NS->NSCR);
|
||||
#else
|
||||
reg_cr = &(FLASH_NS->NSCR);
|
||||
#endif /* FLASH_OPTSR2_TZEN */
|
||||
|
||||
/* Enable End of Operation and Error interrupts */
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
(*reg_cr) |= (FLASH_IT_EOP | FLASH_IT_WRPERR | FLASH_IT_PGSERR | \
|
||||
FLASH_IT_STRBERR | FLASH_IT_INCERR | FLASH_IT_OBKERR | \
|
||||
FLASH_IT_OBKWERR);
|
||||
#else
|
||||
(*reg_cr) |= (FLASH_IT_EOP | FLASH_IT_WRPERR | FLASH_IT_PGSERR | \
|
||||
FLASH_IT_STRBERR | FLASH_IT_INCERR);
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
|
||||
if ((TypeProgram & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_QUADWORD)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_USER_MEM_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program a quad-word (128-bit) at a specified address */
|
||||
FLASH_Program_QuadWord(FlashAddress, DataAddress);
|
||||
}
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
else if (((TypeProgram & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_QUADWORD_OBK) || \
|
||||
((TypeProgram & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_QUADWORD_OBK_ALT))
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_OBK_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program a quad-word (128-bit) of OBK at a specified address */
|
||||
FLASH_Program_QuadWord_OBK(FlashAddress, DataAddress);
|
||||
}
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
#if defined (FLASH_EDATAR_EDATA_EN)
|
||||
else if ((TypeProgram & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_HALFWORD_EDATA)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_EDATA_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program a Flash high-cycle data half-word at a specified address */
|
||||
FLASH_Program_HalfWord(FlashAddress, DataAddress);
|
||||
}
|
||||
else if ((TypeProgram & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_WORD_EDATA)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_EDATA_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program a Flash high-cycle data word at a specified address */
|
||||
FLASH_Program_Word(FlashAddress, DataAddress);
|
||||
}
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
else
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_FLASH_OTP_ADDRESS(FlashAddress));
|
||||
|
||||
/* Program an OTP word at a specified address */
|
||||
FLASH_Program_HalfWord(FlashAddress, DataAddress);
|
||||
}
|
||||
}
|
||||
|
||||
/* return status */
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles FLASH interrupt request.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_FLASH_IRQHandler(void)
|
||||
{
|
||||
uint32_t param = 0U;
|
||||
uint32_t errorflag;
|
||||
__IO uint32_t *reg_cr;
|
||||
__IO uint32_t *reg_ccr;
|
||||
const __IO uint32_t *reg_sr;
|
||||
const __IO uint32_t *reg_ecccorr;
|
||||
|
||||
/* Access to CR, CCR and SR registers depends on operation type */
|
||||
#if defined (FLASH_OPTSR2_TZEN)
|
||||
reg_cr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCR) : &(FLASH_NS->NSCR);
|
||||
reg_ccr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCCR) : &(FLASH_NS->NSCCR);
|
||||
reg_sr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECSR) : &(FLASH_NS->NSSR);
|
||||
#else
|
||||
reg_cr = &(FLASH_NS->NSCR);
|
||||
reg_ccr = &(FLASH_NS->NSCCR);
|
||||
reg_sr = &(FLASH_NS->NSSR);
|
||||
#endif /* FLASH_OPTSR2_TZEN */
|
||||
reg_ecccorr = &(FLASH->ECCCORR);
|
||||
|
||||
/* Save Flash errors */
|
||||
errorflag = (*reg_sr) & FLASH_FLAG_SR_ERRORS;
|
||||
/* Add option byte error flag, if any */
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
errorflag |= (FLASH->NSSR & FLASH_FLAG_OPTCHANGEERR);
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/* Set parameter of the callback */
|
||||
if ((pFlash.ProcedureOnGoing & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEERASE_SECTORS)
|
||||
{
|
||||
param = pFlash.Sector;
|
||||
}
|
||||
else if ((pFlash.ProcedureOnGoing & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEERASE_MASSERASE)
|
||||
{
|
||||
param = pFlash.Bank;
|
||||
}
|
||||
else if ((pFlash.ProcedureOnGoing & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEPROGRAM_QUADWORD)
|
||||
{
|
||||
param = pFlash.Address;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Empty statement (to be compliant MISRA 15.7) */
|
||||
}
|
||||
|
||||
/* Clear operation bit on the on-going procedure */
|
||||
CLEAR_BIT((*reg_cr), (pFlash.ProcedureOnGoing & ~(FLASH_NON_SECURE_MASK)));
|
||||
|
||||
/* Check FLASH operation error flags */
|
||||
if (errorflag != 0U)
|
||||
{
|
||||
/* Save the error code */
|
||||
pFlash.ErrorCode |= errorflag;
|
||||
|
||||
/* Clear error programming flags */
|
||||
(*reg_ccr) = errorflag & FLASH_FLAG_SR_ERRORS;
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
if ((errorflag & FLASH_FLAG_OPTCHANGEERR) != 0U)
|
||||
{
|
||||
FLASH->NSCCR = FLASH_FLAG_OPTCHANGEERR;
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/* Stop the procedure ongoing */
|
||||
pFlash.ProcedureOnGoing = 0U;
|
||||
|
||||
/* FLASH error interrupt user callback */
|
||||
HAL_FLASH_OperationErrorCallback(param);
|
||||
}
|
||||
|
||||
/* Check FLASH End of Operation flag */
|
||||
if (((*reg_sr) & FLASH_FLAG_EOP) != 0U)
|
||||
{
|
||||
/* Clear FLASH End of Operation pending bit */
|
||||
(*reg_ccr) = FLASH_FLAG_EOP;
|
||||
|
||||
if ((pFlash.ProcedureOnGoing & (~FLASH_NON_SECURE_MASK)) == FLASH_TYPEERASE_SECTORS)
|
||||
{
|
||||
/* Nb of sector to erased can be decreased */
|
||||
pFlash.NbSectorsToErase--;
|
||||
|
||||
/* Check if there are still sectors to erase */
|
||||
if (pFlash.NbSectorsToErase != 0U)
|
||||
{
|
||||
/* Increment sector number */
|
||||
pFlash.Sector++;
|
||||
FLASH_Erase_Sector(pFlash.Sector, pFlash.Bank);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No more sectors to erase */
|
||||
/* Reset sector parameter and stop erase sectors procedure */
|
||||
param = 0xFFFFFFFFU;
|
||||
pFlash.ProcedureOnGoing = 0U;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Clear the procedure ongoing */
|
||||
pFlash.ProcedureOnGoing = 0U;
|
||||
}
|
||||
|
||||
/* FLASH EOP interrupt user callback */
|
||||
HAL_FLASH_EndOfOperationCallback(param);
|
||||
}
|
||||
|
||||
/* Check FLASH ECC correction flag */
|
||||
if ((*reg_ecccorr & FLASH_ECCR_ECCC) != 0U)
|
||||
{
|
||||
/* Call User callback */
|
||||
HAL_FLASHEx_EccCorrectionCallback();
|
||||
|
||||
/* Clear ECC correction flag in order to allow new ECC error record */
|
||||
FLASH->ECCCORR |= FLASH_ECCR_ECCC;
|
||||
}
|
||||
|
||||
if (pFlash.ProcedureOnGoing == 0U)
|
||||
{
|
||||
/* Disable Flash Operation and Error source interrupt */
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
(*reg_cr) &= ~(FLASH_IT_EOP | FLASH_IT_WRPERR | FLASH_IT_PGSERR | \
|
||||
FLASH_IT_STRBERR | FLASH_IT_INCERR | FLASH_IT_OBKERR | \
|
||||
FLASH_IT_OBKWERR | FLASH_IT_OPTCHANGEERR);
|
||||
#else
|
||||
(*reg_cr) &= ~(FLASH_IT_EOP | FLASH_IT_WRPERR | FLASH_IT_PGSERR | \
|
||||
FLASH_IT_STRBERR | FLASH_IT_INCERR | FLASH_IT_OPTCHANGEERR);
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief FLASH end of operation interrupt callback
|
||||
* @param ReturnValue The value saved in this parameter depends on the ongoing procedure
|
||||
* Mass Erase: Bank number which has been requested to erase
|
||||
* Sectors Erase: Sector which has been erased
|
||||
* (if 0xFFFFFFFF, it means that all the selected sectors have been erased)
|
||||
* Program: Address which was selected for data program
|
||||
* @retval None
|
||||
*/
|
||||
__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue)
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(ReturnValue);
|
||||
|
||||
/* NOTE : This function Should not be modified, when the callback is needed,
|
||||
the HAL_FLASH_EndOfOperationCallback could be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief FLASH operation error interrupt callback
|
||||
* @param ReturnValue The value saved in this parameter depends on the ongoing procedure
|
||||
* Mass Erase: Bank number which has been requested to erase
|
||||
* Sectors Erase: Sector number which returned an error
|
||||
* Program: Address which was selected for data program
|
||||
* @retval None
|
||||
*/
|
||||
__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue)
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(ReturnValue);
|
||||
|
||||
/* NOTE : This function Should not be modified, when the callback is needed,
|
||||
the HAL_FLASH_OperationErrorCallback could be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions
|
||||
* @brief Management functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Peripheral Control functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
This subsection provides a set of functions allowing to control the FLASH
|
||||
memory operations.
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Unlock the FLASH control registers access
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_FLASH_Unlock(void)
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
|
||||
if (READ_BIT(FLASH->NSCR, FLASH_CR_LOCK) != 0U)
|
||||
{
|
||||
/* Authorize the FLASH Control Register access */
|
||||
WRITE_REG(FLASH->NSKEYR, FLASH_KEY1);
|
||||
WRITE_REG(FLASH->NSKEYR, FLASH_KEY2);
|
||||
|
||||
/* Verify Flash CR is unlocked */
|
||||
if (READ_BIT(FLASH->NSCR, FLASH_CR_LOCK) != 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
if (status == HAL_OK)
|
||||
{
|
||||
if (READ_BIT(FLASH->SECCR, FLASH_CR_LOCK) != 0U)
|
||||
{
|
||||
/* Authorize the FLASH Control Register access */
|
||||
WRITE_REG(FLASH->SECKEYR, FLASH_KEY1);
|
||||
WRITE_REG(FLASH->SECKEYR, FLASH_KEY2);
|
||||
|
||||
/* verify Flash CR is unlocked */
|
||||
if (READ_BIT(FLASH->SECCR, FLASH_CR_LOCK) != 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Locks the FLASH control registers access
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_FLASH_Lock(void)
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
|
||||
/* Set the LOCK Bit to lock the FLASH Control Register access */
|
||||
SET_BIT(FLASH->NSCR, FLASH_CR_LOCK);
|
||||
|
||||
/* Verify Flash is locked */
|
||||
if (READ_BIT(FLASH->NSCR, FLASH_CR_LOCK) == 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
if (status == HAL_OK)
|
||||
{
|
||||
/* Set the LOCK Bit to lock the FLASH Control Register access */
|
||||
SET_BIT(FLASH->SECCR, FLASH_CR_LOCK);
|
||||
|
||||
/* verify Flash is locked */
|
||||
if (READ_BIT(FLASH->SECCR, FLASH_CR_LOCK) == 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Unlock the FLASH Option Control Registers access.
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void)
|
||||
{
|
||||
if (READ_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTLOCK) != 0U)
|
||||
{
|
||||
/* Authorizes the Option Byte registers programming */
|
||||
WRITE_REG(FLASH->OPTKEYR, FLASH_OPT_KEY1);
|
||||
WRITE_REG(FLASH->OPTKEYR, FLASH_OPT_KEY2);
|
||||
|
||||
/* Verify that the Option Bytes are unlocked */
|
||||
if (READ_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTLOCK) != 0U)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Lock the FLASH Option Control Registers access.
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void)
|
||||
{
|
||||
/* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */
|
||||
SET_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTLOCK);
|
||||
|
||||
/* Verify that the Option Bytes are locked */
|
||||
if (READ_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTLOCK) != 0U)
|
||||
{
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Launch the option bytes loading.
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void)
|
||||
{
|
||||
HAL_StatusTypeDef status;
|
||||
|
||||
/* Set OPTSTRT Bit */
|
||||
SET_BIT(FLASH->OPTCR, FLASH_OPTCR_OPTSTART);
|
||||
|
||||
/* Wait for OB change operation to be completed */
|
||||
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup FLASH_Exported_Functions_Group3 Peripheral State and Errors functions
|
||||
* @brief Peripheral Errors functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Peripheral Errors functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
This subsection permits to get in run-time Errors of the FLASH peripheral.
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get the specific FLASH error flag.
|
||||
* @retval HAL_FLASH_ERRORCode The returned value can be:
|
||||
* @arg HAL_FLASH_ERROR_NONE : No error set
|
||||
* @arg HAL_FLASH_ERROR_WRP : Write Protection Error
|
||||
* @arg HAL_FLASH_ERROR_PGS : Program Sequence Error
|
||||
* @arg HAL_FLASH_ERROR_STRB : Strobe Error
|
||||
* @arg HAL_FLASH_ERROR_INC : Inconsistency Error
|
||||
* @arg HAL_FLASH_ERROR_OBK : OBK Error
|
||||
* @arg HAL_FLASH_ERROR_OBKW : OBK Write Error
|
||||
* @arg HAL_FLASH_ERROR_OB_CHANGE : Option Byte Change Error
|
||||
* @arg HAL_FLASH_ERROR_ECCC : ECC Single Correction Error
|
||||
* @arg HAL_FLASH_ERROR_ECCD : ECC Double Detection Error
|
||||
*/
|
||||
uint32_t HAL_FLASH_GetError(void)
|
||||
{
|
||||
return pFlash.ErrorCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
/** @addtogroup FLASH_Private_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Wait for a FLASH operation to complete.
|
||||
* @param Timeout maximum flash operation timeout
|
||||
* @retval HAL_StatusTypeDef HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
|
||||
{
|
||||
/* Wait for the FLASH operation to complete by polling on BUSY, WBNE and DBNE flags to be reset.
|
||||
Even if the FLASH operation fails, the BUSY, WBNE and DBNE flags will be reset and an error
|
||||
flag will be set */
|
||||
|
||||
uint32_t errorflag;
|
||||
const __IO uint32_t *reg_sr;
|
||||
__IO uint32_t *reg_ccr;
|
||||
|
||||
uint32_t tickstart = HAL_GetTick();
|
||||
|
||||
/* Access to SR register depends on operation type */
|
||||
#if defined (FLASH_OPTSR2_TZEN)
|
||||
reg_sr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECSR) : &(FLASH_NS->NSSR);
|
||||
#else
|
||||
reg_sr = &(FLASH_NS->NSSR);
|
||||
#endif /* FLASH_OPTSR2_TZEN */
|
||||
|
||||
/* Wait on BSY, WBNE and DBNE flags to be reset */
|
||||
while (((*reg_sr) & (FLASH_FLAG_BSY | FLASH_FLAG_WBNE | FLASH_FLAG_DBNE)) != 0U)
|
||||
{
|
||||
if (Timeout != HAL_MAX_DELAY)
|
||||
{
|
||||
if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
|
||||
{
|
||||
return HAL_TIMEOUT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Access to CCR register depends on operation type */
|
||||
#if defined (FLASH_OPTSR2_TZEN)
|
||||
reg_ccr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCCR) : &(FLASH_NS->NSCCR);
|
||||
#else
|
||||
reg_ccr = &(FLASH_NS->NSCCR);
|
||||
#endif /* FLASH_OPTSR2_TZEN */
|
||||
|
||||
/* Check FLASH operation error flags */
|
||||
errorflag = ((*reg_sr) & FLASH_FLAG_SR_ERRORS);
|
||||
/* Add option byte error flag, if any */
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
errorflag |= (FLASH->NSSR & FLASH_FLAG_OPTCHANGEERR);
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
/* In case of error reported in Flash SR or OPTSR registers */
|
||||
if (errorflag != 0U)
|
||||
{
|
||||
/*Save the error code*/
|
||||
pFlash.ErrorCode |= errorflag;
|
||||
|
||||
/* Clear error flags */
|
||||
(*reg_ccr) = errorflag & FLASH_FLAG_SR_ERRORS;
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
if ((errorflag & FLASH_FLAG_OPTCHANGEERR) != 0U)
|
||||
{
|
||||
FLASH->NSCCR = FLASH_FLAG_OPTCHANGEERR;
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check FLASH End of Operation flag */
|
||||
if (((*reg_sr) & FLASH_FLAG_EOP) != 0U)
|
||||
{
|
||||
/* Clear FLASH End of Operation pending bit */
|
||||
(*reg_ccr) = FLASH_FLAG_EOP;
|
||||
}
|
||||
|
||||
/* If there is no error flag set */
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Program a quad-word (128-bit) at a specified address.
|
||||
* @param FlashAddress specifies the address to be programmed.
|
||||
* @param DataAddress specifies the address of data to be programmed.
|
||||
* @retval None
|
||||
*/
|
||||
static void FLASH_Program_QuadWord(uint32_t FlashAddress, uint32_t DataAddress)
|
||||
{
|
||||
uint8_t index = 4;
|
||||
uint32_t *dest_addr = (uint32_t *)FlashAddress;
|
||||
uint32_t *src_addr = (uint32_t *)DataAddress;
|
||||
uint32_t primask_bit;
|
||||
__IO uint32_t *reg_cr;
|
||||
|
||||
/* Access to SECCR or NSCR registers depends on operation type */
|
||||
#if defined (FLASH_OPTSR2_TZEN)
|
||||
reg_cr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCR) : &(FLASH_NS->NSCR);
|
||||
#else
|
||||
reg_cr = &(FLASH_NS->NSCR);
|
||||
#endif /* FLASH_OPTSR2_TZEN */
|
||||
|
||||
/* Set PG bit */
|
||||
SET_BIT((*reg_cr), FLASH_CR_PG);
|
||||
|
||||
/* Enter critical section: Disable interrupts to avoid any interruption during the loop */
|
||||
primask_bit = __get_PRIMASK();
|
||||
__disable_irq();
|
||||
|
||||
/* Program the quad-word */
|
||||
do
|
||||
{
|
||||
*dest_addr = *src_addr;
|
||||
dest_addr++;
|
||||
src_addr++;
|
||||
index--;
|
||||
} while (index != 0U);
|
||||
|
||||
/* Exit critical section: restore previous priority mask */
|
||||
__set_PRIMASK(primask_bit);
|
||||
}
|
||||
|
||||
#if defined (FLASH_SR_OBKERR)
|
||||
/**
|
||||
* @brief Program a quad-word (128-bit) of OBK at a specified address.
|
||||
* @param FlashAddress specifies the address to be programmed.
|
||||
* @param DataAddress specifies the address of data to be programmed.
|
||||
* @retval None
|
||||
*/
|
||||
static void FLASH_Program_QuadWord_OBK(uint32_t FlashAddress, uint32_t DataAddress)
|
||||
{
|
||||
uint8_t index = 4;
|
||||
uint32_t *dest_addr = (uint32_t *)FlashAddress;
|
||||
uint32_t *src_addr = (uint32_t *)DataAddress;
|
||||
uint32_t primask_bit;
|
||||
__IO uint32_t *reg_cr;
|
||||
__IO uint32_t *reg_obkcfgr;
|
||||
|
||||
/* Access to SECCR or NSCR registers depends on operation type */
|
||||
reg_cr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCR) : &(FLASH_NS->NSCR);
|
||||
reg_obkcfgr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECOBKCFGR) : &(FLASH_NS->NSOBKCFGR);
|
||||
|
||||
/* Set PG bit */
|
||||
SET_BIT((*reg_cr), FLASH_CR_PG);
|
||||
|
||||
/* Set ALT_SECT bit */
|
||||
SET_BIT((*reg_obkcfgr), pFlash.ProcedureOnGoing & FLASH_OBKCFGR_ALT_SECT);
|
||||
|
||||
/* Enter critical section: Disable interrupts to avoid any interruption during the loop */
|
||||
primask_bit = __get_PRIMASK();
|
||||
__disable_irq();
|
||||
|
||||
/* Program the quad-word */
|
||||
do
|
||||
{
|
||||
*dest_addr = *src_addr;
|
||||
dest_addr++;
|
||||
src_addr++;
|
||||
index--;
|
||||
} while (index != 0U);
|
||||
|
||||
/* Exit critical section: restore previous priority mask */
|
||||
__set_PRIMASK(primask_bit);
|
||||
}
|
||||
#endif /* FLASH_SR_OBKERR */
|
||||
|
||||
/**
|
||||
* @brief Program a half-word (16-bit) at a specified address.
|
||||
* @param FlashAddress specifies the address to be programmed.
|
||||
* @param DataAddress specifies the address of data to be programmed.
|
||||
* @retval None
|
||||
*/
|
||||
static void FLASH_Program_HalfWord(uint32_t FlashAddress, uint32_t DataAddress)
|
||||
{
|
||||
__IO uint32_t *reg_cr;
|
||||
|
||||
/* Access to SECCR or NSCR registers depends on operation type */
|
||||
#if defined (FLASH_OPTSR2_TZEN)
|
||||
reg_cr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCR) : &(FLASH_NS->NSCR);
|
||||
#else
|
||||
reg_cr = &(FLASH_NS->NSCR);
|
||||
#endif /* FLASH_OPTSR2_TZEN */
|
||||
|
||||
/* Set HalfWord_PG bit */
|
||||
SET_BIT((*reg_cr), FLASH_CR_PG);
|
||||
|
||||
/* Program a halfword word (16 bits) */
|
||||
*(__IO uint16_t *)FlashAddress = *(__IO uint16_t *)DataAddress;
|
||||
}
|
||||
|
||||
#if defined(FLASH_EDATAR_EDATA_EN)
|
||||
/**
|
||||
* @brief Program a word (32-bit) at a specified address.
|
||||
* @param FlashAddress specifies the address to be programmed.
|
||||
* @param DataAddress specifies the address of data to be programmed.
|
||||
* @retval None
|
||||
*/
|
||||
static void FLASH_Program_Word(uint32_t FlashAddress, uint32_t DataAddress)
|
||||
{
|
||||
__IO uint32_t *reg_cr;
|
||||
|
||||
/* Access to SECCR or NSCR registers depends on operation type */
|
||||
#if defined (FLASH_OPTSR2_TZEN)
|
||||
reg_cr = IS_FLASH_SECURE_OPERATION() ? &(FLASH->SECCR) : &(FLASH_NS->NSCR);
|
||||
#else
|
||||
reg_cr = &(FLASH_NS->NSCR);
|
||||
#endif /* FLASH_OPTSR2_TZEN */
|
||||
|
||||
/* Set PG bit */
|
||||
SET_BIT((*reg_cr), FLASH_CR_PG);
|
||||
|
||||
*(__IO uint32_t *)FlashAddress = *(__IO uint32_t *)DataAddress;
|
||||
}
|
||||
#endif /* FLASH_EDATAR_EDATA_EN */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* HAL_FLASH_MODULE_ENABLED */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
2047
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_flash_ex.c
Normal file
2047
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_flash_ex.c
Normal file
File diff suppressed because it is too large
Load Diff
754
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_gpio.c
Normal file
754
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_gpio.c
Normal file
@@ -0,0 +1,754 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_gpio.c
|
||||
* @author MCD Application Team
|
||||
* @brief GPIO HAL module driver.
|
||||
* This file provides firmware functions to manage the following
|
||||
* functionalities of the General Purpose Input/Output (GPIO) peripheral:
|
||||
* + Initialization and de-initialization functions
|
||||
* + IO operation functions
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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
|
||||
==============================================================================
|
||||
##### GPIO Peripheral features #####
|
||||
==============================================================================
|
||||
[..]
|
||||
(+) Each port bit of the general-purpose I/O (GPIO) ports can be individually
|
||||
configured by software in several modes:
|
||||
(++) Input mode
|
||||
(++) Analog mode
|
||||
(++) Output mode
|
||||
(++) Alternate function mode
|
||||
(++) External interrupt/event lines
|
||||
|
||||
(+) During and just after reset, the alternate functions and external interrupt
|
||||
lines are not active and the I/O ports are configured in input floating mode.
|
||||
|
||||
(+) All GPIO pins have weak internal pull-up and pull-down resistors, which can be
|
||||
activated or not.
|
||||
|
||||
(+) In Output or Alternate mode, each IO can be configured on open-drain or push-pull
|
||||
type and the IO speed can be selected depending on the VDD value.
|
||||
|
||||
(+) The microcontroller IO pins are connected to onboard peripherals/modules through a
|
||||
multiplexer that allows only one peripheral alternate function (AF) connected
|
||||
to an IO pin at a time. In this way, there can be no conflict between peripherals
|
||||
sharing the same IO pin.
|
||||
|
||||
(+) All ports have external interrupt/event capability. To use external interrupt
|
||||
lines, the port must be configured in input mode. All available GPIO pins are
|
||||
connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.
|
||||
|
||||
(+) The external interrupt/event controller consists of up to 39 edge detectors
|
||||
(16 lines are connected to GPIO) for generating event/interrupt requests (each
|
||||
input line can be independently configured to select the type (interrupt or event)
|
||||
and the corresponding trigger event (rising or falling or both). Each line can
|
||||
also be masked independently.
|
||||
|
||||
##### How to use this driver #####
|
||||
==============================================================================
|
||||
[..]
|
||||
(#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE().
|
||||
|
||||
(#) Configure the GPIO pin(s) using HAL_GPIO_Init().
|
||||
(++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure
|
||||
(++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef
|
||||
structure.
|
||||
(++) In case of Output or alternate function mode selection: the speed is
|
||||
configured through "Speed" member from GPIO_InitTypeDef structure.
|
||||
(++) In alternate mode is selection, the alternate function connected to the IO
|
||||
is configured through "Alternate" member from GPIO_InitTypeDef structure.
|
||||
(++) Analog mode is required when a pin is to be used as ADC channel
|
||||
or DAC output.
|
||||
(++) In case of external interrupt/event selection the "Mode" member from
|
||||
GPIO_InitTypeDef structure select the type (interrupt or event) and
|
||||
the corresponding trigger event (rising or falling or both).
|
||||
|
||||
(#) In case of external interrupt/event mode selection, configure NVIC IRQ priority
|
||||
mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using
|
||||
HAL_NVIC_EnableIRQ().
|
||||
|
||||
(#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().
|
||||
|
||||
(#) To set/reset the level of a pin configured in output mode use
|
||||
HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().
|
||||
|
||||
(#) To set the level of several pins and reset level of several other pins in
|
||||
same cycle, use HAL_GPIO_WriteMultipleStatePin().
|
||||
|
||||
(#) To lock pin configuration until next reset use HAL_GPIO_LockPin().
|
||||
|
||||
(#) During and just after reset, the alternate functions are not
|
||||
active and the GPIO pins are configured in input floating mode (except JTAG
|
||||
pins).
|
||||
|
||||
(#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose
|
||||
(PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has
|
||||
priority over the GPIO function.
|
||||
|
||||
(#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as
|
||||
general purpose PH0 and PH1, respectively, when the HSE oscillator is off.
|
||||
The HSE has priority over the GPIO function.
|
||||
|
||||
@endverbatim
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup GPIO GPIO
|
||||
* @brief GPIO HAL module driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifdef HAL_GPIO_MODULE_ENABLED
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private defines -----------------------------------------------------------*/
|
||||
/** @defgroup GPIO_Private_Defines GPIO Private Defines
|
||||
* @{
|
||||
*/
|
||||
#define GPIO_MODE (0x00000003U)
|
||||
#define EXTI_MODE (0x10000000U)
|
||||
#define GPIO_MODE_IT (0x00010000U)
|
||||
#define GPIO_MODE_EVT (0x00020000U)
|
||||
#define RISING_EDGE (0x00100000U)
|
||||
#define FALLING_EDGE (0x00200000U)
|
||||
#define GPIO_OUTPUT_TYPE (0x00000010U)
|
||||
#define GPIO_NUMBER (16U)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/** @defgroup GPIO_Private_Macros GPIO Private Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup GPIO_Exported_Functions GPIO Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup GPIO_Exported_Functions_Group1 Initialization/de-initialization functions
|
||||
* @brief Initialization and Configuration functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Initialization and de-initialization functions #####
|
||||
===============================================================================
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initialize the GPIOx peripheral according to the specified parameters in the pGPIO_Init.
|
||||
* @note If GPIOx peripheral pin is used in EXTI_MODE and the pin is secure in case
|
||||
* the system implements the security (TZEN=1), it is up to the secure application to
|
||||
* insure that the corresponding EXTI line is set secure.
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param pGPIO_Init: pointer to a GPIO_InitTypeDef structure that contains
|
||||
* the configuration information for the specified GPIO peripheral.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, const GPIO_InitTypeDef *pGPIO_Init)
|
||||
{
|
||||
uint32_t tmp;
|
||||
uint32_t iocurrent;
|
||||
uint32_t position = 0U;
|
||||
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
|
||||
assert_param(IS_GPIO_PIN(pGPIO_Init->Pin));
|
||||
assert_param(IS_GPIO_MODE(pGPIO_Init->Mode));
|
||||
assert_param(IS_GPIO_PULL(pGPIO_Init->Pull));
|
||||
|
||||
/* Configure the port pins */
|
||||
while (((pGPIO_Init->Pin) >> position) != 0U)
|
||||
{
|
||||
/* Get current io position */
|
||||
iocurrent = (pGPIO_Init->Pin) & (1UL << position);
|
||||
|
||||
if (iocurrent != 0U)
|
||||
{
|
||||
/*--------------------- GPIO Mode Configuration ------------------------*/
|
||||
/* In case of Alternate function mode selection */
|
||||
if ((pGPIO_Init->Mode == GPIO_MODE_AF_PP) || (pGPIO_Init->Mode == GPIO_MODE_AF_OD))
|
||||
{
|
||||
/* Check the Alternate function parameters */
|
||||
assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
|
||||
assert_param(IS_GPIO_AF(pGPIO_Init->Alternate));
|
||||
|
||||
/* Configure Alternate function mapped with the current IO */
|
||||
tmp = GPIOx->AFR[position >> 3U];
|
||||
tmp &= ~(0x0FUL << ((position & 0x07U) * GPIO_AFRL_AFSEL1_Pos));
|
||||
tmp |= ((pGPIO_Init->Alternate & 0x0FUL) << ((position & 0x07U) * GPIO_AFRL_AFSEL1_Pos));
|
||||
GPIOx->AFR[position >> 3U] = tmp;
|
||||
}
|
||||
|
||||
/* Configure IO Direction mode (Input, Output, Alternate or Analog) */
|
||||
tmp = GPIOx->MODER;
|
||||
tmp &= ~(GPIO_MODER_MODE0 << (position * GPIO_MODER_MODE1_Pos));
|
||||
tmp |= ((pGPIO_Init->Mode & GPIO_MODE) << (position * GPIO_MODER_MODE1_Pos));
|
||||
GPIOx->MODER = tmp;
|
||||
|
||||
/* In case of Output or Alternate function mode selection */
|
||||
if ((pGPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (pGPIO_Init->Mode == GPIO_MODE_AF_PP) ||
|
||||
(pGPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (pGPIO_Init->Mode == GPIO_MODE_AF_OD))
|
||||
{
|
||||
/* Check the Speed parameter */
|
||||
assert_param(IS_GPIO_SPEED(pGPIO_Init->Speed));
|
||||
|
||||
/* Configure the IO Speed */
|
||||
tmp = GPIOx->OSPEEDR;
|
||||
tmp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * GPIO_OSPEEDR_OSPEED1_Pos));
|
||||
tmp |= (pGPIO_Init->Speed << (position * GPIO_OSPEEDR_OSPEED1_Pos));
|
||||
GPIOx->OSPEEDR = tmp;
|
||||
|
||||
/* Configure the IO Output Type */
|
||||
tmp = GPIOx->OTYPER;
|
||||
tmp &= ~(GPIO_OTYPER_OT0 << position) ;
|
||||
tmp |= (((pGPIO_Init->Mode & GPIO_OUTPUT_TYPE) >> 4U) << position);
|
||||
GPIOx->OTYPER = tmp;
|
||||
}
|
||||
|
||||
if (((pGPIO_Init->Mode & GPIO_MODE) != GPIO_MODE_ANALOG) ||
|
||||
(((pGPIO_Init->Mode & GPIO_MODE) == GPIO_MODE_ANALOG) && (pGPIO_Init->Pull != GPIO_PULLUP)))
|
||||
{
|
||||
/* Check the Pull parameters */
|
||||
assert_param(IS_GPIO_PULL(pGPIO_Init->Pull));
|
||||
|
||||
/* Activate the Pull-up or Pull down resistor for the current IO */
|
||||
tmp = GPIOx->PUPDR;
|
||||
tmp &= ~(GPIO_PUPDR_PUPD0 << (position * GPIO_PUPDR_PUPD1_Pos));
|
||||
tmp |= ((pGPIO_Init->Pull) << (position * GPIO_PUPDR_PUPD1_Pos));
|
||||
GPIOx->PUPDR = tmp;
|
||||
}
|
||||
|
||||
/*--------------------- EXTI Mode Configuration ------------------------*/
|
||||
/* Configure the External Interrupt or event for the current IO */
|
||||
if ((pGPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
|
||||
{
|
||||
tmp = EXTI->EXTICR[position >> 2U];
|
||||
tmp &= ~((0x0FUL) << ((position & 0x03U) * EXTI_EXTICR1_EXTI1_Pos));
|
||||
tmp |= (GPIO_GET_INDEX(GPIOx) << ((position & 0x03U) * EXTI_EXTICR1_EXTI1_Pos));
|
||||
EXTI->EXTICR[position >> 2U] = tmp;
|
||||
|
||||
/* Clear Rising Falling edge configuration */
|
||||
tmp = EXTI->RTSR1;
|
||||
tmp &= ~((uint32_t)iocurrent);
|
||||
if ((pGPIO_Init->Mode & RISING_EDGE) == RISING_EDGE)
|
||||
{
|
||||
tmp |= iocurrent;
|
||||
}
|
||||
EXTI->RTSR1 = tmp;
|
||||
|
||||
tmp = EXTI->FTSR1;
|
||||
tmp &= ~((uint32_t)iocurrent);
|
||||
if ((pGPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE)
|
||||
{
|
||||
tmp |= iocurrent;
|
||||
}
|
||||
EXTI->FTSR1 = tmp;
|
||||
|
||||
/* Clear EXTI line configuration */
|
||||
tmp = EXTI->EMR1;
|
||||
tmp &= ~((uint32_t)iocurrent);
|
||||
if ((pGPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT)
|
||||
{
|
||||
tmp |= iocurrent;
|
||||
}
|
||||
EXTI->EMR1 = tmp;
|
||||
|
||||
tmp = EXTI->IMR1;
|
||||
tmp &= ~((uint32_t)iocurrent);
|
||||
if ((pGPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT)
|
||||
{
|
||||
tmp |= iocurrent;
|
||||
}
|
||||
EXTI->IMR1 = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
position++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief De-initialize the GPIOx peripheral registers to their default reset values.
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the port bit to be written.
|
||||
* This parameter can be one of GPIO_PIN_x where x can be (0..15).
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
|
||||
{
|
||||
uint32_t tmp;
|
||||
uint32_t iocurrent;
|
||||
uint32_t position = 0U;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
|
||||
/* Configure the port pins */
|
||||
while ((GPIO_Pin >> position) != 0U)
|
||||
{
|
||||
/* Get current io position */
|
||||
iocurrent = (GPIO_Pin) & (1UL << position);
|
||||
|
||||
if (iocurrent != 0U)
|
||||
{
|
||||
/*------------------------- EXTI Mode Configuration --------------------*/
|
||||
/* Clear the External Interrupt or Event for the current IO */
|
||||
tmp = EXTI->EXTICR[position >> 2U];
|
||||
tmp &= ((0x0FUL) << ((position & 0x03U) * EXTI_EXTICR1_EXTI1_Pos));
|
||||
if (tmp == (GPIO_GET_INDEX(GPIOx) << ((position & 0x03U) * EXTI_EXTICR1_EXTI1_Pos)))
|
||||
{
|
||||
/* Clear EXTI line configuration */
|
||||
EXTI->IMR1 &= ~(iocurrent);
|
||||
EXTI->EMR1 &= ~(iocurrent);
|
||||
|
||||
/* Clear Rising Falling edge configuration */
|
||||
EXTI->RTSR1 &= ~(iocurrent);
|
||||
EXTI->FTSR1 &= ~(iocurrent);
|
||||
|
||||
tmp = (0x0FUL) << ((position & 0x03U) * EXTI_EXTICR1_EXTI1_Pos);
|
||||
EXTI->EXTICR[position >> 2U] &= ~tmp;
|
||||
}
|
||||
|
||||
/*------------------------- GPIO Mode Configuration --------------------*/
|
||||
/* Configure IO in Analog Mode */
|
||||
GPIOx->MODER |= (GPIO_MODER_MODE0 << (position * GPIO_MODER_MODE1_Pos));
|
||||
|
||||
/* Configure the default Alternate Function in current IO */
|
||||
GPIOx->AFR[position >> 3U] &= ~(0x0FUL << ((position & 0x07U) * GPIO_AFRL_AFSEL1_Pos));
|
||||
|
||||
/* Configure the default value for IO Speed */
|
||||
GPIOx->OSPEEDR &= ~(GPIO_OSPEEDR_OSPEED0 << (position * GPIO_OSPEEDR_OSPEED1_Pos));
|
||||
|
||||
/* Configure the default value IO Output Type */
|
||||
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT0 << position);
|
||||
|
||||
/* Deactivate the Pull-up and Pull-down resistor for the current IO */
|
||||
GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPD0 << (position * GPIO_PUPDR_PUPD1_Pos));
|
||||
}
|
||||
|
||||
position++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions
|
||||
* @brief GPIO Read, Write, Toggle, Lock and EXTI management functions.
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### IO operation functions #####
|
||||
===============================================================================
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Read the specified input port pin.
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the port bit to read.
|
||||
* This parameter can be GPIO_PIN_x where x can be (0..15).
|
||||
* @retval The input port pin value.
|
||||
*/
|
||||
GPIO_PinState HAL_GPIO_ReadPin(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
|
||||
{
|
||||
GPIO_PinState bitstatus;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
|
||||
if ((GPIOx->IDR & GPIO_Pin) != 0U)
|
||||
{
|
||||
bitstatus = GPIO_PIN_SET;
|
||||
}
|
||||
else
|
||||
{
|
||||
bitstatus = GPIO_PIN_RESET;
|
||||
}
|
||||
return bitstatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the selected data port bit.
|
||||
*
|
||||
* @note This function uses GPIOx_BSRR and GPIOx_BRR registers to allow atomic read/modify
|
||||
* accesses. In this way, there is no risk of an IRQ occurring between
|
||||
* the read and the modify access.
|
||||
*
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the port bit to be written.
|
||||
* This parameter can be one of GPIO_PIN_x where x can be (0..15).
|
||||
* @param PinState: specifies the value to be written to the selected bit.
|
||||
* This parameter can be one of the GPIO_PinState enum values:
|
||||
* @arg GPIO_PIN_RESET: to clear the port pin
|
||||
* @arg GPIO_PIN_SET: to set the port pin
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
assert_param(IS_GPIO_PIN_ACTION(PinState));
|
||||
|
||||
if (PinState != GPIO_PIN_RESET)
|
||||
{
|
||||
GPIOx->BSRR = (uint32_t)GPIO_Pin;
|
||||
}
|
||||
else
|
||||
{
|
||||
GPIOx->BRR = (uint32_t)GPIO_Pin;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set and clear several pins of a dedicated port in same cycle.
|
||||
* @note This function uses GPIOx_BSRR and GPIOx_BRR registers to allow atomic read/modify
|
||||
* accesses.
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param PinReset specifies the port bits to be reset
|
||||
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15) or zero.
|
||||
* @param PinSet specifies the port bits to be set
|
||||
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15) or zero.
|
||||
* @note Both PinReset and PinSet combinations shall not get any common bit, else
|
||||
* assert would be triggered.
|
||||
* @note At least one of the two parameters used to set or reset shall be different from zero.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_WriteMultipleStatePin(GPIO_TypeDef *GPIOx, uint16_t PinReset, uint16_t PinSet)
|
||||
{
|
||||
uint32_t tmp;
|
||||
|
||||
/* Check the parameters */
|
||||
/* Make sure at least one parameter is different from zero and that there is no common pin */
|
||||
assert_param(IS_GPIO_PIN((uint32_t)PinReset | (uint32_t)PinSet));
|
||||
assert_param(IS_GPIO_COMMON_PIN(PinReset, PinSet));
|
||||
|
||||
tmp = (((uint32_t)PinReset << 16) | PinSet);
|
||||
GPIOx->BSRR = tmp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Toggle the specified GPIO pin.
|
||||
* @param GPIOx: where x can be (A..I) to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the pin to be toggled.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
|
||||
{
|
||||
uint32_t odr;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
|
||||
/* get current Output Data Register value */
|
||||
odr = GPIOx->ODR;
|
||||
|
||||
/* Set selected pins that were at low level, and reset ones that were high */
|
||||
GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Lock GPIO Pins configuration registers.
|
||||
* @note The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR,
|
||||
* GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH.
|
||||
* @note The configuration of the locked GPIO pins can no longer be modified
|
||||
* until the next reset.
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the port bits to be locked.
|
||||
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
|
||||
* @retval None
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
|
||||
{
|
||||
__IO uint32_t tmp = GPIO_LCKR_LCKK;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_LOCK_INSTANCE(GPIOx));
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
|
||||
/* Apply lock key write sequence */
|
||||
tmp |= GPIO_Pin;
|
||||
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
|
||||
GPIOx->LCKR = tmp;
|
||||
/* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */
|
||||
GPIOx->LCKR = GPIO_Pin;
|
||||
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
|
||||
GPIOx->LCKR = tmp;
|
||||
/* Read LCKK bit*/
|
||||
tmp = GPIOx->LCKR;
|
||||
|
||||
/* read again in order to confirm lock is active */
|
||||
if ((GPIOx->LCKR & GPIO_LCKR_LCKK) != GPIO_LCKR_LCKK)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable speed optimization for several pin of dedicated port.
|
||||
* @note Not all I/Os support the HSLV mode. Refer to the I/O structure in the corresponding
|
||||
* datasheet for the list of I/Os supporting this feature. Other I/Os HSLV configuration must
|
||||
* be kept at reset value.
|
||||
* @note It must be used only if the I/O supply voltage is below 2.7 V.
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the port bit to be written.
|
||||
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_EnableHighSPeedLowVoltage(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
|
||||
|
||||
/* Set HSLVR gpio pin */
|
||||
SET_BIT(GPIOx->HSLVR, GPIO_Pin);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable speed optimization for several pin of dedicated port.
|
||||
* @note Not all I/Os support the HSLV mode. Refer to the I/O structure in the corresponding
|
||||
* datasheet for the list of I/Os supporting this feature. Other I/Os HSLV configuration must
|
||||
* be kept at reset value.
|
||||
* @note It must be used only if the I/O supply voltage is below 2.7 V.
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the port bit to be written.
|
||||
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_DisableHighSPeedLowVoltage(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
|
||||
|
||||
/* Clear HSLVR gpio pin */
|
||||
CLEAR_BIT(GPIOx->HSLVR, GPIO_Pin);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Handle EXTI interrupt request.
|
||||
* @param GPIO_Pin: Specifies the port pin connected to corresponding EXTI line.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
|
||||
{
|
||||
/* EXTI line interrupt detected */
|
||||
if (__HAL_GPIO_EXTI_GET_RISING_IT(GPIO_Pin) != 0U)
|
||||
{
|
||||
__HAL_GPIO_EXTI_CLEAR_RISING_IT(GPIO_Pin);
|
||||
HAL_GPIO_EXTI_Rising_Callback(GPIO_Pin);
|
||||
}
|
||||
|
||||
if (__HAL_GPIO_EXTI_GET_FALLING_IT(GPIO_Pin) != 0U)
|
||||
{
|
||||
__HAL_GPIO_EXTI_CLEAR_FALLING_IT(GPIO_Pin);
|
||||
HAL_GPIO_EXTI_Falling_Callback(GPIO_Pin);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief EXTI line rising detection callback.
|
||||
* @param GPIO_Pin: Specifies the port pin connected to corresponding EXTI line.
|
||||
* @retval None
|
||||
*/
|
||||
__weak void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(GPIO_Pin);
|
||||
|
||||
/* NOTE: This function should not be modified, when the callback is needed,
|
||||
the HAL_GPIO_EXTI_Rising_Callback could be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief EXTI line falling detection callback.
|
||||
* @param GPIO_Pin: Specifies the port pin connected to corresponding EXTI line.
|
||||
* @retval None
|
||||
*/
|
||||
__weak void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(GPIO_Pin);
|
||||
|
||||
/* NOTE: This function should not be modified, when the callback is needed,
|
||||
the HAL_GPIO_EXTI_Falling_Callback could be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
|
||||
/** @defgroup GPIO_Exported_Functions_Group3 IO attributes management functions
|
||||
* @brief GPIO attributes management functions.
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### IO attributes functions #####
|
||||
===============================================================================
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Configure the GPIO pins attributes.
|
||||
* @note Available attributes are to secure GPIO pin(s), so this function is
|
||||
* only available in secure
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the pin(s) to configure the secure attribute
|
||||
* @param PinAttributes: specifies the pin(s) to be set in secure mode, other being set non secured.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_GPIO_ConfigPinAttributes(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, uint32_t PinAttributes)
|
||||
{
|
||||
uint32_t tmp;
|
||||
uint32_t iocurrent;
|
||||
uint32_t position = 0U;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
|
||||
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||
assert_param(IS_GPIO_PIN_ATTRIBUTES(PinAttributes));
|
||||
|
||||
tmp = GPIOx->SECCFGR;
|
||||
|
||||
/* Configure the port pins */
|
||||
while ((GPIO_Pin >> position) != 0U)
|
||||
{
|
||||
/* Get current io position */
|
||||
iocurrent = GPIO_Pin & (1UL << position);
|
||||
|
||||
if (iocurrent != 0U)
|
||||
{
|
||||
/* Configure the IO secure attribute */
|
||||
tmp &= ~(GPIO_SECCFGR_SEC0 << position);
|
||||
tmp |= (PinAttributes << position);
|
||||
}
|
||||
position++;
|
||||
}
|
||||
|
||||
/* Set secure attributes */
|
||||
GPIOx->SECCFGR = tmp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the GPIO pins attributes.
|
||||
* @note Available attributes are to secure GPIO pin(s), so this function is
|
||||
* only available in secure
|
||||
* @param GPIOx: where x can be (A..I) for stm32h56xxx and stm32h57xxx family lines and
|
||||
* (A..D or H) for stm32h503xx family line to select the GPIO peripheral for STM32H5 family
|
||||
* @param GPIO_Pin: specifies the single pin to get the secure attribute from
|
||||
* @param pPinAttributes: pointer to return the pin attributes.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_GPIO_GetConfigPinAttributes(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin,
|
||||
uint32_t *pPinAttributes)
|
||||
{
|
||||
uint32_t iocurrent;
|
||||
uint32_t position = 0U;
|
||||
|
||||
/* Check null pointer */
|
||||
if (pPinAttributes == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
|
||||
assert_param(IS_GPIO_SINGLE_PIN(GPIO_Pin));
|
||||
|
||||
/* Get secure attribute of the port pin */
|
||||
while ((GPIO_Pin >> position) != 0U)
|
||||
{
|
||||
/* Get current io position */
|
||||
iocurrent = GPIO_Pin & (1UL << position);
|
||||
|
||||
if (iocurrent != 0U)
|
||||
{
|
||||
/* Get the IO secure attribute */
|
||||
if ((GPIOx->SECCFGR & (GPIO_SECCFGR_SEC0 << position)) != 0U)
|
||||
{
|
||||
*pPinAttributes = GPIO_PIN_SEC;
|
||||
}
|
||||
else
|
||||
{
|
||||
*pPinAttributes = GPIO_PIN_NSEC;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
position++;
|
||||
}
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* HAL_GPIO_MODULE_ENABLED */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
657
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_icache.c
Normal file
657
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_icache.c
Normal file
@@ -0,0 +1,657 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_icache.c
|
||||
* @author MCD Application Team
|
||||
* @brief ICACHE HAL module driver.
|
||||
* This file provides firmware functions to manage the following
|
||||
* functionalities of the Instruction Cache (ICACHE).
|
||||
* + Initialization and Configuration
|
||||
* + Invalidate functions
|
||||
* + Monitoring management
|
||||
* + Memory address remap management
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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
|
||||
==============================================================================
|
||||
##### ICACHE main features #####
|
||||
==============================================================================
|
||||
[..]
|
||||
The Instruction Cache (ICACHE) is introduced on C-AHB code bus of
|
||||
Cortex-M33 processor to improve performance when fetching instruction
|
||||
and data from both internal and external memories. It allows close to
|
||||
zero wait states performance.
|
||||
|
||||
(+) The ICACHE provides two performance counters (Hit and Miss),
|
||||
cache invalidate maintenance operation, error management and TrustZone
|
||||
security support.
|
||||
|
||||
(+) The ICACHE provides additionally the possibility to remap input address
|
||||
falling into up to four memory regions (used to remap aliased code in
|
||||
external memories to the internal Code region, for execution)
|
||||
|
||||
===============================================================================
|
||||
##### How to use this driver #####
|
||||
===============================================================================
|
||||
[..]
|
||||
The ICACHE HAL driver can be used as follows:
|
||||
|
||||
(#) Optionally configure the Instruction Cache mode with
|
||||
HAL_ICACHE_ConfigAssociativityMode() if the default configuration
|
||||
does not suit the application requirements.
|
||||
|
||||
(#) Enable and disable the Instruction Cache with respectively
|
||||
HAL_ICACHE_Enable() and HAL_ICACHE_Disable().
|
||||
Use HAL_ICACHE_IsEnabled() to get the Instruction Cache status.
|
||||
To ensure a deterministic cache behavior after power on, system reset or after
|
||||
a call to @ref HAL_ICACHE_Disable(), the application must call
|
||||
@ref HAL_ICACHE_WaitForInvalidateComplete(). Indeed on power on, system reset
|
||||
or cache disable, an automatic cache invalidation procedure is launched and the
|
||||
cache is bypassed until the operation completes.
|
||||
|
||||
(#) Initiate the cache maintenance invalidation procedure with either
|
||||
HAL_ICACHE_Invalidate() (blocking mode) or HAL_ICACHE_Invalidate_IT()
|
||||
(interrupt mode). When interrupt mode is used, the callback function
|
||||
HAL_ICACHE_InvalidateCompleteCallback() is called when the invalidate
|
||||
procedure is complete. The function HAL_ICACHE_WaitForInvalidateComplete()
|
||||
may be called to wait for the end of the invalidate procedure automatically
|
||||
initiated when disabling the Instruction Cache with HAL_ICACHE_Disable().
|
||||
The cache operation is bypassed during the invalidation procedure.
|
||||
|
||||
(#) Use the performance monitoring counters for Hit and Miss with the following
|
||||
functions: HAL_ICACHE_Monitor_Start(), HAL_ICACHE_Monitor_Stop(),
|
||||
HAL_ICACHE_Monitor_Reset(), HAL_ICACHE_Monitor_GetHitValue() and
|
||||
HAL_ICACHE_Monitor_GetMissValue()
|
||||
|
||||
(#) Enable and disable up to four regions to remap input address from external
|
||||
memories to the internal Code region for execution with
|
||||
HAL_ICACHE_EnableRemapRegion() and HAL_ICACHE_DisableRemapRegion()
|
||||
|
||||
@endverbatim
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE ICACHE
|
||||
* @brief HAL ICACHE module driver
|
||||
* @{
|
||||
*/
|
||||
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED)
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
/** @addtogroup ICACHE_Private_Constants ICACHE Private Constants
|
||||
* @{
|
||||
*/
|
||||
#define ICACHE_INVALIDATE_TIMEOUT_VALUE 1U /* 1ms */
|
||||
#define ICACHE_DISABLE_TIMEOUT_VALUE 1U /* 1ms */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macros ------------------------------------------------------------*/
|
||||
/** @defgroup ICACHE_Private_Macros ICACHE Private Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define IS_ICACHE_ASSOCIATIVITY_MODE(__MODE__) (((__MODE__) == ICACHE_1WAY) || \
|
||||
((__MODE__) == ICACHE_2WAYS))
|
||||
|
||||
#define IS_ICACHE_MONITOR_TYPE(__TYPE__) (((__TYPE__) == ICACHE_MONITOR_HIT_MISS) || \
|
||||
((__TYPE__) == ICACHE_MONITOR_HIT) || \
|
||||
((__TYPE__) == ICACHE_MONITOR_MISS))
|
||||
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
#define IS_ICACHE_REGION_NUMBER(__NUMBER__) ((__NUMBER__) < 4U)
|
||||
|
||||
#define IS_ICACHE_REGION_SIZE(__SIZE__) (((__SIZE__) == ICACHE_REGIONSIZE_2MB) || \
|
||||
((__SIZE__) == ICACHE_REGIONSIZE_4MB) || \
|
||||
((__SIZE__) == ICACHE_REGIONSIZE_8MB) || \
|
||||
((__SIZE__) == ICACHE_REGIONSIZE_16MB) || \
|
||||
((__SIZE__) == ICACHE_REGIONSIZE_32MB) || \
|
||||
((__SIZE__) == ICACHE_REGIONSIZE_64MB) || \
|
||||
((__SIZE__) == ICACHE_REGIONSIZE_128MB))
|
||||
|
||||
#define IS_ICACHE_REGION_TRAFFIC_ROUTE(__TRAFFICROUTE__) (((__TRAFFICROUTE__) == ICACHE_MASTER1_PORT) || \
|
||||
((__TRAFFICROUTE__) == ICACHE_MASTER2_PORT))
|
||||
|
||||
#define IS_ICACHE_REGION_OUTPUT_BURST_TYPE(__OUTPUTBURSTTYPE_) (((__OUTPUTBURSTTYPE_) == ICACHE_OUTPUT_BURST_WRAP) || \
|
||||
((__OUTPUTBURSTTYPE_) == ICACHE_OUTPUT_BURST_INCR))
|
||||
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup ICACHE_Exported_Functions ICACHE Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_Exported_Functions_Group1 Initialization and control functions
|
||||
* @brief Initialization and control functions
|
||||
*
|
||||
@verbatim
|
||||
==============================================================================
|
||||
##### Initialization and control functions #####
|
||||
==============================================================================
|
||||
[..]
|
||||
This section provides functions allowing to initialize and control the
|
||||
Instruction Cache (mode, invalidate procedure, performance counters).
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Configure the Instruction Cache cache associativity mode selection.
|
||||
* @param AssociativityMode Associativity mode selection
|
||||
* This parameter can be one of the following values:
|
||||
* @arg ICACHE_1WAY 1-way cache (direct mapped cache)
|
||||
* @arg ICACHE_2WAYS 2-ways set associative cache (default)
|
||||
* @retval HAL status (HAL_OK/HAL_ERROR)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_ConfigAssociativityMode(uint32_t AssociativityMode)
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_ICACHE_ASSOCIATIVITY_MODE(AssociativityMode));
|
||||
|
||||
/* Check cache is not enabled */
|
||||
if (READ_BIT(ICACHE->CR, ICACHE_CR_EN) != 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
MODIFY_REG(ICACHE->CR, ICACHE_CR_WAYSEL, AssociativityMode);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DeInitialize the Instruction Cache.
|
||||
* @retval HAL status (HAL_OK)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_DeInit(void)
|
||||
{
|
||||
/* Reset interrupt enable value */
|
||||
WRITE_REG(ICACHE->IER, 0U);
|
||||
|
||||
/* Clear any pending flags */
|
||||
WRITE_REG(ICACHE->FCR, ICACHE_FCR_CBSYENDF | ICACHE_FCR_CERRF);
|
||||
|
||||
/* Disable cache then set default associative mode value */
|
||||
CLEAR_BIT(ICACHE->CR, ICACHE_CR_EN);
|
||||
WRITE_REG(ICACHE->CR, ICACHE_CR_WAYSEL);
|
||||
|
||||
/* Stop monitor and reset monitor values */
|
||||
CLEAR_BIT(ICACHE->CR, ICACHE_MONITOR_HIT_MISS);
|
||||
SET_BIT(ICACHE->CR, (ICACHE_MONITOR_HIT_MISS << 2U));
|
||||
CLEAR_BIT(ICACHE->CR, (ICACHE_MONITOR_HIT_MISS << 2U));
|
||||
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
/* Reset regions configuration values */
|
||||
WRITE_REG(ICACHE->CRR0, ICACHE_REGIONSIZE_2MB << ICACHE_CRRx_RSIZE_Pos);
|
||||
WRITE_REG(ICACHE->CRR1, ICACHE_REGIONSIZE_2MB << ICACHE_CRRx_RSIZE_Pos);
|
||||
WRITE_REG(ICACHE->CRR2, ICACHE_REGIONSIZE_2MB << ICACHE_CRRx_RSIZE_Pos);
|
||||
WRITE_REG(ICACHE->CRR3, ICACHE_REGIONSIZE_2MB << ICACHE_CRRx_RSIZE_Pos);
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable the Instruction Cache.
|
||||
* @note This function always returns HAL_OK even if there is any ongoing
|
||||
* cache operation. The Instruction Cache is bypassed until the
|
||||
* cache operation completes.
|
||||
* @retval HAL status (HAL_OK)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_Enable(void)
|
||||
{
|
||||
SET_BIT(ICACHE->CR, ICACHE_CR_EN);
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the Instruction Cache.
|
||||
* @note This function waits for the cache being disabled but
|
||||
* not for the end of the automatic cache invalidation procedure.
|
||||
* @retval HAL status (HAL_OK/HAL_TIMEOUT)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_Disable(void)
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
uint32_t tickstart;
|
||||
|
||||
/* Make sure BSYENDF is reset before to disable the instruction cache */
|
||||
/* as it automatically starts a cache invalidation procedure */
|
||||
WRITE_REG(ICACHE->FCR, ICACHE_FCR_CBSYENDF);
|
||||
|
||||
CLEAR_BIT(ICACHE->CR, ICACHE_CR_EN);
|
||||
|
||||
/* Get tick */
|
||||
tickstart = HAL_GetTick();
|
||||
|
||||
/* Wait for instruction cache being disabled */
|
||||
while (READ_BIT(ICACHE->CR, ICACHE_CR_EN) != 0U)
|
||||
{
|
||||
if ((HAL_GetTick() - tickstart) > ICACHE_DISABLE_TIMEOUT_VALUE)
|
||||
{
|
||||
/* New check to avoid false timeout detection in case of preemption */
|
||||
if (READ_BIT(ICACHE->CR, ICACHE_CR_EN) != 0U)
|
||||
{
|
||||
status = HAL_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check whether the Instruction Cache is enabled or not.
|
||||
* @retval Status (0: disabled, 1: enabled)
|
||||
*/
|
||||
uint32_t HAL_ICACHE_IsEnabled(void)
|
||||
{
|
||||
return ((READ_BIT(ICACHE->CR, ICACHE_CR_EN) != 0U) ? 1UL : 0UL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Invalidate the Instruction Cache.
|
||||
* @note This function waits for the end of cache invalidation procedure
|
||||
* and clears the associated BSYENDF flag.
|
||||
* @retval HAL status (HAL_OK/HAL_ERROR/HAL_TIMEOUT)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_Invalidate(void)
|
||||
{
|
||||
HAL_StatusTypeDef status;
|
||||
|
||||
/* Check if no ongoing operation */
|
||||
if (READ_BIT(ICACHE->SR, ICACHE_SR_BUSYF) == 0U)
|
||||
{
|
||||
/* Launch cache invalidation */
|
||||
SET_BIT(ICACHE->CR, ICACHE_CR_CACHEINV);
|
||||
}
|
||||
|
||||
status = HAL_ICACHE_WaitForInvalidateComplete();
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Invalidate the Instruction Cache with interrupt.
|
||||
* @note This function launches cache invalidation and returns.
|
||||
* User application shall resort to interrupt generation to check
|
||||
* the end of the cache invalidation with the BSYENDF flag and the
|
||||
* HAL_ICACHE_InvalidateCompleteCallback() callback.
|
||||
* @retval HAL status (HAL_OK/HAL_ERROR)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_Invalidate_IT(void)
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
|
||||
/* Check no ongoing operation */
|
||||
if (READ_BIT(ICACHE->SR, ICACHE_SR_BUSYF) != 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Make sure BSYENDF is reset before to start cache invalidation */
|
||||
WRITE_REG(ICACHE->FCR, ICACHE_FCR_CBSYENDF);
|
||||
|
||||
/* Enable end of cache invalidation interrupt */
|
||||
SET_BIT(ICACHE->IER, ICACHE_IER_BSYENDIE);
|
||||
|
||||
/* Launch cache invalidation */
|
||||
SET_BIT(ICACHE->CR, ICACHE_CR_CACHEINV);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Wait for the end of the Instruction Cache invalidate procedure.
|
||||
* @note This function checks and clears the BSYENDF flag when set.
|
||||
* @retval HAL status (HAL_OK/HAL_TIMEOUT)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_WaitForInvalidateComplete(void)
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
uint32_t tickstart;
|
||||
|
||||
/* Check if ongoing invalidation operation */
|
||||
if (READ_BIT(ICACHE->SR, ICACHE_SR_BUSYF) != 0U)
|
||||
{
|
||||
/* Get tick */
|
||||
tickstart = HAL_GetTick();
|
||||
|
||||
/* Wait for end of cache invalidation */
|
||||
while (READ_BIT(ICACHE->SR, ICACHE_SR_BSYENDF) == 0U)
|
||||
{
|
||||
if ((HAL_GetTick() - tickstart) > ICACHE_INVALIDATE_TIMEOUT_VALUE)
|
||||
{
|
||||
/* New check to avoid false timeout detection in case of preemption */
|
||||
if (READ_BIT(ICACHE->SR, ICACHE_SR_BSYENDF) == 0U)
|
||||
{
|
||||
status = HAL_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Clear BSYENDF */
|
||||
WRITE_REG(ICACHE->FCR, ICACHE_FCR_CBSYENDF);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Start the Instruction Cache performance monitoring.
|
||||
* @param MonitorType Monitoring type
|
||||
* This parameter can be one of the following values:
|
||||
* @arg ICACHE_MONITOR_HIT_MISS Hit & Miss monitoring
|
||||
* @arg ICACHE_MONITOR_HIT Hit monitoring
|
||||
* @arg ICACHE_MONITOR_MISS Miss monitoring
|
||||
* @retval HAL status (HAL_OK)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_Monitor_Start(uint32_t MonitorType)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_ICACHE_MONITOR_TYPE(MonitorType));
|
||||
|
||||
SET_BIT(ICACHE->CR, MonitorType);
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Stop the Instruction Cache performance monitoring.
|
||||
* @note Stopping the monitoring does not reset the values.
|
||||
* @param MonitorType Monitoring type
|
||||
* This parameter can be one of the following values:
|
||||
* @arg ICACHE_MONITOR_HIT_MISS Hit & Miss monitoring
|
||||
* @arg ICACHE_MONITOR_HIT Hit monitoring
|
||||
* @arg ICACHE_MONITOR_MISS Miss monitoring
|
||||
* @retval HAL status (HAL_OK)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_Monitor_Stop(uint32_t MonitorType)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_ICACHE_MONITOR_TYPE(MonitorType));
|
||||
|
||||
CLEAR_BIT(ICACHE->CR, MonitorType);
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reset the Instruction Cache performance monitoring values.
|
||||
* @param MonitorType Monitoring type
|
||||
* This parameter can be one of the following values:
|
||||
* @arg ICACHE_MONITOR_HIT_MISS Hit & Miss monitoring
|
||||
* @arg ICACHE_MONITOR_HIT Hit monitoring
|
||||
* @arg ICACHE_MONITOR_MISS Miss monitoring
|
||||
* @retval HAL status (HAL_OK)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_Monitor_Reset(uint32_t MonitorType)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_ICACHE_MONITOR_TYPE(MonitorType));
|
||||
|
||||
/* Force/Release reset */
|
||||
SET_BIT(ICACHE->CR, (MonitorType << 2U));
|
||||
CLEAR_BIT(ICACHE->CR, (MonitorType << 2U));
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the Instruction Cache performance Hit monitoring value.
|
||||
* @note Upon reaching the 32-bit maximum value, monitor does not wrap.
|
||||
* @retval Hit monitoring value
|
||||
*/
|
||||
uint32_t HAL_ICACHE_Monitor_GetHitValue(void)
|
||||
{
|
||||
return (ICACHE->HMONR);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the Instruction Cache performance Miss monitoring value.
|
||||
* @note Upon reaching the 32-bit maximum value, monitor does not wrap.
|
||||
* @retval Miss monitoring value
|
||||
*/
|
||||
uint32_t HAL_ICACHE_Monitor_GetMissValue(void)
|
||||
{
|
||||
return (ICACHE->MMONR);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ICACHE_Exported_Functions_Group2 IRQ and callback functions
|
||||
* @brief IRQ and callback functions
|
||||
*
|
||||
@verbatim
|
||||
==============================================================================
|
||||
##### IRQ and callback functions #####
|
||||
==============================================================================
|
||||
[..]
|
||||
This section provides functions allowing to handle ICACHE global interrupt
|
||||
and the associated callback functions.
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Handle the Instruction Cache interrupt request.
|
||||
* @note This function should be called under the ICACHE_IRQHandler().
|
||||
* @note This function respectively disables the interrupt and clears the
|
||||
* flag of any pending flag before calling the associated user callback.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_ICACHE_IRQHandler(void)
|
||||
{
|
||||
/* Get current interrupt flags and interrupt sources value */
|
||||
uint32_t itflags = READ_REG(ICACHE->SR);
|
||||
uint32_t itsources = READ_REG(ICACHE->IER);
|
||||
|
||||
/* Check Instruction cache Error interrupt flag */
|
||||
if (((itflags & itsources) & ICACHE_FLAG_ERROR) != 0U)
|
||||
{
|
||||
/* Disable error interrupt */
|
||||
CLEAR_BIT(ICACHE->IER, ICACHE_IER_ERRIE);
|
||||
|
||||
/* Clear ERR pending flag */
|
||||
WRITE_REG(ICACHE->FCR, ICACHE_FCR_CERRF);
|
||||
|
||||
/* Instruction cache error interrupt user callback */
|
||||
HAL_ICACHE_ErrorCallback();
|
||||
}
|
||||
|
||||
/* Check Instruction cache BusyEnd interrupt flag */
|
||||
if (((itflags & itsources) & ICACHE_FLAG_BUSYEND) != 0U)
|
||||
{
|
||||
/* Disable end of cache invalidation interrupt */
|
||||
CLEAR_BIT(ICACHE->IER, ICACHE_IER_BSYENDIE);
|
||||
|
||||
/* Clear BSYENDF pending flag */
|
||||
WRITE_REG(ICACHE->FCR, ICACHE_FCR_CBSYENDF);
|
||||
|
||||
/* Instruction cache busyend interrupt user callback */
|
||||
HAL_ICACHE_InvalidateCompleteCallback();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Cache invalidation complete callback.
|
||||
*/
|
||||
__weak void HAL_ICACHE_InvalidateCompleteCallback(void)
|
||||
{
|
||||
/* NOTE : This function should not be modified, when the callback is needed,
|
||||
the HAL_ICACHE_InvalidateCompleteCallback() should be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Error callback.
|
||||
*/
|
||||
__weak void HAL_ICACHE_ErrorCallback(void)
|
||||
{
|
||||
/* NOTE : This function should not be modified, when the callback is needed,
|
||||
the HAL_ICACHE_ErrorCallback() should be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined(ICACHE_CRRx_REN)
|
||||
/** @defgroup ICACHE_Exported_Functions_Group3 Memory remapped regions functions
|
||||
* @brief Memory remapped regions functions
|
||||
*
|
||||
@verbatim
|
||||
==============================================================================
|
||||
##### Memory remapped regions functions #####
|
||||
==============================================================================
|
||||
[..]
|
||||
This section provides functions allowing to manage the remapping of
|
||||
external memories to internal Code for execution.
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Configure and enable a region for memory remapping.
|
||||
* @note The Instruction Cache and the region must be disabled.
|
||||
* @param Region Region number
|
||||
This parameter can be a value of @arg @ref ICACHE_Region
|
||||
* @param pRegionConfig Pointer to structure of ICACHE region configuration parameters
|
||||
* @retval HAL status (HAL_OK/HAL_ERROR)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_EnableRemapRegion(uint32_t Region, const ICACHE_RegionConfigTypeDef *const pRegionConfig)
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
__IO uint32_t *p_reg;
|
||||
uint32_t value;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_ICACHE_REGION_NUMBER(Region));
|
||||
assert_param(IS_ICACHE_REGION_SIZE(pRegionConfig->Size));
|
||||
assert_param(IS_ICACHE_REGION_TRAFFIC_ROUTE(pRegionConfig->TrafficRoute));
|
||||
assert_param(IS_ICACHE_REGION_OUTPUT_BURST_TYPE(pRegionConfig->OutputBurstType));
|
||||
|
||||
/* Check cache is not enabled */
|
||||
if (READ_BIT(ICACHE->CR, ICACHE_CR_EN) != 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get region control register address */
|
||||
p_reg = &(ICACHE->CRR0) + (1U * Region);
|
||||
|
||||
/* Check region is not already enabled */
|
||||
if ((*p_reg & ICACHE_CRRx_REN) != 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Region 2MB: BaseAddress size 8 bits, RemapAddress size 11 bits */
|
||||
/* Region 4MB: BaseAddress size 7 bits, RemapAddress size 10 bits */
|
||||
/* Region 8MB: BaseAddress size 6 bits, RemapAddress size 9 bits */
|
||||
/* Region 16MB: BaseAddress size 5 bits, RemapAddress size 8 bits */
|
||||
/* Region 32MB: BaseAddress size 4 bits, RemapAddress size 7 bits */
|
||||
/* Region 64MB: BaseAddress size 3 bits, RemapAddress size 6 bits */
|
||||
/* Region 128MB: BaseAddress size 2 bits, RemapAddress size 5 bits */
|
||||
value = ((pRegionConfig->BaseAddress & 0x1FFFFFFFU) >> 21U) & \
|
||||
(0xFFU & ~(pRegionConfig->Size - 1U));
|
||||
value |= ((pRegionConfig->RemapAddress >> 5U) & \
|
||||
((uint32_t)(0x7FFU & ~(pRegionConfig->Size - 1U)) << ICACHE_CRRx_REMAPADDR_Pos));
|
||||
value |= (pRegionConfig->Size << ICACHE_CRRx_RSIZE_Pos) | pRegionConfig->TrafficRoute | \
|
||||
pRegionConfig->OutputBurstType;
|
||||
*p_reg = (value | ICACHE_CRRx_REN);
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the memory remapping for a predefined region.
|
||||
* @param Region Region number
|
||||
This parameter can be a value of @arg @ref ICACHE_Region
|
||||
* @retval HAL status (HAL_OK/HAL_ERROR)
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_ICACHE_DisableRemapRegion(uint32_t Region)
|
||||
{
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
__IO uint32_t *p_reg;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_ICACHE_REGION_NUMBER(Region));
|
||||
|
||||
/* Check cache is not enabled */
|
||||
if (READ_BIT(ICACHE->CR, ICACHE_CR_EN) != 0U)
|
||||
{
|
||||
status = HAL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get region control register address */
|
||||
p_reg = &(ICACHE->CRR0) + (1U * Region);
|
||||
|
||||
*p_reg &= ~ICACHE_CRRx_REN;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* ICACHE_CRRx_REN */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
674
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_pwr.c
Normal file
674
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_pwr.c
Normal file
@@ -0,0 +1,674 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_pwr.c
|
||||
* @author MCD Application Team
|
||||
* @brief PWR HAL module driver.
|
||||
* This file provides firmware functions to manage the following
|
||||
* functionalities of the Power Controller (PWR) peripheral:
|
||||
* + Initialization/De-Initialization Functions.
|
||||
* + Peripheral Control Functions.
|
||||
* + PWR Attributes Functions.
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup PWR PWR
|
||||
* @brief PWR HAL module driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined (HAL_PWR_MODULE_ENABLED)
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWR_Private_Defines PWR Private Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_PVD_Mode_Mask PWR PVD Mode Mask
|
||||
* @{
|
||||
*/
|
||||
#define PVD_RISING_EDGE (0x01U) /*!< Mask for rising edge set as PVD
|
||||
trigger */
|
||||
#define PVD_FALLING_EDGE (0x02U) /*!< Mask for falling edge set as PVD
|
||||
trigger */
|
||||
#define PVD_MODE_IT (0x04U) /*!< Mask for interruption yielded by PVD
|
||||
threshold crossing */
|
||||
#define PVD_MODE_EVT (0x08U) /*!< Mask for event yielded by PVD threshold
|
||||
crossing */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWR_Exported_Functions PWR Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_Exported_Functions_Group1 Initialization and De-Initialization Functions
|
||||
* @brief Initialization and de-Initialization functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Initialization and De-Initialization Functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Deinitialize the HAL PWR peripheral registers to their default reset
|
||||
* values.
|
||||
* @note This functionality is not available in this product.
|
||||
* The prototype is kept just to maintain compatibility with other
|
||||
* products.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_DeInit(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable access to the backup domain (RCC Backup domain control
|
||||
* register RCC_BDCR, RTC registers, TAMP registers, backup registers
|
||||
* and backup SRAM).
|
||||
* @note After a system reset, the backup domain is protected against
|
||||
* possible unwanted write accesses.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_EnableBkUpAccess(void)
|
||||
{
|
||||
SET_BIT(PWR->DBPCR, PWR_DBPCR_DBP);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable access to the backup domain (RCC Backup domain control
|
||||
* register RCC_BDCR, RTC registers, TAMP registers, backup registers
|
||||
* and backup SRAM).
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PWR_DisableBkUpAccess(void)
|
||||
{
|
||||
CLEAR_BIT(PWR->DBPCR, PWR_DBPCR_DBP);
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control Functions
|
||||
* @brief Low power modes configuration functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Peripheral Control functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Configure the voltage threshold detected by the Programmed Voltage
|
||||
* Detector (PVD).
|
||||
* @param sConfigPVD : Pointer to a PWR_PVDTypeDef structure that contains the
|
||||
* PVD configuration information (PVDLevel and EventMode).
|
||||
* @retval None.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_PWR_ConfigPVD(const PWR_PVDTypeDef *sConfigPVD)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel));
|
||||
assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode));
|
||||
|
||||
/* Set PLS[3:1] bits according to PVDLevel value */
|
||||
MODIFY_REG(PWR->VMCR, PWR_VMCR_PLS, sConfigPVD->PVDLevel);
|
||||
|
||||
/* Disable PVD Event/Interrupt */
|
||||
__HAL_PWR_PVD_EXTI_DISABLE_EVENT();
|
||||
__HAL_PWR_PVD_EXTI_DISABLE_IT();
|
||||
__HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();
|
||||
__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();
|
||||
|
||||
/* Configure the PVD in interrupt mode */
|
||||
if ((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT)
|
||||
{
|
||||
__HAL_PWR_PVD_EXTI_ENABLE_IT();
|
||||
}
|
||||
|
||||
/* Configure the PVD in event mode */
|
||||
if ((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT)
|
||||
{
|
||||
__HAL_PWR_PVD_EXTI_ENABLE_EVENT();
|
||||
}
|
||||
|
||||
/* Configure the PVD in rising edge */
|
||||
if ((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE)
|
||||
{
|
||||
__HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();
|
||||
}
|
||||
|
||||
/* Configure the PVD in falling edge */
|
||||
if ((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE)
|
||||
{
|
||||
__HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();
|
||||
}
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable the programmable voltage detector (PVD).
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_EnablePVD(void)
|
||||
{
|
||||
SET_BIT(PWR->VMCR, PWR_VMCR_PVDEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the programmable voltage detector (PVD).
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_DisablePVD(void)
|
||||
{
|
||||
CLEAR_BIT(PWR->VMCR, PWR_VMCR_PVDEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable the WakeUp PINx functionality.
|
||||
* @param WakeUpPinPolarity : Specifies which Wake-Up pin to enable.
|
||||
* This parameter can be one of the following legacy values, which
|
||||
* sets the default (rising edge):
|
||||
* @arg PWR_WAKEUP_PIN1, PWR_WAKEUP_PIN2, PWR_WAKEUP_PIN3,PWR_WAKEUP_PIN4,
|
||||
* PWR_WAKEUP_PIN5, PWR_WAKEUP_PIN6, PWR_WAKEUP_PIN7.PWR_WAKEUP_PIN8.
|
||||
* or one of the following values where the user can explicitly states
|
||||
* the enabled pin and the chosen polarity:
|
||||
* @arg PWR_WAKEUP_PIN1_HIGH, PWR_WAKEUP_PIN1_LOW,
|
||||
* PWR_WAKEUP_PIN2_HIGH, PWR_WAKEUP_PIN2_LOW,
|
||||
* PWR_WAKEUP_PIN3_HIGH, PWR_WAKEUP_PIN3_LOW,
|
||||
* PWR_WAKEUP_PIN4_HIGH, PWR_WAKEUP_PIN4_LOW,
|
||||
* PWR_WAKEUP_PIN5_HIGH, PWR_WAKEUP_PIN5_LOW,
|
||||
* PWR_WAKEUP_PIN6_HIGH, PWR_WAKEUP_PIN6_LOW,
|
||||
* PWR_WAKEUP_PIN7_HIGH, PWR_WAKEUP_PIN7_LOW,
|
||||
* PWR_WAKEUP_PIN8_HIGH, PWR_WAKEUP_PIN8_LOW.
|
||||
* @note PWR_WAKEUP_PINx and PWR_WAKEUP_PINx_HIGH are equivalent.
|
||||
* @note The PWR_WAKEUP_PIN6_HIGH, PWR_WAKEUP_PIN6_LOW, PWR_WAKEUP_PIN7_HIGH, PWR_WAKEUP_PIN7_LOW,
|
||||
* PWR_WAKEUP_PIN8_HIGH and PWR_WAKEUP_PIN8_LOW are not available for STM32H503xx devices.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinPolarity)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinPolarity));
|
||||
|
||||
/*
|
||||
Enable and Specify the Wake-Up pin polarity and the pull configuration
|
||||
for the event detection (rising or falling edge).
|
||||
*/
|
||||
MODIFY_REG(PWR->WUCR, PWR_EWUP_MASK, WakeUpPinPolarity);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the WakeUp PINx functionality.
|
||||
* @param WakeUpPinx : Specifies the Power Wake-Up pin to disable.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg PWR_WAKEUP_PIN1, PWR_WAKEUP_PIN2, PWR_WAKEUP_PIN3,PWR_WAKEUP_PIN4,
|
||||
* PWR_WAKEUP_PIN5, PWR_WAKEUP_PIN6, PWR_WAKEUP_PIN7.PWR_WAKEUP_PIN8.
|
||||
* or one of the following values where the user can explicitly states
|
||||
* the enabled pin and the chosen polarity:
|
||||
* @arg PWR_WAKEUP_PIN1_HIGH, PWR_WAKEUP_PIN1_LOW,
|
||||
* PWR_WAKEUP_PIN2_HIGH, PWR_WAKEUP_PIN2_LOW,
|
||||
* PWR_WAKEUP_PIN3_HIGH, PWR_WAKEUP_PIN3_LOW,
|
||||
* PWR_WAKEUP_PIN4_HIGH, PWR_WAKEUP_PIN4_LOW,
|
||||
* PWR_WAKEUP_PIN5_HIGH, PWR_WAKEUP_PIN5_LOW,
|
||||
* PWR_WAKEUP_PIN6_HIGH, PWR_WAKEUP_PIN6_LOW,
|
||||
* PWR_WAKEUP_PIN7_HIGH, PWR_WAKEUP_PIN7_LOW,
|
||||
* PWR_WAKEUP_PIN8_HIGH, PWR_WAKEUP_PIN8_LOW.
|
||||
* @note The PWR_WAKEUP_PIN6_HIGH, PWR_WAKEUP_PIN6_LOW, PWR_WAKEUP_PIN7_HIGH, PWR_WAKEUP_PIN7_LOW,
|
||||
* PWR_WAKEUP_PIN8_HIGH and PWR_WAKEUP_PIN8_LOW are not available for STM32H503xx devices.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));
|
||||
|
||||
/* Disable the wake up pin selected */
|
||||
CLEAR_BIT(PWR->WUCR, (PWR_WUCR_WUPEN & WakeUpPinx));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enter the CPU in SLEEP mode.
|
||||
* @note In SLEEP mode, all I/O pins keep the same state as in Run mode.
|
||||
* @note CPU clock is off and all peripherals including Cortex-M33 core such
|
||||
* as NVIC and SysTick can run and wake up the CPU when an interrupt
|
||||
* or an event occurs.
|
||||
* @param Regulator : Specifies the regulator state in Sleep mode.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg @ref PWR_MAINREGULATOR_ON
|
||||
* @arg @ref PWR_LOWPOWERREGULATOR_ON
|
||||
* @note This parameter is not available in this product.
|
||||
* The parameter is kept just to maintain compatibility with other
|
||||
* products.
|
||||
* @param SLEEPEntry : Specifies if SLEEP mode is entered with WFI or WFE
|
||||
* instruction.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg @ref PWR_SLEEPENTRY_WFI enter SLEEP mode with Wait
|
||||
* For Interrupt request.
|
||||
* @arg @ref PWR_SLEEPENTRY_WFE enter SLEEP mode with Wait
|
||||
* For Event request.
|
||||
* @note When WFI entry is used, ticks interrupt must be disabled to avoid
|
||||
* unexpected CPU wake up.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry)
|
||||
{
|
||||
UNUSED(Regulator);
|
||||
|
||||
/* Check the parameter */
|
||||
assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry));
|
||||
|
||||
/* Clear SLEEPDEEP bit of Cortex System Control Register */
|
||||
CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
|
||||
|
||||
/* Select SLEEP mode entry */
|
||||
if (SLEEPEntry == PWR_SLEEPENTRY_WFI)
|
||||
{
|
||||
/* Wait For Interrupt Request */
|
||||
__WFI();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Wait For Event Request */
|
||||
__SEV();
|
||||
__WFE();
|
||||
__WFE();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enter the whole system to STOP mode.
|
||||
* @note In STOP mode, the regulator remains in main regulator mode,
|
||||
* allowing a very fast wakeup time but with much higher consumption
|
||||
* comparing to other STOP modes.
|
||||
* @note STOP offers the largest number of active peripherals and wakeup
|
||||
* sources, a smaller wakeup time but a higher consumption.
|
||||
* STOP mode achieves the lowest power consumption while retaining
|
||||
* the content of SRAM and registers. All clocks in the VCORE domain
|
||||
* are stopped. The PLL, the HSI, the CSI and the HSE crystal oscillators
|
||||
* are disabled. The LSE or LSI is still running.
|
||||
* @note The system clock when exiting from Stop mode can be either HSI
|
||||
* or CSI, depending on software configuration.
|
||||
* @param Regulator : Specifies the regulator state in Sleep mode.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg @ref PWR_MAINREGULATOR_ON
|
||||
* @arg @ref PWR_LOWPOWERREGULATOR_ON
|
||||
* @note This parameter is not available in this product.
|
||||
* The parameter is kept just to maintain compatibility with other
|
||||
* products.
|
||||
* @param STOPEntry : Specifies if STOP mode is entered with WFI or WFE
|
||||
* instruction.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg @ref PWR_STOPENTRY_WFI enter STOP mode with Wait
|
||||
* For Interrupt request.
|
||||
* @arg @ref PWR_STOPENTRY_WFE enter STOP mode with Wait
|
||||
* For Event request.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry)
|
||||
{
|
||||
UNUSED(Regulator);
|
||||
|
||||
/* Check the parameter */
|
||||
assert_param(IS_PWR_STOP_ENTRY(STOPEntry));
|
||||
|
||||
/* Select STOP mode */
|
||||
CLEAR_BIT(PWR->PMCR, PWR_PMCR_LPMS);
|
||||
|
||||
/* Set SLEEPDEEP bit of Cortex System Control Register */
|
||||
SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
|
||||
|
||||
/* Select STOP mode entry */
|
||||
if (STOPEntry == PWR_STOPENTRY_WFI)
|
||||
{
|
||||
/* Wait For Interrupt Request */
|
||||
__WFI();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Wait For Event Request */
|
||||
__SEV();
|
||||
__WFE();
|
||||
__WFE();
|
||||
}
|
||||
|
||||
/* Reset SLEEPDEEP bit of Cortex System Control Register */
|
||||
CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enter the whole system to STANDBY mode.
|
||||
* @note The STANDBY mode is used to achieve the lowest power consumption
|
||||
* with BOR. The internal regulator is switched off so that the VCORE
|
||||
* domain is powered off. The PLL, the HSI, the CSI and the HSE crystal
|
||||
* oscillators are also switched off.
|
||||
* @note After entering STANDBY mode, SRAMs and register contents are lost
|
||||
* except for registers and backup SRAM in the Backup domain and
|
||||
* STANDBY circuitry.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_EnterSTANDBYMode(void)
|
||||
{
|
||||
/* Select STANDBY mode */
|
||||
SET_BIT(PWR->PMCR, PWR_PMCR_LPMS);
|
||||
|
||||
/* Set SLEEPDEEP bit of Cortex System Control Register */
|
||||
SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
|
||||
|
||||
/* Wait For all memory accesses to complete before continuing */
|
||||
__DSB();
|
||||
|
||||
/* Ensure that the processor pipeline is flushed */
|
||||
__ISB();
|
||||
|
||||
/* Wait For Interrupt Request */
|
||||
__WFI();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Indicate SLEEP-ON-EXIT feature when returning from handler mode to
|
||||
* thread mode.
|
||||
* @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the
|
||||
* processor re-enters SLEEP mode when an interruption handling is over.
|
||||
* Setting this bit is useful when the processor is expected to run
|
||||
* only on interruptions handling.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_EnableSleepOnExit(void)
|
||||
{
|
||||
/* Set SLEEPONEXIT bit of Cortex-M33 System Control Register */
|
||||
SET_BIT(SCB->SCR, SCB_SCR_SLEEPONEXIT_Msk);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable SLEEP-ON-EXIT feature when returning from handler mode to
|
||||
* thread mode.
|
||||
* @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the
|
||||
* processor re-enters SLEEP mode when an interruption handling is over.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_DisableSleepOnExit(void)
|
||||
{
|
||||
/* Clear SLEEPONEXIT bit of Cortex-M33 System Control Register */
|
||||
CLEAR_BIT(SCB->SCR, SCB_SCR_SLEEPONEXIT_Msk);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable CORTEX SEV-ON-PEND feature.
|
||||
* @note Sets SEVONPEND bit of SCR register. When this bit is set, any
|
||||
* pending event / interrupt even if it's disabled or has insufficient
|
||||
* priority to cause exception entry wakes up the Cortex-M33.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_EnableSEVOnPend(void)
|
||||
{
|
||||
/* Set SEVONPEND bit of Cortex-M33 System Control Register */
|
||||
SET_BIT(SCB->SCR, SCB_SCR_SEVONPEND_Msk);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable CORTEX SEVONPEND feature.
|
||||
* @note Resets SEVONPEND bit of SCR register. When this bit is reset, only
|
||||
* enabled pending causes exception entry wakes up the Cortex-M33.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_DisableSEVOnPend(void)
|
||||
{
|
||||
/* Clear SEVONPEND bit of Cortex-M33 System Control Register */
|
||||
CLEAR_BIT(SCB->SCR, SCB_SCR_SEVONPEND_Msk);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles the PWR PVD interrupt request.
|
||||
* @note This API should be called under the PVD_AVD_IRQHandler().
|
||||
* @note The use of this API is only when we activate the PVD.
|
||||
* @note When the PVD and AVD are activated at the same time you must use this API:
|
||||
* HAL_PWREx_PVD_AVD_IRQHandler.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_PVD_IRQHandler(void)
|
||||
{
|
||||
uint32_t rising_flag;
|
||||
uint32_t falling_flag;
|
||||
|
||||
/* Get pending flags */
|
||||
rising_flag = READ_REG(EXTI->RPR1);
|
||||
falling_flag = READ_REG(EXTI->FPR1);
|
||||
|
||||
/* Check PWR EXTI flags for PVD */
|
||||
if (((rising_flag | falling_flag) & PWR_EXTI_LINE_PVD) != 0U)
|
||||
{
|
||||
/* PWR PVD interrupt user callback */
|
||||
HAL_PWR_PVDCallback();
|
||||
|
||||
/* Clear PVD EXTI pending bit */
|
||||
WRITE_REG(EXTI->RPR1, PWR_EXTI_LINE_PVD);
|
||||
WRITE_REG(EXTI->FPR1, PWR_EXTI_LINE_PVD);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PWR PVD interrupt callback.
|
||||
* @retval None.
|
||||
*/
|
||||
__weak void HAL_PWR_PVDCallback(void)
|
||||
{
|
||||
/* NOTE : This function should not be modified, when the callback is needed,
|
||||
the HAL_PWR_PVDCallback can be implemented in the user file
|
||||
*/
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWR_Exported_Functions_Group3 Attributes Management Functions
|
||||
* @brief Attributes management functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### PWR Attributes Functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Configure the PWR item attributes.
|
||||
* @note Available attributes are security and privilege protection.
|
||||
* @note Security attribute can only be set only by secure access.
|
||||
* @note Privilege attribute for secure items can be managed only by a secure
|
||||
* privileged access.
|
||||
* @note Privilege attribute for nsecure items can be managed by a secure
|
||||
* privileged access or by a nsecure privileged access.
|
||||
* @note As the privileged attributes concern either all secure or all non-secure
|
||||
* PWR resources accesses and not each PWR individual items access attribute,
|
||||
* the application must ensure that the privilege access attribute configurations
|
||||
* are coherent amongst the security level set on PWR individual items so not to
|
||||
* overwrite a previous more restricted access rule (consider either all secure
|
||||
* and/or all non-secure PWR resources accesses by privileged-only transactions
|
||||
* or privileged and unprivileged transactions).
|
||||
* @param Item : Specifies the item(s) to set attributes on.
|
||||
* This parameter can be a combination of @ref PWR_Items.
|
||||
* @param Attributes : Specifies the available attribute(s).
|
||||
* This parameter can be one of @ref PWR_Attributes.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWR_ConfigAttributes(uint32_t Item, uint32_t Attributes)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_ATTRIBUTES(Attributes));
|
||||
|
||||
#if defined (PWR_SECCFGR_WUP1SEC)
|
||||
assert_param(IS_PWR_ITEMS_ATTRIBUTES(Item));
|
||||
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* Secure item management (TZEN = 1) */
|
||||
if ((Attributes & PWR_ITEM_ATTR_SEC_PRIV_MASK) == PWR_ITEM_ATTR_SEC_PRIV_MASK)
|
||||
{
|
||||
/* Privilege item management */
|
||||
if ((Attributes & PWR_SEC_PRIV) == PWR_SEC_PRIV)
|
||||
{
|
||||
SET_BIT(PWR->SECCFGR, Item);
|
||||
SET_BIT(PWR->PRIVCFGR, PWR_PRIVCFGR_SPRIV);
|
||||
}
|
||||
else
|
||||
{
|
||||
SET_BIT(PWR->SECCFGR, Item);
|
||||
CLEAR_BIT(PWR->PRIVCFGR, PWR_PRIVCFGR_SPRIV);
|
||||
}
|
||||
}
|
||||
/* NSecure item management */
|
||||
else
|
||||
{
|
||||
/* Privilege item management */
|
||||
if ((Attributes & PWR_NSEC_PRIV) == PWR_NSEC_PRIV)
|
||||
{
|
||||
CLEAR_BIT(PWR->SECCFGR, Item);
|
||||
SET_BIT(PWR->PRIVCFGR, PWR_PRIVCFGR_NSPRIV);
|
||||
}
|
||||
else
|
||||
{
|
||||
CLEAR_BIT(PWR->SECCFGR, Item);
|
||||
CLEAR_BIT(PWR->PRIVCFGR, PWR_PRIVCFGR_NSPRIV);
|
||||
}
|
||||
}
|
||||
#else
|
||||
/* NSecure item management (TZEN = 0) */
|
||||
if ((Attributes & PWR_ITEM_ATTR_NSEC_PRIV_MASK) == PWR_ITEM_ATTR_NSEC_PRIV_MASK)
|
||||
{
|
||||
/* Privilege item management */
|
||||
if ((Attributes & PWR_NSEC_PRIV) == PWR_NSEC_PRIV)
|
||||
{
|
||||
SET_BIT(PWR->PRIVCFGR, PWR_PRIVCFGR_NSPRIV);
|
||||
}
|
||||
else
|
||||
{
|
||||
CLEAR_BIT(PWR->PRIVCFGR, PWR_PRIVCFGR_NSPRIV);
|
||||
}
|
||||
}
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
#else /* PWR_SECCFGR_WUP1SEC */
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(Item);
|
||||
|
||||
/* NSecure item management (TZEN = 0) */
|
||||
if ((Attributes & PWR_ITEM_ATTR_NSEC_PRIV_MASK) == PWR_ITEM_ATTR_NSEC_PRIV_MASK)
|
||||
{
|
||||
/* Privilege item management */
|
||||
if ((Attributes & PWR_PRIV) == PWR_PRIV)
|
||||
{
|
||||
SET_BIT(PWR->PRIVCFGR, PWR_PRIVCFGR_PRIV);
|
||||
}
|
||||
else
|
||||
{
|
||||
CLEAR_BIT(PWR->PRIVCFGR, PWR_PRIVCFGR_PRIV);
|
||||
}
|
||||
}
|
||||
#endif /* PWR_SECCFGR_WUP1SEC */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get attribute(s) of a PWR item.
|
||||
* @param Item : Specifies the item(s) to set attributes on.
|
||||
* This parameter can be one of @ref PWR_Items.
|
||||
* @param pAttributes : Pointer to return attribute(s).
|
||||
* Returned value could be on of @ref PWR_Attributes.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_PWR_GetConfigAttributes(uint32_t Item, uint32_t *pAttributes)
|
||||
{
|
||||
uint32_t attributes;
|
||||
|
||||
/* Check attribute pointer */
|
||||
if (pAttributes == NULL)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
#if defined (PWR_SECCFGR_WUP1SEC)
|
||||
/* Check the parameter */
|
||||
assert_param(IS_PWR_ITEMS_ATTRIBUTES(Item));
|
||||
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
|
||||
/* Check item security */
|
||||
if ((PWR->SECCFGR & Item) == Item)
|
||||
{
|
||||
/* Get Secure privileges attribute */
|
||||
attributes = ((PWR->PRIVCFGR & PWR_PRIVCFGR_SPRIV) == 0U) ? PWR_SEC_NPRIV : PWR_SEC_PRIV;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get Non-Secure privileges attribute */
|
||||
attributes = ((PWR->PRIVCFGR & PWR_PRIVCFGR_NSPRIV) == 0U) ? PWR_NSEC_NPRIV : PWR_NSEC_PRIV;
|
||||
}
|
||||
#else
|
||||
/* Get Non-Secure privileges attribute */
|
||||
attributes = ((PWR->PRIVCFGR & PWR_PRIVCFGR_NSPRIV) == 0U) ? PWR_NSEC_NPRIV : PWR_NSEC_PRIV;
|
||||
#endif /* __ARM_FEATURE_CMSE */
|
||||
|
||||
#else /* PWR_SECCFGR_WUP1SEC*/
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
UNUSED(Item);
|
||||
|
||||
/* Get Non-Secure privileges attribute */
|
||||
attributes = ((PWR->PRIVCFGR & PWR_PRIVCFGR_PRIV) == 0U) ? PWR_NPRIV : PWR_PRIV;
|
||||
#endif /* PWR_SECCFGR_WUP1SEC */
|
||||
|
||||
/* return value */
|
||||
*pAttributes = attributes;
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* defined (HAL_PWR_MODULE_ENABLED) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
844
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_pwr_ex.c
Normal file
844
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_pwr_ex.c
Normal file
@@ -0,0 +1,844 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32h5xx_hal_pwr_ex.c
|
||||
* @author MCD Application Team
|
||||
* @brief Extended PWR HAL module driver.
|
||||
* This file provides firmware functions to manage the following
|
||||
* functionalities of the Power Controller extension peripheral :
|
||||
* + Power Supply Control Functions
|
||||
* + Voltage Monitoring Functions
|
||||
* + Wakeup Pins configuration Functions
|
||||
* + Memories Retention Functions
|
||||
* + IO and JTAG Retention Functions
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32h5xx_hal.h"
|
||||
|
||||
/** @addtogroup STM32H5xx_HAL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx PWREx
|
||||
* @brief PWR Extended HAL module driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined (HAL_PWR_MODULE_ENABLED)
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWR_Extended_Private_Defines PWR Extended Private Defines
|
||||
* @{
|
||||
*/
|
||||
/* PORTI pins mask */
|
||||
#define PWR_PORTI_AVAILABLE_PINS (0xFFU)
|
||||
/*!< Time out value of flags setting */
|
||||
#define PWR_FLAG_SETTING_DELAY (0x32U)
|
||||
|
||||
/** @defgroup PWR_PVM_Mode_Mask PWR PVM Mode Mask
|
||||
* @{
|
||||
*/
|
||||
#define PVM_RISING_EDGE (0x01U) /*!< Mask for rising edge set as PVM trigger */
|
||||
#define PVM_FALLING_EDGE (0x02U) /*!< Mask for falling edge set as PVM trigger */
|
||||
#define PVM_MODE_IT (0x04U) /*!< Mask for interruption yielded by PVM threshold crossing */
|
||||
#define PVM_MODE_EVT (0x08U) /*!< Mask for event yielded by PVM threshold crossing */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_WakeUp_Pins_Offsets PWREx Wake-Up Pins offsets
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Wake-Up Pins PWR Pin Pull shift offsets */
|
||||
#define PWR_WAKEUP_PINS_PULL_SHIFT_OFFSET (2U)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Functions PWR Extended Exported Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Functions_Group1 Power Supply Control Functions
|
||||
* @brief Power supply control functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Power supply control functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Configure the system Power Supply.
|
||||
* @param SupplySource : Specifies the Power Supply source to set after a
|
||||
* system startup.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg PWR_EXTERNAL_SOURCE_SUPPLY : The SMPS and the LDO are
|
||||
* Bypassed. The Vcore Power
|
||||
* Domains are supplied from
|
||||
* external source.
|
||||
* @retval HAL status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_PWREx_ConfigSupply(uint32_t SupplySource)
|
||||
{
|
||||
uint32_t tickstart;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_SUPPLY(SupplySource));
|
||||
|
||||
if ((PWR->SCCR & PWR_SCCR_BYPASS) != (PWR_SCCR_BYPASS))
|
||||
{
|
||||
/* Set the power supply configuration */
|
||||
MODIFY_REG(PWR->SCCR, PWR_SUPPLY_CONFIG_MASK, SupplySource);
|
||||
|
||||
/* Get tick */
|
||||
tickstart = HAL_GetTick();
|
||||
|
||||
/* Wait till voltage level flag is set */
|
||||
while (__HAL_PWR_GET_FLAG(PWR_FLAG_ACTVOSRDY) == 0U)
|
||||
{
|
||||
if ((HAL_GetTick() - tickstart) > PWR_FLAG_SETTING_DELAY)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the power supply configuration.
|
||||
* @retval The supply configuration.
|
||||
*/
|
||||
uint32_t HAL_PWREx_GetSupplyConfig(void)
|
||||
{
|
||||
return (PWR->SCCR & PWR_SUPPLY_CONFIG_MASK);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configure the main internal regulator output voltage.
|
||||
* @param VoltageScaling : Specifies the regulator output voltage to achieve
|
||||
* a tradeoff between performance and power
|
||||
* consumption.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg PWR_REGULATOR_VOLTAGE_SCALE0 : Regulator voltage output
|
||||
* Scale 0 mode.
|
||||
* @arg PWR_REGULATOR_VOLTAGE_SCALE1 : Regulator voltage output
|
||||
* range 1 mode.
|
||||
* @arg PWR_REGULATOR_VOLTAGE_SCALE2 : Regulator voltage output
|
||||
* range 2 mode.
|
||||
* @arg PWR_REGULATOR_VOLTAGE_SCALE3 : Regulator voltage output
|
||||
* range 3 mode.
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling)
|
||||
{
|
||||
uint32_t tickstart = HAL_GetTick();
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling));
|
||||
|
||||
/* Get the voltage scaling */
|
||||
if ((PWR->VOSSR & PWR_VOSSR_ACTVOS) == (VoltageScaling << 10U))
|
||||
{
|
||||
/* Old and new voltage scaling configuration match : nothing to do */
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/* Set the voltage range */
|
||||
MODIFY_REG(PWR->VOSCR, PWR_VOSCR_VOS, VoltageScaling);
|
||||
|
||||
/* Wait till voltage level flag is set */
|
||||
while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY) == 0U)
|
||||
{
|
||||
if ((HAL_GetTick() - tickstart) > PWR_FLAG_SETTING_DELAY)
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the main internal regulator output voltage. Reflecting the last
|
||||
* VOS value applied to the PMU.
|
||||
* @retval The current applied VOS selection.
|
||||
*/
|
||||
uint32_t HAL_PWREx_GetVoltageRange(void)
|
||||
{
|
||||
/* Get the active voltage scaling */
|
||||
return (PWR->VOSSR & PWR_VOSSR_ACTVOS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configure the main internal regulator output voltage in STOP mode.
|
||||
* @param VoltageScaling : Specifies the regulator output voltage when the
|
||||
* system enters Stop mode to achieve a tradeoff between performance
|
||||
* and power consumption.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg PWR_REGULATOR_SVOS_SCALE3 : Regulator voltage output range
|
||||
* 3 mode.
|
||||
* @arg PWR_REGULATOR_SVOS_SCALE4 : Regulator voltage output range
|
||||
* 4 mode.
|
||||
* @arg PWR_REGULATOR_SVOS_SCALE5 : Regulator voltage output range
|
||||
* 5 mode.
|
||||
* @note The Stop mode voltage scaling for SVOS4 and SVOS5 sets the voltage
|
||||
* regulator in Low-power (LP) mode to further reduce power consumption.
|
||||
* When preselecting SVOS3, the use of the voltage regulator low-power
|
||||
* mode (LP) can be selected by LPDS register bit.
|
||||
* @note The selected SVOS4 and SVOS5 levels add an additional startup delay
|
||||
* when exiting from system Stop mode.
|
||||
* @retval HAL Status.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_PWREx_ControlStopModeVoltageScaling(uint32_t VoltageScaling)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_STOP_MODE_REGULATOR_VOLTAGE(VoltageScaling));
|
||||
|
||||
/* Return the stop mode voltage range */
|
||||
MODIFY_REG(PWR->PMCR, PWR_PMCR_SVOS, VoltageScaling);
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the main internal regulator output voltage in STOP mode.
|
||||
* @retval The actual applied VOS selection.
|
||||
*/
|
||||
uint32_t HAL_PWREx_GetStopModeVoltageRange(void)
|
||||
{
|
||||
/* Return the stop voltage scaling */
|
||||
return (PWR->PMCR & PWR_PMCR_SVOS);
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Functions_Group2 Voltage Monitoring Functions
|
||||
* @brief Voltage monitoring functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Voltage Monitoring Functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Configure the event mode and the voltage threshold detected by the
|
||||
* Analog Voltage Detector (AVD).
|
||||
* @param sConfigAVD : Pointer to an PWREx_AVDTypeDef structure that contains
|
||||
* the configuration information for the AVD.
|
||||
* @note Refer to the electrical characteristics of your device datasheet for
|
||||
* more details about the voltage threshold corresponding to each
|
||||
* detection level.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_ConfigAVD(const PWREx_AVDTypeDef *sConfigAVD)
|
||||
{
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_AVD_LEVEL(sConfigAVD->AVDLevel));
|
||||
assert_param(IS_PWR_AVD_MODE(sConfigAVD->Mode));
|
||||
|
||||
/* Set the ALS[10:9] bits according to AVDLevel value */
|
||||
MODIFY_REG(PWR->VMCR, PWR_VMCR_ALS, sConfigAVD->AVDLevel);
|
||||
|
||||
/* Clear any previous config */
|
||||
__HAL_PWR_AVD_EXTI_DISABLE_EVENT();
|
||||
__HAL_PWR_AVD_EXTI_DISABLE_IT();
|
||||
__HAL_PWR_AVD_EXTI_DISABLE_RISING_EDGE();
|
||||
__HAL_PWR_AVD_EXTI_DISABLE_FALLING_EDGE();
|
||||
|
||||
/* Configure the interrupt mode */
|
||||
if ((sConfigAVD->Mode & AVD_MODE_IT) == AVD_MODE_IT)
|
||||
{
|
||||
__HAL_PWR_AVD_EXTI_ENABLE_IT();
|
||||
}
|
||||
|
||||
/* Configure the event mode */
|
||||
if ((sConfigAVD->Mode & AVD_MODE_EVT) == AVD_MODE_EVT)
|
||||
{
|
||||
__HAL_PWR_AVD_EXTI_ENABLE_EVENT();
|
||||
}
|
||||
|
||||
/* Rising edge configuration */
|
||||
if ((sConfigAVD->Mode & AVD_RISING_EDGE) == AVD_RISING_EDGE)
|
||||
{
|
||||
__HAL_PWR_AVD_EXTI_ENABLE_RISING_EDGE();
|
||||
}
|
||||
|
||||
/* Falling edge configuration */
|
||||
if ((sConfigAVD->Mode & AVD_FALLING_EDGE) == AVD_FALLING_EDGE)
|
||||
{
|
||||
__HAL_PWR_AVD_EXTI_ENABLE_FALLING_EDGE();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable the Analog Voltage Detector (AVD).
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableAVD(void)
|
||||
{
|
||||
/* Enable the Analog Voltage Detector */
|
||||
SET_BIT(PWR->VMCR, PWR_VMCR_AVDEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the Analog Voltage Detector(AVD).
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableAVD(void)
|
||||
{
|
||||
/* Disable the Analog Voltage Detector */
|
||||
CLEAR_BIT(PWR->VMCR, PWR_VMCR_AVDEN);
|
||||
}
|
||||
|
||||
#if defined (PWR_USBSCR_USB33DEN)
|
||||
/**
|
||||
* @brief Enable the USB voltage level detector.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableUSBVoltageDetector(void)
|
||||
{
|
||||
/* Enable the USB voltage detector */
|
||||
SET_BIT(PWR->USBSCR, PWR_USBSCR_USB33DEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the USB voltage level detector.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableUSBVoltageDetector(void)
|
||||
{
|
||||
/* Disable the USB voltage detector */
|
||||
CLEAR_BIT(PWR->USBSCR, PWR_USBSCR_USB33DEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable VDDUSB supply.
|
||||
* @note Remove VDDUSB electrical and logical isolation, once VDDUSB supply
|
||||
* is present for consumption saving.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableVddUSB(void)
|
||||
{
|
||||
SET_BIT(PWR->USBSCR, PWR_USBSCR_USB33SV);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable VDDUSB supply.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableVddUSB(void)
|
||||
{
|
||||
CLEAR_BIT(PWR->USBSCR, PWR_USBSCR_USB33SV);
|
||||
}
|
||||
#endif /* PWR_USBSCR_USB33DEN */
|
||||
|
||||
/**
|
||||
* @brief Enable the VBAT and temperature monitoring.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableMonitoring(void)
|
||||
{
|
||||
SET_BIT(PWR->BDCR, PWR_BDCR_MONEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the VBAT and temperature monitoring.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableMonitoring(void)
|
||||
{
|
||||
CLEAR_BIT(PWR->BDCR, PWR_BDCR_MONEN);
|
||||
}
|
||||
|
||||
#if defined (PWR_UCPDR_UCPD_STBY)
|
||||
/**
|
||||
* @brief Enable UCPD configuration memorization in Standby mode.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableUCPDStandbyMode(void)
|
||||
{
|
||||
SET_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_STBY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable UCPD configuration memorization in Standby mode.
|
||||
* @note This function must be called on exiting the Standby mode and before
|
||||
* any UCPD configuration update.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableUCPDStandbyMode(void)
|
||||
{
|
||||
CLEAR_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_STBY);
|
||||
}
|
||||
#endif /* PWR_UCPDR_UCPD_STBY */
|
||||
|
||||
#if defined (PWR_UCPDR_UCPD_DBDIS)
|
||||
/**
|
||||
* @brief Enable dead battery behavior.
|
||||
* @note After exiting reset, the USB Type-C (dead battery) behavior is
|
||||
* enabled, which may have a pull-down effect on CC1 and CC2 pins.
|
||||
* It is recommended to disable it in all cases, either to stop this
|
||||
* pull-down or to handover control to the UCPD (the UCPD must be
|
||||
* initialized before doing the disable).
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableUCPDDeadBattery(void)
|
||||
{
|
||||
CLEAR_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_DBDIS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable dead battery behavior.
|
||||
* @note After exiting reset, the USB Type-C (dead battery) behavior is
|
||||
* enabled, which may have a pull-down effect on CC1 and CC2 pins.
|
||||
* It is recommended to disable it in all cases, either to stop this
|
||||
* pull-down or to handover control to the UCPD (the UCPD must be
|
||||
* initialized before doing the disable).
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableUCPDDeadBattery(void)
|
||||
{
|
||||
SET_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_DBDIS);
|
||||
}
|
||||
#endif /* PWR_UCPDR_UCPD_DBDIS */
|
||||
|
||||
/**
|
||||
* @brief Enable the Battery charging.
|
||||
* @note When VDD is present, charge the external battery through an internal
|
||||
* resistor.
|
||||
* @param ResistorValue : Specifies the charging resistor.
|
||||
* This parameter can be one of the following values :
|
||||
* @arg PWR_BATTERY_CHARGING_RESISTOR_5 : 5 KOhm resistor.
|
||||
* @arg PWR_BATTERY_CHARGING_RESISTOR_1_5 : 1.5 KOhm resistor.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableBatteryCharging(uint32_t ResistorValue)
|
||||
{
|
||||
/* Check the parameter */
|
||||
assert_param(IS_PWR_BATTERY_RESISTOR_SELECT(ResistorValue));
|
||||
|
||||
/* Specify the charging resistor */
|
||||
MODIFY_REG(PWR->BDCR, PWR_BDCR_VBRS, ResistorValue);
|
||||
|
||||
/* Enable the Battery charging */
|
||||
SET_BIT(PWR->BDCR, PWR_BDCR_VBE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the Battery charging.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableBatteryCharging(void)
|
||||
{
|
||||
CLEAR_BIT(PWR->BDCR, PWR_BDCR_VBE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable the booster to guarantee the analog switch AC performance when
|
||||
* the VDD supply voltage is below 2V7.
|
||||
* @note The VDD supply voltage can be monitored through the PVD and the PLS
|
||||
* field bits.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableAnalogBooster(void)
|
||||
{
|
||||
/* Enable the Analog voltage */
|
||||
SET_BIT(PWR->PMCR, PWR_PMCR_AVD_READY);
|
||||
|
||||
/* Enable VDDA booster */
|
||||
SET_BIT(PWR->PMCR, PWR_PMCR_BOOSTE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the analog booster.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableAnalogBooster(void)
|
||||
{
|
||||
/* Disable VDDA booster */
|
||||
CLEAR_BIT(PWR->PMCR, PWR_PMCR_BOOSTE);
|
||||
|
||||
/* Disable the Analog voltage */
|
||||
CLEAR_BIT(PWR->PMCR, PWR_PMCR_AVD_READY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles the PWR PVD/AVD interrupt request.
|
||||
* @note This API should be called under the PVD_AVD_IRQHandler().
|
||||
* @note The use of this API is when the PVD and AVD are activated at the same time.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PWREx_PVD_AVD_IRQHandler(void)
|
||||
{
|
||||
/* Check PWR PVD AVD EXTI Rising flag */
|
||||
if (__HAL_PWR_PVD_AVD_EXTI_GET_RISING_FLAG() != 0U)
|
||||
{
|
||||
/* Clear PWR PVD AVD EXTI Rising pending bit */
|
||||
WRITE_REG(EXTI->RPR1, PWR_EXTI_LINE_AVD);
|
||||
|
||||
/* PWR PVD AVD Rising interrupt user callback */
|
||||
HAL_PWREx_PVD_AVD_Rising_Callback();
|
||||
}
|
||||
|
||||
/* Check PWR PVD AVD EXTI Falling flag */
|
||||
if (__HAL_PWR_PVD_AVD_EXTI_GET_FALLING_FLAG() != 0U)
|
||||
{
|
||||
/* Clear PWR PVD AVD EXTI Falling pending bit */
|
||||
WRITE_REG(EXTI->FPR1, PWR_EXTI_LINE_AVD);
|
||||
|
||||
/* PWR PVD AVD Falling interrupt user callback */
|
||||
HAL_PWREx_PVD_AVD_Falling_Callback();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PWR PVD AVD Rising interrupt callback.
|
||||
* @retval None.
|
||||
*/
|
||||
__weak void HAL_PWREx_PVD_AVD_Rising_Callback(void)
|
||||
{
|
||||
/* NOTE : This function should not be modified, when the callback is needed,
|
||||
the HAL_PWR_AVDCallback can be implemented in the user file
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PWR PVD AVD Falling interrupt callback.
|
||||
* @retval None.
|
||||
*/
|
||||
__weak void HAL_PWREx_PVD_AVD_Falling_Callback(void)
|
||||
{
|
||||
/* NOTE : This function should not be modified, when the callback is needed,
|
||||
the HAL_PWR_AVDCallback can be implemented in the user file
|
||||
*/
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Functions_Group3 Wakeup Pins configuration Functions
|
||||
* @brief Wakeup Pins configuration functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Wakeup Pins configuration Functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable the Wake-up PINx functionality.
|
||||
* @param sPinParams : Pointer to a PWREx_WakeupPinTypeDef structure that
|
||||
* contains the configuration information for the wake-up
|
||||
* Pin.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableWakeUpPin(const PWREx_WakeupPinTypeDef *sPinParams)
|
||||
{
|
||||
uint32_t pinConfig;
|
||||
uint32_t regMask;
|
||||
const uint32_t pullMask = PWR_WUCR_WUPPUPD1;
|
||||
|
||||
/* Check the parameters */
|
||||
assert_param(IS_PWR_WAKEUP_PIN(sPinParams->WakeUpPin));
|
||||
assert_param(IS_PWR_WAKEUP_PIN_POLARITY(sPinParams->PinPolarity));
|
||||
assert_param(IS_PWR_WAKEUP_PIN_PULL(sPinParams->PinPull));
|
||||
|
||||
pinConfig = sPinParams->WakeUpPin | \
|
||||
(sPinParams->PinPolarity << ((POSITION_VAL(sPinParams->WakeUpPin) + PWR_WUCR_WUPP1_Pos) & 0x1FU)) | \
|
||||
(sPinParams->PinPull << (((POSITION_VAL(sPinParams->WakeUpPin) * PWR_WAKEUP_PINS_PULL_SHIFT_OFFSET) \
|
||||
+ PWR_WUCR_WUPPUPD1_Pos) & 0x1FU));
|
||||
|
||||
regMask = sPinParams->WakeUpPin | \
|
||||
(PWR_WUCR_WUPP1 << (POSITION_VAL(sPinParams->WakeUpPin) & 0x1FU)) | \
|
||||
(pullMask << ((POSITION_VAL(sPinParams->WakeUpPin) * PWR_WAKEUP_PINS_PULL_SHIFT_OFFSET) & 0x1FU));
|
||||
|
||||
/* Enable and Specify the Wake-Up pin polarity and the pull configuration
|
||||
for the event detection (rising or falling edge) */
|
||||
MODIFY_REG(PWR->WUCR, regMask, pinConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the Wake-up PINx functionality.
|
||||
* @param WakeUpPinx : Specifies the Wake-Up pin to be disabled.
|
||||
* This parameter can be one of the following values:
|
||||
* @arg PWR_WAKEUP_PIN1
|
||||
* @arg PWR_WAKEUP_PIN2
|
||||
* @arg PWR_WAKEUP_PIN3
|
||||
* @arg PWR_WAKEUP_PIN4
|
||||
* @arg PWR_WAKEUP_PIN5
|
||||
* @arg PWR_WAKEUP_PIN6
|
||||
* @arg PWR_WAKEUP_PIN7
|
||||
* @arg PWR_WAKEUP_PIN8
|
||||
* @note The PWR_WAKEUP_PIN6, PWR_WAKEUP_PIN7 and PWR_WAKEUP_PIN8 are not available for
|
||||
* STM32H503xx devices.
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_PWREx_DisableWakeUpPin(uint32_t WakeUpPinx)
|
||||
{
|
||||
/* Check the parameter */
|
||||
assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));
|
||||
|
||||
/* Disable the WakeUpPin */
|
||||
CLEAR_BIT(PWR->WUCR, (PWR_WUCR_WUPEN & WakeUpPinx));
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Functions_Group4 Memories Retention Functions
|
||||
* @brief Memories retention functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### Memories Retention Functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable the Flash Power Down in Stop mode.
|
||||
* @note When Flash Power Down is enabled the Flash memory enters low-power
|
||||
* mode. This feature allows to
|
||||
* obtain the best trade-off between low-power consumption and restart
|
||||
* time when exiting from Stop mode.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableFlashPowerDown(void)
|
||||
{
|
||||
/* Enable the Flash Power Down */
|
||||
SET_BIT(PWR->PMCR, PWR_PMCR_FLPS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the Flash Power Down in Stop mode.
|
||||
* @note When Flash Power Down is disabled the Flash memory is kept on
|
||||
* normal mode. This feature allows
|
||||
* to obtain the best trade-off between low-power consumption and
|
||||
* restart time when exiting from Stop mode.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableFlashPowerDown(void)
|
||||
{
|
||||
/* Disable the Flash Power Down */
|
||||
CLEAR_BIT(PWR->PMCR, PWR_PMCR_FLPS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable memory block shut-off in Stop mode
|
||||
* @note In Stop mode, the content of the memory blocks is
|
||||
* maintained. Further power optimization can be obtained by switching
|
||||
* off some memory blocks. This optimization implies loss of the memory
|
||||
* content. The user can select which memory is discarded during STOP
|
||||
* mode by means of xxSO bits.
|
||||
* @param MemoryBlock : Specifies the memory block to shut-off during Stop mode.
|
||||
* This parameter can be one of the following values for STM32H573xx/STM32H563xx/STM32H562xx :
|
||||
* @arg PWR_ETHERNET_MEMORY_BLOCK PWR_PMCR_ETHERNETSO : Ethernet shut-off control in Stop mode
|
||||
* @arg PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO : RAM3 shut-off control in Stop mode
|
||||
* @arg PWR_RAM2_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16SO : RAM2 16k byte shut-off control in Stop mode
|
||||
* @arg PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO : RAM2 48k byte shut-off control in Stop mode
|
||||
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
||||
* This parameter can be one of the following values for STM32H533xx/STM32H523xx :
|
||||
* @arg PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO : RAM3 shut-off control in Stop mode
|
||||
* @arg PWR_RAM2_LOW_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16LSO : RAM2 Low 16k byte shut-off control
|
||||
* in Stop mode
|
||||
* @arg PWR_RAM2_HIGH_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16HSO : RAM2 High 16k byte shut-off control
|
||||
* in Stop mode
|
||||
* @arg PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO : RAM2 48k byte shut-off control in Stop mode
|
||||
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
||||
* This parameter can be one of the following values for STM32H503xx :
|
||||
* @arg PWR_RAM2_MEMORY_BLOCK PWR_PMCR_SRAM2SO : RAM2 shut-off control in Stop mode
|
||||
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableMemoryShutOff(uint32_t MemoryBlock)
|
||||
{
|
||||
/* Check the parameter */
|
||||
assert_param(IS_PWR_MEMORY_BLOCK(MemoryBlock));
|
||||
|
||||
/* Enable memory block shut-off */
|
||||
SET_BIT(PWR->PMCR, MemoryBlock);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable memory block shut-off in Stop mode
|
||||
* @param MemoryBlock : Specifies the memory block to keep content during
|
||||
* Stop mode.
|
||||
* This parameter can be one of the following values for STM32H573xx/STM32H563xx/STM32H562xx :
|
||||
* @arg PWR_ETHERNET_MEMORY_BLOCK PWR_PMCR_ETHERNETSO : Ethernet shut-off control in Stop mode
|
||||
* @arg PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO : RAM3 shut-off control in Stop mode
|
||||
* @arg PWR_RAM2_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16SO : RAM2 16k byte shut-off control in Stop mode
|
||||
* @arg PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO : RAM2 48k byte shut-off control in Stop mode
|
||||
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
||||
* This parameter can be one of the following values for STM32H533xx/STM32H523xx :
|
||||
* @arg PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO : RAM3 shut-off control in Stop mode
|
||||
* @arg PWR_RAM2_LOW_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16LSO : RAM2 Low 16k byte shut-off control
|
||||
* in Stop mode
|
||||
* @arg PWR_RAM2_HIGH_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16HSO : RAM2 High 16k byte shut-off control
|
||||
* in Stop mode
|
||||
* @arg PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO : RAM2 48k byte shut-off control in Stop mode
|
||||
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
||||
* This parameter can be one of the following values for STM32H503xx :
|
||||
* @arg PWR_RAM2_MEMORY_BLOCK PWR_PMCR_SRAM2SO : RAM2 shut-off control in Stop mode
|
||||
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableMemoryShutOff(uint32_t MemoryBlock)
|
||||
{
|
||||
/* Check the parameter */
|
||||
assert_param(IS_PWR_MEMORY_BLOCK(MemoryBlock));
|
||||
|
||||
/* Disable memory block shut-off */
|
||||
CLEAR_BIT(PWR->PMCR, MemoryBlock);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable the Backup RAM retention in Standby and VBAT modes.
|
||||
* @note If BREN is reset, the backup RAM can still be used in Run, Sleep and
|
||||
* Stop modes. However, its content is lost in Standby, Shutdown and
|
||||
* VBAT modes. This bit can be writte
|
||||
* @retval None.
|
||||
*/
|
||||
HAL_StatusTypeDef HAL_PWREx_EnableBkupRAMRetention(void)
|
||||
{
|
||||
SET_BIT(PWR->BDCR, PWR_BDCR_BREN);
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable the Backup RAM retention in Standby and VBAT modes.
|
||||
* @note If BREN is reset, the backup RAM can still be used in Run, Sleep and
|
||||
* Stop modes. However, its content is lost in Standby, Shutdown and
|
||||
* VBAT modes. This bit can be write
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableBkupRAMRetention(void)
|
||||
{
|
||||
CLEAR_BIT(PWR->BDCR, PWR_BDCR_BREN);
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup PWREx_Exported_Functions_Group5 IO and JTAG Retention Functions
|
||||
* @brief IO and JTAG Retention functions
|
||||
*
|
||||
@verbatim
|
||||
===============================================================================
|
||||
##### IO and JTAG Retention Functions #####
|
||||
===============================================================================
|
||||
[..]
|
||||
In the Standby mode, the I/Os are by default in floating state. If the IORETEN bit in the
|
||||
PWR_IORETR register is set, the I/Os output state is retained. IO Retention mode is
|
||||
enabled for all IO except the IO support the standby functionality and JTAG IOs (PA13,
|
||||
PA14, PA15 and PB4). When entering into Standby mode, the state of the output is
|
||||
sampled, and pull-up or pull-down resistor are set to maintain the IO output during Standby
|
||||
mode.
|
||||
If the JTAGIORETEN bit in the PWR_IORETR register is set, the I/Os output state is
|
||||
retained. IO Retention mode is enabled for PA13, PA14, PA15 and PB4 (default JTAG pullup/
|
||||
pull-down after wakeup are not enabled).
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Enable GPIO state retention in Standby mode.
|
||||
* @note When entering into standby mode, the output is sampled, and applied to the output IO during
|
||||
* the standby power mode
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableStandbyIORetention(void)
|
||||
{
|
||||
/* Enable GPIO state retention */
|
||||
SET_BIT(PWR->IORETR, PWR_IORETR_IORETEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable GPIO state retention in Standby mode.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableStandbyIORetention(void)
|
||||
{
|
||||
/* Disable GPIO state retention */
|
||||
CLEAR_BIT(PWR->IORETR, PWR_IORETR_IORETEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable JTAG IOs state retention in Standby mode.
|
||||
* @note when entering into standby mode, the output is sampled, and applied to the output IO during
|
||||
* the standby power mode
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_EnableStandbyJTAGIORetention(void)
|
||||
{
|
||||
/* Enable JTAG IOs state retention */
|
||||
SET_BIT(PWR->IORETR, PWR_IORETR_JTAGIORETEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disable JTAG IOs state retention in Standby mode.
|
||||
* @retval None.
|
||||
*/
|
||||
void HAL_PWREx_DisableStandbyJTAGIORetention(void)
|
||||
{
|
||||
/* Enable JTAG IOs state retention */
|
||||
CLEAR_BIT(PWR->IORETR, PWR_IORETR_JTAGIORETEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* defined (HAL_PWR_MODULE_ENABLED) */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
1901
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_rcc.c
Normal file
1901
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_rcc.c
Normal file
File diff suppressed because it is too large
Load Diff
6294
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_rcc_ex.c
Normal file
6294
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_rcc_ex.c
Normal file
File diff suppressed because it is too large
Load Diff
8273
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_tim.c
Normal file
8273
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_tim.c
Normal file
File diff suppressed because it is too large
Load Diff
3474
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_tim_ex.c
Normal file
3474
Drivers/STM32H5xx_HAL_Driver/Src/stm32h5xx_hal_tim_ex.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user