第六次实验-定时器
需要把矩阵按键的线拆了。
This commit is contained in:
		
							parent
							
								
									40b1059e82
								
							
						
					
					
						commit
						bf0315b1b6
					
				
							
								
								
									
										29
									
								
								exp6/.mxproject
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								exp6/.mxproject
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										23
									
								
								exp6/Core/Inc/MatrixKey.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								exp6/Core/Inc/MatrixKey.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
#ifndef __MATRIXKEY_H
 | 
			
		||||
#define __MATRIXKEY_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include<stdint.h>
 | 
			
		||||
#include "directkey.h"
 | 
			
		||||
// enum {State0=0, State1, State2};
 | 
			
		||||
#define NO_KEY 0xFF
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint8_t MatrixKeyScan(void);
 | 
			
		||||
extern uint8_t const KeyTable[16];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										21
									
								
								exp6/Core/Inc/SegLed.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								exp6/Core/Inc/SegLed.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#ifndef __SEGLED_H
 | 
			
		||||
#define __SEGLED_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include "variable.h"
 | 
			
		||||
 | 
			
		||||
void Display(void);
 | 
			
		||||
void TimeToBuff(structTime *nstTime);
 | 
			
		||||
void DispToBuff(uint8_t val);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __SEGLED_H */
 | 
			
		||||
							
								
								
									
										22
									
								
								exp6/Core/Inc/directkey.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								exp6/Core/Inc/directkey.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
#ifndef __DIRECTKEY_H
 | 
			
		||||
#define __DIRECTKEY_H
 | 
			
		||||
 | 
			
		||||
#include<stdint.h>
 | 
			
		||||
 | 
			
		||||
enum {State0=0, State1, State2};
 | 
			
		||||
 | 
			
		||||
#define NoKey 0x0F
 | 
			
		||||
#define KeyPort GPIOC
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
uint8_t ReadDirectKey(void);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										49
									
								
								exp6/Core/Inc/gpio.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								exp6/Core/Inc/gpio.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    gpio.h
 | 
			
		||||
  * @brief   This file contains all the function prototypes for
 | 
			
		||||
  *          the gpio.c file
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __GPIO_H__
 | 
			
		||||
#define __GPIO_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Private defines */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Private defines */
 | 
			
		||||
 | 
			
		||||
void MX_GPIO_Init(void);
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Prototypes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Prototypes */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#endif /*__ GPIO_H__ */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										85
									
								
								exp6/Core/Inc/main.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								exp6/Core/Inc/main.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,85 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file           : main.h
 | 
			
		||||
  * @brief          : Header for main.c file.
 | 
			
		||||
  *                   This file contains the common defines of the application.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __MAIN_H
 | 
			
		||||
#define __MAIN_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ET */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ET */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EC */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EC */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EM */
 | 
			
		||||
 | 
			
		||||
/* Exported functions prototypes ---------------------------------------------*/
 | 
			
		||||
void Error_Handler(void);
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN EFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EFP */
 | 
			
		||||
 | 
			
		||||
/* Private defines -----------------------------------------------------------*/
 | 
			
		||||
#define LED_Pin GPIO_PIN_13
 | 
			
		||||
#define LED_GPIO_Port GPIOC
 | 
			
		||||
#define AddrA_Pin GPIO_PIN_0
 | 
			
		||||
#define AddrA_GPIO_Port GPIOC
 | 
			
		||||
#define AddrB_Pin GPIO_PIN_1
 | 
			
		||||
#define AddrB_GPIO_Port GPIOC
 | 
			
		||||
#define AddrC_Pin GPIO_PIN_2
 | 
			
		||||
#define AddrC_GPIO_Port GPIOC
 | 
			
		||||
#define OE_Pin GPIO_PIN_3
 | 
			
		||||
#define OE_GPIO_Port GPIOC
 | 
			
		||||
#define SegLedData_Pin GPIO_PIN_0
 | 
			
		||||
#define SegLedData_GPIO_Port GPIOA
 | 
			
		||||
#define KeyLine_Pin GPIO_PIN_0
 | 
			
		||||
#define KeyLine_GPIO_Port GPIOB
 | 
			
		||||
#define KeyRow_Pin GPIO_PIN_4
 | 
			
		||||
#define KeyRow_GPIO_Port GPIOB
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Private defines */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Private defines */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __MAIN_H */
 | 
			
		||||
							
								
								
									
										380
									
								
								exp6/Core/Inc/stm32g4xx_hal_conf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										380
									
								
								exp6/Core/Inc/stm32g4xx_hal_conf.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,380 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_conf.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   HAL configuration file
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
 * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef STM32G4xx_HAL_CONF_H
 | 
			
		||||
#define STM32G4xx_HAL_CONF_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* ########################## Module Selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the list of modules to be used in the HAL driver
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define HAL_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
  /*#define HAL_ADC_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_COMP_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_CORDIC_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_CRC_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_CRYP_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_DAC_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_FDCAN_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_FMAC_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_HRTIM_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_IRDA_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_IWDG_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_I2C_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_I2S_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_LPTIM_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_NAND_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_NOR_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_OPAMP_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_PCD_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_QSPI_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_RNG_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_RTC_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_SAI_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_SMARTCARD_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_SMBUS_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_SPI_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_SRAM_MODULE_ENABLED   */
 | 
			
		||||
#define HAL_TIM_MODULE_ENABLED
 | 
			
		||||
/*#define HAL_UART_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_USART_MODULE_ENABLED   */
 | 
			
		||||
/*#define HAL_WWDG_MODULE_ENABLED   */
 | 
			
		||||
#define HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
#define HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
#define HAL_DMA_MODULE_ENABLED
 | 
			
		||||
#define HAL_RCC_MODULE_ENABLED
 | 
			
		||||
#define HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
#define HAL_PWR_MODULE_ENABLED
 | 
			
		||||
#define HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* ########################## Register Callbacks selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the list of modules where register callback can be used
 | 
			
		||||
  */
 | 
			
		||||
#define USE_HAL_ADC_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_COMP_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_CORDIC_REGISTER_CALLBACKS     0U
 | 
			
		||||
#define USE_HAL_CRYP_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_DAC_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_EXTI_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_FDCAN_REGISTER_CALLBACKS      0U
 | 
			
		||||
#define USE_HAL_FMAC_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_HRTIM_REGISTER_CALLBACKS      0U
 | 
			
		||||
#define USE_HAL_I2C_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_I2S_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_IRDA_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_LPTIM_REGISTER_CALLBACKS      0U
 | 
			
		||||
#define USE_HAL_NAND_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_NOR_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_OPAMP_REGISTER_CALLBACKS      0U
 | 
			
		||||
#define USE_HAL_PCD_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_QSPI_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_RNG_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_RTC_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_SAI_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS  0U
 | 
			
		||||
#define USE_HAL_SMBUS_REGISTER_CALLBACKS      0U
 | 
			
		||||
#define USE_HAL_SPI_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_SRAM_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_TIM_REGISTER_CALLBACKS        0U
 | 
			
		||||
#define USE_HAL_UART_REGISTER_CALLBACKS       0U
 | 
			
		||||
#define USE_HAL_USART_REGISTER_CALLBACKS      0U
 | 
			
		||||
#define USE_HAL_WWDG_REGISTER_CALLBACKS       0U
 | 
			
		||||
 | 
			
		||||
/* ########################## Oscillator Values adaptation ####################*/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
 | 
			
		||||
  *        This value is used by the RCC HAL module to compute the system frequency
 | 
			
		||||
  *        (when HSE is used as system clock source, directly or through the PLL).
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSE_VALUE)
 | 
			
		||||
  #define HSE_VALUE    (24000000UL) /*!< Value of the External oscillator in Hz */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSE_STARTUP_TIMEOUT)
 | 
			
		||||
  #define HSE_STARTUP_TIMEOUT    (100UL)   /*!< Time out for HSE start up, in ms */
 | 
			
		||||
#endif /* HSE_STARTUP_TIMEOUT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal High Speed oscillator (HSI) value.
 | 
			
		||||
  *        This value is used by the RCC HAL module to compute the system frequency
 | 
			
		||||
  *        (when HSI is used as system clock source, directly or through the PLL).
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    (16000000UL) /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal High Speed oscillator (HSI48) value for USB FS and RNG.
 | 
			
		||||
  *        This internal oscillator is mainly dedicated to provide a high precision clock to
 | 
			
		||||
  *        the USB peripheral by means of a special Clock Recovery System (CRS) circuitry.
 | 
			
		||||
  *        When the CRS is not used, the HSI48 RC oscillator runs on it default frequency
 | 
			
		||||
  *        which is subject to manufacturing process variations.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSI48_VALUE)
 | 
			
		||||
  #define HSI48_VALUE   (48000000UL) /*!< Value of the Internal High Speed oscillator for USB FS/RNG in Hz.
 | 
			
		||||
                                               The real value my vary depending on manufacturing process variations.*/
 | 
			
		||||
#endif /* HSI48_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal Low Speed oscillator (LSI) value.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (LSI_VALUE)
 | 
			
		||||
/*!< Value of the Internal Low Speed oscillator in Hz
 | 
			
		||||
The real value may vary depending on the variations in voltage and temperature.*/
 | 
			
		||||
#define LSI_VALUE  (32000UL)     /*!< LSI Typical Value in Hz*/
 | 
			
		||||
#endif /* LSI_VALUE */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief External Low Speed oscillator (LSE) value.
 | 
			
		||||
  *        This value is used by the UART, RTC HAL module to compute the system frequency
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (LSE_VALUE)
 | 
			
		||||
#define LSE_VALUE  (32768UL)    /*!< Value of the External Low Speed oscillator in Hz */
 | 
			
		||||
#endif /* LSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (LSE_STARTUP_TIMEOUT)
 | 
			
		||||
#define LSE_STARTUP_TIMEOUT    (5000UL)   /*!< Time out for LSE start up, in ms */
 | 
			
		||||
#endif /* LSE_STARTUP_TIMEOUT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief External clock source for I2S and SAI peripherals
 | 
			
		||||
  *        This value is used by the I2S and SAI HAL modules to compute the I2S and SAI clock source
 | 
			
		||||
  *        frequency, this source is inserted directly through I2S_CKIN pad.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (EXTERNAL_CLOCK_VALUE)
 | 
			
		||||
#define EXTERNAL_CLOCK_VALUE    (12288000UL) /*!< Value of the External oscillator in Hz*/
 | 
			
		||||
#endif /* EXTERNAL_CLOCK_VALUE */
 | 
			
		||||
 | 
			
		||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
 | 
			
		||||
   ===  you can define the HSE value in your toolchain compiler preprocessor. */
 | 
			
		||||
 | 
			
		||||
/* ########################### System Configuration ######################### */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the HAL system configuration section
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define  VDD_VALUE                   (3300UL) /*!< Value of VDD in mv */
 | 
			
		||||
#define  TICK_INT_PRIORITY           (15UL)    /*!< tick interrupt priority (lowest by default)  */
 | 
			
		||||
#define  USE_RTOS                     0U
 | 
			
		||||
#define  PREFETCH_ENABLE              0U
 | 
			
		||||
#define  INSTRUCTION_CACHE_ENABLE     1U
 | 
			
		||||
#define  DATA_CACHE_ENABLE            1U
 | 
			
		||||
 | 
			
		||||
/* ########################## Assert Selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Uncomment the line below to expanse the "assert_param" macro in the
 | 
			
		||||
  *        HAL drivers code
 | 
			
		||||
  */
 | 
			
		||||
/* #define USE_FULL_ASSERT    1U */
 | 
			
		||||
 | 
			
		||||
/* ################## SPI peripheral configuration ########################## */
 | 
			
		||||
 | 
			
		||||
/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
 | 
			
		||||
 * Activated: CRC code is present inside driver
 | 
			
		||||
 * Deactivated: CRC code cleaned from driver
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define USE_SPI_CRC                   0U
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Include module's header file
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RCC_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_rcc.h"
 | 
			
		||||
#endif /* HAL_RCC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_gpio.h"
 | 
			
		||||
#endif /* HAL_GPIO_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_dma.h"
 | 
			
		||||
#endif /* HAL_DMA_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_cortex.h"
 | 
			
		||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ADC_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_adc.h"
 | 
			
		||||
#endif /* HAL_ADC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_COMP_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_comp.h"
 | 
			
		||||
#endif /* HAL_COMP_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CORDIC_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_cordic.h"
 | 
			
		||||
#endif /* HAL_CORDIC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CRC_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_crc.h"
 | 
			
		||||
#endif /* HAL_CRC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CRYP_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_cryp.h"
 | 
			
		||||
#endif /* HAL_CRYP_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_dac.h"
 | 
			
		||||
#endif /* HAL_DAC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_exti.h"
 | 
			
		||||
#endif /* HAL_EXTI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FDCAN_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_fdcan.h"
 | 
			
		||||
#endif /* HAL_FDCAN_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_flash.h"
 | 
			
		||||
#endif /* HAL_FLASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FMAC_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_fmac.h"
 | 
			
		||||
#endif /* HAL_FMAC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_HRTIM_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_hrtim.h"
 | 
			
		||||
#endif /* HAL_HRTIM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_IRDA_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_irda.h"
 | 
			
		||||
#endif /* HAL_IRDA_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_IWDG_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_iwdg.h"
 | 
			
		||||
#endif /* HAL_IWDG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_i2c.h"
 | 
			
		||||
#endif /* HAL_I2C_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2S_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_i2s.h"
 | 
			
		||||
#endif /* HAL_I2S_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_LPTIM_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_lptim.h"
 | 
			
		||||
#endif /* HAL_LPTIM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_NAND_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_nand.h"
 | 
			
		||||
#endif /* HAL_NAND_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_NOR_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_nor.h"
 | 
			
		||||
#endif /* HAL_NOR_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_OPAMP_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_opamp.h"
 | 
			
		||||
#endif /* HAL_OPAMP_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PCD_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_pcd.h"
 | 
			
		||||
#endif /* HAL_PCD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PWR_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_pwr.h"
 | 
			
		||||
#endif /* HAL_PWR_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_QSPI_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_qspi.h"
 | 
			
		||||
#endif /* HAL_QSPI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RNG_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_rng.h"
 | 
			
		||||
#endif /* HAL_RNG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RTC_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_rtc.h"
 | 
			
		||||
#endif /* HAL_RTC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SAI_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_sai.h"
 | 
			
		||||
#endif /* HAL_SAI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SMARTCARD_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_smartcard.h"
 | 
			
		||||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SMBUS_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_smbus.h"
 | 
			
		||||
#endif /* HAL_SMBUS_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPI_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_spi.h"
 | 
			
		||||
#endif /* HAL_SPI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SRAM_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_sram.h"
 | 
			
		||||
#endif /* HAL_SRAM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_TIM_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_tim.h"
 | 
			
		||||
#endif /* HAL_TIM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_UART_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_uart.h"
 | 
			
		||||
#endif /* HAL_UART_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_USART_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_usart.h"
 | 
			
		||||
#endif /* HAL_USART_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_WWDG_MODULE_ENABLED
 | 
			
		||||
#include "stm32g4xx_hal_wwdg.h"
 | 
			
		||||
#endif /* HAL_WWDG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
#ifdef  USE_FULL_ASSERT
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  The assert_param macro is used for function's parameters check.
 | 
			
		||||
  * @param  expr: If expr is false, it calls assert_failed function
 | 
			
		||||
  *         which reports the name of the source file and the source
 | 
			
		||||
  *         line number of the call that failed.
 | 
			
		||||
  *         If expr is true, it returns no value.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
 | 
			
		||||
/* Exported functions ------------------------------------------------------- */
 | 
			
		||||
void assert_failed(uint8_t *file, uint32_t line);
 | 
			
		||||
#else
 | 
			
		||||
#define assert_param(expr) ((void)0U)
 | 
			
		||||
#endif /* USE_FULL_ASSERT */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_HAL_CONF_H */
 | 
			
		||||
							
								
								
									
										67
									
								
								exp6/Core/Inc/stm32g4xx_it.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								exp6/Core/Inc/stm32g4xx_it.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_it.h
 | 
			
		||||
  * @brief   This file contains the headers of the interrupt handlers.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32G4xx_IT_H
 | 
			
		||||
#define __STM32G4xx_IT_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ET */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ET */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EC */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EC */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EM */
 | 
			
		||||
 | 
			
		||||
/* Exported functions prototypes ---------------------------------------------*/
 | 
			
		||||
void NMI_Handler(void);
 | 
			
		||||
void HardFault_Handler(void);
 | 
			
		||||
void MemManage_Handler(void);
 | 
			
		||||
void BusFault_Handler(void);
 | 
			
		||||
void UsageFault_Handler(void);
 | 
			
		||||
void SVC_Handler(void);
 | 
			
		||||
void DebugMon_Handler(void);
 | 
			
		||||
void PendSV_Handler(void);
 | 
			
		||||
void SysTick_Handler(void);
 | 
			
		||||
void TIM3_IRQHandler(void);
 | 
			
		||||
/* USER CODE BEGIN EFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EFP */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32G4xx_IT_H */
 | 
			
		||||
							
								
								
									
										52
									
								
								exp6/Core/Inc/tim.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								exp6/Core/Inc/tim.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    tim.h
 | 
			
		||||
  * @brief   This file contains all the function prototypes for
 | 
			
		||||
  *          the tim.c file
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __TIM_H__
 | 
			
		||||
#define __TIM_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
extern TIM_HandleTypeDef htim3;
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Private defines */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Private defines */
 | 
			
		||||
 | 
			
		||||
void MX_TIM3_Init(void);
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Prototypes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Prototypes */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __TIM_H__ */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								exp6/Core/Inc/variable.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								exp6/Core/Inc/variable.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#ifndef __VARIABLE_H
 | 
			
		||||
#define __VARIABLE_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    uint8_t mMilSecCount;           // 毫秒计数
 | 
			
		||||
    uint8_t bTenMilSecOk;           // 10毫秒标志位
 | 
			
		||||
    uint8_t mTimeCount;             // 秒计数
 | 
			
		||||
    uint8_t bTimeOk;                // 秒标志位
 | 
			
		||||
} stSysTickTimer;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint8_t mSecond;
 | 
			
		||||
  uint8_t mMinute;
 | 
			
		||||
  uint8_t mHour;
 | 
			
		||||
  uint8_t mTimeCount;
 | 
			
		||||
  uint8_t bSecondIsOk;
 | 
			
		||||
  uint8_t mTenMilCount;
 | 
			
		||||
  uint8_t bTenMilIsOk;
 | 
			
		||||
} structTime;
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __VARIABLE_H */
 | 
			
		||||
							
								
								
									
										42
									
								
								exp6/Core/Src/DirectKey.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								exp6/Core/Src/DirectKey.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
#include "directkey.h"
 | 
			
		||||
#include "main.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint8_t ReadDirectKey(void) {
 | 
			
		||||
    static uint8_t KeyState = State0;
 | 
			
		||||
    static uint8_t KeyOld;
 | 
			
		||||
    uint8_t KeyPress;
 | 
			
		||||
    uint8_t KeyValue = NoKey;
 | 
			
		||||
 | 
			
		||||
    KeyPress = KeyPort->IDR & 0x000F; // 读按键
 | 
			
		||||
 | 
			
		||||
    switch (KeyState) {
 | 
			
		||||
    case State0:
 | 
			
		||||
        if (KeyPress != NoKey) {
 | 
			
		||||
            KeyOld = KeyPress; // 保存原来的键
 | 
			
		||||
            KeyState = State1; // 切换状态
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    
 | 
			
		||||
    case State1:
 | 
			
		||||
        if (KeyPress == KeyOld) {
 | 
			
		||||
            KeyState = State2;
 | 
			
		||||
            // KeyValue = KeyOld; // 按下有效
 | 
			
		||||
        } else {
 | 
			
		||||
            KeyState = State0;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    
 | 
			
		||||
    case State2:
 | 
			
		||||
        if (KeyPress == NoKey) {
 | 
			
		||||
            KeyState = State0;
 | 
			
		||||
            KeyValue = KeyOld; // 抬起有效
 | 
			
		||||
        } else {
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    return KeyValue;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										95
									
								
								exp6/Core/Src/MatrixKey.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								exp6/Core/Src/MatrixKey.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,95 @@
 | 
			
		||||
#include "MatrixKey.h"
 | 
			
		||||
#include "main.h"
 | 
			
		||||
 | 
			
		||||
// EDB7 xx EDB7
 | 
			
		||||
uint8_t const KeyTable[16] = {
 | 
			
		||||
    0xEE, 0xDE, 0xBE, 0x3E, // 为什么这里要3才能正常啊
 | 
			
		||||
    0xED, 0xDD, 0xBD, 0x3D,
 | 
			
		||||
    0xEB, 0xDB, 0xBB, 0x3B,
 | 
			
		||||
    0xE7, 0xD7, 0xB7, 0x37,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void LineIn_RowOut(void) {
 | 
			
		||||
    GPIO_InitTypeDef GPIO_InitStruct = {0};
 | 
			
		||||
    /*Configure GPIO pin : PtPin */
 | 
			
		||||
    /*Configure GPIO pins : PCPin PC1 PC2 PC3 */
 | 
			
		||||
    GPIO_InitStruct.Pin = KeyLine_Pin | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;
 | 
			
		||||
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
 | 
			
		||||
    GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
    HAL_GPIO_Init(KeyLine_GPIO_Port, &GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
    GPIO_InitStruct.Pin = KeyRow_Pin | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
 | 
			
		||||
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | 
			
		||||
    GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | 
			
		||||
    HAL_GPIO_Init(KeyRow_GPIO_Port, &GPIO_InitStruct);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LineOut_RowIn(void) {
 | 
			
		||||
    GPIO_InitTypeDef GPIO_InitStruct = {0};
 | 
			
		||||
    /*Configure GPIO pin : PtPin */
 | 
			
		||||
    /*Configure GPIO pins : PCPin PC1 PC2 PC3 */
 | 
			
		||||
    GPIO_InitStruct.Pin = KeyLine_Pin | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;
 | 
			
		||||
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | 
			
		||||
    GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | 
			
		||||
    HAL_GPIO_Init(KeyLine_GPIO_Port, &GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
    GPIO_InitStruct.Pin = KeyRow_Pin | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
 | 
			
		||||
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
 | 
			
		||||
    GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
    HAL_GPIO_Init(KeyRow_GPIO_Port, &GPIO_InitStruct);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t MatrixKeyScan(void) {
 | 
			
		||||
    static uint8_t Keystate = State0;
 | 
			
		||||
    static uint8_t KeyLine, KeyRow;
 | 
			
		||||
    static uint16_t KeyOld;
 | 
			
		||||
 | 
			
		||||
    uint8_t KeyValue = NO_KEY;
 | 
			
		||||
 | 
			
		||||
    LineOut_RowIn();
 | 
			
		||||
    /*Configure GPIO pin Output Level */
 | 
			
		||||
    HAL_GPIO_WritePin(KeyLine_GPIO_Port, KeyLine_Pin | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_RESET); // 这四个按位或操作后是0x0F
 | 
			
		||||
    HAL_GPIO_WritePin(KeyLine_GPIO_Port, KeyLine_Pin | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_RESET); // 重复三次使更稳定
 | 
			
		||||
    HAL_GPIO_WritePin(KeyLine_GPIO_Port, KeyLine_Pin | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_RESET); // 刚写入后不能直接读要等稳定了再读
 | 
			
		||||
    KeyRow = KeyRow_GPIO_Port->IDR & 0x00F0;
 | 
			
		||||
 | 
			
		||||
    LineIn_RowOut();
 | 
			
		||||
    HAL_GPIO_WritePin(KeyRow_GPIO_Port, KeyRow_Pin | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7, GPIO_PIN_RESET);
 | 
			
		||||
    HAL_GPIO_WritePin(KeyRow_GPIO_Port, KeyRow_Pin | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7, GPIO_PIN_RESET); // 这里也是重复三次
 | 
			
		||||
    HAL_GPIO_WritePin(KeyRow_GPIO_Port, KeyRow_Pin | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7, GPIO_PIN_RESET);
 | 
			
		||||
    KeyLine = KeyLine_GPIO_Port->IDR & 0x000F;
 | 
			
		||||
 | 
			
		||||
    switch (Keystate) {
 | 
			
		||||
    case State0:
 | 
			
		||||
        KeyOld = KeyLine | KeyRow;
 | 
			
		||||
        if (KeyOld != NO_KEY) {
 | 
			
		||||
            Keystate = State1;
 | 
			
		||||
        } else {
 | 
			
		||||
            Keystate = State0;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case State1:
 | 
			
		||||
        if ((KeyLine | KeyRow) == KeyOld) {
 | 
			
		||||
            Keystate = State2;
 | 
			
		||||
        } else {
 | 
			
		||||
            Keystate = State0;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case State2:
 | 
			
		||||
        if ((KeyLine | KeyRow) == NO_KEY) {   // 键已释放
 | 
			
		||||
            Keystate = State0;
 | 
			
		||||
            KeyValue = KeyOld; 
 | 
			
		||||
        } else {
 | 
			
		||||
            Keystate = State2;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    return KeyValue;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										64
									
								
								exp6/Core/Src/SegLed.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								exp6/Core/Src/SegLed.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,64 @@
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "variable.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t display_tab[] = {
 | 
			
		||||
  0x3f,
 | 
			
		||||
  0x06,
 | 
			
		||||
  0x5b,
 | 
			
		||||
  0x4f,
 | 
			
		||||
  0x66,
 | 
			
		||||
  0x6d,
 | 
			
		||||
  0x7d,
 | 
			
		||||
  0x07,
 | 
			
		||||
  0x7f,
 | 
			
		||||
  0x6f,
 | 
			
		||||
  0x77,
 | 
			
		||||
  0x7c,
 | 
			
		||||
  0x39,
 | 
			
		||||
  0x5e,
 | 
			
		||||
  0x79,
 | 
			
		||||
  0x71,
 | 
			
		||||
  0x40
 | 
			
		||||
};
 | 
			
		||||
uint8_t DispBuff[8];
 | 
			
		||||
uint16_t PosSel = 0;
 | 
			
		||||
 | 
			
		||||
static void DisplayOneLed(uint8_t dat, uint8_t pos, uint8_t dot) {
 | 
			
		||||
  uint16_t temp;
 | 
			
		||||
 | 
			
		||||
  temp = display_tab[dat];
 | 
			
		||||
  if (dot)
 | 
			
		||||
    temp |= 0x80;
 | 
			
		||||
  
 | 
			
		||||
  SegLedData_GPIO_Port->ODR &= 0xFF00;
 | 
			
		||||
  SegLedData_GPIO_Port->ODR |= temp; // 段码
 | 
			
		||||
  AddrA_GPIO_Port->ODR &= 0xFFF0;
 | 
			
		||||
  AddrA_GPIO_Port->ODR |= pos; // 位码
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Display(void) {
 | 
			
		||||
  static uint8_t mPos = 0;
 | 
			
		||||
  DisplayOneLed(DispBuff[mPos], mPos, 0);
 | 
			
		||||
  if (++mPos >= 8) mPos = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TimeToBuff(structTime *nstTime) {
 | 
			
		||||
  DispBuff[0] = nstTime->mHour / 10;
 | 
			
		||||
  DispBuff[1] = nstTime->mHour % 10;
 | 
			
		||||
  DispBuff[2] = 16;
 | 
			
		||||
  DispBuff[3] = nstTime->mMinute / 10;
 | 
			
		||||
  DispBuff[4] = nstTime->mMinute % 10;
 | 
			
		||||
  DispBuff[5] = 16;
 | 
			
		||||
  DispBuff[6] = nstTime->mSecond / 10;
 | 
			
		||||
  DispBuff[7] = nstTime->mSecond % 10;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DispToBuff(uint8_t val) {
 | 
			
		||||
  uint8_t i;
 | 
			
		||||
  for (int i = 0; i < 7; i++) {
 | 
			
		||||
    DispBuff[i] = DispBuff[i + 1];
 | 
			
		||||
  }
 | 
			
		||||
  DispBuff[7] = val;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										91
									
								
								exp6/Core/Src/gpio.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								exp6/Core/Src/gpio.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,91 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    gpio.c
 | 
			
		||||
  * @brief   This file provides code for the configuration
 | 
			
		||||
  *          of all used GPIO pins.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "gpio.h"
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------*/
 | 
			
		||||
/* Configure GPIO                                                             */
 | 
			
		||||
/*----------------------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
 | 
			
		||||
/** Configure pins as
 | 
			
		||||
        * Analog
 | 
			
		||||
        * Input
 | 
			
		||||
        * Output
 | 
			
		||||
        * EVENT_OUT
 | 
			
		||||
        * EXTI
 | 
			
		||||
*/
 | 
			
		||||
void MX_GPIO_Init(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 | 
			
		||||
 | 
			
		||||
  /* GPIO Ports Clock Enable */
 | 
			
		||||
  __HAL_RCC_GPIOC_CLK_ENABLE();
 | 
			
		||||
  __HAL_RCC_GPIOF_CLK_ENABLE();
 | 
			
		||||
  __HAL_RCC_GPIOA_CLK_ENABLE();
 | 
			
		||||
  __HAL_RCC_GPIOB_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
  /*Configure GPIO pin Output Level */
 | 
			
		||||
  HAL_GPIO_WritePin(GPIOC, LED_Pin|AddrA_Pin|AddrB_Pin|AddrC_Pin
 | 
			
		||||
                          |OE_Pin, GPIO_PIN_RESET);
 | 
			
		||||
 | 
			
		||||
  /*Configure GPIO pin Output Level */
 | 
			
		||||
  HAL_GPIO_WritePin(GPIOA, SegLedData_Pin|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
 | 
			
		||||
                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
 | 
			
		||||
 | 
			
		||||
  /*Configure GPIO pins : PCPin PCPin PCPin PCPin
 | 
			
		||||
                           PCPin */
 | 
			
		||||
  GPIO_InitStruct.Pin = LED_Pin|AddrA_Pin|AddrB_Pin|AddrC_Pin
 | 
			
		||||
                          |OE_Pin;
 | 
			
		||||
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | 
			
		||||
  GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | 
			
		||||
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
  /*Configure GPIO pins : PAPin PA1 PA2 PA3
 | 
			
		||||
                           PA4 PA5 PA6 PA7 */
 | 
			
		||||
  GPIO_InitStruct.Pin = SegLedData_Pin|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
 | 
			
		||||
                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
 | 
			
		||||
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | 
			
		||||
  GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | 
			
		||||
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
  /*Configure GPIO pins : PBPin PB1 PB2 PB3
 | 
			
		||||
                           PBPin PB5 PB6 PB7 */
 | 
			
		||||
  GPIO_InitStruct.Pin = KeyLine_Pin|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
 | 
			
		||||
                          |KeyRow_Pin|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
 | 
			
		||||
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
 | 
			
		||||
  GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 2 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 2 */
 | 
			
		||||
							
								
								
									
										256
									
								
								exp6/Core/Src/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								exp6/Core/Src/main.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,256 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file           : main.c
 | 
			
		||||
  * @brief          : Main program body
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "tim.h"
 | 
			
		||||
#include "gpio.h"
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
#include "variable.h"
 | 
			
		||||
#include "directkey.h"
 | 
			
		||||
#include "MatrixKey.h"
 | 
			
		||||
#include "SegLed.h"
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PTD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PTD */
 | 
			
		||||
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PD */
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PM */
 | 
			
		||||
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN PV */
 | 
			
		||||
stSysTickTimer sSysTickTimer = {
 | 
			
		||||
  0, 0, 0, 0
 | 
			
		||||
};
 | 
			
		||||
uint8_t tempValue;
 | 
			
		||||
structTime stTime = {
 | 
			
		||||
  .mSecond = 50,
 | 
			
		||||
  .mMinute = 45,
 | 
			
		||||
  .mHour = 8,
 | 
			
		||||
  .mTimeCount = 0,
 | 
			
		||||
  .bSecondIsOk = 0,
 | 
			
		||||
  .mTenMilCount = 0,
 | 
			
		||||
  .bTenMilIsOk = 0
 | 
			
		||||
};
 | 
			
		||||
/* USER CODE END PV */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
void SystemClock_Config(void);
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* Private user code ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  The application entry point.
 | 
			
		||||
  * @retval int
 | 
			
		||||
  */
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN 1 */
 | 
			
		||||
  uint8_t KeyValue = 0;
 | 
			
		||||
  /* USER CODE END 1 */
 | 
			
		||||
 | 
			
		||||
  /* MCU Configuration--------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 | 
			
		||||
  HAL_Init();
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN Init */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END Init */
 | 
			
		||||
 | 
			
		||||
  /* Configure the system clock */
 | 
			
		||||
  SystemClock_Config();
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN SysInit */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END SysInit */
 | 
			
		||||
 | 
			
		||||
  /* Initialize all configured peripherals */
 | 
			
		||||
  MX_GPIO_Init();
 | 
			
		||||
  MX_TIM3_Init();
 | 
			
		||||
  /* USER CODE BEGIN 2 */
 | 
			
		||||
  // FlashLeds_GPIO_Port->ODR &= 0xff01;
 | 
			
		||||
  HAL_TIM_Base_Start_IT(&htim3);
 | 
			
		||||
  TimeToBuff(&stTime);
 | 
			
		||||
  /* USER CODE END 2 */
 | 
			
		||||
 | 
			
		||||
  /* Infinite loop */
 | 
			
		||||
  /* USER CODE BEGIN WHILE */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE END WHILE */
 | 
			
		||||
 | 
			
		||||
    /* USER CODE BEGIN 3 */
 | 
			
		||||
    if (stTime.bTenMilIsOk) {
 | 
			
		||||
      stTime.bTenMilIsOk = 0;
 | 
			
		||||
    }
 | 
			
		||||
    if (stTime.bSecondIsOk) {
 | 
			
		||||
      stTime.bSecondIsOk = 0;
 | 
			
		||||
      if (++stTime.mSecond >= 60) {
 | 
			
		||||
        stTime.mSecond = 0;
 | 
			
		||||
        if (++stTime.mMinute >= 60) {
 | 
			
		||||
          stTime.mMinute = 0;
 | 
			
		||||
          if (++stTime.mHour >= 24) {
 | 
			
		||||
            stTime.mHour = 0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      TimeToBuff(&stTime);
 | 
			
		||||
    }
 | 
			
		||||
    if (sSysTickTimer.bTenMilSecOk) {
 | 
			
		||||
      sSysTickTimer.bTenMilSecOk = 0;
 | 
			
		||||
      KeyValue = MatrixKeyScan();
 | 
			
		||||
      if (KeyValue != NO_KEY) {
 | 
			
		||||
      //   switch (KeyValue)
 | 
			
		||||
      //   {
 | 
			
		||||
      //   case 0x0E: // K1
 | 
			
		||||
      //     tempValue = 1;
 | 
			
		||||
      //     break;
 | 
			
		||||
        
 | 
			
		||||
      //   case 0x0D: // K5
 | 
			
		||||
      //     tempValue = 2;
 | 
			
		||||
      //     break;
 | 
			
		||||
 | 
			
		||||
      //   case 0x0B: // K9
 | 
			
		||||
      //     tempValue = 3;
 | 
			
		||||
      //     break; 
 | 
			
		||||
 | 
			
		||||
      //   case 0x07: // K13
 | 
			
		||||
      //     tempValue = 4;
 | 
			
		||||
      //     break;
 | 
			
		||||
        
 | 
			
		||||
      //   default:
 | 
			
		||||
      //     break;
 | 
			
		||||
      //   }
 | 
			
		||||
        for (int i = 0; i < 16; i++) {
 | 
			
		||||
          if (KeyValue == KeyTable[i]) {
 | 
			
		||||
            tempValue = i;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        // DispToBuff(tempValue);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (sSysTickTimer.bTimeOk) {
 | 
			
		||||
      sSysTickTimer.bTimeOk = 0;
 | 
			
		||||
      // TimeToBuff();
 | 
			
		||||
      HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END 3 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief System Clock Configuration
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemClock_Config(void)
 | 
			
		||||
{
 | 
			
		||||
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 | 
			
		||||
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 | 
			
		||||
 | 
			
		||||
  /** Configure the main internal regulator output voltage
 | 
			
		||||
  */
 | 
			
		||||
  HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
 | 
			
		||||
 | 
			
		||||
  /** Initializes the RCC Oscillators according to the specified parameters
 | 
			
		||||
  * in the RCC_OscInitTypeDef structure.
 | 
			
		||||
  */
 | 
			
		||||
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV6;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLN = 85;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** Initializes the CPU, AHB and APB buses clocks
 | 
			
		||||
  */
 | 
			
		||||
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
 | 
			
		||||
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
 | 
			
		||||
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 | 
			
		||||
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 | 
			
		||||
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
 | 
			
		||||
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 | 
			
		||||
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 4 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 4 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function is executed in case of error occurrence.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void Error_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN Error_Handler_Debug */
 | 
			
		||||
  /* User can add his own implementation to report the HAL error return state */
 | 
			
		||||
  __disable_irq();
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END Error_Handler_Debug */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef  USE_FULL_ASSERT
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Reports the name of the source file and the source line number
 | 
			
		||||
  *         where the assert_param error has occurred.
 | 
			
		||||
  * @param  file: pointer to the source file name
 | 
			
		||||
  * @param  line: assert_param error line source number
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void assert_failed(uint8_t *file, uint32_t line)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN 6 */
 | 
			
		||||
  /* User can add his own implementation to report the file name and line number,
 | 
			
		||||
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 | 
			
		||||
  /* USER CODE END 6 */
 | 
			
		||||
}
 | 
			
		||||
#endif /* USE_FULL_ASSERT */
 | 
			
		||||
							
								
								
									
										87
									
								
								exp6/Core/Src/stm32g4xx_hal_msp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								exp6/Core/Src/stm32g4xx_hal_msp.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file         stm32g4xx_hal_msp.c
 | 
			
		||||
  * @brief        This file provides code for the MSP Initialization
 | 
			
		||||
  *               and de-Initialization codes.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN TD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END TD */
 | 
			
		||||
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Define */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Define */
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Macro */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Macro */
 | 
			
		||||
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PV */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PV */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* External functions --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ExternalFunctions */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ExternalFunctions */
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
/**
 | 
			
		||||
  * Initializes the Global MSP.
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MspInit(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN MspInit 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END MspInit 0 */
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_SYSCFG_CLK_ENABLE();
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
  /* System interrupt init*/
 | 
			
		||||
 | 
			
		||||
  /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
 | 
			
		||||
  */
 | 
			
		||||
  HAL_PWREx_DisableUCPDDeadBattery();
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN MspInit 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END MspInit 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
							
								
								
									
										235
									
								
								exp6/Core/Src/stm32g4xx_it.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								exp6/Core/Src/stm32g4xx_it.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,235 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_it.c
 | 
			
		||||
  * @brief   Interrupt Service Routines.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "stm32g4xx_it.h"
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
#include "variable.h"
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN TD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END TD */
 | 
			
		||||
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PD */
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PM */
 | 
			
		||||
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PV */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PV */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* Private user code ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
/* External variables --------------------------------------------------------*/
 | 
			
		||||
extern TIM_HandleTypeDef htim3;
 | 
			
		||||
/* USER CODE BEGIN EV */
 | 
			
		||||
extern stSysTickTimer sSysTickTimer;
 | 
			
		||||
extern structTime stTime;
 | 
			
		||||
extern void Display(void); // 如果这å<E284A2>¥è¯<C3A8>没加就éœ?è¦<C3A8>include头文件,ä¸<C3A4>然没定ä¹?
 | 
			
		||||
/* USER CODE END EV */
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/*           Cortex-M4 Processor Interruption and Exception Handlers          */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Non maskable interrupt.
 | 
			
		||||
  */
 | 
			
		||||
void NMI_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END NonMaskableInt_IRQn 0 */
 | 
			
		||||
  /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
 | 
			
		||||
   while (1)
 | 
			
		||||
  {
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END NonMaskableInt_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Hard fault interrupt.
 | 
			
		||||
  */
 | 
			
		||||
void HardFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN HardFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END HardFault_IRQn 0 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
 | 
			
		||||
    /* USER CODE END W1_HardFault_IRQn 0 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Memory management fault.
 | 
			
		||||
  */
 | 
			
		||||
void MemManage_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN MemoryManagement_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END MemoryManagement_IRQn 0 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
 | 
			
		||||
    /* USER CODE END W1_MemoryManagement_IRQn 0 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Prefetch fault, memory access fault.
 | 
			
		||||
  */
 | 
			
		||||
void BusFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN BusFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END BusFault_IRQn 0 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE BEGIN W1_BusFault_IRQn 0 */
 | 
			
		||||
    /* USER CODE END W1_BusFault_IRQn 0 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Undefined instruction or illegal state.
 | 
			
		||||
  */
 | 
			
		||||
void UsageFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN UsageFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END UsageFault_IRQn 0 */
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
    /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
 | 
			
		||||
    /* USER CODE END W1_UsageFault_IRQn 0 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles System service call via SWI instruction.
 | 
			
		||||
  */
 | 
			
		||||
void SVC_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN SVCall_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END SVCall_IRQn 0 */
 | 
			
		||||
  /* USER CODE BEGIN SVCall_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END SVCall_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Debug monitor.
 | 
			
		||||
  */
 | 
			
		||||
void DebugMon_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN DebugMonitor_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END DebugMonitor_IRQn 0 */
 | 
			
		||||
  /* USER CODE BEGIN DebugMonitor_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END DebugMonitor_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles Pendable request for system service.
 | 
			
		||||
  */
 | 
			
		||||
void PendSV_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN PendSV_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END PendSV_IRQn 0 */
 | 
			
		||||
  /* USER CODE BEGIN PendSV_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END PendSV_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles System tick timer.
 | 
			
		||||
  */
 | 
			
		||||
void SysTick_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN SysTick_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END SysTick_IRQn 0 */
 | 
			
		||||
  HAL_IncTick();
 | 
			
		||||
  /* USER CODE BEGIN SysTick_IRQn 1 */
 | 
			
		||||
  if (++sSysTickTimer.mMilSecCount >= 10) {
 | 
			
		||||
    sSysTickTimer.mMilSecCount = 0;
 | 
			
		||||
    sSysTickTimer.bTenMilSecOk = 1;
 | 
			
		||||
    if (++sSysTickTimer.mTimeCount >= 100) {
 | 
			
		||||
      sSysTickTimer.mTimeCount = 0;
 | 
			
		||||
      sSysTickTimer.bTimeOk = 1;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END SysTick_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/* STM32G4xx Peripheral Interrupt Handlers                                    */
 | 
			
		||||
/* Add here the Interrupt Handlers for the used peripherals.                  */
 | 
			
		||||
/* For the available peripheral interrupt handler names,                      */
 | 
			
		||||
/* please refer to the startup file (startup_stm32g4xx.s).                    */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles TIM3 global interrupt.
 | 
			
		||||
  */
 | 
			
		||||
void TIM3_IRQHandler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN TIM3_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM3_IRQn 0 */
 | 
			
		||||
  HAL_TIM_IRQHandler(&htim3);
 | 
			
		||||
  /* USER CODE BEGIN TIM3_IRQn 1 */
 | 
			
		||||
  Display();
 | 
			
		||||
  if (++stTime.mTenMilCount >= 10) {
 | 
			
		||||
    stTime.mTenMilCount = 0;
 | 
			
		||||
    stTime.bTenMilIsOk = 1;
 | 
			
		||||
    if (++stTime.mTimeCount >= 100) {
 | 
			
		||||
      stTime.mTimeCount = 0;
 | 
			
		||||
      stTime.bSecondIsOk = 1;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END TIM3_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
							
								
								
									
										285
									
								
								exp6/Core/Src/system_stm32g4xx.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										285
									
								
								exp6/Core/Src/system_stm32g4xx.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,285 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32g4xx.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   CMSIS Cortex-M4 Device Peripheral Access Layer System Source File
 | 
			
		||||
  *
 | 
			
		||||
  *   This file provides two functions and one global variable to be called from
 | 
			
		||||
  *   user application:
 | 
			
		||||
  *      - SystemInit(): This function is called at startup just after reset and
 | 
			
		||||
  *                      before branch to main program. This call is made inside
 | 
			
		||||
  *                      the "startup_stm32g4xx.s" file.
 | 
			
		||||
  *
 | 
			
		||||
  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
 | 
			
		||||
  *                                  by the user application to setup the SysTick
 | 
			
		||||
  *                                  timer or configure other parameters.
 | 
			
		||||
  *
 | 
			
		||||
  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
 | 
			
		||||
  *                                 be called whenever the core clock is changed
 | 
			
		||||
  *                                 during program execution.
 | 
			
		||||
  *
 | 
			
		||||
  *   After each device reset the HSI (16 MHz) is used as system clock source.
 | 
			
		||||
  *   Then SystemInit() function is called, in "startup_stm32g4xx.s" file, to
 | 
			
		||||
  *   configure the system clock before to branch to main program.
 | 
			
		||||
  *
 | 
			
		||||
  *   This file configures the system clock as follows:
 | 
			
		||||
  *=============================================================================
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        System Clock source                    | HSI
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        SYSCLK(Hz)                             | 16000000
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        HCLK(Hz)                               | 16000000
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        AHB Prescaler                          | 1
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        APB1 Prescaler                         | 1
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        APB2 Prescaler                         | 1
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        PLL_M                                  | 1
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        PLL_N                                  | 16
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        PLL_P                                  | 7
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        PLL_Q                                  | 2
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        PLL_R                                  | 2
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *        Require 48MHz for RNG                  | Disabled
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  *=============================================================================
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32g4xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Private_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#include "stm32g4xx.h"
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSE_VALUE)
 | 
			
		||||
  #define HSE_VALUE     24000000U /*!< Value of the External oscillator in Hz */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    16000000U /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Private_TypesDefinitions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Private_Defines
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/************************* Miscellaneous Configuration ************************/
 | 
			
		||||
/* Note: Following vector table addresses must be defined in line with linker
 | 
			
		||||
         configuration. */
 | 
			
		||||
/*!< Uncomment the following line if you need to relocate the vector table
 | 
			
		||||
     anywhere in Flash or Sram, else the vector table is kept at the automatic
 | 
			
		||||
     remap of boot address selected */
 | 
			
		||||
/* #define USER_VECT_TAB_ADDRESS */
 | 
			
		||||
 | 
			
		||||
#if defined(USER_VECT_TAB_ADDRESS)
 | 
			
		||||
/*!< Uncomment the following line if you need to relocate your vector Table
 | 
			
		||||
     in Sram else user remap will be done in Flash. */
 | 
			
		||||
/* #define VECT_TAB_SRAM */
 | 
			
		||||
#if defined(VECT_TAB_SRAM)
 | 
			
		||||
#define VECT_TAB_BASE_ADDRESS   SRAM_BASE       /*!< Vector Table base address field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#else
 | 
			
		||||
#define VECT_TAB_BASE_ADDRESS   FLASH_BASE      /*!< Vector Table base address field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#endif /* VECT_TAB_SRAM */
 | 
			
		||||
#endif /* USER_VECT_TAB_ADDRESS */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Private_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Private_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  /* The SystemCoreClock variable is updated in three ways:
 | 
			
		||||
      1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
      2) by calling HAL API function HAL_RCC_GetHCLKFreq()
 | 
			
		||||
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
 | 
			
		||||
         Note: If you use this function to configure the system clock; then there
 | 
			
		||||
               is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
               variable is updated automatically.
 | 
			
		||||
  */
 | 
			
		||||
  uint32_t SystemCoreClock = HSI_VALUE;
 | 
			
		||||
 | 
			
		||||
  const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U};
 | 
			
		||||
  const uint8_t APBPrescTable[8] =  {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Private_FunctionPrototypes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the microcontroller system.
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
void SystemInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* FPU settings ------------------------------------------------------------*/
 | 
			
		||||
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
 | 
			
		||||
    SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2)));  /* set CP10 and CP11 Full Access */
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  /* Configure the Vector Table location add offset address ------------------*/
 | 
			
		||||
#if defined(USER_VECT_TAB_ADDRESS)
 | 
			
		||||
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
 | 
			
		||||
#endif /* USER_VECT_TAB_ADDRESS */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Update SystemCoreClock variable according to Clock Register Values.
 | 
			
		||||
  *         The SystemCoreClock variable contains the core clock (HCLK), it can
 | 
			
		||||
  *         be used by the user application to setup the SysTick timer or configure
 | 
			
		||||
  *         other parameters.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   Each time the core clock (HCLK) changes, this function must be called
 | 
			
		||||
  *         to update SystemCoreClock variable value. Otherwise, any configuration
 | 
			
		||||
  *         based on this variable will be incorrect.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   - The system frequency computed by this function is not the real
 | 
			
		||||
  *           frequency in the chip. It is calculated based on the predefined
 | 
			
		||||
  *           constant and the selected clock source:
 | 
			
		||||
  *
 | 
			
		||||
  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**)
 | 
			
		||||
  *
 | 
			
		||||
  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***)
 | 
			
		||||
  *
 | 
			
		||||
  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(***)
 | 
			
		||||
  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.
 | 
			
		||||
  *
 | 
			
		||||
  *         (**) HSI_VALUE is a constant defined in stm32g4xx_hal.h file (default value
 | 
			
		||||
  *              16 MHz) but the real value may vary depending on the variations
 | 
			
		||||
  *              in voltage and temperature.
 | 
			
		||||
  *
 | 
			
		||||
  *         (***) HSE_VALUE is a constant defined in stm32g4xx_hal.h file (default value
 | 
			
		||||
  *              24 MHz), user has to ensure that HSE_VALUE is same as the real
 | 
			
		||||
  *              frequency of the crystal used. Otherwise, this function may
 | 
			
		||||
  *              have wrong result.
 | 
			
		||||
  *
 | 
			
		||||
  *         - The result of this function could be not correct when using fractional
 | 
			
		||||
  *           value for HSE crystal.
 | 
			
		||||
  *
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemCoreClockUpdate(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tmp, pllvco, pllr, pllsource, pllm;
 | 
			
		||||
 | 
			
		||||
  /* Get SYSCLK source -------------------------------------------------------*/
 | 
			
		||||
  switch (RCC->CFGR & RCC_CFGR_SWS)
 | 
			
		||||
  {
 | 
			
		||||
    case 0x04:  /* HSI used as system clock source */
 | 
			
		||||
      SystemCoreClock = HSI_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case 0x08:  /* HSE used as system clock source */
 | 
			
		||||
      SystemCoreClock = HSE_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case 0x0C:  /* PLL used as system clock  source */
 | 
			
		||||
      /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN
 | 
			
		||||
         SYSCLK = PLL_VCO / PLLR
 | 
			
		||||
         */
 | 
			
		||||
      pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
 | 
			
		||||
      pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> 4) + 1U ;
 | 
			
		||||
      if (pllsource == 0x02UL) /* HSI used as PLL clock source */
 | 
			
		||||
      {
 | 
			
		||||
        pllvco = (HSI_VALUE / pllm);
 | 
			
		||||
      }
 | 
			
		||||
      else                   /* HSE used as PLL clock source */
 | 
			
		||||
      {
 | 
			
		||||
        pllvco = (HSE_VALUE / pllm);
 | 
			
		||||
      }
 | 
			
		||||
      pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 8);
 | 
			
		||||
      pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 25) + 1U) * 2U;
 | 
			
		||||
      SystemCoreClock = pllvco/pllr;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  /* Compute HCLK clock frequency --------------------------------------------*/
 | 
			
		||||
  /* Get HCLK prescaler */
 | 
			
		||||
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
 | 
			
		||||
  /* HCLK clock frequency */
 | 
			
		||||
  SystemCoreClock >>= tmp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										111
									
								
								exp6/Core/Src/tim.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								exp6/Core/Src/tim.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,111 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    tim.c
 | 
			
		||||
  * @brief   This file provides code for the configuration
 | 
			
		||||
  *          of the TIM instances.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "tim.h"
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
TIM_HandleTypeDef htim3;
 | 
			
		||||
 | 
			
		||||
/* TIM3 init function */
 | 
			
		||||
void MX_TIM3_Init(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN TIM3_Init 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM3_Init 0 */
 | 
			
		||||
 | 
			
		||||
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
 | 
			
		||||
  TIM_MasterConfigTypeDef sMasterConfig = {0};
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN TIM3_Init 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM3_Init 1 */
 | 
			
		||||
  htim3.Instance = TIM3;
 | 
			
		||||
  htim3.Init.Prescaler = 170-1;
 | 
			
		||||
  htim3.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1;
 | 
			
		||||
  htim3.Init.Period = 999;
 | 
			
		||||
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 | 
			
		||||
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
 | 
			
		||||
  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
 | 
			
		||||
  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
 | 
			
		||||
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
 | 
			
		||||
  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE BEGIN TIM3_Init 2 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM3_Init 2 */
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  if(tim_baseHandle->Instance==TIM3)
 | 
			
		||||
  {
 | 
			
		||||
  /* USER CODE BEGIN TIM3_MspInit 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM3_MspInit 0 */
 | 
			
		||||
    /* TIM3 clock enable */
 | 
			
		||||
    __HAL_RCC_TIM3_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM3 interrupt Init */
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
 | 
			
		||||
    HAL_NVIC_EnableIRQ(TIM3_IRQn);
 | 
			
		||||
  /* USER CODE BEGIN TIM3_MspInit 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM3_MspInit 1 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  if(tim_baseHandle->Instance==TIM3)
 | 
			
		||||
  {
 | 
			
		||||
  /* USER CODE BEGIN TIM3_MspDeInit 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM3_MspDeInit 0 */
 | 
			
		||||
    /* Peripheral clock disable */
 | 
			
		||||
    __HAL_RCC_TIM3_CLK_DISABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM3 interrupt Deinit */
 | 
			
		||||
    HAL_NVIC_DisableIRQ(TIM3_IRQn);
 | 
			
		||||
  /* USER CODE BEGIN TIM3_MspDeInit 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM3_MspDeInit 1 */
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
							
								
								
									
										14535
									
								
								exp6/Drivers/CMSIS/Device/ST/STM32G4xx/Include/stm32g473xx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14535
									
								
								exp6/Drivers/CMSIS/Device/ST/STM32G4xx/Include/stm32g473xx.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										263
									
								
								exp6/Drivers/CMSIS/Device/ST/STM32G4xx/Include/stm32g4xx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										263
									
								
								exp6/Drivers/CMSIS/Device/ST/STM32G4xx/Include/stm32g4xx.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,263 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   CMSIS STM32G4xx Device Peripheral Access Layer Header File.
 | 
			
		||||
  *
 | 
			
		||||
  *          The file is the unique include file that the application programmer
 | 
			
		||||
  *          is using in the C source code, usually in main.c. This file contains:
 | 
			
		||||
  *           - Configuration section that allows to select:
 | 
			
		||||
  *              - The STM32G4xx device used in the target application
 | 
			
		||||
  *              - To use or not the peripheral’s drivers in application code(i.e.
 | 
			
		||||
  *                code will be based on direct access to peripheral’s registers
 | 
			
		||||
  *                rather than drivers API), this option is controlled by
 | 
			
		||||
  *                "#define USE_HAL_DRIVER"
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32g4xx
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifndef __STM32G4xx_H
 | 
			
		||||
#define __STM32G4xx_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Library_configuration_section
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief STM32 Family
 | 
			
		||||
  */
 | 
			
		||||
#if !defined (STM32G4)
 | 
			
		||||
#define STM32G4
 | 
			
		||||
#endif /* STM32G4 */
 | 
			
		||||
 | 
			
		||||
/* Uncomment the line below according to the target STM32G4 device used in your
 | 
			
		||||
   application
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if !defined (STM32G431xx) && !defined (STM32G441xx) && !defined (STM32G471xx) && \
 | 
			
		||||
    !defined (STM32G473xx) && !defined (STM32G474xx) && !defined (STM32G484xx) && \
 | 
			
		||||
    !defined (STM32GBK1CB) && !defined (STM32G491xx) && !defined (STM32G4A1xx) && \
 | 
			
		||||
    !defined (STM32G414xx)
 | 
			
		||||
  /* #define STM32G414xx */   /*!< STM32G414xx Devices */
 | 
			
		||||
  /* #define STM32G431xx */   /*!< STM32G431xx Devices */
 | 
			
		||||
  /* #define STM32G441xx */   /*!< STM32G441xx Devices */
 | 
			
		||||
  /* #define STM32G471xx */   /*!< STM32G471xx Devices */
 | 
			
		||||
  /* #define STM32G473xx */   /*!< STM32G473xx Devices */
 | 
			
		||||
  /* #define STM32G483xx */   /*!< STM32G483xx Devices */
 | 
			
		||||
  /* #define STM32G474xx */   /*!< STM32G474xx Devices */
 | 
			
		||||
  /* #define STM32G484xx */   /*!< STM32G484xx Devices */
 | 
			
		||||
  /* #define STM32G491xx */   /*!< STM32G491xx Devices */
 | 
			
		||||
  /* #define STM32G4A1xx */   /*!< STM32G4A1xx Devices */
 | 
			
		||||
  /* #define STM32GBK1CB */   /*!< STM32GBK1CB Devices */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*  Tip: To avoid modifying this file each time you need to switch between these
 | 
			
		||||
        devices, you can define the device in your toolchain compiler preprocessor.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (USE_HAL_DRIVER)
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Comment the line below if you will not use the peripherals drivers.
 | 
			
		||||
   In this case, these drivers will not be included and the application code will
 | 
			
		||||
   be based on direct access to peripherals registers
 | 
			
		||||
   */
 | 
			
		||||
  /*#define USE_HAL_DRIVER */
 | 
			
		||||
#endif /* USE_HAL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief CMSIS Device version number V1.2.4
 | 
			
		||||
  */
 | 
			
		||||
#define __STM32G4_CMSIS_VERSION_MAIN   (0x01U) /*!< [31:24] main version */
 | 
			
		||||
#define __STM32G4_CMSIS_VERSION_SUB1   (0x02U) /*!< [23:16] sub1 version */
 | 
			
		||||
#define __STM32G4_CMSIS_VERSION_SUB2   (0x04U) /*!< [15:8]  sub2 version */
 | 
			
		||||
#define __STM32G4_CMSIS_VERSION_RC     (0x00U) /*!< [7:0]  release candidate */
 | 
			
		||||
#define __STM32G4_CMSIS_VERSION        ((__STM32G4_CMSIS_VERSION_MAIN << 24)\
 | 
			
		||||
                                       |(__STM32G4_CMSIS_VERSION_SUB1 << 16)\
 | 
			
		||||
                                       |(__STM32G4_CMSIS_VERSION_SUB2 << 8 )\
 | 
			
		||||
                                       |(__STM32G4_CMSIS_VERSION_RC))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Device_Included
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32G431xx)
 | 
			
		||||
  #include "stm32g431xx.h"
 | 
			
		||||
#elif defined(STM32G441xx)
 | 
			
		||||
  #include "stm32g441xx.h"
 | 
			
		||||
#elif defined(STM32G471xx)
 | 
			
		||||
  #include "stm32g471xx.h"
 | 
			
		||||
#elif defined(STM32G473xx)
 | 
			
		||||
  #include "stm32g473xx.h"
 | 
			
		||||
#elif defined(STM32G483xx)
 | 
			
		||||
  #include "stm32g483xx.h"
 | 
			
		||||
#elif defined(STM32G474xx)
 | 
			
		||||
  #include "stm32g474xx.h"
 | 
			
		||||
#elif defined(STM32G484xx)
 | 
			
		||||
  #include "stm32g484xx.h"
 | 
			
		||||
#elif defined(STM32G491xx)
 | 
			
		||||
  #include "stm32g491xx.h"
 | 
			
		||||
#elif defined(STM32G4A1xx)
 | 
			
		||||
  #include "stm32g4a1xx.h"
 | 
			
		||||
#elif defined(STM32GBK1CB)
 | 
			
		||||
  #include "stm32gbk1cb.h"
 | 
			
		||||
#elif defined(STM32G414xx)
 | 
			
		||||
  #include "stm32g414xx.h"
 | 
			
		||||
#else
 | 
			
		||||
  #error "Please select first the target STM32G4xx device used in your application (in stm32g4xx.h file)"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Exported_types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  RESET = 0,
 | 
			
		||||
  SET = !RESET
 | 
			
		||||
} FlagStatus, ITStatus;
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  DISABLE = 0,
 | 
			
		||||
  ENABLE = !DISABLE
 | 
			
		||||
} FunctionalState;
 | 
			
		||||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  SUCCESS = 0,
 | 
			
		||||
  ERROR = !SUCCESS
 | 
			
		||||
} ErrorStatus;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Exported_macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SET_BIT(REG, BIT)     ((REG) |= (BIT))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_BIT(REG, BIT)   ((REG) &= ~(BIT))
 | 
			
		||||
 | 
			
		||||
#define READ_BIT(REG, BIT)    ((REG) & (BIT))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_REG(REG)        ((REG) = (0x0))
 | 
			
		||||
 | 
			
		||||
#define WRITE_REG(REG, VAL)   ((REG) = (VAL))
 | 
			
		||||
 | 
			
		||||
#define READ_REG(REG)         ((REG))
 | 
			
		||||
 | 
			
		||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
 | 
			
		||||
 | 
			
		||||
#define POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL)))
 | 
			
		||||
 | 
			
		||||
/* Use of CMSIS compiler intrinsics for register exclusive access */
 | 
			
		||||
/* Atomic 32-bit register access macro to set one or several bits */
 | 
			
		||||
#define ATOMIC_SET_BIT(REG, BIT)                             \
 | 
			
		||||
  do {                                                       \
 | 
			
		||||
    uint32_t val;                                            \
 | 
			
		||||
    do {                                                     \
 | 
			
		||||
      val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT);       \
 | 
			
		||||
    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 32-bit register access macro to clear one or several bits */
 | 
			
		||||
#define ATOMIC_CLEAR_BIT(REG, BIT)                           \
 | 
			
		||||
  do {                                                       \
 | 
			
		||||
    uint32_t val;                                            \
 | 
			
		||||
    do {                                                     \
 | 
			
		||||
      val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT);      \
 | 
			
		||||
    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 32-bit register access macro to clear and set one or several bits */
 | 
			
		||||
#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK)                          \
 | 
			
		||||
  do {                                                                     \
 | 
			
		||||
    uint32_t val;                                                          \
 | 
			
		||||
    do {                                                                   \
 | 
			
		||||
      val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
 | 
			
		||||
    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U);               \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 16-bit register access macro to set one or several bits */
 | 
			
		||||
#define ATOMIC_SETH_BIT(REG, BIT)                            \
 | 
			
		||||
  do {                                                       \
 | 
			
		||||
    uint16_t val;                                            \
 | 
			
		||||
    do {                                                     \
 | 
			
		||||
      val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT);       \
 | 
			
		||||
    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 16-bit register access macro to clear one or several bits */
 | 
			
		||||
#define ATOMIC_CLEARH_BIT(REG, BIT)                          \
 | 
			
		||||
  do {                                                       \
 | 
			
		||||
    uint16_t val;                                            \
 | 
			
		||||
    do {                                                     \
 | 
			
		||||
      val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT);      \
 | 
			
		||||
    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 16-bit register access macro to clear and set one or several bits */
 | 
			
		||||
#define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK)                         \
 | 
			
		||||
  do {                                                                     \
 | 
			
		||||
    uint16_t val;                                                          \
 | 
			
		||||
    do {                                                                   \
 | 
			
		||||
      val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
 | 
			
		||||
    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U);               \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (USE_HAL_DRIVER)
 | 
			
		||||
 #include "stm32g4xx_hal.h"
 | 
			
		||||
#endif /* USE_HAL_DRIVER */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32G4xx_H */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,104 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32g4xx.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   CMSIS Cortex-M4 Device System Source File for STM32G4xx devices.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32g4xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Define to prevent recursive inclusion
 | 
			
		||||
  */
 | 
			
		||||
#ifndef __SYSTEM_STM32G4XX_H
 | 
			
		||||
#define __SYSTEM_STM32G4XX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Exported_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  /* The SystemCoreClock variable is updated in three ways:
 | 
			
		||||
      1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
      2) by calling HAL API function HAL_RCC_GetSysClockFreq()
 | 
			
		||||
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
 | 
			
		||||
         Note: If you use this function to configure the system clock; then there
 | 
			
		||||
               is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
               variable is updated automatically.
 | 
			
		||||
  */
 | 
			
		||||
extern uint32_t SystemCoreClock;            /*!< System Clock Frequency (Core Clock) */
 | 
			
		||||
 | 
			
		||||
extern const uint8_t  AHBPrescTable[16];    /*!< AHB prescalers table values */
 | 
			
		||||
extern const uint8_t  APBPrescTable[8];     /*!< APB prescalers table values */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Exported_Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Exported_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_System_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
extern void SystemInit(void);
 | 
			
		||||
extern void SystemCoreClockUpdate(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /*__SYSTEM_STM32G4XX_H */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
							
								
								
									
										6
									
								
								exp6/Drivers/CMSIS/Device/ST/STM32G4xx/LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								exp6/Drivers/CMSIS/Device/ST/STM32G4xx/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 Apache-2.0 license shall apply. 
 | 
			
		||||
You may obtain a copy of the Apache-2.0 at:
 | 
			
		||||
https://opensource.org/licenses/Apache-2.0
 | 
			
		||||
							
								
								
									
										894
									
								
								exp6/Drivers/CMSIS/Include/cmsis_armcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										894
									
								
								exp6/Drivers/CMSIS/Include/cmsis_armcc.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,894 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     cmsis_armcc.h
 | 
			
		||||
 * @brief    CMSIS compiler ARMCC (Arm Compiler 5) header file
 | 
			
		||||
 * @version  V5.1.0
 | 
			
		||||
 * @date     08. May 2019
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_ARMCC_H
 | 
			
		||||
#define __CMSIS_ARMCC_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677)
 | 
			
		||||
  #error "Please use Arm Compiler Toolchain V4.0.677 or later!"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* CMSIS compiler control architecture macros */
 | 
			
		||||
#if ((defined (__TARGET_ARCH_6_M  ) && (__TARGET_ARCH_6_M   == 1)) || \
 | 
			
		||||
     (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M  == 1))   )
 | 
			
		||||
  #define __ARM_ARCH_6M__           1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M  == 1))
 | 
			
		||||
  #define __ARM_ARCH_7M__           1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1))
 | 
			
		||||
  #define __ARM_ARCH_7EM__          1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* __ARM_ARCH_8M_BASE__  not applicable */
 | 
			
		||||
  /* __ARM_ARCH_8M_MAIN__  not applicable */
 | 
			
		||||
 | 
			
		||||
/* CMSIS compiler control DSP macros */
 | 
			
		||||
#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
  #define __ARM_FEATURE_DSP         1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* CMSIS compiler specific defines */
 | 
			
		||||
#ifndef   __ASM
 | 
			
		||||
  #define __ASM                                  __asm
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __INLINE
 | 
			
		||||
  #define __INLINE                               __inline
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __STATIC_INLINE
 | 
			
		||||
  #define __STATIC_INLINE                        static __inline
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __STATIC_FORCEINLINE                 
 | 
			
		||||
  #define __STATIC_FORCEINLINE                   static __forceinline
 | 
			
		||||
#endif           
 | 
			
		||||
#ifndef   __NO_RETURN
 | 
			
		||||
  #define __NO_RETURN                            __declspec(noreturn)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __USED
 | 
			
		||||
  #define __USED                                 __attribute__((used))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __WEAK
 | 
			
		||||
  #define __WEAK                                 __attribute__((weak))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __PACKED
 | 
			
		||||
  #define __PACKED                               __attribute__((packed))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __PACKED_STRUCT
 | 
			
		||||
  #define __PACKED_STRUCT                        __packed struct
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __PACKED_UNION
 | 
			
		||||
  #define __PACKED_UNION                         __packed union
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT32        /* deprecated */
 | 
			
		||||
  #define __UNALIGNED_UINT32(x)                  (*((__packed uint32_t *)(x)))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT16_WRITE
 | 
			
		||||
  #define __UNALIGNED_UINT16_WRITE(addr, val)    ((*((__packed uint16_t *)(addr))) = (val))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT16_READ
 | 
			
		||||
  #define __UNALIGNED_UINT16_READ(addr)          (*((const __packed uint16_t *)(addr)))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT32_WRITE
 | 
			
		||||
  #define __UNALIGNED_UINT32_WRITE(addr, val)    ((*((__packed uint32_t *)(addr))) = (val))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT32_READ
 | 
			
		||||
  #define __UNALIGNED_UINT32_READ(addr)          (*((const __packed uint32_t *)(addr)))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __ALIGNED
 | 
			
		||||
  #define __ALIGNED(x)                           __attribute__((aligned(x)))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __RESTRICT
 | 
			
		||||
  #define __RESTRICT                             __restrict
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __COMPILER_BARRIER
 | 
			
		||||
  #define __COMPILER_BARRIER()                   __memory_changed()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* #########################  Startup and Lowlevel Init  ######################## */
 | 
			
		||||
 | 
			
		||||
#ifndef __PROGRAM_START
 | 
			
		||||
#define __PROGRAM_START           __main
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __INITIAL_SP
 | 
			
		||||
#define __INITIAL_SP              Image$$ARM_LIB_STACK$$ZI$$Limit
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __STACK_LIMIT
 | 
			
		||||
#define __STACK_LIMIT             Image$$ARM_LIB_STACK$$ZI$$Base
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __VECTOR_TABLE
 | 
			
		||||
#define __VECTOR_TABLE            __Vectors
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __VECTOR_TABLE_ATTRIBUTE
 | 
			
		||||
#define __VECTOR_TABLE_ATTRIBUTE  __attribute((used, section("RESET")))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ###########################  Core Function Access  ########################### */
 | 
			
		||||
/** \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
    \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable IRQ Interrupts
 | 
			
		||||
  \details Enables IRQ interrupts by clearing the I-bit in the CPSR.
 | 
			
		||||
           Can only be executed in Privileged modes.
 | 
			
		||||
 */
 | 
			
		||||
/* intrinsic void __enable_irq();     */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable IRQ Interrupts
 | 
			
		||||
  \details Disables IRQ interrupts by setting the I-bit in the CPSR.
 | 
			
		||||
           Can only be executed in Privileged modes.
 | 
			
		||||
 */
 | 
			
		||||
/* intrinsic void __disable_irq();    */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Control Register
 | 
			
		||||
  \details Returns the content of the Control Register.
 | 
			
		||||
  \return               Control Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_CONTROL(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regControl         __ASM("control");
 | 
			
		||||
  return(__regControl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Control Register
 | 
			
		||||
  \details Writes the given value to the Control Register.
 | 
			
		||||
  \param [in]    control  Control Register value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_CONTROL(uint32_t control)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regControl         __ASM("control");
 | 
			
		||||
  __regControl = control;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get IPSR Register
 | 
			
		||||
  \details Returns the content of the IPSR Register.
 | 
			
		||||
  \return               IPSR Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_IPSR(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regIPSR          __ASM("ipsr");
 | 
			
		||||
  return(__regIPSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get APSR Register
 | 
			
		||||
  \details Returns the content of the APSR Register.
 | 
			
		||||
  \return               APSR Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_APSR(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regAPSR          __ASM("apsr");
 | 
			
		||||
  return(__regAPSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get xPSR Register
 | 
			
		||||
  \details Returns the content of the xPSR Register.
 | 
			
		||||
  \return               xPSR Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_xPSR(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regXPSR          __ASM("xpsr");
 | 
			
		||||
  return(__regXPSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Process Stack Pointer
 | 
			
		||||
  \details Returns the current value of the Process Stack Pointer (PSP).
 | 
			
		||||
  \return               PSP Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_PSP(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regProcessStackPointer  __ASM("psp");
 | 
			
		||||
  return(__regProcessStackPointer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Process Stack Pointer
 | 
			
		||||
  \details Assigns the given value to the Process Stack Pointer (PSP).
 | 
			
		||||
  \param [in]    topOfProcStack  Process Stack Pointer value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regProcessStackPointer  __ASM("psp");
 | 
			
		||||
  __regProcessStackPointer = topOfProcStack;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Main Stack Pointer
 | 
			
		||||
  \details Returns the current value of the Main Stack Pointer (MSP).
 | 
			
		||||
  \return               MSP Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_MSP(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regMainStackPointer     __ASM("msp");
 | 
			
		||||
  return(__regMainStackPointer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Main Stack Pointer
 | 
			
		||||
  \details Assigns the given value to the Main Stack Pointer (MSP).
 | 
			
		||||
  \param [in]    topOfMainStack  Main Stack Pointer value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regMainStackPointer     __ASM("msp");
 | 
			
		||||
  __regMainStackPointer = topOfMainStack;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Priority Mask
 | 
			
		||||
  \details Returns the current state of the priority mask bit from the Priority Mask Register.
 | 
			
		||||
  \return               Priority Mask value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_PRIMASK(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regPriMask         __ASM("primask");
 | 
			
		||||
  return(__regPriMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Priority Mask
 | 
			
		||||
  \details Assigns the given value to the Priority Mask Register.
 | 
			
		||||
  \param [in]    priMask  Priority Mask
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_PRIMASK(uint32_t priMask)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regPriMask         __ASM("primask");
 | 
			
		||||
  __regPriMask = (priMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable FIQ
 | 
			
		||||
  \details Enables FIQ interrupts by clearing the F-bit in the CPSR.
 | 
			
		||||
           Can only be executed in Privileged modes.
 | 
			
		||||
 */
 | 
			
		||||
#define __enable_fault_irq                __enable_fiq
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable FIQ
 | 
			
		||||
  \details Disables FIQ interrupts by setting the F-bit in the CPSR.
 | 
			
		||||
           Can only be executed in Privileged modes.
 | 
			
		||||
 */
 | 
			
		||||
#define __disable_fault_irq               __disable_fiq
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Base Priority
 | 
			
		||||
  \details Returns the current value of the Base Priority register.
 | 
			
		||||
  \return               Base Priority register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t  __get_BASEPRI(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regBasePri         __ASM("basepri");
 | 
			
		||||
  return(__regBasePri);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Base Priority
 | 
			
		||||
  \details Assigns the given value to the Base Priority register.
 | 
			
		||||
  \param [in]    basePri  Base Priority value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_BASEPRI(uint32_t basePri)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regBasePri         __ASM("basepri");
 | 
			
		||||
  __regBasePri = (basePri & 0xFFU);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Base Priority with condition
 | 
			
		||||
  \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,
 | 
			
		||||
           or the new value increases the BASEPRI priority level.
 | 
			
		||||
  \param [in]    basePri  Base Priority value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regBasePriMax      __ASM("basepri_max");
 | 
			
		||||
  __regBasePriMax = (basePri & 0xFFU);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Fault Mask
 | 
			
		||||
  \details Returns the current value of the Fault Mask register.
 | 
			
		||||
  \return               Fault Mask register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_FAULTMASK(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regFaultMask       __ASM("faultmask");
 | 
			
		||||
  return(__regFaultMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Fault Mask
 | 
			
		||||
  \details Assigns the given value to the Fault Mask register.
 | 
			
		||||
  \param [in]    faultMask  Fault Mask value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regFaultMask       __ASM("faultmask");
 | 
			
		||||
  __regFaultMask = (faultMask & (uint32_t)1U);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get FPSCR
 | 
			
		||||
  \details Returns the current value of the Floating Point Status/Control register.
 | 
			
		||||
  \return               Floating Point Status/Control register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_FPSCR(void)
 | 
			
		||||
{
 | 
			
		||||
#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
 | 
			
		||||
     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )
 | 
			
		||||
  register uint32_t __regfpscr         __ASM("fpscr");
 | 
			
		||||
  return(__regfpscr);
 | 
			
		||||
#else
 | 
			
		||||
   return(0U);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set FPSCR
 | 
			
		||||
  \details Assigns the given value to the Floating Point Status/Control register.
 | 
			
		||||
  \param [in]    fpscr  Floating Point Status/Control value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
 | 
			
		||||
{
 | 
			
		||||
#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
 | 
			
		||||
     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )
 | 
			
		||||
  register uint32_t __regfpscr         __ASM("fpscr");
 | 
			
		||||
  __regfpscr = (fpscr);
 | 
			
		||||
#else
 | 
			
		||||
  (void)fpscr;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_RegAccFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################  Core Instruction Access  ######################### */
 | 
			
		||||
/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface
 | 
			
		||||
  Access to dedicated instructions
 | 
			
		||||
  @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   No Operation
 | 
			
		||||
  \details No Operation does nothing. This instruction can be used for code alignment purposes.
 | 
			
		||||
 */
 | 
			
		||||
#define __NOP                             __nop
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Wait For Interrupt
 | 
			
		||||
  \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.
 | 
			
		||||
 */
 | 
			
		||||
#define __WFI                             __wfi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Wait For Event
 | 
			
		||||
  \details Wait For Event is a hint instruction that permits the processor to enter
 | 
			
		||||
           a low-power state until one of a number of events occurs.
 | 
			
		||||
 */
 | 
			
		||||
#define __WFE                             __wfe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Send Event
 | 
			
		||||
  \details Send Event is a hint instruction. It causes an event to be signaled to the CPU.
 | 
			
		||||
 */
 | 
			
		||||
#define __SEV                             __sev
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Instruction Synchronization Barrier
 | 
			
		||||
  \details Instruction Synchronization Barrier flushes the pipeline in the processor,
 | 
			
		||||
           so that all instructions following the ISB are fetched from cache or memory,
 | 
			
		||||
           after the instruction has been completed.
 | 
			
		||||
 */
 | 
			
		||||
#define __ISB() do {\
 | 
			
		||||
                   __schedule_barrier();\
 | 
			
		||||
                   __isb(0xF);\
 | 
			
		||||
                   __schedule_barrier();\
 | 
			
		||||
                } while (0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Data Synchronization Barrier
 | 
			
		||||
  \details Acts as a special kind of Data Memory Barrier.
 | 
			
		||||
           It completes when all explicit memory accesses before this instruction complete.
 | 
			
		||||
 */
 | 
			
		||||
#define __DSB() do {\
 | 
			
		||||
                   __schedule_barrier();\
 | 
			
		||||
                   __dsb(0xF);\
 | 
			
		||||
                   __schedule_barrier();\
 | 
			
		||||
                } while (0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Data Memory Barrier
 | 
			
		||||
  \details Ensures the apparent order of the explicit memory operations before
 | 
			
		||||
           and after the instruction, without ensuring their completion.
 | 
			
		||||
 */
 | 
			
		||||
#define __DMB() do {\
 | 
			
		||||
                   __schedule_barrier();\
 | 
			
		||||
                   __dmb(0xF);\
 | 
			
		||||
                   __schedule_barrier();\
 | 
			
		||||
                } while (0U)
 | 
			
		||||
 | 
			
		||||
                  
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Reverse byte order (32 bit)
 | 
			
		||||
  \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.
 | 
			
		||||
  \param [in]    value  Value to reverse
 | 
			
		||||
  \return               Reversed value
 | 
			
		||||
 */
 | 
			
		||||
#define __REV                             __rev
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Reverse byte order (16 bit)
 | 
			
		||||
  \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.
 | 
			
		||||
  \param [in]    value  Value to reverse
 | 
			
		||||
  \return               Reversed value
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __NO_EMBEDDED_ASM
 | 
			
		||||
__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)
 | 
			
		||||
{
 | 
			
		||||
  rev16 r0, r0
 | 
			
		||||
  bx lr
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Reverse byte order (16 bit)
 | 
			
		||||
  \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.
 | 
			
		||||
  \param [in]    value  Value to reverse
 | 
			
		||||
  \return               Reversed value
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __NO_EMBEDDED_ASM
 | 
			
		||||
__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value)
 | 
			
		||||
{
 | 
			
		||||
  revsh r0, r0
 | 
			
		||||
  bx lr
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Rotate Right in unsigned value (32 bit)
 | 
			
		||||
  \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.
 | 
			
		||||
  \param [in]    op1  Value to rotate
 | 
			
		||||
  \param [in]    op2  Number of Bits to rotate
 | 
			
		||||
  \return               Rotated value
 | 
			
		||||
 */
 | 
			
		||||
#define __ROR                             __ror
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Breakpoint
 | 
			
		||||
  \details Causes the processor to enter Debug state.
 | 
			
		||||
           Debug tools can use this to investigate system state when the instruction at a particular address is reached.
 | 
			
		||||
  \param [in]    value  is ignored by the processor.
 | 
			
		||||
                 If required, a debugger can use it to store additional information about the breakpoint.
 | 
			
		||||
 */
 | 
			
		||||
#define __BKPT(value)                       __breakpoint(value)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Reverse bit order of value
 | 
			
		||||
  \details Reverses the bit order of the given value.
 | 
			
		||||
  \param [in]    value  Value to reverse
 | 
			
		||||
  \return               Reversed value
 | 
			
		||||
 */
 | 
			
		||||
#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
  #define __RBIT                          __rbit
 | 
			
		||||
#else
 | 
			
		||||
__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t result;
 | 
			
		||||
  uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */
 | 
			
		||||
 | 
			
		||||
  result = value;                      /* r will be reversed bits of v; first get LSB of v */
 | 
			
		||||
  for (value >>= 1U; value != 0U; value >>= 1U)
 | 
			
		||||
  {
 | 
			
		||||
    result <<= 1U;
 | 
			
		||||
    result |= value & 1U;
 | 
			
		||||
    s--;
 | 
			
		||||
  }
 | 
			
		||||
  result <<= s;                        /* shift when v's highest bits are zero */
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Count leading zeros
 | 
			
		||||
  \details Counts the number of leading zeros of a data value.
 | 
			
		||||
  \param [in]  value  Value to count the leading zeros
 | 
			
		||||
  \return             number of leading zeros in value
 | 
			
		||||
 */
 | 
			
		||||
#define __CLZ                             __clz
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDR Exclusive (8 bit)
 | 
			
		||||
  \details Executes a exclusive LDR instruction for 8 bit value.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return             value of type uint8_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __LDREXB(ptr)                                                        ((uint8_t ) __ldrex(ptr))
 | 
			
		||||
#else
 | 
			
		||||
  #define __LDREXB(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr))  _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDR Exclusive (16 bit)
 | 
			
		||||
  \details Executes a exclusive LDR instruction for 16 bit values.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return        value of type uint16_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __LDREXH(ptr)                                                        ((uint16_t) __ldrex(ptr))
 | 
			
		||||
#else
 | 
			
		||||
  #define __LDREXH(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr))  _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDR Exclusive (32 bit)
 | 
			
		||||
  \details Executes a exclusive LDR instruction for 32 bit values.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return        value of type uint32_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __LDREXW(ptr)                                                        ((uint32_t ) __ldrex(ptr))
 | 
			
		||||
#else
 | 
			
		||||
  #define __LDREXW(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr))  _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STR Exclusive (8 bit)
 | 
			
		||||
  \details Executes a exclusive STR instruction for 8 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
  \return          0  Function succeeded
 | 
			
		||||
  \return          1  Function failed
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __STREXB(value, ptr)                                                 __strex(value, ptr)
 | 
			
		||||
#else
 | 
			
		||||
  #define __STREXB(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STR Exclusive (16 bit)
 | 
			
		||||
  \details Executes a exclusive STR instruction for 16 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
  \return          0  Function succeeded
 | 
			
		||||
  \return          1  Function failed
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __STREXH(value, ptr)                                                 __strex(value, ptr)
 | 
			
		||||
#else
 | 
			
		||||
  #define __STREXH(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STR Exclusive (32 bit)
 | 
			
		||||
  \details Executes a exclusive STR instruction for 32 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
  \return          0  Function succeeded
 | 
			
		||||
  \return          1  Function failed
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __STREXW(value, ptr)                                                 __strex(value, ptr)
 | 
			
		||||
#else
 | 
			
		||||
  #define __STREXW(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Remove the exclusive lock
 | 
			
		||||
  \details Removes the exclusive lock which is created by LDREX.
 | 
			
		||||
 */
 | 
			
		||||
#define __CLREX                           __clrex
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Signed Saturate
 | 
			
		||||
  \details Saturates a signed value.
 | 
			
		||||
  \param [in]  value  Value to be saturated
 | 
			
		||||
  \param [in]    sat  Bit position to saturate to (1..32)
 | 
			
		||||
  \return             Saturated value
 | 
			
		||||
 */
 | 
			
		||||
#define __SSAT                            __ssat
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Unsigned Saturate
 | 
			
		||||
  \details Saturates an unsigned value.
 | 
			
		||||
  \param [in]  value  Value to be saturated
 | 
			
		||||
  \param [in]    sat  Bit position to saturate to (0..31)
 | 
			
		||||
  \return             Saturated value
 | 
			
		||||
 */
 | 
			
		||||
#define __USAT                            __usat
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Rotate Right with Extend (32 bit)
 | 
			
		||||
  \details Moves each bit of a bitstring right by one bit.
 | 
			
		||||
           The carry input is shifted in at the left end of the bitstring.
 | 
			
		||||
  \param [in]    value  Value to rotate
 | 
			
		||||
  \return               Rotated value
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __NO_EMBEDDED_ASM
 | 
			
		||||
__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value)
 | 
			
		||||
{
 | 
			
		||||
  rrx r0, r0
 | 
			
		||||
  bx lr
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDRT Unprivileged (8 bit)
 | 
			
		||||
  \details Executes a Unprivileged LDRT instruction for 8 bit value.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return             value of type uint8_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#define __LDRBT(ptr)                      ((uint8_t )  __ldrt(ptr))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDRT Unprivileged (16 bit)
 | 
			
		||||
  \details Executes a Unprivileged LDRT instruction for 16 bit values.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return        value of type uint16_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#define __LDRHT(ptr)                      ((uint16_t)  __ldrt(ptr))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDRT Unprivileged (32 bit)
 | 
			
		||||
  \details Executes a Unprivileged LDRT instruction for 32 bit values.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return        value of type uint32_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#define __LDRT(ptr)                       ((uint32_t ) __ldrt(ptr))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STRT Unprivileged (8 bit)
 | 
			
		||||
  \details Executes a Unprivileged STRT instruction for 8 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
 */
 | 
			
		||||
#define __STRBT(value, ptr)               __strt(value, ptr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STRT Unprivileged (16 bit)
 | 
			
		||||
  \details Executes a Unprivileged STRT instruction for 16 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
 */
 | 
			
		||||
#define __STRHT(value, ptr)               __strt(value, ptr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STRT Unprivileged (32 bit)
 | 
			
		||||
  \details Executes a Unprivileged STRT instruction for 32 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
 */
 | 
			
		||||
#define __STRT(value, ptr)                __strt(value, ptr)
 | 
			
		||||
 | 
			
		||||
#else  /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Signed Saturate
 | 
			
		||||
  \details Saturates a signed value.
 | 
			
		||||
  \param [in]  value  Value to be saturated
 | 
			
		||||
  \param [in]    sat  Bit position to saturate to (1..32)
 | 
			
		||||
  \return             Saturated value
 | 
			
		||||
 */
 | 
			
		||||
__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat)
 | 
			
		||||
{
 | 
			
		||||
  if ((sat >= 1U) && (sat <= 32U))
 | 
			
		||||
  {
 | 
			
		||||
    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);
 | 
			
		||||
    const int32_t min = -1 - max ;
 | 
			
		||||
    if (val > max)
 | 
			
		||||
    {
 | 
			
		||||
      return max;
 | 
			
		||||
    }
 | 
			
		||||
    else if (val < min)
 | 
			
		||||
    {
 | 
			
		||||
      return min;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Unsigned Saturate
 | 
			
		||||
  \details Saturates an unsigned value.
 | 
			
		||||
  \param [in]  value  Value to be saturated
 | 
			
		||||
  \param [in]    sat  Bit position to saturate to (0..31)
 | 
			
		||||
  \return             Saturated value
 | 
			
		||||
 */
 | 
			
		||||
__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat)
 | 
			
		||||
{
 | 
			
		||||
  if (sat <= 31U)
 | 
			
		||||
  {
 | 
			
		||||
    const uint32_t max = ((1U << sat) - 1U);
 | 
			
		||||
    if (val > (int32_t)max)
 | 
			
		||||
    {
 | 
			
		||||
      return max;
 | 
			
		||||
    }
 | 
			
		||||
    else if (val < 0)
 | 
			
		||||
    {
 | 
			
		||||
      return 0U;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return (uint32_t)val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */
 | 
			
		||||
 | 
			
		||||
/*@}*/ /* end of group CMSIS_Core_InstructionInterface */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ###################  Compiler specific Intrinsics  ########################### */
 | 
			
		||||
/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics
 | 
			
		||||
  Access to dedicated SIMD instructions
 | 
			
		||||
  @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
 | 
			
		||||
#define __SADD8                           __sadd8
 | 
			
		||||
#define __QADD8                           __qadd8
 | 
			
		||||
#define __SHADD8                          __shadd8
 | 
			
		||||
#define __UADD8                           __uadd8
 | 
			
		||||
#define __UQADD8                          __uqadd8
 | 
			
		||||
#define __UHADD8                          __uhadd8
 | 
			
		||||
#define __SSUB8                           __ssub8
 | 
			
		||||
#define __QSUB8                           __qsub8
 | 
			
		||||
#define __SHSUB8                          __shsub8
 | 
			
		||||
#define __USUB8                           __usub8
 | 
			
		||||
#define __UQSUB8                          __uqsub8
 | 
			
		||||
#define __UHSUB8                          __uhsub8
 | 
			
		||||
#define __SADD16                          __sadd16
 | 
			
		||||
#define __QADD16                          __qadd16
 | 
			
		||||
#define __SHADD16                         __shadd16
 | 
			
		||||
#define __UADD16                          __uadd16
 | 
			
		||||
#define __UQADD16                         __uqadd16
 | 
			
		||||
#define __UHADD16                         __uhadd16
 | 
			
		||||
#define __SSUB16                          __ssub16
 | 
			
		||||
#define __QSUB16                          __qsub16
 | 
			
		||||
#define __SHSUB16                         __shsub16
 | 
			
		||||
#define __USUB16                          __usub16
 | 
			
		||||
#define __UQSUB16                         __uqsub16
 | 
			
		||||
#define __UHSUB16                         __uhsub16
 | 
			
		||||
#define __SASX                            __sasx
 | 
			
		||||
#define __QASX                            __qasx
 | 
			
		||||
#define __SHASX                           __shasx
 | 
			
		||||
#define __UASX                            __uasx
 | 
			
		||||
#define __UQASX                           __uqasx
 | 
			
		||||
#define __UHASX                           __uhasx
 | 
			
		||||
#define __SSAX                            __ssax
 | 
			
		||||
#define __QSAX                            __qsax
 | 
			
		||||
#define __SHSAX                           __shsax
 | 
			
		||||
#define __USAX                            __usax
 | 
			
		||||
#define __UQSAX                           __uqsax
 | 
			
		||||
#define __UHSAX                           __uhsax
 | 
			
		||||
#define __USAD8                           __usad8
 | 
			
		||||
#define __USADA8                          __usada8
 | 
			
		||||
#define __SSAT16                          __ssat16
 | 
			
		||||
#define __USAT16                          __usat16
 | 
			
		||||
#define __UXTB16                          __uxtb16
 | 
			
		||||
#define __UXTAB16                         __uxtab16
 | 
			
		||||
#define __SXTB16                          __sxtb16
 | 
			
		||||
#define __SXTAB16                         __sxtab16
 | 
			
		||||
#define __SMUAD                           __smuad
 | 
			
		||||
#define __SMUADX                          __smuadx
 | 
			
		||||
#define __SMLAD                           __smlad
 | 
			
		||||
#define __SMLADX                          __smladx
 | 
			
		||||
#define __SMLALD                          __smlald
 | 
			
		||||
#define __SMLALDX                         __smlaldx
 | 
			
		||||
#define __SMUSD                           __smusd
 | 
			
		||||
#define __SMUSDX                          __smusdx
 | 
			
		||||
#define __SMLSD                           __smlsd
 | 
			
		||||
#define __SMLSDX                          __smlsdx
 | 
			
		||||
#define __SMLSLD                          __smlsld
 | 
			
		||||
#define __SMLSLDX                         __smlsldx
 | 
			
		||||
#define __SEL                             __sel
 | 
			
		||||
#define __QADD                            __qadd
 | 
			
		||||
#define __QSUB                            __qsub
 | 
			
		||||
 | 
			
		||||
#define __PKHBT(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0x0000FFFFUL) |  \
 | 
			
		||||
                                           ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL)  )
 | 
			
		||||
 | 
			
		||||
#define __PKHTB(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0xFFFF0000UL) |  \
 | 
			
		||||
                                           ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL)  )
 | 
			
		||||
 | 
			
		||||
#define __SMMLA(ARG1,ARG2,ARG3)          ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \
 | 
			
		||||
                                                      ((int64_t)(ARG3) << 32U)     ) >> 32U))
 | 
			
		||||
 | 
			
		||||
#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */
 | 
			
		||||
/*@} end of group CMSIS_SIMD_intrinsics */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_ARMCC_H */
 | 
			
		||||
							
								
								
									
										1444
									
								
								exp6/Drivers/CMSIS/Include/cmsis_armclang.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1444
									
								
								exp6/Drivers/CMSIS/Include/cmsis_armclang.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1891
									
								
								exp6/Drivers/CMSIS/Include/cmsis_armclang_ltm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1891
									
								
								exp6/Drivers/CMSIS/Include/cmsis_armclang_ltm.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										283
									
								
								exp6/Drivers/CMSIS/Include/cmsis_compiler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								exp6/Drivers/CMSIS/Include/cmsis_compiler.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,283 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     cmsis_compiler.h
 | 
			
		||||
 * @brief    CMSIS compiler generic header file
 | 
			
		||||
 * @version  V5.1.0
 | 
			
		||||
 * @date     09. October 2018
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_COMPILER_H
 | 
			
		||||
#define __CMSIS_COMPILER_H
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Arm Compiler 4/5
 | 
			
		||||
 */
 | 
			
		||||
#if   defined ( __CC_ARM )
 | 
			
		||||
  #include "cmsis_armcc.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Arm Compiler 6.6 LTM (armclang)
 | 
			
		||||
 */
 | 
			
		||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100)
 | 
			
		||||
  #include "cmsis_armclang_ltm.h"
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
 * Arm Compiler above 6.10.1 (armclang)
 | 
			
		||||
 */
 | 
			
		||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
 | 
			
		||||
  #include "cmsis_armclang.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * GNU Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __GNUC__ )
 | 
			
		||||
  #include "cmsis_gcc.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * IAR Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
  #include <cmsis_iccarm.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * TI Arm Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __TI_ARM__ )
 | 
			
		||||
  #include <cmsis_ccs.h>
 | 
			
		||||
 | 
			
		||||
  #ifndef   __ASM
 | 
			
		||||
    #define __ASM                                  __asm
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __INLINE
 | 
			
		||||
    #define __INLINE                               inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_INLINE
 | 
			
		||||
    #define __STATIC_INLINE                        static inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_FORCEINLINE
 | 
			
		||||
    #define __STATIC_FORCEINLINE                   __STATIC_INLINE
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __NO_RETURN
 | 
			
		||||
    #define __NO_RETURN                            __attribute__((noreturn))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __USED
 | 
			
		||||
    #define __USED                                 __attribute__((used))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __WEAK
 | 
			
		||||
    #define __WEAK                                 __attribute__((weak))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED
 | 
			
		||||
    #define __PACKED                               __attribute__((packed))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_STRUCT
 | 
			
		||||
    #define __PACKED_STRUCT                        struct __attribute__((packed))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_UNION
 | 
			
		||||
    #define __PACKED_UNION                         union __attribute__((packed))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32        /* deprecated */
 | 
			
		||||
    struct __attribute__((packed)) T_UINT32 { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __ALIGNED
 | 
			
		||||
    #define __ALIGNED(x)                           __attribute__((aligned(x)))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __RESTRICT
 | 
			
		||||
    #define __RESTRICT                             __restrict
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __COMPILER_BARRIER
 | 
			
		||||
    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
			
		||||
    #define __COMPILER_BARRIER()                   (void)0
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * TASKING Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __TASKING__ )
 | 
			
		||||
  /*
 | 
			
		||||
   * The CMSIS functions have been implemented as intrinsics in the compiler.
 | 
			
		||||
   * Please use "carm -?i" to get an up to date list of all intrinsics,
 | 
			
		||||
   * Including the CMSIS ones.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  #ifndef   __ASM
 | 
			
		||||
    #define __ASM                                  __asm
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __INLINE
 | 
			
		||||
    #define __INLINE                               inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_INLINE
 | 
			
		||||
    #define __STATIC_INLINE                        static inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_FORCEINLINE
 | 
			
		||||
    #define __STATIC_FORCEINLINE                   __STATIC_INLINE
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __NO_RETURN
 | 
			
		||||
    #define __NO_RETURN                            __attribute__((noreturn))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __USED
 | 
			
		||||
    #define __USED                                 __attribute__((used))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __WEAK
 | 
			
		||||
    #define __WEAK                                 __attribute__((weak))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED
 | 
			
		||||
    #define __PACKED                               __packed__
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_STRUCT
 | 
			
		||||
    #define __PACKED_STRUCT                        struct __packed__
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_UNION
 | 
			
		||||
    #define __PACKED_UNION                         union __packed__
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32        /* deprecated */
 | 
			
		||||
    struct __packed__ T_UINT32 { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __ALIGNED
 | 
			
		||||
    #define __ALIGNED(x)              __align(x)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __RESTRICT
 | 
			
		||||
    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
 | 
			
		||||
    #define __RESTRICT
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __COMPILER_BARRIER
 | 
			
		||||
    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
			
		||||
    #define __COMPILER_BARRIER()                   (void)0
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * COSMIC Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __CSMC__ )
 | 
			
		||||
   #include <cmsis_csm.h>
 | 
			
		||||
 | 
			
		||||
 #ifndef   __ASM
 | 
			
		||||
    #define __ASM                                  _asm
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __INLINE
 | 
			
		||||
    #define __INLINE                               inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_INLINE
 | 
			
		||||
    #define __STATIC_INLINE                        static inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_FORCEINLINE
 | 
			
		||||
    #define __STATIC_FORCEINLINE                   __STATIC_INLINE
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __NO_RETURN
 | 
			
		||||
    // NO RETURN is automatically detected hence no warning here
 | 
			
		||||
    #define __NO_RETURN
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __USED
 | 
			
		||||
    #warning No compiler specific solution for __USED. __USED is ignored.
 | 
			
		||||
    #define __USED
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __WEAK
 | 
			
		||||
    #define __WEAK                                 __weak
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED
 | 
			
		||||
    #define __PACKED                               @packed
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_STRUCT
 | 
			
		||||
    #define __PACKED_STRUCT                        @packed struct
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_UNION
 | 
			
		||||
    #define __PACKED_UNION                         @packed union
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32        /* deprecated */
 | 
			
		||||
    @packed struct T_UINT32 { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __ALIGNED
 | 
			
		||||
    #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
 | 
			
		||||
    #define __ALIGNED(x)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __RESTRICT
 | 
			
		||||
    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
 | 
			
		||||
    #define __RESTRICT
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __COMPILER_BARRIER
 | 
			
		||||
    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
			
		||||
    #define __COMPILER_BARRIER()                   (void)0
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
  #error Unknown compiler.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_COMPILER_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2168
									
								
								exp6/Drivers/CMSIS/Include/cmsis_gcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2168
									
								
								exp6/Drivers/CMSIS/Include/cmsis_gcc.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										964
									
								
								exp6/Drivers/CMSIS/Include/cmsis_iccarm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										964
									
								
								exp6/Drivers/CMSIS/Include/cmsis_iccarm.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,964 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     cmsis_iccarm.h
 | 
			
		||||
 * @brief    CMSIS compiler ICCARM (IAR Compiler for Arm) header file
 | 
			
		||||
 * @version  V5.1.0
 | 
			
		||||
 * @date     08. May 2019
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2017-2019 IAR Systems
 | 
			
		||||
// Copyright (c) 2017-2019 Arm Limited. All rights reserved. 
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License")
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
//
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_ICCARM_H__
 | 
			
		||||
#define __CMSIS_ICCARM_H__
 | 
			
		||||
 | 
			
		||||
#ifndef __ICCARM__
 | 
			
		||||
  #error This file should only be compiled by ICCARM
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#pragma system_include
 | 
			
		||||
 | 
			
		||||
#define __IAR_FT _Pragma("inline=forced") __intrinsic
 | 
			
		||||
 | 
			
		||||
#if (__VER__ >= 8000000)
 | 
			
		||||
  #define __ICCARM_V8 1
 | 
			
		||||
#else
 | 
			
		||||
  #define __ICCARM_V8 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ALIGNED
 | 
			
		||||
  #if __ICCARM_V8
 | 
			
		||||
    #define __ALIGNED(x) __attribute__((aligned(x)))
 | 
			
		||||
  #elif (__VER__ >= 7080000)
 | 
			
		||||
    /* Needs IAR language extensions */
 | 
			
		||||
    #define __ALIGNED(x) __attribute__((aligned(x)))
 | 
			
		||||
  #else
 | 
			
		||||
    #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored.
 | 
			
		||||
    #define __ALIGNED(x)
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Define compiler macros for CPU architecture, used in CMSIS 5.
 | 
			
		||||
 */
 | 
			
		||||
#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__
 | 
			
		||||
/* Macros already defined */
 | 
			
		||||
#else
 | 
			
		||||
  #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__)
 | 
			
		||||
    #define __ARM_ARCH_8M_MAIN__ 1
 | 
			
		||||
  #elif defined(__ARM8M_BASELINE__)
 | 
			
		||||
    #define __ARM_ARCH_8M_BASE__ 1
 | 
			
		||||
  #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M'
 | 
			
		||||
    #if __ARM_ARCH == 6
 | 
			
		||||
      #define __ARM_ARCH_6M__ 1
 | 
			
		||||
    #elif __ARM_ARCH == 7
 | 
			
		||||
      #if __ARM_FEATURE_DSP
 | 
			
		||||
        #define __ARM_ARCH_7EM__ 1
 | 
			
		||||
      #else
 | 
			
		||||
        #define __ARM_ARCH_7M__ 1
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif /* __ARM_ARCH */
 | 
			
		||||
  #endif /* __ARM_ARCH_PROFILE == 'M' */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Alternativ core deduction for older ICCARM's */
 | 
			
		||||
#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \
 | 
			
		||||
    !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__)
 | 
			
		||||
  #if defined(__ARM6M__) && (__CORE__ == __ARM6M__)
 | 
			
		||||
    #define __ARM_ARCH_6M__ 1
 | 
			
		||||
  #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__)
 | 
			
		||||
    #define __ARM_ARCH_7M__ 1
 | 
			
		||||
  #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__)
 | 
			
		||||
    #define __ARM_ARCH_7EM__  1
 | 
			
		||||
  #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__)
 | 
			
		||||
    #define __ARM_ARCH_8M_BASE__ 1
 | 
			
		||||
  #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__)
 | 
			
		||||
    #define __ARM_ARCH_8M_MAIN__ 1
 | 
			
		||||
  #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__)
 | 
			
		||||
    #define __ARM_ARCH_8M_MAIN__ 1
 | 
			
		||||
  #else
 | 
			
		||||
    #error "Unknown target."
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1
 | 
			
		||||
  #define __IAR_M0_FAMILY  1
 | 
			
		||||
#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1
 | 
			
		||||
  #define __IAR_M0_FAMILY  1
 | 
			
		||||
#else
 | 
			
		||||
  #define __IAR_M0_FAMILY  0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __ASM
 | 
			
		||||
  #define __ASM __asm
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __COMPILER_BARRIER
 | 
			
		||||
  #define __COMPILER_BARRIER() __ASM volatile("":::"memory")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __INLINE
 | 
			
		||||
  #define __INLINE inline
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __NO_RETURN
 | 
			
		||||
  #if __ICCARM_V8
 | 
			
		||||
    #define __NO_RETURN __attribute__((__noreturn__))
 | 
			
		||||
  #else
 | 
			
		||||
    #define __NO_RETURN _Pragma("object_attribute=__noreturn")
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __PACKED
 | 
			
		||||
  #if __ICCARM_V8
 | 
			
		||||
    #define __PACKED __attribute__((packed, aligned(1)))
 | 
			
		||||
  #else
 | 
			
		||||
    /* Needs IAR language extensions */
 | 
			
		||||
    #define __PACKED __packed
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __PACKED_STRUCT
 | 
			
		||||
  #if __ICCARM_V8
 | 
			
		||||
    #define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))
 | 
			
		||||
  #else
 | 
			
		||||
    /* Needs IAR language extensions */
 | 
			
		||||
    #define __PACKED_STRUCT __packed struct
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __PACKED_UNION
 | 
			
		||||
  #if __ICCARM_V8
 | 
			
		||||
    #define __PACKED_UNION union __attribute__((packed, aligned(1)))
 | 
			
		||||
  #else
 | 
			
		||||
    /* Needs IAR language extensions */
 | 
			
		||||
    #define __PACKED_UNION __packed union
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __RESTRICT
 | 
			
		||||
  #if __ICCARM_V8
 | 
			
		||||
    #define __RESTRICT            __restrict
 | 
			
		||||
  #else
 | 
			
		||||
    /* Needs IAR language extensions */
 | 
			
		||||
    #define __RESTRICT            restrict
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __STATIC_INLINE
 | 
			
		||||
  #define __STATIC_INLINE       static inline
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __FORCEINLINE
 | 
			
		||||
  #define __FORCEINLINE         _Pragma("inline=forced")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __STATIC_FORCEINLINE
 | 
			
		||||
  #define __STATIC_FORCEINLINE  __FORCEINLINE __STATIC_INLINE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __UNALIGNED_UINT16_READ
 | 
			
		||||
#pragma language=save
 | 
			
		||||
#pragma language=extended
 | 
			
		||||
__IAR_FT uint16_t __iar_uint16_read(void const *ptr)
 | 
			
		||||
{
 | 
			
		||||
  return *(__packed uint16_t*)(ptr);
 | 
			
		||||
}
 | 
			
		||||
#pragma language=restore
 | 
			
		||||
#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __UNALIGNED_UINT16_WRITE
 | 
			
		||||
#pragma language=save
 | 
			
		||||
#pragma language=extended
 | 
			
		||||
__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val)
 | 
			
		||||
{
 | 
			
		||||
  *(__packed uint16_t*)(ptr) = val;;
 | 
			
		||||
}
 | 
			
		||||
#pragma language=restore
 | 
			
		||||
#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __UNALIGNED_UINT32_READ
 | 
			
		||||
#pragma language=save
 | 
			
		||||
#pragma language=extended
 | 
			
		||||
__IAR_FT uint32_t __iar_uint32_read(void const *ptr)
 | 
			
		||||
{
 | 
			
		||||
  return *(__packed uint32_t*)(ptr);
 | 
			
		||||
}
 | 
			
		||||
#pragma language=restore
 | 
			
		||||
#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __UNALIGNED_UINT32_WRITE
 | 
			
		||||
#pragma language=save
 | 
			
		||||
#pragma language=extended
 | 
			
		||||
__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val)
 | 
			
		||||
{
 | 
			
		||||
  *(__packed uint32_t*)(ptr) = val;;
 | 
			
		||||
}
 | 
			
		||||
#pragma language=restore
 | 
			
		||||
#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __UNALIGNED_UINT32   /* deprecated */
 | 
			
		||||
#pragma language=save
 | 
			
		||||
#pragma language=extended
 | 
			
		||||
__packed struct  __iar_u32 { uint32_t v; };
 | 
			
		||||
#pragma language=restore
 | 
			
		||||
#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __USED
 | 
			
		||||
  #if __ICCARM_V8
 | 
			
		||||
    #define __USED __attribute__((used))
 | 
			
		||||
  #else
 | 
			
		||||
    #define __USED _Pragma("__root")
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef   __WEAK
 | 
			
		||||
  #if __ICCARM_V8
 | 
			
		||||
    #define __WEAK __attribute__((weak))
 | 
			
		||||
  #else
 | 
			
		||||
    #define __WEAK _Pragma("__weak")
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __PROGRAM_START
 | 
			
		||||
#define __PROGRAM_START           __iar_program_start
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __INITIAL_SP
 | 
			
		||||
#define __INITIAL_SP              CSTACK$$Limit
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __STACK_LIMIT
 | 
			
		||||
#define __STACK_LIMIT             CSTACK$$Base
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __VECTOR_TABLE
 | 
			
		||||
#define __VECTOR_TABLE            __vector_table
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __VECTOR_TABLE_ATTRIBUTE
 | 
			
		||||
#define __VECTOR_TABLE_ATTRIBUTE  @".intvec"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ICCARM_INTRINSICS_VERSION__
 | 
			
		||||
  #define __ICCARM_INTRINSICS_VERSION__  0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if __ICCARM_INTRINSICS_VERSION__ == 2
 | 
			
		||||
 | 
			
		||||
  #if defined(__CLZ)
 | 
			
		||||
    #undef __CLZ
 | 
			
		||||
  #endif
 | 
			
		||||
  #if defined(__REVSH)
 | 
			
		||||
    #undef __REVSH
 | 
			
		||||
  #endif
 | 
			
		||||
  #if defined(__RBIT)
 | 
			
		||||
    #undef __RBIT
 | 
			
		||||
  #endif
 | 
			
		||||
  #if defined(__SSAT)
 | 
			
		||||
    #undef __SSAT
 | 
			
		||||
  #endif
 | 
			
		||||
  #if defined(__USAT)
 | 
			
		||||
    #undef __USAT
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #include "iccarm_builtin.h"
 | 
			
		||||
 | 
			
		||||
  #define __disable_fault_irq __iar_builtin_disable_fiq
 | 
			
		||||
  #define __disable_irq       __iar_builtin_disable_interrupt
 | 
			
		||||
  #define __enable_fault_irq  __iar_builtin_enable_fiq
 | 
			
		||||
  #define __enable_irq        __iar_builtin_enable_interrupt
 | 
			
		||||
  #define __arm_rsr           __iar_builtin_rsr
 | 
			
		||||
  #define __arm_wsr           __iar_builtin_wsr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  #define __get_APSR()                (__arm_rsr("APSR"))
 | 
			
		||||
  #define __get_BASEPRI()             (__arm_rsr("BASEPRI"))
 | 
			
		||||
  #define __get_CONTROL()             (__arm_rsr("CONTROL"))
 | 
			
		||||
  #define __get_FAULTMASK()           (__arm_rsr("FAULTMASK"))
 | 
			
		||||
 | 
			
		||||
  #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
 | 
			
		||||
       (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )
 | 
			
		||||
    #define __get_FPSCR()             (__arm_rsr("FPSCR"))
 | 
			
		||||
    #define __set_FPSCR(VALUE)        (__arm_wsr("FPSCR", (VALUE)))
 | 
			
		||||
  #else
 | 
			
		||||
    #define __get_FPSCR()             ( 0 )
 | 
			
		||||
    #define __set_FPSCR(VALUE)        ((void)VALUE)
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #define __get_IPSR()                (__arm_rsr("IPSR"))
 | 
			
		||||
  #define __get_MSP()                 (__arm_rsr("MSP"))
 | 
			
		||||
  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
 | 
			
		||||
    // without main extensions, the non-secure MSPLIM is RAZ/WI
 | 
			
		||||
    #define __get_MSPLIM()            (0U)
 | 
			
		||||
  #else
 | 
			
		||||
    #define __get_MSPLIM()            (__arm_rsr("MSPLIM"))
 | 
			
		||||
  #endif
 | 
			
		||||
  #define __get_PRIMASK()             (__arm_rsr("PRIMASK"))
 | 
			
		||||
  #define __get_PSP()                 (__arm_rsr("PSP"))
 | 
			
		||||
 | 
			
		||||
  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
 | 
			
		||||
    // without main extensions, the non-secure PSPLIM is RAZ/WI
 | 
			
		||||
    #define __get_PSPLIM()            (0U)
 | 
			
		||||
  #else
 | 
			
		||||
    #define __get_PSPLIM()            (__arm_rsr("PSPLIM"))
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #define __get_xPSR()                (__arm_rsr("xPSR"))
 | 
			
		||||
 | 
			
		||||
  #define __set_BASEPRI(VALUE)        (__arm_wsr("BASEPRI", (VALUE)))
 | 
			
		||||
  #define __set_BASEPRI_MAX(VALUE)    (__arm_wsr("BASEPRI_MAX", (VALUE)))
 | 
			
		||||
  #define __set_CONTROL(VALUE)        (__arm_wsr("CONTROL", (VALUE)))
 | 
			
		||||
  #define __set_FAULTMASK(VALUE)      (__arm_wsr("FAULTMASK", (VALUE)))
 | 
			
		||||
  #define __set_MSP(VALUE)            (__arm_wsr("MSP", (VALUE)))
 | 
			
		||||
 | 
			
		||||
  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
 | 
			
		||||
    // without main extensions, the non-secure MSPLIM is RAZ/WI
 | 
			
		||||
    #define __set_MSPLIM(VALUE)       ((void)(VALUE))
 | 
			
		||||
  #else
 | 
			
		||||
    #define __set_MSPLIM(VALUE)       (__arm_wsr("MSPLIM", (VALUE)))
 | 
			
		||||
  #endif
 | 
			
		||||
  #define __set_PRIMASK(VALUE)        (__arm_wsr("PRIMASK", (VALUE)))
 | 
			
		||||
  #define __set_PSP(VALUE)            (__arm_wsr("PSP", (VALUE)))
 | 
			
		||||
  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
 | 
			
		||||
    // without main extensions, the non-secure PSPLIM is RAZ/WI
 | 
			
		||||
    #define __set_PSPLIM(VALUE)       ((void)(VALUE))
 | 
			
		||||
  #else
 | 
			
		||||
    #define __set_PSPLIM(VALUE)       (__arm_wsr("PSPLIM", (VALUE)))
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #define __TZ_get_CONTROL_NS()       (__arm_rsr("CONTROL_NS"))
 | 
			
		||||
  #define __TZ_set_CONTROL_NS(VALUE)  (__arm_wsr("CONTROL_NS", (VALUE)))
 | 
			
		||||
  #define __TZ_get_PSP_NS()           (__arm_rsr("PSP_NS"))
 | 
			
		||||
  #define __TZ_set_PSP_NS(VALUE)      (__arm_wsr("PSP_NS", (VALUE)))
 | 
			
		||||
  #define __TZ_get_MSP_NS()           (__arm_rsr("MSP_NS"))
 | 
			
		||||
  #define __TZ_set_MSP_NS(VALUE)      (__arm_wsr("MSP_NS", (VALUE)))
 | 
			
		||||
  #define __TZ_get_SP_NS()            (__arm_rsr("SP_NS"))
 | 
			
		||||
  #define __TZ_set_SP_NS(VALUE)       (__arm_wsr("SP_NS", (VALUE)))
 | 
			
		||||
  #define __TZ_get_PRIMASK_NS()       (__arm_rsr("PRIMASK_NS"))
 | 
			
		||||
  #define __TZ_set_PRIMASK_NS(VALUE)  (__arm_wsr("PRIMASK_NS", (VALUE)))
 | 
			
		||||
  #define __TZ_get_BASEPRI_NS()       (__arm_rsr("BASEPRI_NS"))
 | 
			
		||||
  #define __TZ_set_BASEPRI_NS(VALUE)  (__arm_wsr("BASEPRI_NS", (VALUE)))
 | 
			
		||||
  #define __TZ_get_FAULTMASK_NS()     (__arm_rsr("FAULTMASK_NS"))
 | 
			
		||||
  #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE)))
 | 
			
		||||
 | 
			
		||||
  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
 | 
			
		||||
    // without main extensions, the non-secure PSPLIM is RAZ/WI
 | 
			
		||||
    #define __TZ_get_PSPLIM_NS()      (0U)
 | 
			
		||||
    #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE))
 | 
			
		||||
  #else
 | 
			
		||||
    #define __TZ_get_PSPLIM_NS()      (__arm_rsr("PSPLIM_NS"))
 | 
			
		||||
    #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE)))
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #define __TZ_get_MSPLIM_NS()        (__arm_rsr("MSPLIM_NS"))
 | 
			
		||||
  #define __TZ_set_MSPLIM_NS(VALUE)   (__arm_wsr("MSPLIM_NS", (VALUE)))
 | 
			
		||||
 | 
			
		||||
  #define __NOP     __iar_builtin_no_operation
 | 
			
		||||
 | 
			
		||||
  #define __CLZ     __iar_builtin_CLZ
 | 
			
		||||
  #define __CLREX   __iar_builtin_CLREX
 | 
			
		||||
 | 
			
		||||
  #define __DMB     __iar_builtin_DMB
 | 
			
		||||
  #define __DSB     __iar_builtin_DSB
 | 
			
		||||
  #define __ISB     __iar_builtin_ISB
 | 
			
		||||
 | 
			
		||||
  #define __LDREXB  __iar_builtin_LDREXB
 | 
			
		||||
  #define __LDREXH  __iar_builtin_LDREXH
 | 
			
		||||
  #define __LDREXW  __iar_builtin_LDREX
 | 
			
		||||
 | 
			
		||||
  #define __RBIT    __iar_builtin_RBIT
 | 
			
		||||
  #define __REV     __iar_builtin_REV
 | 
			
		||||
  #define __REV16   __iar_builtin_REV16
 | 
			
		||||
 | 
			
		||||
  __IAR_FT int16_t __REVSH(int16_t val)
 | 
			
		||||
  {
 | 
			
		||||
    return (int16_t) __iar_builtin_REVSH(val);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #define __ROR     __iar_builtin_ROR
 | 
			
		||||
  #define __RRX     __iar_builtin_RRX
 | 
			
		||||
 | 
			
		||||
  #define __SEV     __iar_builtin_SEV
 | 
			
		||||
 | 
			
		||||
  #if !__IAR_M0_FAMILY
 | 
			
		||||
    #define __SSAT    __iar_builtin_SSAT
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #define __STREXB  __iar_builtin_STREXB
 | 
			
		||||
  #define __STREXH  __iar_builtin_STREXH
 | 
			
		||||
  #define __STREXW  __iar_builtin_STREX
 | 
			
		||||
 | 
			
		||||
  #if !__IAR_M0_FAMILY
 | 
			
		||||
    #define __USAT    __iar_builtin_USAT
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #define __WFE     __iar_builtin_WFE
 | 
			
		||||
  #define __WFI     __iar_builtin_WFI
 | 
			
		||||
 | 
			
		||||
  #if __ARM_MEDIA__
 | 
			
		||||
    #define __SADD8   __iar_builtin_SADD8
 | 
			
		||||
    #define __QADD8   __iar_builtin_QADD8
 | 
			
		||||
    #define __SHADD8  __iar_builtin_SHADD8
 | 
			
		||||
    #define __UADD8   __iar_builtin_UADD8
 | 
			
		||||
    #define __UQADD8  __iar_builtin_UQADD8
 | 
			
		||||
    #define __UHADD8  __iar_builtin_UHADD8
 | 
			
		||||
    #define __SSUB8   __iar_builtin_SSUB8
 | 
			
		||||
    #define __QSUB8   __iar_builtin_QSUB8
 | 
			
		||||
    #define __SHSUB8  __iar_builtin_SHSUB8
 | 
			
		||||
    #define __USUB8   __iar_builtin_USUB8
 | 
			
		||||
    #define __UQSUB8  __iar_builtin_UQSUB8
 | 
			
		||||
    #define __UHSUB8  __iar_builtin_UHSUB8
 | 
			
		||||
    #define __SADD16  __iar_builtin_SADD16
 | 
			
		||||
    #define __QADD16  __iar_builtin_QADD16
 | 
			
		||||
    #define __SHADD16 __iar_builtin_SHADD16
 | 
			
		||||
    #define __UADD16  __iar_builtin_UADD16
 | 
			
		||||
    #define __UQADD16 __iar_builtin_UQADD16
 | 
			
		||||
    #define __UHADD16 __iar_builtin_UHADD16
 | 
			
		||||
    #define __SSUB16  __iar_builtin_SSUB16
 | 
			
		||||
    #define __QSUB16  __iar_builtin_QSUB16
 | 
			
		||||
    #define __SHSUB16 __iar_builtin_SHSUB16
 | 
			
		||||
    #define __USUB16  __iar_builtin_USUB16
 | 
			
		||||
    #define __UQSUB16 __iar_builtin_UQSUB16
 | 
			
		||||
    #define __UHSUB16 __iar_builtin_UHSUB16
 | 
			
		||||
    #define __SASX    __iar_builtin_SASX
 | 
			
		||||
    #define __QASX    __iar_builtin_QASX
 | 
			
		||||
    #define __SHASX   __iar_builtin_SHASX
 | 
			
		||||
    #define __UASX    __iar_builtin_UASX
 | 
			
		||||
    #define __UQASX   __iar_builtin_UQASX
 | 
			
		||||
    #define __UHASX   __iar_builtin_UHASX
 | 
			
		||||
    #define __SSAX    __iar_builtin_SSAX
 | 
			
		||||
    #define __QSAX    __iar_builtin_QSAX
 | 
			
		||||
    #define __SHSAX   __iar_builtin_SHSAX
 | 
			
		||||
    #define __USAX    __iar_builtin_USAX
 | 
			
		||||
    #define __UQSAX   __iar_builtin_UQSAX
 | 
			
		||||
    #define __UHSAX   __iar_builtin_UHSAX
 | 
			
		||||
    #define __USAD8   __iar_builtin_USAD8
 | 
			
		||||
    #define __USADA8  __iar_builtin_USADA8
 | 
			
		||||
    #define __SSAT16  __iar_builtin_SSAT16
 | 
			
		||||
    #define __USAT16  __iar_builtin_USAT16
 | 
			
		||||
    #define __UXTB16  __iar_builtin_UXTB16
 | 
			
		||||
    #define __UXTAB16 __iar_builtin_UXTAB16
 | 
			
		||||
    #define __SXTB16  __iar_builtin_SXTB16
 | 
			
		||||
    #define __SXTAB16 __iar_builtin_SXTAB16
 | 
			
		||||
    #define __SMUAD   __iar_builtin_SMUAD
 | 
			
		||||
    #define __SMUADX  __iar_builtin_SMUADX
 | 
			
		||||
    #define __SMMLA   __iar_builtin_SMMLA
 | 
			
		||||
    #define __SMLAD   __iar_builtin_SMLAD
 | 
			
		||||
    #define __SMLADX  __iar_builtin_SMLADX
 | 
			
		||||
    #define __SMLALD  __iar_builtin_SMLALD
 | 
			
		||||
    #define __SMLALDX __iar_builtin_SMLALDX
 | 
			
		||||
    #define __SMUSD   __iar_builtin_SMUSD
 | 
			
		||||
    #define __SMUSDX  __iar_builtin_SMUSDX
 | 
			
		||||
    #define __SMLSD   __iar_builtin_SMLSD
 | 
			
		||||
    #define __SMLSDX  __iar_builtin_SMLSDX
 | 
			
		||||
    #define __SMLSLD  __iar_builtin_SMLSLD
 | 
			
		||||
    #define __SMLSLDX __iar_builtin_SMLSLDX
 | 
			
		||||
    #define __SEL     __iar_builtin_SEL
 | 
			
		||||
    #define __QADD    __iar_builtin_QADD
 | 
			
		||||
    #define __QSUB    __iar_builtin_QSUB
 | 
			
		||||
    #define __PKHBT   __iar_builtin_PKHBT
 | 
			
		||||
    #define __PKHTB   __iar_builtin_PKHTB
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */
 | 
			
		||||
 | 
			
		||||
  #if __IAR_M0_FAMILY
 | 
			
		||||
   /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */
 | 
			
		||||
    #define __CLZ  __cmsis_iar_clz_not_active
 | 
			
		||||
    #define __SSAT __cmsis_iar_ssat_not_active
 | 
			
		||||
    #define __USAT __cmsis_iar_usat_not_active
 | 
			
		||||
    #define __RBIT __cmsis_iar_rbit_not_active
 | 
			
		||||
    #define __get_APSR  __cmsis_iar_get_APSR_not_active
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
 | 
			
		||||
         (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     ))
 | 
			
		||||
    #define __get_FPSCR __cmsis_iar_get_FPSR_not_active
 | 
			
		||||
    #define __set_FPSCR __cmsis_iar_set_FPSR_not_active
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifdef __INTRINSICS_INCLUDED
 | 
			
		||||
  #error intrinsics.h is already included previously!
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #include <intrinsics.h>
 | 
			
		||||
 | 
			
		||||
  #if __IAR_M0_FAMILY
 | 
			
		||||
   /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */
 | 
			
		||||
    #undef __CLZ
 | 
			
		||||
    #undef __SSAT
 | 
			
		||||
    #undef __USAT
 | 
			
		||||
    #undef __RBIT
 | 
			
		||||
    #undef __get_APSR
 | 
			
		||||
 | 
			
		||||
    __STATIC_INLINE uint8_t __CLZ(uint32_t data)
 | 
			
		||||
    {
 | 
			
		||||
      if (data == 0U) { return 32U; }
 | 
			
		||||
 | 
			
		||||
      uint32_t count = 0U;
 | 
			
		||||
      uint32_t mask = 0x80000000U;
 | 
			
		||||
 | 
			
		||||
      while ((data & mask) == 0U)
 | 
			
		||||
      {
 | 
			
		||||
        count += 1U;
 | 
			
		||||
        mask = mask >> 1U;
 | 
			
		||||
      }
 | 
			
		||||
      return count;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __STATIC_INLINE uint32_t __RBIT(uint32_t v)
 | 
			
		||||
    {
 | 
			
		||||
      uint8_t sc = 31U;
 | 
			
		||||
      uint32_t r = v;
 | 
			
		||||
      for (v >>= 1U; v; v >>= 1U)
 | 
			
		||||
      {
 | 
			
		||||
        r <<= 1U;
 | 
			
		||||
        r |= v & 1U;
 | 
			
		||||
        sc--;
 | 
			
		||||
      }
 | 
			
		||||
      return (r << sc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __STATIC_INLINE  uint32_t __get_APSR(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm("MRS      %0,APSR" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
 | 
			
		||||
         (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     ))
 | 
			
		||||
    #undef __get_FPSCR
 | 
			
		||||
    #undef __set_FPSCR
 | 
			
		||||
    #define __get_FPSCR()       (0)
 | 
			
		||||
    #define __set_FPSCR(VALUE)  ((void)VALUE)
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #pragma diag_suppress=Pe940
 | 
			
		||||
  #pragma diag_suppress=Pe177
 | 
			
		||||
 | 
			
		||||
  #define __enable_irq    __enable_interrupt
 | 
			
		||||
  #define __disable_irq   __disable_interrupt
 | 
			
		||||
  #define __NOP           __no_operation
 | 
			
		||||
 | 
			
		||||
  #define __get_xPSR      __get_PSR
 | 
			
		||||
 | 
			
		||||
  #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0)
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr)
 | 
			
		||||
    {
 | 
			
		||||
      return __LDREX((unsigned long *)ptr);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr)
 | 
			
		||||
    {
 | 
			
		||||
      return __STREX(value, (unsigned long *)ptr);
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */
 | 
			
		||||
  #if (__CORTEX_M >= 0x03)
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t __RRX(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t result;
 | 
			
		||||
      __ASM("RRX      %0, %1" : "=r"(result) : "r" (value) : "cc");
 | 
			
		||||
      return(result);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void __set_BASEPRI_MAX(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      BASEPRI_MAX,%0"::"r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    #define __enable_fault_irq  __enable_fiq
 | 
			
		||||
    #define __disable_fault_irq __disable_fiq
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  #endif /* (__CORTEX_M >= 0x03) */
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2)
 | 
			
		||||
  {
 | 
			
		||||
    return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
 | 
			
		||||
       (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )
 | 
			
		||||
 | 
			
		||||
   __IAR_FT uint32_t __get_MSPLIM(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))
 | 
			
		||||
      // without main extensions, the non-secure MSPLIM is RAZ/WI
 | 
			
		||||
      res = 0U;
 | 
			
		||||
    #else
 | 
			
		||||
      __asm volatile("MRS      %0,MSPLIM" : "=r" (res));
 | 
			
		||||
    #endif
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __set_MSPLIM(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))
 | 
			
		||||
      // without main extensions, the non-secure MSPLIM is RAZ/WI
 | 
			
		||||
      (void)value;
 | 
			
		||||
    #else
 | 
			
		||||
      __asm volatile("MSR      MSPLIM,%0" :: "r" (value));
 | 
			
		||||
    #endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t __get_PSPLIM(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))
 | 
			
		||||
      // without main extensions, the non-secure PSPLIM is RAZ/WI
 | 
			
		||||
      res = 0U;
 | 
			
		||||
    #else
 | 
			
		||||
      __asm volatile("MRS      %0,PSPLIM" : "=r" (res));
 | 
			
		||||
    #endif
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __set_PSPLIM(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))
 | 
			
		||||
      // without main extensions, the non-secure PSPLIM is RAZ/WI
 | 
			
		||||
      (void)value;
 | 
			
		||||
    #else
 | 
			
		||||
      __asm volatile("MSR      PSPLIM,%0" :: "r" (value));
 | 
			
		||||
    #endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t __TZ_get_CONTROL_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm volatile("MRS      %0,CONTROL_NS" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __TZ_set_CONTROL_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      CONTROL_NS,%0" :: "r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t   __TZ_get_PSP_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm volatile("MRS      %0,PSP_NS" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __TZ_set_PSP_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      PSP_NS,%0" :: "r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t   __TZ_get_MSP_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm volatile("MRS      %0,MSP_NS" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __TZ_set_MSP_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      MSP_NS,%0" :: "r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t   __TZ_get_SP_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm volatile("MRS      %0,SP_NS" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
    __IAR_FT void   __TZ_set_SP_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      SP_NS,%0" :: "r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t   __TZ_get_PRIMASK_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm volatile("MRS      %0,PRIMASK_NS" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __TZ_set_PRIMASK_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      PRIMASK_NS,%0" :: "r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t   __TZ_get_BASEPRI_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm volatile("MRS      %0,BASEPRI_NS" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __TZ_set_BASEPRI_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      BASEPRI_NS,%0" :: "r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t   __TZ_get_FAULTMASK_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm volatile("MRS      %0,FAULTMASK_NS" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __TZ_set_FAULTMASK_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      FAULTMASK_NS,%0" :: "r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t   __TZ_get_PSPLIM_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))
 | 
			
		||||
      // without main extensions, the non-secure PSPLIM is RAZ/WI
 | 
			
		||||
      res = 0U;
 | 
			
		||||
    #else
 | 
			
		||||
      __asm volatile("MRS      %0,PSPLIM_NS" : "=r" (res));
 | 
			
		||||
    #endif
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __TZ_set_PSPLIM_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
 | 
			
		||||
         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))
 | 
			
		||||
      // without main extensions, the non-secure PSPLIM is RAZ/WI
 | 
			
		||||
      (void)value;
 | 
			
		||||
    #else
 | 
			
		||||
      __asm volatile("MSR      PSPLIM_NS,%0" :: "r" (value));
 | 
			
		||||
    #endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT uint32_t   __TZ_get_MSPLIM_NS(void)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t res;
 | 
			
		||||
      __asm volatile("MRS      %0,MSPLIM_NS" : "=r" (res));
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __IAR_FT void   __TZ_set_MSPLIM_NS(uint32_t value)
 | 
			
		||||
    {
 | 
			
		||||
      __asm volatile("MSR      MSPLIM_NS,%0" :: "r" (value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */
 | 
			
		||||
 | 
			
		||||
#endif   /* __ICCARM_INTRINSICS_VERSION__ == 2 */
 | 
			
		||||
 | 
			
		||||
#define __BKPT(value)    __asm volatile ("BKPT     %0" : : "i"(value))
 | 
			
		||||
 | 
			
		||||
#if __IAR_M0_FAMILY
 | 
			
		||||
  __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat)
 | 
			
		||||
  {
 | 
			
		||||
    if ((sat >= 1U) && (sat <= 32U))
 | 
			
		||||
    {
 | 
			
		||||
      const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);
 | 
			
		||||
      const int32_t min = -1 - max ;
 | 
			
		||||
      if (val > max)
 | 
			
		||||
      {
 | 
			
		||||
        return max;
 | 
			
		||||
      }
 | 
			
		||||
      else if (val < min)
 | 
			
		||||
      {
 | 
			
		||||
        return min;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return val;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat)
 | 
			
		||||
  {
 | 
			
		||||
    if (sat <= 31U)
 | 
			
		||||
    {
 | 
			
		||||
      const uint32_t max = ((1U << sat) - 1U);
 | 
			
		||||
      if (val > (int32_t)max)
 | 
			
		||||
      {
 | 
			
		||||
        return max;
 | 
			
		||||
      }
 | 
			
		||||
      else if (val < 0)
 | 
			
		||||
      {
 | 
			
		||||
        return 0U;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return (uint32_t)val;
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (__CORTEX_M >= 0x03)   /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory");
 | 
			
		||||
    return ((uint8_t)res);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory");
 | 
			
		||||
    return ((uint16_t)res);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint32_t __LDRT(volatile uint32_t *addr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory");
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr)
 | 
			
		||||
  {
 | 
			
		||||
    __ASM("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr)
 | 
			
		||||
  {
 | 
			
		||||
    __ASM("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr)
 | 
			
		||||
  {
 | 
			
		||||
    __ASM("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#endif /* (__CORTEX_M >= 0x03) */
 | 
			
		||||
 | 
			
		||||
#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
 | 
			
		||||
     (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");
 | 
			
		||||
    return ((uint8_t)res);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");
 | 
			
		||||
    return ((uint16_t)res);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint32_t __LDA(volatile uint32_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");
 | 
			
		||||
    return ((uint8_t)res);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");
 | 
			
		||||
    return ((uint16_t)res);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t res;
 | 
			
		||||
    __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");
 | 
			
		||||
    return res;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */
 | 
			
		||||
 | 
			
		||||
#undef __IAR_FT
 | 
			
		||||
#undef __IAR_M0_FAMILY
 | 
			
		||||
#undef __ICCARM_V8
 | 
			
		||||
 | 
			
		||||
#pragma diag_default=Pe940
 | 
			
		||||
#pragma diag_default=Pe177
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_ICCARM_H__ */
 | 
			
		||||
							
								
								
									
										39
									
								
								exp6/Drivers/CMSIS/Include/cmsis_version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								exp6/Drivers/CMSIS/Include/cmsis_version.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     cmsis_version.h
 | 
			
		||||
 * @brief    CMSIS Core(M) Version definitions
 | 
			
		||||
 * @version  V5.0.3
 | 
			
		||||
 * @date     24. June 2019
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2019 ARM Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header   /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_VERSION_H
 | 
			
		||||
#define __CMSIS_VERSION_H
 | 
			
		||||
 | 
			
		||||
/*  CMSIS Version definitions */
 | 
			
		||||
#define __CM_CMSIS_VERSION_MAIN  ( 5U)                                      /*!< [31:16] CMSIS Core(M) main version */
 | 
			
		||||
#define __CM_CMSIS_VERSION_SUB   ( 3U)                                      /*!< [15:0]  CMSIS Core(M) sub version */
 | 
			
		||||
#define __CM_CMSIS_VERSION       ((__CM_CMSIS_VERSION_MAIN << 16U) | \
 | 
			
		||||
                                   __CM_CMSIS_VERSION_SUB           )       /*!< CMSIS Core(M) version number */
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										2968
									
								
								exp6/Drivers/CMSIS/Include/core_armv81mml.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2968
									
								
								exp6/Drivers/CMSIS/Include/core_armv81mml.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1921
									
								
								exp6/Drivers/CMSIS/Include/core_armv8mbl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1921
									
								
								exp6/Drivers/CMSIS/Include/core_armv8mbl.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2835
									
								
								exp6/Drivers/CMSIS/Include/core_armv8mml.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2835
									
								
								exp6/Drivers/CMSIS/Include/core_armv8mml.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										952
									
								
								exp6/Drivers/CMSIS/Include/core_cm0.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										952
									
								
								exp6/Drivers/CMSIS/Include/core_cm0.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,952 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     core_cm0.h
 | 
			
		||||
 * @brief    CMSIS Cortex-M0 Core Peripheral Access Layer Header File
 | 
			
		||||
 * @version  V5.0.6
 | 
			
		||||
 * @date     13. March 2019
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header   /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __CORE_CM0_H_GENERIC
 | 
			
		||||
#define __CORE_CM0_H_GENERIC
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions
 | 
			
		||||
  CMSIS violates the following MISRA-C:2004 rules:
 | 
			
		||||
 | 
			
		||||
   \li Required Rule 8.5, object/function definition in header file.<br>
 | 
			
		||||
     Function definitions in header files are used to allow 'inlining'.
 | 
			
		||||
 | 
			
		||||
   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
 | 
			
		||||
     Unions are used for effective representation of core registers.
 | 
			
		||||
 | 
			
		||||
   \li Advisory Rule 19.7, Function-like macro defined.<br>
 | 
			
		||||
     Function-like macros are used to allow more efficient code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                 CMSIS definitions
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup Cortex_M0
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "cmsis_version.h"
 | 
			
		||||
 
 | 
			
		||||
/*  CMSIS CM0 definitions */
 | 
			
		||||
#define __CM0_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)              /*!< \deprecated [31:16] CMSIS HAL main version */
 | 
			
		||||
#define __CM0_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)               /*!< \deprecated [15:0]  CMSIS HAL sub version */
 | 
			
		||||
#define __CM0_CMSIS_VERSION       ((__CM0_CMSIS_VERSION_MAIN << 16U) | \
 | 
			
		||||
                                    __CM0_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */
 | 
			
		||||
 | 
			
		||||
#define __CORTEX_M                (0U)                                   /*!< Cortex-M Core */
 | 
			
		||||
 | 
			
		||||
/** __FPU_USED indicates whether an FPU is used or not.
 | 
			
		||||
    This core does not support an FPU at all
 | 
			
		||||
*/
 | 
			
		||||
#define __FPU_USED       0U
 | 
			
		||||
 | 
			
		||||
#if defined ( __CC_ARM )
 | 
			
		||||
  #if defined __TARGET_FPU_VFP
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
 | 
			
		||||
  #if defined __ARM_FP
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __GNUC__ )
 | 
			
		||||
  #if defined (__VFP_FP__) && !defined(__SOFTFP__)
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
  #if defined __ARMVFP__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __TI_ARM__ )
 | 
			
		||||
  #if defined __TI_VFP_SUPPORT__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __TASKING__ )
 | 
			
		||||
  #if defined __FPU_VFP__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __CSMC__ )
 | 
			
		||||
  #if ( __CSMC__ & 0x400U)
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CORE_CM0_H_GENERIC */
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_GENERIC
 | 
			
		||||
 | 
			
		||||
#ifndef __CORE_CM0_H_DEPENDANT
 | 
			
		||||
#define __CORE_CM0_H_DEPENDANT
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* check device defines and use defaults */
 | 
			
		||||
#if defined __CHECK_DEVICE_DEFINES
 | 
			
		||||
  #ifndef __CM0_REV
 | 
			
		||||
    #define __CM0_REV               0x0000U
 | 
			
		||||
    #warning "__CM0_REV not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifndef __NVIC_PRIO_BITS
 | 
			
		||||
    #define __NVIC_PRIO_BITS          2U
 | 
			
		||||
    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifndef __Vendor_SysTickConfig
 | 
			
		||||
    #define __Vendor_SysTickConfig    0U
 | 
			
		||||
    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* IO definitions (access restrictions to peripheral registers) */
 | 
			
		||||
/**
 | 
			
		||||
    \defgroup CMSIS_glob_defs CMSIS Global Defines
 | 
			
		||||
 | 
			
		||||
    <strong>IO Type Qualifiers</strong> are used
 | 
			
		||||
    \li to specify the access to peripheral variables.
 | 
			
		||||
    \li for automatic generation of peripheral register debug information.
 | 
			
		||||
*/
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
  #define   __I     volatile             /*!< Defines 'read only' permissions */
 | 
			
		||||
#else
 | 
			
		||||
  #define   __I     volatile const       /*!< Defines 'read only' permissions */
 | 
			
		||||
#endif
 | 
			
		||||
#define     __O     volatile             /*!< Defines 'write only' permissions */
 | 
			
		||||
#define     __IO    volatile             /*!< Defines 'read / write' permissions */
 | 
			
		||||
 | 
			
		||||
/* following defines should be used for structure members */
 | 
			
		||||
#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */
 | 
			
		||||
#define     __OM     volatile            /*! Defines 'write only' structure member permissions */
 | 
			
		||||
#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
 | 
			
		||||
 | 
			
		||||
/*@} end of group Cortex_M0 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                 Register Abstraction
 | 
			
		||||
  Core Register contain:
 | 
			
		||||
  - Core Register
 | 
			
		||||
  - Core NVIC Register
 | 
			
		||||
  - Core SCB Register
 | 
			
		||||
  - Core SysTick Register
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \defgroup CMSIS_core_register Defines and Type Definitions
 | 
			
		||||
  \brief Type definitions and defines for Cortex-M processor based devices.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_CORE  Status and Control Registers
 | 
			
		||||
  \brief      Core Register type definitions.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Application Program Status Register (APSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */
 | 
			
		||||
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
 | 
			
		||||
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
 | 
			
		||||
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
 | 
			
		||||
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} APSR_Type;
 | 
			
		||||
 | 
			
		||||
/* APSR Register Definitions */
 | 
			
		||||
#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */
 | 
			
		||||
#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */
 | 
			
		||||
#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */
 | 
			
		||||
#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */
 | 
			
		||||
#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Interrupt Program Status Register (IPSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
 | 
			
		||||
    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} IPSR_Type;
 | 
			
		||||
 | 
			
		||||
/* IPSR Register Definitions */
 | 
			
		||||
#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */
 | 
			
		||||
#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
 | 
			
		||||
    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */
 | 
			
		||||
    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */
 | 
			
		||||
    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */
 | 
			
		||||
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
 | 
			
		||||
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
 | 
			
		||||
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
 | 
			
		||||
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} xPSR_Type;
 | 
			
		||||
 | 
			
		||||
/* xPSR Register Definitions */
 | 
			
		||||
#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */
 | 
			
		||||
#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */
 | 
			
		||||
#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */
 | 
			
		||||
#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */
 | 
			
		||||
#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */
 | 
			
		||||
#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */
 | 
			
		||||
#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Control Registers (CONTROL).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t _reserved0:1;               /*!< bit:      0  Reserved */
 | 
			
		||||
    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */
 | 
			
		||||
    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} CONTROL_Type;
 | 
			
		||||
 | 
			
		||||
/* CONTROL Register Definitions */
 | 
			
		||||
#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */
 | 
			
		||||
#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_CORE */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)
 | 
			
		||||
  \brief      Type definitions for the NVIC Registers
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */
 | 
			
		||||
        uint32_t RESERVED0[31U];
 | 
			
		||||
  __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */
 | 
			
		||||
        uint32_t RESERVED1[31U];
 | 
			
		||||
  __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */
 | 
			
		||||
        uint32_t RESERVED2[31U];
 | 
			
		||||
  __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */
 | 
			
		||||
        uint32_t RESERVED3[31U];
 | 
			
		||||
        uint32_t RESERVED4[64U];
 | 
			
		||||
  __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */
 | 
			
		||||
}  NVIC_Type;
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_NVIC */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SCB     System Control Block (SCB)
 | 
			
		||||
  \brief    Type definitions for the System Control Block Registers
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Control Block (SCB).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */
 | 
			
		||||
  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */
 | 
			
		||||
        uint32_t RESERVED0;
 | 
			
		||||
  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */
 | 
			
		||||
  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */
 | 
			
		||||
  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */
 | 
			
		||||
        uint32_t RESERVED1;
 | 
			
		||||
  __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */
 | 
			
		||||
  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */
 | 
			
		||||
} SCB_Type;
 | 
			
		||||
 | 
			
		||||
/* SCB CPUID Register Definitions */
 | 
			
		||||
#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */
 | 
			
		||||
#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */
 | 
			
		||||
#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */
 | 
			
		||||
#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */
 | 
			
		||||
#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */
 | 
			
		||||
#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Interrupt Control State Register Definitions */
 | 
			
		||||
#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */
 | 
			
		||||
#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */
 | 
			
		||||
#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */
 | 
			
		||||
#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */
 | 
			
		||||
#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */
 | 
			
		||||
#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */
 | 
			
		||||
#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */
 | 
			
		||||
#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */
 | 
			
		||||
#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */
 | 
			
		||||
#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Application Interrupt and Reset Control Register Definitions */
 | 
			
		||||
#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */
 | 
			
		||||
#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */
 | 
			
		||||
#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */
 | 
			
		||||
#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */
 | 
			
		||||
#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */
 | 
			
		||||
#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB System Control Register Definitions */
 | 
			
		||||
#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */
 | 
			
		||||
#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */
 | 
			
		||||
#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */
 | 
			
		||||
#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Configuration Control Register Definitions */
 | 
			
		||||
#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */
 | 
			
		||||
#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */
 | 
			
		||||
#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB System Handler Control and State Register Definitions */
 | 
			
		||||
#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */
 | 
			
		||||
#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SCB */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)
 | 
			
		||||
  \brief    Type definitions for the System Timer Registers.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Timer (SysTick).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
 | 
			
		||||
  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */
 | 
			
		||||
  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */
 | 
			
		||||
  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */
 | 
			
		||||
} SysTick_Type;
 | 
			
		||||
 | 
			
		||||
/* SysTick Control / Status Register Definitions */
 | 
			
		||||
#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */
 | 
			
		||||
#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */
 | 
			
		||||
#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */
 | 
			
		||||
#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */
 | 
			
		||||
#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Reload Register Definitions */
 | 
			
		||||
#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */
 | 
			
		||||
#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Current Register Definitions */
 | 
			
		||||
#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */
 | 
			
		||||
#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Calibration Register Definitions */
 | 
			
		||||
#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */
 | 
			
		||||
#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */
 | 
			
		||||
#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */
 | 
			
		||||
#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SysTick */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)
 | 
			
		||||
  \brief    Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.
 | 
			
		||||
            Therefore they are not covered by the Cortex-M0 header file.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
/*@} end of group CMSIS_CoreDebug */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_core_bitfield     Core register bit field macros
 | 
			
		||||
  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Mask and shift a bit field value for use in a register bit range.
 | 
			
		||||
  \param[in] field  Name of the register bit field.
 | 
			
		||||
  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.
 | 
			
		||||
  \return           Masked and shifted value.
 | 
			
		||||
*/
 | 
			
		||||
#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief     Mask and shift a register value to extract a bit filed value.
 | 
			
		||||
  \param[in] field  Name of the register bit field.
 | 
			
		||||
  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.
 | 
			
		||||
  \return           Masked and shifted bit field value.
 | 
			
		||||
*/
 | 
			
		||||
#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_core_bitfield */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_core_base     Core Definitions
 | 
			
		||||
  \brief      Definitions for base addresses, unions, and structures.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Memory mapping of Core Hardware */
 | 
			
		||||
#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */
 | 
			
		||||
#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */
 | 
			
		||||
#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */
 | 
			
		||||
#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */
 | 
			
		||||
 | 
			
		||||
#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */
 | 
			
		||||
#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */
 | 
			
		||||
#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                Hardware Abstraction Layer
 | 
			
		||||
  Core Function Interface contains:
 | 
			
		||||
  - Core NVIC Functions
 | 
			
		||||
  - Core SysTick Functions
 | 
			
		||||
  - Core Register Access Functions
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################   NVIC functions  #################################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_NVICFunctions NVIC Functions
 | 
			
		||||
  \brief    Functions that manage interrupts and exceptions via the NVIC.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef CMSIS_NVIC_VIRTUAL
 | 
			
		||||
  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
 | 
			
		||||
    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
 | 
			
		||||
  #endif
 | 
			
		||||
  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE
 | 
			
		||||
#else
 | 
			
		||||
  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping
 | 
			
		||||
  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping
 | 
			
		||||
  #define NVIC_EnableIRQ              __NVIC_EnableIRQ
 | 
			
		||||
  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ
 | 
			
		||||
  #define NVIC_DisableIRQ             __NVIC_DisableIRQ
 | 
			
		||||
  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ
 | 
			
		||||
  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ
 | 
			
		||||
  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ
 | 
			
		||||
/*#define NVIC_GetActive              __NVIC_GetActive             not available for Cortex-M0 */
 | 
			
		||||
  #define NVIC_SetPriority            __NVIC_SetPriority
 | 
			
		||||
  #define NVIC_GetPriority            __NVIC_GetPriority
 | 
			
		||||
  #define NVIC_SystemReset            __NVIC_SystemReset
 | 
			
		||||
#endif /* CMSIS_NVIC_VIRTUAL */
 | 
			
		||||
 | 
			
		||||
#ifdef CMSIS_VECTAB_VIRTUAL
 | 
			
		||||
  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
 | 
			
		||||
    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
 | 
			
		||||
  #endif
 | 
			
		||||
  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
 | 
			
		||||
#else
 | 
			
		||||
  #define NVIC_SetVector              __NVIC_SetVector
 | 
			
		||||
  #define NVIC_GetVector              __NVIC_GetVector
 | 
			
		||||
#endif  /* (CMSIS_VECTAB_VIRTUAL) */
 | 
			
		||||
 | 
			
		||||
#define NVIC_USER_IRQ_OFFSET          16
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* The following EXC_RETURN values are saved the LR on exception entry */
 | 
			
		||||
#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */
 | 
			
		||||
#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */
 | 
			
		||||
#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Interrupt Priorities are WORD accessible only under Armv6-M                  */
 | 
			
		||||
/* The following MACROS handle generation of the register offset and byte masks */
 | 
			
		||||
#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)
 | 
			
		||||
#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )
 | 
			
		||||
#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )
 | 
			
		||||
 | 
			
		||||
#define __NVIC_SetPriorityGrouping(X) (void)(X)
 | 
			
		||||
#define __NVIC_GetPriorityGrouping()  (0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable Interrupt
 | 
			
		||||
  \details Enables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    __COMPILER_BARRIER();
 | 
			
		||||
    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
    __COMPILER_BARRIER();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Enable status
 | 
			
		||||
  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \return             0  Interrupt is not enabled.
 | 
			
		||||
  \return             1  Interrupt is enabled.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return(0U);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable Interrupt
 | 
			
		||||
  \details Disables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Pending Interrupt
 | 
			
		||||
  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \return             0  Interrupt status is not pending.
 | 
			
		||||
  \return             1  Interrupt status is pending.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return(0U);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Pending Interrupt
 | 
			
		||||
  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Clear Pending Interrupt
 | 
			
		||||
  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Interrupt Priority
 | 
			
		||||
  \details Sets the priority of a device specific interrupt or a processor exception.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]      IRQn  Interrupt number.
 | 
			
		||||
  \param [in]  priority  Priority to set.
 | 
			
		||||
  \note    The priority cannot be set for every processor exception.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
 | 
			
		||||
       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
 | 
			
		||||
       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Priority
 | 
			
		||||
  \details Reads the priority of a device specific interrupt or a processor exception.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]   IRQn  Interrupt number.
 | 
			
		||||
  \return             Interrupt Priority.
 | 
			
		||||
                      Value is aligned automatically to the implemented priority bits of the microcontroller.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Encode Priority
 | 
			
		||||
  \details Encodes the priority for an interrupt with the given priority group,
 | 
			
		||||
           preemptive priority value, and subpriority value.
 | 
			
		||||
           In case of a conflict between priority grouping and available
 | 
			
		||||
           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.
 | 
			
		||||
  \param [in]     PriorityGroup  Used priority group.
 | 
			
		||||
  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).
 | 
			
		||||
  \param [in]       SubPriority  Subpriority value (starting from 0).
 | 
			
		||||
  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */
 | 
			
		||||
  uint32_t PreemptPriorityBits;
 | 
			
		||||
  uint32_t SubPriorityBits;
 | 
			
		||||
 | 
			
		||||
  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
 | 
			
		||||
  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
 | 
			
		||||
           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))
 | 
			
		||||
         );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Decode Priority
 | 
			
		||||
  \details Decodes an interrupt priority value with a given priority group to
 | 
			
		||||
           preemptive priority value and subpriority value.
 | 
			
		||||
           In case of a conflict between priority grouping and available
 | 
			
		||||
           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
 | 
			
		||||
  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().
 | 
			
		||||
  \param [in]     PriorityGroup  Used priority group.
 | 
			
		||||
  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).
 | 
			
		||||
  \param [out]     pSubPriority  Subpriority value (starting from 0).
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */
 | 
			
		||||
  uint32_t PreemptPriorityBits;
 | 
			
		||||
  uint32_t SubPriorityBits;
 | 
			
		||||
 | 
			
		||||
  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
 | 
			
		||||
  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
 | 
			
		||||
 | 
			
		||||
  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);
 | 
			
		||||
  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Interrupt Vector
 | 
			
		||||
  \details Sets an interrupt vector in SRAM based interrupt vector table.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
           Address 0 must be mapped to SRAM.
 | 
			
		||||
  \param [in]   IRQn      Interrupt number
 | 
			
		||||
  \param [in]   vector    Address of interrupt handler function
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t vectors = 0x0U;
 | 
			
		||||
  (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
 | 
			
		||||
  /* ARM Application Note 321 states that the M0 does not require the architectural barrier */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Vector
 | 
			
		||||
  \details Reads an interrupt vector from interrupt vector table.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]   IRQn      Interrupt number.
 | 
			
		||||
  \return                 Address of interrupt handler function
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t vectors = 0x0U;
 | 
			
		||||
  return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   System Reset
 | 
			
		||||
  \details Initiates a system reset request to reset the MCU.
 | 
			
		||||
 */
 | 
			
		||||
__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
 | 
			
		||||
{
 | 
			
		||||
  __DSB();                                                          /* Ensure all outstanding memory accesses included
 | 
			
		||||
                                                                       buffered write are completed before reset */
 | 
			
		||||
  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
 | 
			
		||||
                 SCB_AIRCR_SYSRESETREQ_Msk);
 | 
			
		||||
  __DSB();                                                          /* Ensure completion of memory access */
 | 
			
		||||
 | 
			
		||||
  for(;;)                                                           /* wait until reset */
 | 
			
		||||
  {
 | 
			
		||||
    __NOP();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_NVICFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################  FPU functions  #################################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_FpuFunctions FPU Functions
 | 
			
		||||
  \brief    Function that provides FPU type.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   get FPU type
 | 
			
		||||
  \details returns the FPU type
 | 
			
		||||
  \returns
 | 
			
		||||
   - \b  0: No FPU
 | 
			
		||||
   - \b  1: Single precision FPU
 | 
			
		||||
   - \b  2: Double + Single precision FPU
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t SCB_GetFPUType(void)
 | 
			
		||||
{
 | 
			
		||||
    return 0U;           /* No FPU */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_FpuFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##################################    SysTick function  ############################################ */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions
 | 
			
		||||
  \brief    Functions that configure the System.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   System Tick Configuration
 | 
			
		||||
  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
 | 
			
		||||
           Counter is in free running mode to generate periodic interrupts.
 | 
			
		||||
  \param [in]  ticks  Number of ticks between two interrupts.
 | 
			
		||||
  \return          0  Function succeeded.
 | 
			
		||||
  \return          1  Function failed.
 | 
			
		||||
  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
 | 
			
		||||
           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
 | 
			
		||||
           must contain a vendor-specific implementation of this function.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
 | 
			
		||||
{
 | 
			
		||||
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
 | 
			
		||||
  {
 | 
			
		||||
    return (1UL);                                                   /* Reload value impossible */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
 | 
			
		||||
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
 | 
			
		||||
  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
 | 
			
		||||
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
 | 
			
		||||
                   SysTick_CTRL_TICKINT_Msk   |
 | 
			
		||||
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
 | 
			
		||||
  return (0UL);                                                     /* Function successful */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_SysTickFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CORE_CM0_H_DEPENDANT */
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_GENERIC */
 | 
			
		||||
							
								
								
									
										1085
									
								
								exp6/Drivers/CMSIS/Include/core_cm0plus.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1085
									
								
								exp6/Drivers/CMSIS/Include/core_cm0plus.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										979
									
								
								exp6/Drivers/CMSIS/Include/core_cm1.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										979
									
								
								exp6/Drivers/CMSIS/Include/core_cm1.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,979 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     core_cm1.h
 | 
			
		||||
 * @brief    CMSIS Cortex-M1 Core Peripheral Access Layer Header File
 | 
			
		||||
 * @version  V1.0.1
 | 
			
		||||
 * @date     12. November 2018
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header   /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __CORE_CM1_H_GENERIC
 | 
			
		||||
#define __CORE_CM1_H_GENERIC
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions
 | 
			
		||||
  CMSIS violates the following MISRA-C:2004 rules:
 | 
			
		||||
 | 
			
		||||
   \li Required Rule 8.5, object/function definition in header file.<br>
 | 
			
		||||
     Function definitions in header files are used to allow 'inlining'.
 | 
			
		||||
 | 
			
		||||
   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
 | 
			
		||||
     Unions are used for effective representation of core registers.
 | 
			
		||||
 | 
			
		||||
   \li Advisory Rule 19.7, Function-like macro defined.<br>
 | 
			
		||||
     Function-like macros are used to allow more efficient code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                 CMSIS definitions
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup Cortex_M1
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "cmsis_version.h"
 | 
			
		||||
 
 | 
			
		||||
/*  CMSIS CM1 definitions */
 | 
			
		||||
#define __CM1_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)              /*!< \deprecated [31:16] CMSIS HAL main version */
 | 
			
		||||
#define __CM1_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)               /*!< \deprecated [15:0]  CMSIS HAL sub version */
 | 
			
		||||
#define __CM1_CMSIS_VERSION       ((__CM1_CMSIS_VERSION_MAIN << 16U) | \
 | 
			
		||||
                                    __CM1_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */
 | 
			
		||||
 | 
			
		||||
#define __CORTEX_M                (1U)                                   /*!< Cortex-M Core */
 | 
			
		||||
 | 
			
		||||
/** __FPU_USED indicates whether an FPU is used or not.
 | 
			
		||||
    This core does not support an FPU at all
 | 
			
		||||
*/
 | 
			
		||||
#define __FPU_USED       0U
 | 
			
		||||
 | 
			
		||||
#if defined ( __CC_ARM )
 | 
			
		||||
  #if defined __TARGET_FPU_VFP
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
 | 
			
		||||
  #if defined __ARM_FP
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __GNUC__ )
 | 
			
		||||
  #if defined (__VFP_FP__) && !defined(__SOFTFP__)
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
  #if defined __ARMVFP__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __TI_ARM__ )
 | 
			
		||||
  #if defined __TI_VFP_SUPPORT__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __TASKING__ )
 | 
			
		||||
  #if defined __FPU_VFP__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __CSMC__ )
 | 
			
		||||
  #if ( __CSMC__ & 0x400U)
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CORE_CM1_H_GENERIC */
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_GENERIC
 | 
			
		||||
 | 
			
		||||
#ifndef __CORE_CM1_H_DEPENDANT
 | 
			
		||||
#define __CORE_CM1_H_DEPENDANT
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* check device defines and use defaults */
 | 
			
		||||
#if defined __CHECK_DEVICE_DEFINES
 | 
			
		||||
  #ifndef __CM1_REV
 | 
			
		||||
    #define __CM1_REV               0x0100U
 | 
			
		||||
    #warning "__CM1_REV not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifndef __NVIC_PRIO_BITS
 | 
			
		||||
    #define __NVIC_PRIO_BITS          2U
 | 
			
		||||
    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifndef __Vendor_SysTickConfig
 | 
			
		||||
    #define __Vendor_SysTickConfig    0U
 | 
			
		||||
    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* IO definitions (access restrictions to peripheral registers) */
 | 
			
		||||
/**
 | 
			
		||||
    \defgroup CMSIS_glob_defs CMSIS Global Defines
 | 
			
		||||
 | 
			
		||||
    <strong>IO Type Qualifiers</strong> are used
 | 
			
		||||
    \li to specify the access to peripheral variables.
 | 
			
		||||
    \li for automatic generation of peripheral register debug information.
 | 
			
		||||
*/
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
  #define   __I     volatile             /*!< Defines 'read only' permissions */
 | 
			
		||||
#else
 | 
			
		||||
  #define   __I     volatile const       /*!< Defines 'read only' permissions */
 | 
			
		||||
#endif
 | 
			
		||||
#define     __O     volatile             /*!< Defines 'write only' permissions */
 | 
			
		||||
#define     __IO    volatile             /*!< Defines 'read / write' permissions */
 | 
			
		||||
 | 
			
		||||
/* following defines should be used for structure members */
 | 
			
		||||
#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */
 | 
			
		||||
#define     __OM     volatile            /*! Defines 'write only' structure member permissions */
 | 
			
		||||
#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
 | 
			
		||||
 | 
			
		||||
/*@} end of group Cortex_M1 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                 Register Abstraction
 | 
			
		||||
  Core Register contain:
 | 
			
		||||
  - Core Register
 | 
			
		||||
  - Core NVIC Register
 | 
			
		||||
  - Core SCB Register
 | 
			
		||||
  - Core SysTick Register
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \defgroup CMSIS_core_register Defines and Type Definitions
 | 
			
		||||
  \brief Type definitions and defines for Cortex-M processor based devices.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_CORE  Status and Control Registers
 | 
			
		||||
  \brief      Core Register type definitions.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Application Program Status Register (APSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */
 | 
			
		||||
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
 | 
			
		||||
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
 | 
			
		||||
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
 | 
			
		||||
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} APSR_Type;
 | 
			
		||||
 | 
			
		||||
/* APSR Register Definitions */
 | 
			
		||||
#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */
 | 
			
		||||
#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */
 | 
			
		||||
#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */
 | 
			
		||||
#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */
 | 
			
		||||
#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Interrupt Program Status Register (IPSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
 | 
			
		||||
    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} IPSR_Type;
 | 
			
		||||
 | 
			
		||||
/* IPSR Register Definitions */
 | 
			
		||||
#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */
 | 
			
		||||
#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
 | 
			
		||||
    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */
 | 
			
		||||
    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */
 | 
			
		||||
    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */
 | 
			
		||||
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
 | 
			
		||||
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
 | 
			
		||||
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
 | 
			
		||||
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} xPSR_Type;
 | 
			
		||||
 | 
			
		||||
/* xPSR Register Definitions */
 | 
			
		||||
#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */
 | 
			
		||||
#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */
 | 
			
		||||
#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */
 | 
			
		||||
#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */
 | 
			
		||||
#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */
 | 
			
		||||
#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */
 | 
			
		||||
#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Control Registers (CONTROL).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t _reserved0:1;               /*!< bit:      0  Reserved */
 | 
			
		||||
    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */
 | 
			
		||||
    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} CONTROL_Type;
 | 
			
		||||
 | 
			
		||||
/* CONTROL Register Definitions */
 | 
			
		||||
#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */
 | 
			
		||||
#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_CORE */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)
 | 
			
		||||
  \brief      Type definitions for the NVIC Registers
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */
 | 
			
		||||
        uint32_t RESERVED0[31U];
 | 
			
		||||
  __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */
 | 
			
		||||
        uint32_t RSERVED1[31U];
 | 
			
		||||
  __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */
 | 
			
		||||
        uint32_t RESERVED2[31U];
 | 
			
		||||
  __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */
 | 
			
		||||
        uint32_t RESERVED3[31U];
 | 
			
		||||
        uint32_t RESERVED4[64U];
 | 
			
		||||
  __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */
 | 
			
		||||
}  NVIC_Type;
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_NVIC */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SCB     System Control Block (SCB)
 | 
			
		||||
  \brief    Type definitions for the System Control Block Registers
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Control Block (SCB).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */
 | 
			
		||||
  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */
 | 
			
		||||
        uint32_t RESERVED0;
 | 
			
		||||
  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */
 | 
			
		||||
  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */
 | 
			
		||||
  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */
 | 
			
		||||
        uint32_t RESERVED1;
 | 
			
		||||
  __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */
 | 
			
		||||
  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */
 | 
			
		||||
} SCB_Type;
 | 
			
		||||
 | 
			
		||||
/* SCB CPUID Register Definitions */
 | 
			
		||||
#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */
 | 
			
		||||
#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */
 | 
			
		||||
#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */
 | 
			
		||||
#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */
 | 
			
		||||
#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */
 | 
			
		||||
#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Interrupt Control State Register Definitions */
 | 
			
		||||
#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */
 | 
			
		||||
#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */
 | 
			
		||||
#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */
 | 
			
		||||
#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */
 | 
			
		||||
#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */
 | 
			
		||||
#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */
 | 
			
		||||
#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */
 | 
			
		||||
#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */
 | 
			
		||||
#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */
 | 
			
		||||
#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Application Interrupt and Reset Control Register Definitions */
 | 
			
		||||
#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */
 | 
			
		||||
#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */
 | 
			
		||||
#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */
 | 
			
		||||
#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */
 | 
			
		||||
#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */
 | 
			
		||||
#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB System Control Register Definitions */
 | 
			
		||||
#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */
 | 
			
		||||
#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */
 | 
			
		||||
#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */
 | 
			
		||||
#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Configuration Control Register Definitions */
 | 
			
		||||
#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */
 | 
			
		||||
#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */
 | 
			
		||||
#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB System Handler Control and State Register Definitions */
 | 
			
		||||
#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */
 | 
			
		||||
#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SCB */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)
 | 
			
		||||
  \brief    Type definitions for the System Control and ID Register not in the SCB
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Control and ID Register not in the SCB.
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
        uint32_t RESERVED0[2U];
 | 
			
		||||
  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */
 | 
			
		||||
} SCnSCB_Type;
 | 
			
		||||
 | 
			
		||||
/* Auxiliary Control Register Definitions */
 | 
			
		||||
#define SCnSCB_ACTLR_ITCMUAEN_Pos            4U                                        /*!< ACTLR: Instruction TCM Upper Alias Enable Position */
 | 
			
		||||
#define SCnSCB_ACTLR_ITCMUAEN_Msk           (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos)         /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */
 | 
			
		||||
 | 
			
		||||
#define SCnSCB_ACTLR_ITCMLAEN_Pos            3U                                        /*!< ACTLR: Instruction TCM Lower Alias Enable Position */
 | 
			
		||||
#define SCnSCB_ACTLR_ITCMLAEN_Msk           (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos)         /*!< ACTLR: Instruction TCM Lower Alias Enable Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SCnotSCB */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)
 | 
			
		||||
  \brief    Type definitions for the System Timer Registers.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Timer (SysTick).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
 | 
			
		||||
  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */
 | 
			
		||||
  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */
 | 
			
		||||
  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */
 | 
			
		||||
} SysTick_Type;
 | 
			
		||||
 | 
			
		||||
/* SysTick Control / Status Register Definitions */
 | 
			
		||||
#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */
 | 
			
		||||
#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */
 | 
			
		||||
#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */
 | 
			
		||||
#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */
 | 
			
		||||
#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Reload Register Definitions */
 | 
			
		||||
#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */
 | 
			
		||||
#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Current Register Definitions */
 | 
			
		||||
#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */
 | 
			
		||||
#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Calibration Register Definitions */
 | 
			
		||||
#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */
 | 
			
		||||
#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */
 | 
			
		||||
#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */
 | 
			
		||||
#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SysTick */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)
 | 
			
		||||
  \brief    Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.
 | 
			
		||||
            Therefore they are not covered by the Cortex-M1 header file.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
/*@} end of group CMSIS_CoreDebug */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_core_bitfield     Core register bit field macros
 | 
			
		||||
  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Mask and shift a bit field value for use in a register bit range.
 | 
			
		||||
  \param[in] field  Name of the register bit field.
 | 
			
		||||
  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.
 | 
			
		||||
  \return           Masked and shifted value.
 | 
			
		||||
*/
 | 
			
		||||
#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief     Mask and shift a register value to extract a bit filed value.
 | 
			
		||||
  \param[in] field  Name of the register bit field.
 | 
			
		||||
  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.
 | 
			
		||||
  \return           Masked and shifted bit field value.
 | 
			
		||||
*/
 | 
			
		||||
#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_core_bitfield */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_core_base     Core Definitions
 | 
			
		||||
  \brief      Definitions for base addresses, unions, and structures.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Memory mapping of Core Hardware */
 | 
			
		||||
#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */
 | 
			
		||||
#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */
 | 
			
		||||
#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */
 | 
			
		||||
#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */
 | 
			
		||||
 | 
			
		||||
#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */
 | 
			
		||||
#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */
 | 
			
		||||
#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */
 | 
			
		||||
#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                Hardware Abstraction Layer
 | 
			
		||||
  Core Function Interface contains:
 | 
			
		||||
  - Core NVIC Functions
 | 
			
		||||
  - Core SysTick Functions
 | 
			
		||||
  - Core Register Access Functions
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################   NVIC functions  #################################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_NVICFunctions NVIC Functions
 | 
			
		||||
  \brief    Functions that manage interrupts and exceptions via the NVIC.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef CMSIS_NVIC_VIRTUAL
 | 
			
		||||
  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
 | 
			
		||||
    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
 | 
			
		||||
  #endif
 | 
			
		||||
  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE
 | 
			
		||||
#else
 | 
			
		||||
  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping
 | 
			
		||||
  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping
 | 
			
		||||
  #define NVIC_EnableIRQ              __NVIC_EnableIRQ
 | 
			
		||||
  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ
 | 
			
		||||
  #define NVIC_DisableIRQ             __NVIC_DisableIRQ
 | 
			
		||||
  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ
 | 
			
		||||
  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ
 | 
			
		||||
  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ
 | 
			
		||||
/*#define NVIC_GetActive              __NVIC_GetActive             not available for Cortex-M1 */
 | 
			
		||||
  #define NVIC_SetPriority            __NVIC_SetPriority
 | 
			
		||||
  #define NVIC_GetPriority            __NVIC_GetPriority
 | 
			
		||||
  #define NVIC_SystemReset            __NVIC_SystemReset
 | 
			
		||||
#endif /* CMSIS_NVIC_VIRTUAL */
 | 
			
		||||
 | 
			
		||||
#ifdef CMSIS_VECTAB_VIRTUAL
 | 
			
		||||
  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
 | 
			
		||||
    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
 | 
			
		||||
  #endif
 | 
			
		||||
  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
 | 
			
		||||
#else
 | 
			
		||||
  #define NVIC_SetVector              __NVIC_SetVector
 | 
			
		||||
  #define NVIC_GetVector              __NVIC_GetVector
 | 
			
		||||
#endif  /* (CMSIS_VECTAB_VIRTUAL) */
 | 
			
		||||
 | 
			
		||||
#define NVIC_USER_IRQ_OFFSET          16
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* The following EXC_RETURN values are saved the LR on exception entry */
 | 
			
		||||
#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */
 | 
			
		||||
#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */
 | 
			
		||||
#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Interrupt Priorities are WORD accessible only under Armv6-M                  */
 | 
			
		||||
/* The following MACROS handle generation of the register offset and byte masks */
 | 
			
		||||
#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)
 | 
			
		||||
#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )
 | 
			
		||||
#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )
 | 
			
		||||
 | 
			
		||||
#define __NVIC_SetPriorityGrouping(X) (void)(X)
 | 
			
		||||
#define __NVIC_GetPriorityGrouping()  (0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable Interrupt
 | 
			
		||||
  \details Enables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    __COMPILER_BARRIER();
 | 
			
		||||
    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
    __COMPILER_BARRIER();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Enable status
 | 
			
		||||
  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \return             0  Interrupt is not enabled.
 | 
			
		||||
  \return             1  Interrupt is enabled.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return(0U);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable Interrupt
 | 
			
		||||
  \details Disables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Pending Interrupt
 | 
			
		||||
  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \return             0  Interrupt status is not pending.
 | 
			
		||||
  \return             1  Interrupt status is pending.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return(0U);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Pending Interrupt
 | 
			
		||||
  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Clear Pending Interrupt
 | 
			
		||||
  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Interrupt Priority
 | 
			
		||||
  \details Sets the priority of a device specific interrupt or a processor exception.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]      IRQn  Interrupt number.
 | 
			
		||||
  \param [in]  priority  Priority to set.
 | 
			
		||||
  \note    The priority cannot be set for every processor exception.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
 | 
			
		||||
       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
 | 
			
		||||
       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Priority
 | 
			
		||||
  \details Reads the priority of a device specific interrupt or a processor exception.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]   IRQn  Interrupt number.
 | 
			
		||||
  \return             Interrupt Priority.
 | 
			
		||||
                      Value is aligned automatically to the implemented priority bits of the microcontroller.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Encode Priority
 | 
			
		||||
  \details Encodes the priority for an interrupt with the given priority group,
 | 
			
		||||
           preemptive priority value, and subpriority value.
 | 
			
		||||
           In case of a conflict between priority grouping and available
 | 
			
		||||
           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.
 | 
			
		||||
  \param [in]     PriorityGroup  Used priority group.
 | 
			
		||||
  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).
 | 
			
		||||
  \param [in]       SubPriority  Subpriority value (starting from 0).
 | 
			
		||||
  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */
 | 
			
		||||
  uint32_t PreemptPriorityBits;
 | 
			
		||||
  uint32_t SubPriorityBits;
 | 
			
		||||
 | 
			
		||||
  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
 | 
			
		||||
  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
 | 
			
		||||
           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))
 | 
			
		||||
         );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Decode Priority
 | 
			
		||||
  \details Decodes an interrupt priority value with a given priority group to
 | 
			
		||||
           preemptive priority value and subpriority value.
 | 
			
		||||
           In case of a conflict between priority grouping and available
 | 
			
		||||
           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
 | 
			
		||||
  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().
 | 
			
		||||
  \param [in]     PriorityGroup  Used priority group.
 | 
			
		||||
  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).
 | 
			
		||||
  \param [out]     pSubPriority  Subpriority value (starting from 0).
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */
 | 
			
		||||
  uint32_t PreemptPriorityBits;
 | 
			
		||||
  uint32_t SubPriorityBits;
 | 
			
		||||
 | 
			
		||||
  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
 | 
			
		||||
  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
 | 
			
		||||
 | 
			
		||||
  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);
 | 
			
		||||
  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Interrupt Vector
 | 
			
		||||
  \details Sets an interrupt vector in SRAM based interrupt vector table.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
           Address 0 must be mapped to SRAM.
 | 
			
		||||
  \param [in]   IRQn      Interrupt number
 | 
			
		||||
  \param [in]   vector    Address of interrupt handler function
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t *vectors = (uint32_t *)0x0U;
 | 
			
		||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
			
		||||
  /* ARM Application Note 321 states that the M1 does not require the architectural barrier */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Vector
 | 
			
		||||
  \details Reads an interrupt vector from interrupt vector table.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]   IRQn      Interrupt number.
 | 
			
		||||
  \return                 Address of interrupt handler function
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t *vectors = (uint32_t *)0x0U;
 | 
			
		||||
  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   System Reset
 | 
			
		||||
  \details Initiates a system reset request to reset the MCU.
 | 
			
		||||
 */
 | 
			
		||||
__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
 | 
			
		||||
{
 | 
			
		||||
  __DSB();                                                          /* Ensure all outstanding memory accesses included
 | 
			
		||||
                                                                       buffered write are completed before reset */
 | 
			
		||||
  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
 | 
			
		||||
                 SCB_AIRCR_SYSRESETREQ_Msk);
 | 
			
		||||
  __DSB();                                                          /* Ensure completion of memory access */
 | 
			
		||||
 | 
			
		||||
  for(;;)                                                           /* wait until reset */
 | 
			
		||||
  {
 | 
			
		||||
    __NOP();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_NVICFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################  FPU functions  #################################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_FpuFunctions FPU Functions
 | 
			
		||||
  \brief    Function that provides FPU type.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   get FPU type
 | 
			
		||||
  \details returns the FPU type
 | 
			
		||||
  \returns
 | 
			
		||||
   - \b  0: No FPU
 | 
			
		||||
   - \b  1: Single precision FPU
 | 
			
		||||
   - \b  2: Double + Single precision FPU
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t SCB_GetFPUType(void)
 | 
			
		||||
{
 | 
			
		||||
    return 0U;           /* No FPU */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_FpuFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##################################    SysTick function  ############################################ */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions
 | 
			
		||||
  \brief    Functions that configure the System.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   System Tick Configuration
 | 
			
		||||
  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
 | 
			
		||||
           Counter is in free running mode to generate periodic interrupts.
 | 
			
		||||
  \param [in]  ticks  Number of ticks between two interrupts.
 | 
			
		||||
  \return          0  Function succeeded.
 | 
			
		||||
  \return          1  Function failed.
 | 
			
		||||
  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
 | 
			
		||||
           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
 | 
			
		||||
           must contain a vendor-specific implementation of this function.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
 | 
			
		||||
{
 | 
			
		||||
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
 | 
			
		||||
  {
 | 
			
		||||
    return (1UL);                                                   /* Reload value impossible */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
 | 
			
		||||
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
 | 
			
		||||
  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
 | 
			
		||||
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
 | 
			
		||||
                   SysTick_CTRL_TICKINT_Msk   |
 | 
			
		||||
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
 | 
			
		||||
  return (0UL);                                                     /* Function successful */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_SysTickFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CORE_CM1_H_DEPENDANT */
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_GENERIC */
 | 
			
		||||
							
								
								
									
										1996
									
								
								exp6/Drivers/CMSIS/Include/core_cm23.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1996
									
								
								exp6/Drivers/CMSIS/Include/core_cm23.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1937
									
								
								exp6/Drivers/CMSIS/Include/core_cm3.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1937
									
								
								exp6/Drivers/CMSIS/Include/core_cm3.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2910
									
								
								exp6/Drivers/CMSIS/Include/core_cm33.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2910
									
								
								exp6/Drivers/CMSIS/Include/core_cm33.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2910
									
								
								exp6/Drivers/CMSIS/Include/core_cm35p.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2910
									
								
								exp6/Drivers/CMSIS/Include/core_cm35p.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2124
									
								
								exp6/Drivers/CMSIS/Include/core_cm4.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2124
									
								
								exp6/Drivers/CMSIS/Include/core_cm4.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2725
									
								
								exp6/Drivers/CMSIS/Include/core_cm7.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2725
									
								
								exp6/Drivers/CMSIS/Include/core_cm7.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1025
									
								
								exp6/Drivers/CMSIS/Include/core_sc000.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1025
									
								
								exp6/Drivers/CMSIS/Include/core_sc000.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1912
									
								
								exp6/Drivers/CMSIS/Include/core_sc300.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1912
									
								
								exp6/Drivers/CMSIS/Include/core_sc300.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										272
									
								
								exp6/Drivers/CMSIS/Include/mpu_armv7.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								exp6/Drivers/CMSIS/Include/mpu_armv7.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,272 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     mpu_armv7.h
 | 
			
		||||
 * @brief    CMSIS MPU API for Armv7-M MPU
 | 
			
		||||
 * @version  V5.1.0
 | 
			
		||||
 * @date     08. March 2019
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2017-2019 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header    /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
#ifndef ARM_MPU_ARMV7_H
 | 
			
		||||
#define ARM_MPU_ARMV7_H
 | 
			
		||||
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_32B      ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_64B      ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_128B     ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_256B     ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_512B     ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_1KB      ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_2KB      ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_4KB      ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_8KB      ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_16KB     ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_32KB     ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_64KB     ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_128KB    ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_256KB    ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_512KB    ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_1MB      ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_2MB      ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_4MB      ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_8MB      ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_16MB     ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_32MB     ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_64MB     ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_128MB    ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_256MB    ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_512MB    ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_1GB      ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_2GB      ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_4GB      ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes
 | 
			
		||||
 | 
			
		||||
#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access
 | 
			
		||||
#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only
 | 
			
		||||
#define ARM_MPU_AP_URO  2U ///!< MPU Access Permission unprivileged access read-only
 | 
			
		||||
#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access
 | 
			
		||||
#define ARM_MPU_AP_PRO  5U ///!< MPU Access Permission privileged access read-only
 | 
			
		||||
#define ARM_MPU_AP_RO   6U ///!< MPU Access Permission read-only access
 | 
			
		||||
 | 
			
		||||
/** MPU Region Base Address Register Value
 | 
			
		||||
*
 | 
			
		||||
* \param Region The region to be configured, number 0 to 15.
 | 
			
		||||
* \param BaseAddress The base address for the region.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RBAR(Region, BaseAddress) \
 | 
			
		||||
  (((BaseAddress) & MPU_RBAR_ADDR_Msk) |  \
 | 
			
		||||
   ((Region) & MPU_RBAR_REGION_Msk)    |  \
 | 
			
		||||
   (MPU_RBAR_VALID_Msk))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attributes
 | 
			
		||||
* 
 | 
			
		||||
* \param TypeExtField      Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.
 | 
			
		||||
* \param IsShareable       Region is shareable between multiple bus masters.
 | 
			
		||||
* \param IsCacheable       Region is cacheable, i.e. its value may be kept in cache.
 | 
			
		||||
* \param IsBufferable      Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.
 | 
			
		||||
*/  
 | 
			
		||||
#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable)   \
 | 
			
		||||
  ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk)                  | \
 | 
			
		||||
   (((IsShareable)  << MPU_RASR_S_Pos)   & MPU_RASR_S_Msk)                    | \
 | 
			
		||||
   (((IsCacheable)  << MPU_RASR_C_Pos)   & MPU_RASR_C_Msk)                    | \
 | 
			
		||||
   (((IsBufferable) << MPU_RASR_B_Pos)   & MPU_RASR_B_Msk))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Region Attribute and Size Register Value
 | 
			
		||||
* 
 | 
			
		||||
* \param DisableExec       Instruction access disable bit, 1= disable instruction fetches.
 | 
			
		||||
* \param AccessPermission  Data access permissions, allows you to configure read/write access for User and Privileged mode.
 | 
			
		||||
* \param AccessAttributes  Memory access attribution, see \ref ARM_MPU_ACCESS_.
 | 
			
		||||
* \param SubRegionDisable  Sub-region disable field.
 | 
			
		||||
* \param Size              Region size of the region to be configured, for example 4K, 8K.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size)    \
 | 
			
		||||
  ((((DisableExec)      << MPU_RASR_XN_Pos)   & MPU_RASR_XN_Msk)                                  | \
 | 
			
		||||
   (((AccessPermission) << MPU_RASR_AP_Pos)   & MPU_RASR_AP_Msk)                                  | \
 | 
			
		||||
   (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \
 | 
			
		||||
   (((SubRegionDisable) << MPU_RASR_SRD_Pos)  & MPU_RASR_SRD_Msk)                                 | \
 | 
			
		||||
   (((Size)             << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk)                                | \
 | 
			
		||||
   (((MPU_RASR_ENABLE_Msk))))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Region Attribute and Size Register Value
 | 
			
		||||
* 
 | 
			
		||||
* \param DisableExec       Instruction access disable bit, 1= disable instruction fetches.
 | 
			
		||||
* \param AccessPermission  Data access permissions, allows you to configure read/write access for User and Privileged mode.
 | 
			
		||||
* \param TypeExtField      Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.
 | 
			
		||||
* \param IsShareable       Region is shareable between multiple bus masters.
 | 
			
		||||
* \param IsCacheable       Region is cacheable, i.e. its value may be kept in cache.
 | 
			
		||||
* \param IsBufferable      Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.
 | 
			
		||||
* \param SubRegionDisable  Sub-region disable field.
 | 
			
		||||
* \param Size              Region size of the region to be configured, for example 4K, 8K.
 | 
			
		||||
*/                         
 | 
			
		||||
#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \
 | 
			
		||||
  ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute for strongly ordered memory.
 | 
			
		||||
*  - TEX: 000b
 | 
			
		||||
*  - Shareable
 | 
			
		||||
*  - Non-cacheable
 | 
			
		||||
*  - Non-bufferable
 | 
			
		||||
*/ 
 | 
			
		||||
#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute for device memory.
 | 
			
		||||
*  - TEX: 000b (if shareable) or 010b (if non-shareable)
 | 
			
		||||
*  - Shareable or non-shareable
 | 
			
		||||
*  - Non-cacheable
 | 
			
		||||
*  - Bufferable (if shareable) or non-bufferable (if non-shareable)
 | 
			
		||||
*
 | 
			
		||||
* \param IsShareable Configures the device memory as shareable or non-shareable.
 | 
			
		||||
*/ 
 | 
			
		||||
#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute for normal memory.
 | 
			
		||||
*  - TEX: 1BBb (reflecting outer cacheability rules)
 | 
			
		||||
*  - Shareable or non-shareable
 | 
			
		||||
*  - Cacheable or non-cacheable (reflecting inner cacheability rules)
 | 
			
		||||
*  - Bufferable or non-bufferable (reflecting inner cacheability rules)
 | 
			
		||||
*
 | 
			
		||||
* \param OuterCp Configures the outer cache policy.
 | 
			
		||||
* \param InnerCp Configures the inner cache policy.
 | 
			
		||||
* \param IsShareable Configures the memory as shareable or non-shareable.
 | 
			
		||||
*/ 
 | 
			
		||||
#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) & 2U), ((InnerCp) & 1U))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute non-cacheable policy.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_CACHEP_NOCACHE 0U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute write-back, write and read allocate policy.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_CACHEP_WB_WRA 1U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute write-through, no write allocate policy.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_CACHEP_WT_NWA 2U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute write-back, no write allocate policy.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_CACHEP_WB_NWA 3U
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* Struct for a single MPU Region
 | 
			
		||||
*/
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint32_t RBAR; //!< The region base address register value (RBAR)
 | 
			
		||||
  uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR
 | 
			
		||||
} ARM_MPU_Region_t;
 | 
			
		||||
    
 | 
			
		||||
/** Enable the MPU.
 | 
			
		||||
* \param MPU_Control Default access permissions for unconfigured regions.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control)
 | 
			
		||||
{
 | 
			
		||||
  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Disable the MPU.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Disable(void)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  MPU->CTRL  &= ~MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Clear and disable the given MPU region.
 | 
			
		||||
* \param rnr Region number to be cleared.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr)
 | 
			
		||||
{
 | 
			
		||||
  MPU->RNR = rnr;
 | 
			
		||||
  MPU->RASR = 0U;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Configure an MPU region.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rsar Value for RSAR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr)
 | 
			
		||||
{
 | 
			
		||||
  MPU->RBAR = rbar;
 | 
			
		||||
  MPU->RASR = rasr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Configure the given MPU region.
 | 
			
		||||
* \param rnr Region number to be configured.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rsar Value for RSAR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr)
 | 
			
		||||
{
 | 
			
		||||
  MPU->RNR = rnr;
 | 
			
		||||
  MPU->RBAR = rbar;
 | 
			
		||||
  MPU->RASR = rasr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Memcopy with strictly ordered memory access, e.g. for register targets.
 | 
			
		||||
* \param dst Destination data is copied to.
 | 
			
		||||
* \param src Source data is copied from.
 | 
			
		||||
* \param len Amount of data words to be copied.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
  for (i = 0U; i < len; ++i) 
 | 
			
		||||
  {
 | 
			
		||||
    dst[i] = src[i];
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Load the given number of MPU regions from a table.
 | 
			
		||||
* \param table Pointer to the MPU configuration table.
 | 
			
		||||
* \param cnt Amount of regions to be configured.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) 
 | 
			
		||||
{
 | 
			
		||||
  const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U;
 | 
			
		||||
  while (cnt > MPU_TYPE_RALIASES) {
 | 
			
		||||
    ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize);
 | 
			
		||||
    table += MPU_TYPE_RALIASES;
 | 
			
		||||
    cnt -= MPU_TYPE_RALIASES;
 | 
			
		||||
  }
 | 
			
		||||
  ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										346
									
								
								exp6/Drivers/CMSIS/Include/mpu_armv8.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										346
									
								
								exp6/Drivers/CMSIS/Include/mpu_armv8.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,346 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     mpu_armv8.h
 | 
			
		||||
 * @brief    CMSIS MPU API for Armv8-M and Armv8.1-M MPU
 | 
			
		||||
 * @version  V5.1.0
 | 
			
		||||
 * @date     08. March 2019
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2017-2019 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header    /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef ARM_MPU_ARMV8_H
 | 
			
		||||
#define ARM_MPU_ARMV8_H
 | 
			
		||||
 | 
			
		||||
/** \brief Attribute for device memory (outer only) */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE                           ( 0U )
 | 
			
		||||
 | 
			
		||||
/** \brief Attribute for non-cacheable, normal memory */
 | 
			
		||||
#define ARM_MPU_ATTR_NON_CACHEABLE                    ( 4U )
 | 
			
		||||
 | 
			
		||||
/** \brief Attribute for normal memory (outer and inner)
 | 
			
		||||
* \param NT Non-Transient: Set to 1 for non-transient data.
 | 
			
		||||
* \param WB Write-Back: Set to 1 to use write-back update policy.
 | 
			
		||||
* \param RA Read Allocation: Set to 1 to use cache allocation on read miss.
 | 
			
		||||
* \param WA Write Allocation: Set to 1 to use cache allocation on write miss.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \
 | 
			
		||||
  (((NT & 1U) << 3U) | ((WB & 1U) << 2U) | ((RA & 1U) << 1U) | (WA & 1U))
 | 
			
		||||
 | 
			
		||||
/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U)
 | 
			
		||||
 | 
			
		||||
/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE_nGnRE  (1U)
 | 
			
		||||
 | 
			
		||||
/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE_nGRE   (2U)
 | 
			
		||||
 | 
			
		||||
/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE_GRE    (3U)
 | 
			
		||||
 | 
			
		||||
/** \brief Memory Attribute
 | 
			
		||||
* \param O Outer memory attributes
 | 
			
		||||
* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_ATTR(O, I) (((O & 0xFU) << 4U) | (((O & 0xFU) != 0U) ? (I & 0xFU) : ((I & 0x3U) << 2U)))
 | 
			
		||||
 | 
			
		||||
/** \brief Normal memory non-shareable  */
 | 
			
		||||
#define ARM_MPU_SH_NON   (0U)
 | 
			
		||||
 | 
			
		||||
/** \brief Normal memory outer shareable  */
 | 
			
		||||
#define ARM_MPU_SH_OUTER (2U)
 | 
			
		||||
 | 
			
		||||
/** \brief Normal memory inner shareable  */
 | 
			
		||||
#define ARM_MPU_SH_INNER (3U)
 | 
			
		||||
 | 
			
		||||
/** \brief Memory access permissions
 | 
			
		||||
* \param RO Read-Only: Set to 1 for read-only memory.
 | 
			
		||||
* \param NP Non-Privileged: Set to 1 for non-privileged memory.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_AP_(RO, NP) (((RO & 1U) << 1U) | (NP & 1U))
 | 
			
		||||
 | 
			
		||||
/** \brief Region Base Address Register value
 | 
			
		||||
* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned.
 | 
			
		||||
* \param SH Defines the Shareability domain for this memory region.
 | 
			
		||||
* \param RO Read-Only: Set to 1 for a read-only memory region.
 | 
			
		||||
* \param NP Non-Privileged: Set to 1 for a non-privileged memory region.
 | 
			
		||||
* \oaram XN eXecute Never: Set to 1 for a non-executable memory region.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \
 | 
			
		||||
  ((BASE & MPU_RBAR_BASE_Msk) | \
 | 
			
		||||
  ((SH << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \
 | 
			
		||||
  ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \
 | 
			
		||||
  ((XN << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk))
 | 
			
		||||
 | 
			
		||||
/** \brief Region Limit Address Register value
 | 
			
		||||
* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended.
 | 
			
		||||
* \param IDX The attribute index to be associated with this memory region.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RLAR(LIMIT, IDX) \
 | 
			
		||||
  ((LIMIT & MPU_RLAR_LIMIT_Msk) | \
 | 
			
		||||
  ((IDX << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \
 | 
			
		||||
  (MPU_RLAR_EN_Msk))
 | 
			
		||||
 | 
			
		||||
#if defined(MPU_RLAR_PXN_Pos)
 | 
			
		||||
  
 | 
			
		||||
/** \brief Region Limit Address Register with PXN value
 | 
			
		||||
* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended.
 | 
			
		||||
* \param PXN Privileged execute never. Defines whether code can be executed from this privileged region.
 | 
			
		||||
* \param IDX The attribute index to be associated with this memory region.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RLAR_PXN(LIMIT, PXN, IDX) \
 | 
			
		||||
  ((LIMIT & MPU_RLAR_LIMIT_Msk) | \
 | 
			
		||||
  ((PXN << MPU_RLAR_PXN_Pos) & MPU_RLAR_PXN_Msk) | \
 | 
			
		||||
  ((IDX << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \
 | 
			
		||||
  (MPU_RLAR_EN_Msk))
 | 
			
		||||
  
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* Struct for a single MPU Region
 | 
			
		||||
*/
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint32_t RBAR;                   /*!< Region Base Address Register value */
 | 
			
		||||
  uint32_t RLAR;                   /*!< Region Limit Address Register value */
 | 
			
		||||
} ARM_MPU_Region_t;
 | 
			
		||||
    
 | 
			
		||||
/** Enable the MPU.
 | 
			
		||||
* \param MPU_Control Default access permissions for unconfigured regions.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control)
 | 
			
		||||
{
 | 
			
		||||
  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Disable the MPU.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Disable(void)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  MPU->CTRL  &= ~MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Enable the Non-secure MPU.
 | 
			
		||||
* \param MPU_Control Default access permissions for unconfigured regions.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control)
 | 
			
		||||
{
 | 
			
		||||
  MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Disable the Non-secure MPU.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Disable_NS(void)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  MPU_NS->CTRL  &= ~MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** Set the memory attribute encoding to the given MPU.
 | 
			
		||||
* \param mpu Pointer to the MPU to be configured.
 | 
			
		||||
* \param idx The attribute index to be set [0-7]
 | 
			
		||||
* \param attr The attribute value to be set.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr)
 | 
			
		||||
{
 | 
			
		||||
  const uint8_t reg = idx / 4U;
 | 
			
		||||
  const uint32_t pos = ((idx % 4U) * 8U);
 | 
			
		||||
  const uint32_t mask = 0xFFU << pos;
 | 
			
		||||
  
 | 
			
		||||
  if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) {
 | 
			
		||||
    return; // invalid index
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Set the memory attribute encoding.
 | 
			
		||||
* \param idx The attribute index to be set [0-7]
 | 
			
		||||
* \param attr The attribute value to be set.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_SetMemAttrEx(MPU, idx, attr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Set the memory attribute encoding to the Non-secure MPU.
 | 
			
		||||
* \param idx The attribute index to be set [0-7]
 | 
			
		||||
* \param attr The attribute value to be set.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** Clear and disable the given MPU region of the given MPU.
 | 
			
		||||
* \param mpu Pointer to MPU to be used.
 | 
			
		||||
* \param rnr Region number to be cleared.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr)
 | 
			
		||||
{
 | 
			
		||||
  mpu->RNR = rnr;
 | 
			
		||||
  mpu->RLAR = 0U;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Clear and disable the given MPU region.
 | 
			
		||||
* \param rnr Region number to be cleared.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_ClrRegionEx(MPU, rnr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Clear and disable the given Non-secure MPU region.
 | 
			
		||||
* \param rnr Region number to be cleared.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr)
 | 
			
		||||
{  
 | 
			
		||||
  ARM_MPU_ClrRegionEx(MPU_NS, rnr);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** Configure the given MPU region of the given MPU.
 | 
			
		||||
* \param mpu Pointer to MPU to be used.
 | 
			
		||||
* \param rnr Region number to be configured.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rlar Value for RLAR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar)
 | 
			
		||||
{
 | 
			
		||||
  mpu->RNR = rnr;
 | 
			
		||||
  mpu->RBAR = rbar;
 | 
			
		||||
  mpu->RLAR = rlar;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Configure the given MPU region.
 | 
			
		||||
* \param rnr Region number to be configured.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rlar Value for RLAR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Configure the given Non-secure MPU region.
 | 
			
		||||
* \param rnr Region number to be configured.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rlar Value for RLAR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar);  
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** Memcopy with strictly ordered memory access, e.g. for register targets.
 | 
			
		||||
* \param dst Destination data is copied to.
 | 
			
		||||
* \param src Source data is copied from.
 | 
			
		||||
* \param len Amount of data words to be copied.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
  for (i = 0U; i < len; ++i) 
 | 
			
		||||
  {
 | 
			
		||||
    dst[i] = src[i];
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Load the given number of MPU regions from a table to the given MPU.
 | 
			
		||||
* \param mpu Pointer to the MPU registers to be used.
 | 
			
		||||
* \param rnr First region number to be configured.
 | 
			
		||||
* \param table Pointer to the MPU configuration table.
 | 
			
		||||
* \param cnt Amount of regions to be configured.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 
 | 
			
		||||
{
 | 
			
		||||
  const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U;
 | 
			
		||||
  if (cnt == 1U) {
 | 
			
		||||
    mpu->RNR = rnr;
 | 
			
		||||
    ARM_MPU_OrderedMemcpy(&(mpu->RBAR), &(table->RBAR), rowWordSize);
 | 
			
		||||
  } else {
 | 
			
		||||
    uint32_t rnrBase   = rnr & ~(MPU_TYPE_RALIASES-1U);
 | 
			
		||||
    uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES;
 | 
			
		||||
    
 | 
			
		||||
    mpu->RNR = rnrBase;
 | 
			
		||||
    while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) {
 | 
			
		||||
      uint32_t c = MPU_TYPE_RALIASES - rnrOffset;
 | 
			
		||||
      ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize);
 | 
			
		||||
      table += c;
 | 
			
		||||
      cnt -= c;
 | 
			
		||||
      rnrOffset = 0U;
 | 
			
		||||
      rnrBase += MPU_TYPE_RALIASES;
 | 
			
		||||
      mpu->RNR = rnrBase;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Load the given number of MPU regions from a table.
 | 
			
		||||
* \param rnr First region number to be configured.
 | 
			
		||||
* \param table Pointer to the MPU configuration table.
 | 
			
		||||
* \param cnt Amount of regions to be configured.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_LoadEx(MPU, rnr, table, cnt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Load the given number of MPU regions from a table to the Non-secure MPU.
 | 
			
		||||
* \param rnr First region number to be configured.
 | 
			
		||||
* \param table Pointer to the MPU configuration table.
 | 
			
		||||
* \param cnt Amount of regions to be configured.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										70
									
								
								exp6/Drivers/CMSIS/Include/tz_context.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								exp6/Drivers/CMSIS/Include/tz_context.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     tz_context.h
 | 
			
		||||
 * @brief    Context Management for Armv8-M TrustZone
 | 
			
		||||
 * @version  V1.0.1
 | 
			
		||||
 * @date     10. January 2018
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2017-2018 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header   /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef TZ_CONTEXT_H
 | 
			
		||||
#define TZ_CONTEXT_H
 | 
			
		||||
 
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 
 | 
			
		||||
#ifndef TZ_MODULEID_T
 | 
			
		||||
#define TZ_MODULEID_T
 | 
			
		||||
/// \details Data type that identifies secure software modules called by a process.
 | 
			
		||||
typedef uint32_t TZ_ModuleId_t;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
/// \details TZ Memory ID identifies an allocated memory slot.
 | 
			
		||||
typedef uint32_t TZ_MemoryId_t;
 | 
			
		||||
  
 | 
			
		||||
/// Initialize secure context memory system
 | 
			
		||||
/// \return execution status (1: success, 0: error)
 | 
			
		||||
uint32_t TZ_InitContextSystem_S (void);
 | 
			
		||||
 
 | 
			
		||||
/// Allocate context memory for calling secure software modules in TrustZone
 | 
			
		||||
/// \param[in]  module   identifies software modules called from non-secure mode
 | 
			
		||||
/// \return value != 0 id TrustZone memory slot identifier
 | 
			
		||||
/// \return value 0    no memory available or internal error
 | 
			
		||||
TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module);
 | 
			
		||||
 
 | 
			
		||||
/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S
 | 
			
		||||
/// \param[in]  id  TrustZone memory slot identifier
 | 
			
		||||
/// \return execution status (1: success, 0: error)
 | 
			
		||||
uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id);
 | 
			
		||||
 
 | 
			
		||||
/// Load secure context (called on RTOS thread context switch)
 | 
			
		||||
/// \param[in]  id  TrustZone memory slot identifier
 | 
			
		||||
/// \return execution status (1: success, 0: error)
 | 
			
		||||
uint32_t TZ_LoadContext_S (TZ_MemoryId_t id);
 | 
			
		||||
 
 | 
			
		||||
/// Store secure context (called on RTOS thread context switch)
 | 
			
		||||
/// \param[in]  id  TrustZone memory slot identifier
 | 
			
		||||
/// \return execution status (1: success, 0: error)
 | 
			
		||||
uint32_t TZ_StoreContext_S (TZ_MemoryId_t id);
 | 
			
		||||
 
 | 
			
		||||
#endif  // TZ_CONTEXT_H
 | 
			
		||||
							
								
								
									
										201
									
								
								exp6/Drivers/CMSIS/LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								exp6/Drivers/CMSIS/LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,201 @@
 | 
			
		||||
                                 Apache License
 | 
			
		||||
                           Version 2.0, January 2004
 | 
			
		||||
                        http://www.apache.org/licenses/
 | 
			
		||||
 | 
			
		||||
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
			
		||||
 | 
			
		||||
   1. Definitions.
 | 
			
		||||
 | 
			
		||||
      "License" shall mean the terms and conditions for use, reproduction,
 | 
			
		||||
      and distribution as defined by Sections 1 through 9 of this document.
 | 
			
		||||
 | 
			
		||||
      "Licensor" shall mean the copyright owner or entity authorized by
 | 
			
		||||
      the copyright owner that is granting the License.
 | 
			
		||||
 | 
			
		||||
      "Legal Entity" shall mean the union of the acting entity and all
 | 
			
		||||
      other entities that control, are controlled by, or are under common
 | 
			
		||||
      control with that entity. For the purposes of this definition,
 | 
			
		||||
      "control" means (i) the power, direct or indirect, to cause the
 | 
			
		||||
      direction or management of such entity, whether by contract or
 | 
			
		||||
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
 | 
			
		||||
      outstanding shares, or (iii) beneficial ownership of such entity.
 | 
			
		||||
 | 
			
		||||
      "You" (or "Your") shall mean an individual or Legal Entity
 | 
			
		||||
      exercising permissions granted by this License.
 | 
			
		||||
 | 
			
		||||
      "Source" form shall mean the preferred form for making modifications,
 | 
			
		||||
      including but not limited to software source code, documentation
 | 
			
		||||
      source, and configuration files.
 | 
			
		||||
 | 
			
		||||
      "Object" form shall mean any form resulting from mechanical
 | 
			
		||||
      transformation or translation of a Source form, including but
 | 
			
		||||
      not limited to compiled object code, generated documentation,
 | 
			
		||||
      and conversions to other media types.
 | 
			
		||||
 | 
			
		||||
      "Work" shall mean the work of authorship, whether in Source or
 | 
			
		||||
      Object form, made available under the License, as indicated by a
 | 
			
		||||
      copyright notice that is included in or attached to the work
 | 
			
		||||
      (an example is provided in the Appendix below).
 | 
			
		||||
 | 
			
		||||
      "Derivative Works" shall mean any work, whether in Source or Object
 | 
			
		||||
      form, that is based on (or derived from) the Work and for which the
 | 
			
		||||
      editorial revisions, annotations, elaborations, or other modifications
 | 
			
		||||
      represent, as a whole, an original work of authorship. For the purposes
 | 
			
		||||
      of this License, Derivative Works shall not include works that remain
 | 
			
		||||
      separable from, or merely link (or bind by name) to the interfaces of,
 | 
			
		||||
      the Work and Derivative Works thereof.
 | 
			
		||||
 | 
			
		||||
      "Contribution" shall mean any work of authorship, including
 | 
			
		||||
      the original version of the Work and any modifications or additions
 | 
			
		||||
      to that Work or Derivative Works thereof, that is intentionally
 | 
			
		||||
      submitted to Licensor for inclusion in the Work by the copyright owner
 | 
			
		||||
      or by an individual or Legal Entity authorized to submit on behalf of
 | 
			
		||||
      the copyright owner. For the purposes of this definition, "submitted"
 | 
			
		||||
      means any form of electronic, verbal, or written communication sent
 | 
			
		||||
      to the Licensor or its representatives, including but not limited to
 | 
			
		||||
      communication on electronic mailing lists, source code control systems,
 | 
			
		||||
      and issue tracking systems that are managed by, or on behalf of, the
 | 
			
		||||
      Licensor for the purpose of discussing and improving the Work, but
 | 
			
		||||
      excluding communication that is conspicuously marked or otherwise
 | 
			
		||||
      designated in writing by the copyright owner as "Not a Contribution."
 | 
			
		||||
 | 
			
		||||
      "Contributor" shall mean Licensor and any individual or Legal Entity
 | 
			
		||||
      on behalf of whom a Contribution has been received by Licensor and
 | 
			
		||||
      subsequently incorporated within the Work.
 | 
			
		||||
 | 
			
		||||
   2. Grant of Copyright License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      copyright license to reproduce, prepare Derivative Works of,
 | 
			
		||||
      publicly display, publicly perform, sublicense, and distribute the
 | 
			
		||||
      Work and such Derivative Works in Source or Object form.
 | 
			
		||||
 | 
			
		||||
   3. Grant of Patent License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      (except as stated in this section) patent license to make, have made,
 | 
			
		||||
      use, offer to sell, sell, import, and otherwise transfer the Work,
 | 
			
		||||
      where such license applies only to those patent claims licensable
 | 
			
		||||
      by such Contributor that are necessarily infringed by their
 | 
			
		||||
      Contribution(s) alone or by combination of their Contribution(s)
 | 
			
		||||
      with the Work to which such Contribution(s) was submitted. If You
 | 
			
		||||
      institute patent litigation against any entity (including a
 | 
			
		||||
      cross-claim or counterclaim in a lawsuit) alleging that the Work
 | 
			
		||||
      or a Contribution incorporated within the Work constitutes direct
 | 
			
		||||
      or contributory patent infringement, then any patent licenses
 | 
			
		||||
      granted to You under this License for that Work shall terminate
 | 
			
		||||
      as of the date such litigation is filed.
 | 
			
		||||
 | 
			
		||||
   4. Redistribution. You may reproduce and distribute copies of the
 | 
			
		||||
      Work or Derivative Works thereof in any medium, with or without
 | 
			
		||||
      modifications, and in Source or Object form, provided that You
 | 
			
		||||
      meet the following conditions:
 | 
			
		||||
 | 
			
		||||
      (a) You must give any other recipients of the Work or
 | 
			
		||||
          Derivative Works a copy of this License; and
 | 
			
		||||
 | 
			
		||||
      (b) You must cause any modified files to carry prominent notices
 | 
			
		||||
          stating that You changed the files; and
 | 
			
		||||
 | 
			
		||||
      (c) You must retain, in the Source form of any Derivative Works
 | 
			
		||||
          that You distribute, all copyright, patent, trademark, and
 | 
			
		||||
          attribution notices from the Source form of the Work,
 | 
			
		||||
          excluding those notices that do not pertain to any part of
 | 
			
		||||
          the Derivative Works; and
 | 
			
		||||
 | 
			
		||||
      (d) If the Work includes a "NOTICE" text file as part of its
 | 
			
		||||
          distribution, then any Derivative Works that You distribute must
 | 
			
		||||
          include a readable copy of the attribution notices contained
 | 
			
		||||
          within such NOTICE file, excluding those notices that do not
 | 
			
		||||
          pertain to any part of the Derivative Works, in at least one
 | 
			
		||||
          of the following places: within a NOTICE text file distributed
 | 
			
		||||
          as part of the Derivative Works; within the Source form or
 | 
			
		||||
          documentation, if provided along with the Derivative Works; or,
 | 
			
		||||
          within a display generated by the Derivative Works, if and
 | 
			
		||||
          wherever such third-party notices normally appear. The contents
 | 
			
		||||
          of the NOTICE file are for informational purposes only and
 | 
			
		||||
          do not modify the License. You may add Your own attribution
 | 
			
		||||
          notices within Derivative Works that You distribute, alongside
 | 
			
		||||
          or as an addendum to the NOTICE text from the Work, provided
 | 
			
		||||
          that such additional attribution notices cannot be construed
 | 
			
		||||
          as modifying the License.
 | 
			
		||||
 | 
			
		||||
      You may add Your own copyright statement to Your modifications and
 | 
			
		||||
      may provide additional or different license terms and conditions
 | 
			
		||||
      for use, reproduction, or distribution of Your modifications, or
 | 
			
		||||
      for any such Derivative Works as a whole, provided Your use,
 | 
			
		||||
      reproduction, and distribution of the Work otherwise complies with
 | 
			
		||||
      the conditions stated in this License.
 | 
			
		||||
 | 
			
		||||
   5. Submission of Contributions. Unless You explicitly state otherwise,
 | 
			
		||||
      any Contribution intentionally submitted for inclusion in the Work
 | 
			
		||||
      by You to the Licensor shall be under the terms and conditions of
 | 
			
		||||
      this License, without any additional terms or conditions.
 | 
			
		||||
      Notwithstanding the above, nothing herein shall supersede or modify
 | 
			
		||||
      the terms of any separate license agreement you may have executed
 | 
			
		||||
      with Licensor regarding such Contributions.
 | 
			
		||||
 | 
			
		||||
   6. Trademarks. This License does not grant permission to use the trade
 | 
			
		||||
      names, trademarks, service marks, or product names of the Licensor,
 | 
			
		||||
      except as required for reasonable and customary use in describing the
 | 
			
		||||
      origin of the Work and reproducing the content of the NOTICE file.
 | 
			
		||||
 | 
			
		||||
   7. Disclaimer of Warranty. Unless required by applicable law or
 | 
			
		||||
      agreed to in writing, Licensor provides the Work (and each
 | 
			
		||||
      Contributor provides its Contributions) on an "AS IS" BASIS,
 | 
			
		||||
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
			
		||||
      implied, including, without limitation, any warranties or conditions
 | 
			
		||||
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 | 
			
		||||
      PARTICULAR PURPOSE. You are solely responsible for determining the
 | 
			
		||||
      appropriateness of using or redistributing the Work and assume any
 | 
			
		||||
      risks associated with Your exercise of permissions under this License.
 | 
			
		||||
 | 
			
		||||
   8. Limitation of Liability. In no event and under no legal theory,
 | 
			
		||||
      whether in tort (including negligence), contract, or otherwise,
 | 
			
		||||
      unless required by applicable law (such as deliberate and grossly
 | 
			
		||||
      negligent acts) or agreed to in writing, shall any Contributor be
 | 
			
		||||
      liable to You for damages, including any direct, indirect, special,
 | 
			
		||||
      incidental, or consequential damages of any character arising as a
 | 
			
		||||
      result of this License or out of the use or inability to use the
 | 
			
		||||
      Work (including but not limited to damages for loss of goodwill,
 | 
			
		||||
      work stoppage, computer failure or malfunction, or any and all
 | 
			
		||||
      other commercial damages or losses), even if such Contributor
 | 
			
		||||
      has been advised of the possibility of such damages.
 | 
			
		||||
 | 
			
		||||
   9. Accepting Warranty or Additional Liability. While redistributing
 | 
			
		||||
      the Work or Derivative Works thereof, You may choose to offer,
 | 
			
		||||
      and charge a fee for, acceptance of support, warranty, indemnity,
 | 
			
		||||
      or other liability obligations and/or rights consistent with this
 | 
			
		||||
      License. However, in accepting such obligations, You may act only
 | 
			
		||||
      on Your own behalf and on Your sole responsibility, not on behalf
 | 
			
		||||
      of any other Contributor, and only if You agree to indemnify,
 | 
			
		||||
      defend, and hold each Contributor harmless for any liability
 | 
			
		||||
      incurred by, or claims asserted against, such Contributor by reason
 | 
			
		||||
      of your accepting any such warranty or additional liability.
 | 
			
		||||
 | 
			
		||||
   END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
   APPENDIX: How to apply the Apache License to your work.
 | 
			
		||||
 | 
			
		||||
      To apply the Apache License to your work, attach the following
 | 
			
		||||
      boilerplate notice, with the fields enclosed by brackets "{}"
 | 
			
		||||
      replaced with your own identifying information. (Don't include
 | 
			
		||||
      the brackets!)  The text should be enclosed in the appropriate
 | 
			
		||||
      comment syntax for the file format. We also recommend that a
 | 
			
		||||
      file or class name and description of purpose be included on the
 | 
			
		||||
      same "printed page" as the copyright notice for easier
 | 
			
		||||
      identification within third-party archives.
 | 
			
		||||
 | 
			
		||||
   Copyright {yyyy} {name of copyright owner}
 | 
			
		||||
 | 
			
		||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
   you may not use this file except in compliance with the License.
 | 
			
		||||
   You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
       http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
   Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
   See the License for the specific language governing permissions and
 | 
			
		||||
   limitations under the License.
 | 
			
		||||
							
								
								
									
										4374
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4374
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										629
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										629
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,629 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   This file contains all the functions prototypes for the HAL
 | 
			
		||||
  *          module driver.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_HAL_H
 | 
			
		||||
#define STM32G4xx_HAL_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_conf.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup HAL HAL
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Constants HAL Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_TICK_FREQ Tick Frequency
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_TICK_FREQ_10HZ         100U
 | 
			
		||||
#define HAL_TICK_FREQ_100HZ        10U
 | 
			
		||||
#define HAL_TICK_FREQ_1KHZ         1U
 | 
			
		||||
#define HAL_TICK_FREQ_DEFAULT      HAL_TICK_FREQ_1KHZ
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup SYSCFG_Exported_Constants SYSCFG Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup SYSCFG_BootMode Boot Mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SYSCFG_BOOT_MAINFLASH          0x00000000U
 | 
			
		||||
#define SYSCFG_BOOT_SYSTEMFLASH        SYSCFG_MEMMEMRMP_MODE_0
 | 
			
		||||
 | 
			
		||||
#if defined (FMC_BANK1)
 | 
			
		||||
#define SYSCFG_BOOT_FMC                SYSCFG_MEMMEMRMP_MODE_1
 | 
			
		||||
#endif /* FMC_BANK1 */
 | 
			
		||||
 | 
			
		||||
#define SYSCFG_BOOT_SRAM               (SYSCFG_MEMMEMRMP_MODE_1 | SYSCFG_MEMMEMRMP_MODE_0)
 | 
			
		||||
 | 
			
		||||
#if defined (QUADSPI)
 | 
			
		||||
#define SYSCFG_BOOT_QUADSPI            (SYSCFG_MEMMEMRMP_MODE_2 | SYSCFG_MEMMEMRMP_MODE_1)
 | 
			
		||||
#endif /* QUADSPI */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup SYSCFG_FPU_Interrupts FPU Interrupts
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SYSCFG_IT_FPU_IOC              SYSCFG_CFGR1_FPU_IE_0  /*!< Floating Point Unit Invalid operation Interrupt */
 | 
			
		||||
#define SYSCFG_IT_FPU_DZC              SYSCFG_CFGR1_FPU_IE_1  /*!< Floating Point Unit Divide-by-zero Interrupt */
 | 
			
		||||
#define SYSCFG_IT_FPU_UFC              SYSCFG_CFGR1_FPU_IE_2  /*!< Floating Point Unit Underflow Interrupt */
 | 
			
		||||
#define SYSCFG_IT_FPU_OFC              SYSCFG_CFGR1_FPU_IE_3  /*!< Floating Point Unit Overflow Interrupt */
 | 
			
		||||
#define SYSCFG_IT_FPU_IDC              SYSCFG_CFGR1_FPU_IE_4  /*!< Floating Point Unit Input denormal Interrupt */
 | 
			
		||||
#define SYSCFG_IT_FPU_IXC              SYSCFG_CFGR1_FPU_IE_5  /*!< Floating Point Unit Inexact Interrupt */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup SYSCFG_CCMSRAMWRP CCM Write protection
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE0          SYSCFG_SWPR_PAGE0  /*!< CCMSRAM Write protection page 0 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE1          SYSCFG_SWPR_PAGE1  /*!< CCMSRAM Write protection page 1 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE2          SYSCFG_SWPR_PAGE2  /*!< CCMSRAM Write protection page 2 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE3          SYSCFG_SWPR_PAGE3  /*!< CCMSRAM Write protection page 3 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE4          SYSCFG_SWPR_PAGE4  /*!< CCMSRAM Write protection page 4 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE5          SYSCFG_SWPR_PAGE5  /*!< CCMSRAM Write protection page 5 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE6          SYSCFG_SWPR_PAGE6  /*!< CCMSRAM Write protection page 6 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE7          SYSCFG_SWPR_PAGE7  /*!< CCMSRAM Write protection page 7 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE8          SYSCFG_SWPR_PAGE8  /*!< CCMSRAM Write protection page 8 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE9          SYSCFG_SWPR_PAGE9  /*!< CCMSRAM Write protection page 9 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE10         SYSCFG_SWPR_PAGE10 /*!< CCMSRAM Write protection page 10 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE11         SYSCFG_SWPR_PAGE11 /*!< CCMSRAM Write protection page 11 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE12         SYSCFG_SWPR_PAGE12 /*!< CCMSRAM Write protection page 12 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE13         SYSCFG_SWPR_PAGE13 /*!< CCMSRAM Write protection page 13 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE14         SYSCFG_SWPR_PAGE14 /*!< CCMSRAM Write protection page 14 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE15         SYSCFG_SWPR_PAGE15 /*!< CCMSRAM Write protection page 15 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE16         SYSCFG_SWPR_PAGE16 /*!< CCMSRAM Write protection page 16 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE17         SYSCFG_SWPR_PAGE17 /*!< CCMSRAM Write protection page 17 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE18         SYSCFG_SWPR_PAGE18 /*!< CCMSRAM Write protection page 18 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE19         SYSCFG_SWPR_PAGE19 /*!< CCMSRAM Write protection page 19 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE20         SYSCFG_SWPR_PAGE20 /*!< CCMSRAM Write protection page 20 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE21         SYSCFG_SWPR_PAGE21 /*!< CCMSRAM Write protection page 21 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE22         SYSCFG_SWPR_PAGE22 /*!< CCMSRAM Write protection page 22 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE23         SYSCFG_SWPR_PAGE23 /*!< CCMSRAM Write protection page 23 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE24         SYSCFG_SWPR_PAGE24 /*!< CCMSRAM Write protection page 24 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE25         SYSCFG_SWPR_PAGE25 /*!< CCMSRAM Write protection page 25 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE26         SYSCFG_SWPR_PAGE26 /*!< CCMSRAM Write protection page 26 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE27         SYSCFG_SWPR_PAGE27 /*!< CCMSRAM Write protection page 27 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE28         SYSCFG_SWPR_PAGE28 /*!< CCMSRAM Write protection page 28 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE29         SYSCFG_SWPR_PAGE29 /*!< CCMSRAM Write protection page 29 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE30         SYSCFG_SWPR_PAGE30 /*!< CCMSRAM Write protection page 30 */
 | 
			
		||||
#define SYSCFG_CCMSRAMWRP_PAGE31         SYSCFG_SWPR_PAGE31 /*!< CCMSRAM Write protection page 31 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(VREFBUF)
 | 
			
		||||
/** @defgroup SYSCFG_VREFBUF_VoltageScale VREFBUF Voltage Scale
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SYSCFG_VREFBUF_VOLTAGE_SCALE0  0x00000000U /*!< Voltage reference scale 0 (VREFBUF_OUT = 2.048V) */
 | 
			
		||||
#define SYSCFG_VREFBUF_VOLTAGE_SCALE1  VREFBUF_CSR_VRS_0      /*!< Voltage reference scale 1 (VREFBUF_OUT = 2.5V)   */
 | 
			
		||||
#define SYSCFG_VREFBUF_VOLTAGE_SCALE2  VREFBUF_CSR_VRS_1      /*!< Voltage reference scale 2 (VREFBUF_OUT = 2.9V)   */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup SYSCFG_VREFBUF_HighImpedance VREFBUF High Impedance
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE  0x00000000U       /*!< VREF_plus pin is internally connected to Voltage reference buffer output */
 | 
			
		||||
#define SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE   VREFBUF_CSR_HIZ       /*!< VREF_plus pin is high impedance */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* VREFBUF */
 | 
			
		||||
 | 
			
		||||
/** @defgroup SYSCFG_flags_definition Flags
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define SYSCFG_FLAG_SRAM_PE             SYSCFG_CFGR2_SPF       /*!< SRAM parity error (first 32kB of SRAM1 + CCM SRAM) */
 | 
			
		||||
#define SYSCFG_FLAG_CCMSRAM_BUSY        SYSCFG_SCSR_CCMBSY     /*!< CCMSRAM busy by erase operation */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup SYSCFG_FastModePlus_GPIO Fast-mode Plus on GPIO
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @brief  Fast-mode Plus driving capability on a specific GPIO
 | 
			
		||||
  */
 | 
			
		||||
#define SYSCFG_FASTMODEPLUS_PB6        SYSCFG_CFGR1_I2C_PB6_FMP  /*!< Enable Fast-mode Plus on PB6 */
 | 
			
		||||
#define SYSCFG_FASTMODEPLUS_PB7        SYSCFG_CFGR1_I2C_PB7_FMP  /*!< Enable Fast-mode Plus on PB7 */
 | 
			
		||||
#if defined(SYSCFG_CFGR1_I2C_PB8_FMP)
 | 
			
		||||
#define SYSCFG_FASTMODEPLUS_PB8        SYSCFG_CFGR1_I2C_PB8_FMP  /*!< Enable Fast-mode Plus on PB8 */
 | 
			
		||||
#endif /* SYSCFG_CFGR1_I2C_PB8_FMP */
 | 
			
		||||
#if defined(SYSCFG_CFGR1_I2C_PB9_FMP)
 | 
			
		||||
#define SYSCFG_FASTMODEPLUS_PB9        SYSCFG_CFGR1_I2C_PB9_FMP  /*!< Enable Fast-mode Plus on PB9 */
 | 
			
		||||
#endif /* SYSCFG_CFGR1_I2C_PB9_FMP */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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_RTC_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_RTC()            SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_RTC_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_RTC()          CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_RTC_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB1FZR1_DBG_RTC_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_TIMEOUT()   SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C1_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() 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_TIMEOUT()   SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C2_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C2_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB1FZR1_DBG_I2C2_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB1FZR1_DBG_I2C3_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT()   SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C3_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT() CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_I2C3_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB1FZR1_DBG_I2C3_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB1FZR1_DBG_LPTIM1_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_LPTIM1()         SET_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_LPTIM1_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_LPTIM1()       CLEAR_BIT(DBGMCU->APB1FZR1, DBGMCU_APB1FZR1_DBG_LPTIM1_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB1FZR1_DBG_LPTIM1_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB1FZR2_DBG_I2C4_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_I2C4_TIMEOUT()   SET_BIT(DBGMCU->APB1FZR2, DBGMCU_APB1FZR2_DBG_I2C4_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_I2C4_TIMEOUT() CLEAR_BIT(DBGMCU->APB1FZR2, DBGMCU_APB1FZR2_DBG_I2C4_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB1FZR2_DBG_I2C4_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB2FZ_DBG_TIM1_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM1()           SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM1_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM1()         CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM1_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB2FZ_DBG_TIM1_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB2FZ_DBG_TIM8_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM8()           SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM8_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM8()         CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM8_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB2FZ_DBG_TIM8_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB2FZ_DBG_TIM15_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM15()          SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM15_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM15()        CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM15_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB2FZ_DBG_TIM15_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB2FZ_DBG_TIM16_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM16()          SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM16_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM16()        CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM16_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB2FZ_DBG_TIM16_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB2FZ_DBG_TIM17_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM17()          SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM17_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM17()        CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM17_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB2FZ_DBG_TIM17_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB2FZ_DBG_TIM20_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM20()          SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM20_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM20()        CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_TIM20_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB2FZ_DBG_TIM20_STOP */
 | 
			
		||||
 | 
			
		||||
#if defined(DBGMCU_APB2FZ_DBG_HRTIM1_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_HRTIM1()         SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_HRTIM1_STOP)
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_HRTIM1()       CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2FZ_DBG_HRTIM1_STOP)
 | 
			
		||||
#endif /* DBGMCU_APB2FZ_DBG_HRTIM1_STOP */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup SYSCFG_Exported_Macros SYSCFG Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @brief  Main Flash memory mapped at 0x00000000.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_FLASH()       CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE)
 | 
			
		||||
 | 
			
		||||
/** @brief  System Flash memory mapped at 0x00000000.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH() MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, SYSCFG_MEMRMP_MEM_MODE_0)
 | 
			
		||||
 | 
			
		||||
/** @brief  Embedded SRAM mapped at 0x00000000.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_SRAM()        MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, (SYSCFG_MEMRMP_MEM_MODE_1|SYSCFG_MEMRMP_MEM_MODE_0))
 | 
			
		||||
 | 
			
		||||
#if defined (FMC_BANK1)
 | 
			
		||||
/** @brief  FMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_FMC()         MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, SYSCFG_MEMRMP_MEM_MODE_1)
 | 
			
		||||
#endif /* FMC_BANK1 */
 | 
			
		||||
 | 
			
		||||
#if defined (QUADSPI)
 | 
			
		||||
/** @brief  QUADSPI mapped at 0x00000000.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_QUADSPI()     MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, (SYSCFG_MEMRMP_MEM_MODE_2|SYSCFG_MEMRMP_MEM_MODE_1))
 | 
			
		||||
#endif /* QUADSPI */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the boot mode as configured by user.
 | 
			
		||||
  * @retval The boot mode as configured by user. The returned value can be one
 | 
			
		||||
  *         of the following values:
 | 
			
		||||
  *           @arg @ref SYSCFG_BOOT_MAINFLASH
 | 
			
		||||
  *           @arg @ref SYSCFG_BOOT_SYSTEMFLASH
 | 
			
		||||
  *           @arg @ref SYSCFG_BOOT_FMC (*)
 | 
			
		||||
  *           @arg @ref SYSCFG_BOOT_QUADSPI (*)
 | 
			
		||||
  *           @arg @ref SYSCFG_BOOT_SRAM
 | 
			
		||||
  * @note   (*) availability depends on devices
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_GET_BOOT_MODE()           READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE)
 | 
			
		||||
 | 
			
		||||
/** @brief  CCMSRAM page write protection enable macro
 | 
			
		||||
  * @param __CCMSRAMWRP__: This parameter can be a value of @ref SYSCFG_CCMSRAMWRP
 | 
			
		||||
  * @note   write protection can only be disabled by a system reset
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
/* Legacy define */
 | 
			
		||||
#define __HAL_SYSCFG_CCMSRAM_WRP_1_31_ENABLE   __HAL_SYSCFG_CCMSRAM_WRP_0_31_ENABLE
 | 
			
		||||
#define __HAL_SYSCFG_CCMSRAM_WRP_0_31_ENABLE(__CCMSRAMWRP__)    do {assert_param(IS_SYSCFG_CCMSRAMWRP_PAGE((__CCMSRAMWRP__)));\
 | 
			
		||||
                                                                     SET_BIT(SYSCFG->SWPR,(__CCMSRAMWRP__));\
 | 
			
		||||
                                                                   }while(0)
 | 
			
		||||
 | 
			
		||||
/** @brief  CCMSRAM page write protection unlock prior to erase
 | 
			
		||||
  * @note   Writing a wrong key reactivates the write protection
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_CCMSRAM_WRP_UNLOCK()    do {SYSCFG->SKR = 0xCA;\
 | 
			
		||||
                                                  SYSCFG->SKR = 0x53;\
 | 
			
		||||
                                                }while(0)
 | 
			
		||||
 | 
			
		||||
/** @brief  CCMSRAM erase
 | 
			
		||||
  * @note   __SYSCFG_GET_FLAG(SYSCFG_FLAG_CCMSRAM_BUSY) may be used to check end of erase
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_CCMSRAM_ERASE()         SET_BIT(SYSCFG->SCSR, SYSCFG_SCSR_CCMER)
 | 
			
		||||
 | 
			
		||||
/** @brief  Floating Point Unit interrupt enable/disable macros
 | 
			
		||||
  * @param __INTERRUPT__: This parameter can be a value of @ref SYSCFG_FPU_Interrupts
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_FPU_INTERRUPT_ENABLE(__INTERRUPT__)    do {assert_param(IS_SYSCFG_FPU_INTERRUPT((__INTERRUPT__)));\
 | 
			
		||||
                                                                 SET_BIT(SYSCFG->CFGR1, (__INTERRUPT__));\
 | 
			
		||||
                                                               }while(0)
 | 
			
		||||
 | 
			
		||||
#define __HAL_SYSCFG_FPU_INTERRUPT_DISABLE(__INTERRUPT__)   do {assert_param(IS_SYSCFG_FPU_INTERRUPT((__INTERRUPT__)));\
 | 
			
		||||
                                                                 CLEAR_BIT(SYSCFG->CFGR1, (__INTERRUPT__));\
 | 
			
		||||
                                                               }while(0)
 | 
			
		||||
 | 
			
		||||
/** @brief  SYSCFG 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_SYSCFG_BREAK_ECC_LOCK()        SET_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_ECCL)
 | 
			
		||||
 | 
			
		||||
/** @brief  SYSCFG Break Cortex-M4 Lockup lock.
 | 
			
		||||
  *         Enable and lock the connection of Cortex-M4 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_SYSCFG_BREAK_LOCKUP_LOCK()     SET_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_CLL)
 | 
			
		||||
 | 
			
		||||
/** @brief  SYSCFG 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_SYSCFG_BREAK_PVD_LOCK()        SET_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_PVDL)
 | 
			
		||||
 | 
			
		||||
/** @brief  SYSCFG Break SRAM parity lock.
 | 
			
		||||
  *         Enable and lock the SRAM parity error (first 32kB of SRAM1 + CCM SRAM) signal connection to TIM1/8/15/16/17 Break input.
 | 
			
		||||
  * @note   The selected configuration is locked and can be unlocked by system reset.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_BREAK_SRAMPARITY_LOCK() SET_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_SPL)
 | 
			
		||||
 | 
			
		||||
/** @brief  Check SYSCFG flag is set or not.
 | 
			
		||||
  * @param  __FLAG__: specifies the flag to check.
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *            @arg @ref SYSCFG_FLAG_SRAM_PE   SRAM Parity Error Flag
 | 
			
		||||
  *            @arg @ref SYSCFG_FLAG_CCMSRAM_BUSY CCMSRAM Erase Ongoing
 | 
			
		||||
  * @retval The new state of __FLAG__ (TRUE or FALSE).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_GET_FLAG(__FLAG__)      ((((((__FLAG__) == SYSCFG_SCSR_CCMBSY)? SYSCFG->SCSR : SYSCFG->CFGR2)\
 | 
			
		||||
                                                & (__FLAG__))!= 0U) ? 1U : 0U)
 | 
			
		||||
 | 
			
		||||
/** @brief  Set the SPF bit to clear the SRAM Parity Error Flag.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_CLEAR_FLAG()            SET_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_SPF)
 | 
			
		||||
 | 
			
		||||
/** @brief  Fast-mode Plus driving capability enable/disable macros
 | 
			
		||||
  * @param __FASTMODEPLUS__: This parameter can be a value of :
 | 
			
		||||
  *     @arg @ref SYSCFG_FASTMODEPLUS_PB6 Fast-mode Plus driving capability activation on PB6
 | 
			
		||||
  *     @arg @ref SYSCFG_FASTMODEPLUS_PB7 Fast-mode Plus driving capability activation on PB7
 | 
			
		||||
  *     @arg @ref SYSCFG_FASTMODEPLUS_PB8 Fast-mode Plus driving capability activation on PB8
 | 
			
		||||
  *     @arg @ref SYSCFG_FASTMODEPLUS_PB9 Fast-mode Plus driving capability activation on PB9
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_FASTMODEPLUS_ENABLE(__FASTMODEPLUS__)  do {assert_param(IS_SYSCFG_FASTMODEPLUS((__FASTMODEPLUS__)));\
 | 
			
		||||
                                                                 SET_BIT(SYSCFG->CFGR1, (__FASTMODEPLUS__));\
 | 
			
		||||
                                                               }while(0)
 | 
			
		||||
 | 
			
		||||
#define __HAL_SYSCFG_FASTMODEPLUS_DISABLE(__FASTMODEPLUS__) do {assert_param(IS_SYSCFG_FASTMODEPLUS((__FASTMODEPLUS__)));\
 | 
			
		||||
                                                                 CLEAR_BIT(SYSCFG->CFGR1, (__FASTMODEPLUS__));\
 | 
			
		||||
                                                               }while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup SYSCFG_Private_Macros SYSCFG Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define IS_SYSCFG_FPU_INTERRUPT(__INTERRUPT__) ((((__INTERRUPT__) & SYSCFG_IT_FPU_IOC) == SYSCFG_IT_FPU_IOC) || \
 | 
			
		||||
                                                (((__INTERRUPT__) & SYSCFG_IT_FPU_DZC) == SYSCFG_IT_FPU_DZC) || \
 | 
			
		||||
                                                (((__INTERRUPT__) & SYSCFG_IT_FPU_UFC) == SYSCFG_IT_FPU_UFC) || \
 | 
			
		||||
                                                (((__INTERRUPT__) & SYSCFG_IT_FPU_OFC) == SYSCFG_IT_FPU_OFC) || \
 | 
			
		||||
                                                (((__INTERRUPT__) & SYSCFG_IT_FPU_IDC) == SYSCFG_IT_FPU_IDC) || \
 | 
			
		||||
                                                (((__INTERRUPT__) & SYSCFG_IT_FPU_IXC) == SYSCFG_IT_FPU_IXC))
 | 
			
		||||
 | 
			
		||||
#define IS_SYSCFG_BREAK_CONFIG(__CONFIG__) (((__CONFIG__) == SYSCFG_BREAK_ECC)           || \
 | 
			
		||||
                                            ((__CONFIG__) == SYSCFG_BREAK_PVD)           || \
 | 
			
		||||
                                            ((__CONFIG__) == SYSCFG_BREAK_SRAMPARITY)    || \
 | 
			
		||||
                                            ((__CONFIG__) == SYSCFG_BREAK_LOCKUP))
 | 
			
		||||
 | 
			
		||||
#if (CCMSRAM_SIZE == 0x00008000UL) || (CCMSRAM_SIZE == 0x00004000UL)
 | 
			
		||||
#define IS_SYSCFG_CCMSRAMWRP_PAGE(__PAGE__)  ((__PAGE__) > 0U)
 | 
			
		||||
#elif (CCMSRAM_SIZE == 0x00002800UL)
 | 
			
		||||
#define IS_SYSCFG_CCMSRAMWRP_PAGE(__PAGE__)  (((__PAGE__) > 0U) && ((__PAGE__) <= 0x000003FFU))
 | 
			
		||||
#endif /* CCMSRAM_SIZE */
 | 
			
		||||
 | 
			
		||||
#if defined(VREFBUF)
 | 
			
		||||
#define IS_SYSCFG_VREFBUF_VOLTAGE_SCALE(__SCALE__)  (((__SCALE__) == SYSCFG_VREFBUF_VOLTAGE_SCALE0) || \
 | 
			
		||||
                                                     ((__SCALE__) == SYSCFG_VREFBUF_VOLTAGE_SCALE1) || \
 | 
			
		||||
                                                     ((__SCALE__) == SYSCFG_VREFBUF_VOLTAGE_SCALE2))
 | 
			
		||||
 | 
			
		||||
#define IS_SYSCFG_VREFBUF_HIGH_IMPEDANCE(__VALUE__)  (((__VALUE__) == SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE) || \
 | 
			
		||||
                                                      ((__VALUE__) == SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_SYSCFG_VREFBUF_TRIMMING(__VALUE__)  (((__VALUE__) > 0U) && ((__VALUE__) <= VREFBUF_CCR_TRIM))
 | 
			
		||||
#endif /* VREFBUF */
 | 
			
		||||
 | 
			
		||||
#if defined(SYSCFG_FASTMODEPLUS_PB8) && defined(SYSCFG_FASTMODEPLUS_PB9)
 | 
			
		||||
#define IS_SYSCFG_FASTMODEPLUS(__PIN__) ((((__PIN__) & SYSCFG_FASTMODEPLUS_PB6) == SYSCFG_FASTMODEPLUS_PB6) || \
 | 
			
		||||
                                         (((__PIN__) & SYSCFG_FASTMODEPLUS_PB7) == SYSCFG_FASTMODEPLUS_PB7) || \
 | 
			
		||||
                                         (((__PIN__) & SYSCFG_FASTMODEPLUS_PB8) == SYSCFG_FASTMODEPLUS_PB8) || \
 | 
			
		||||
                                         (((__PIN__) & SYSCFG_FASTMODEPLUS_PB9) == SYSCFG_FASTMODEPLUS_PB9))
 | 
			
		||||
#elif defined(SYSCFG_FASTMODEPLUS_PB8)
 | 
			
		||||
#define IS_SYSCFG_FASTMODEPLUS(__PIN__) ((((__PIN__) & SYSCFG_FASTMODEPLUS_PB6) == SYSCFG_FASTMODEPLUS_PB6) || \
 | 
			
		||||
                                         (((__PIN__) & SYSCFG_FASTMODEPLUS_PB7) == SYSCFG_FASTMODEPLUS_PB7) || \
 | 
			
		||||
                                         (((__PIN__) & SYSCFG_FASTMODEPLUS_PB8) == SYSCFG_FASTMODEPLUS_PB8))
 | 
			
		||||
#elif defined(SYSCFG_FASTMODEPLUS_PB9)
 | 
			
		||||
#define IS_SYSCFG_FASTMODEPLUS(__PIN__) ((((__PIN__) & SYSCFG_FASTMODEPLUS_PB6) == SYSCFG_FASTMODEPLUS_PB6) || \
 | 
			
		||||
                                         (((__PIN__) & SYSCFG_FASTMODEPLUS_PB7) == SYSCFG_FASTMODEPLUS_PB7) || \
 | 
			
		||||
                                         (((__PIN__) & SYSCFG_FASTMODEPLUS_PB9) == SYSCFG_FASTMODEPLUS_PB9))
 | 
			
		||||
#else
 | 
			
		||||
#define IS_SYSCFG_FASTMODEPLUS(__PIN__) ((((__PIN__) & SYSCFG_FASTMODEPLUS_PB6) == SYSCFG_FASTMODEPLUS_PB6) || \
 | 
			
		||||
                                         (((__PIN__) & SYSCFG_FASTMODEPLUS_PB7) == SYSCFG_FASTMODEPLUS_PB7))
 | 
			
		||||
#endif /* SYSCFG_FASTMODEPLUS_PB */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @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 Configuration 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 HAL Control functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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(uint32_t Freq);
 | 
			
		||||
uint32_t 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_EnableDBGSleepMode(void);
 | 
			
		||||
void HAL_DBGMCU_DisableDBGSleepMode(void);
 | 
			
		||||
void HAL_DBGMCU_EnableDBGStopMode(void);
 | 
			
		||||
void HAL_DBGMCU_DisableDBGStopMode(void);
 | 
			
		||||
void HAL_DBGMCU_EnableDBGStandbyMode(void);
 | 
			
		||||
void HAL_DBGMCU_DisableDBGStandbyMode(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported variables ---------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup HAL_Exported_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
extern __IO uint32_t uwTick;
 | 
			
		||||
extern uint32_t uwTickPrio;
 | 
			
		||||
extern uint32_t uwTickFreq;
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup HAL_Exported_Functions_Group4
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* SYSCFG Control functions  ****************************************************/
 | 
			
		||||
void HAL_SYSCFG_CCMSRAMErase(void);
 | 
			
		||||
void HAL_SYSCFG_EnableMemorySwappingBank(void);
 | 
			
		||||
void HAL_SYSCFG_DisableMemorySwappingBank(void);
 | 
			
		||||
 | 
			
		||||
#if defined(VREFBUF)
 | 
			
		||||
void HAL_SYSCFG_VREFBUF_VoltageScalingConfig(uint32_t VoltageScaling);
 | 
			
		||||
void HAL_SYSCFG_VREFBUF_HighImpedanceConfig(uint32_t Mode);
 | 
			
		||||
void HAL_SYSCFG_VREFBUF_TrimmingConfig(uint32_t TrimmingValue);
 | 
			
		||||
HAL_StatusTypeDef HAL_SYSCFG_EnableVREFBUF(void);
 | 
			
		||||
void HAL_SYSCFG_DisableVREFBUF(void);
 | 
			
		||||
#endif /* VREFBUF */
 | 
			
		||||
 | 
			
		||||
void HAL_SYSCFG_EnableIOSwitchBooster(void);
 | 
			
		||||
void HAL_SYSCFG_DisableIOSwitchBooster(void);
 | 
			
		||||
void HAL_SYSCFG_EnableIOSwitchVDD(void);
 | 
			
		||||
void HAL_SYSCFG_DisableIOSwitchVDD(void);
 | 
			
		||||
 | 
			
		||||
#if defined(CCMSRAM_BASE)
 | 
			
		||||
void HAL_SYSCFG_CCMSRAM_WriteProtectionEnable(uint32_t Page);
 | 
			
		||||
#endif /* CCMSRAM_BASE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_HAL_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										421
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_cortex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										421
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_cortex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,421 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_cortex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of CORTEX HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 __STM32G4xx_HAL_CORTEX_H
 | 
			
		||||
#define __STM32G4xx_HAL_CORTEX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX CORTEX
 | 
			
		||||
  * @brief CORTEX HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_Exported_Types CORTEX Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1)
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition
 | 
			
		||||
  * @brief  MPU Region initialization structure 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
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 number 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.                           */
 | 
			
		||||
  uint8_t                Size;                  /*!< Specifies the size of the region to protect. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Size                   */
 | 
			
		||||
  uint8_t                SubRegionDisable;      /*!< Specifies the number of the subregion protection to disable. 
 | 
			
		||||
                                                     This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF    */
 | 
			
		||||
  uint8_t                TypeExtField;          /*!< Specifies the TEX field level.
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_TEX_Levels                    */
 | 
			
		||||
  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              */
 | 
			
		||||
  uint8_t                IsCacheable;           /*!< Specifies the cacheable status of the region protected. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable              */
 | 
			
		||||
  uint8_t                IsBufferable;          /*!< Specifies the bufferable status of the protected region. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable             */
 | 
			
		||||
}MPU_Region_InitTypeDef;
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_0         0x00000007U /*!< 0 bit  for pre-emption priority,
 | 
			
		||||
                                                      4 bits for subpriority */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_1         0x00000006U /*!< 1 bit  for pre-emption priority,
 | 
			
		||||
                                                      3 bits for subpriority */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_2         0x00000005U /*!< 2 bits for pre-emption priority,
 | 
			
		||||
                                                      2 bits for subpriority */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_3         0x00000004U /*!< 3 bits for pre-emption priority,
 | 
			
		||||
                                                      1 bit  for subpriority */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_4         0x00000003U /*!< 4 bits for pre-emption priority,
 | 
			
		||||
                                                      0 bit  for subpriority */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_SysTick_clock_source CORTEX SysTick clock source
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SYSTICK_CLKSOURCE_HCLK_DIV8       0x00000000U
 | 
			
		||||
#define SYSTICK_CLKSOURCE_HCLK            0x00000004U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1)
 | 
			
		||||
/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control CORTEX MPU HFNMI and PRIVILEGED Access control
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_HFNMI_PRIVDEF_NONE           0x00000000U
 | 
			
		||||
#define  MPU_HARDFAULT_NMI                (MPU_CTRL_HFNMIENA_Msk)
 | 
			
		||||
#define  MPU_PRIVILEGED_DEFAULT           (MPU_CTRL_PRIVDEFENA_Msk)
 | 
			
		||||
#define  MPU_HFNMI_PRIVDEF                (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_REGION_ENABLE           ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_REGION_DISABLE          ((uint8_t)0x00)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_INSTRUCTION_ACCESS_ENABLE      ((uint8_t)0x00)
 | 
			
		||||
#define  MPU_INSTRUCTION_ACCESS_DISABLE     ((uint8_t)0x01)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_ACCESS_SHAREABLE        ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_ACCESS_NOT_SHAREABLE    ((uint8_t)0x00)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_ACCESS_CACHEABLE        ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_ACCESS_NOT_CACHEABLE    ((uint8_t)0x00)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_ACCESS_BUFFERABLE       ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_ACCESS_NOT_BUFFERABLE   ((uint8_t)0x00)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_TEX_Levels CORTEX MPU TEX Levels
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_TEX_LEVEL0              ((uint8_t)0x00)
 | 
			
		||||
#define  MPU_TEX_LEVEL1              ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_TEX_LEVEL2              ((uint8_t)0x02)
 | 
			
		||||
#define  MPU_TEX_LEVEL4              ((uint8_t)0x04)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define   MPU_REGION_SIZE_32B        ((uint8_t)0x04)
 | 
			
		||||
#define   MPU_REGION_SIZE_64B        ((uint8_t)0x05)
 | 
			
		||||
#define   MPU_REGION_SIZE_128B       ((uint8_t)0x06)
 | 
			
		||||
#define   MPU_REGION_SIZE_256B       ((uint8_t)0x07)
 | 
			
		||||
#define   MPU_REGION_SIZE_512B       ((uint8_t)0x08)
 | 
			
		||||
#define   MPU_REGION_SIZE_1KB        ((uint8_t)0x09)
 | 
			
		||||
#define   MPU_REGION_SIZE_2KB        ((uint8_t)0x0A)
 | 
			
		||||
#define   MPU_REGION_SIZE_4KB        ((uint8_t)0x0B)
 | 
			
		||||
#define   MPU_REGION_SIZE_8KB        ((uint8_t)0x0C)
 | 
			
		||||
#define   MPU_REGION_SIZE_16KB       ((uint8_t)0x0D)
 | 
			
		||||
#define   MPU_REGION_SIZE_32KB       ((uint8_t)0x0E)
 | 
			
		||||
#define   MPU_REGION_SIZE_64KB       ((uint8_t)0x0F)
 | 
			
		||||
#define   MPU_REGION_SIZE_128KB      ((uint8_t)0x10)
 | 
			
		||||
#define   MPU_REGION_SIZE_256KB      ((uint8_t)0x11)
 | 
			
		||||
#define   MPU_REGION_SIZE_512KB      ((uint8_t)0x12)
 | 
			
		||||
#define   MPU_REGION_SIZE_1MB        ((uint8_t)0x13)
 | 
			
		||||
#define   MPU_REGION_SIZE_2MB        ((uint8_t)0x14)
 | 
			
		||||
#define   MPU_REGION_SIZE_4MB        ((uint8_t)0x15)
 | 
			
		||||
#define   MPU_REGION_SIZE_8MB        ((uint8_t)0x16)
 | 
			
		||||
#define   MPU_REGION_SIZE_16MB       ((uint8_t)0x17)
 | 
			
		||||
#define   MPU_REGION_SIZE_32MB       ((uint8_t)0x18)
 | 
			
		||||
#define   MPU_REGION_SIZE_64MB       ((uint8_t)0x19)
 | 
			
		||||
#define   MPU_REGION_SIZE_128MB      ((uint8_t)0x1A)
 | 
			
		||||
#define   MPU_REGION_SIZE_256MB      ((uint8_t)0x1B)
 | 
			
		||||
#define   MPU_REGION_SIZE_512MB      ((uint8_t)0x1C)
 | 
			
		||||
#define   MPU_REGION_SIZE_1GB        ((uint8_t)0x1D)
 | 
			
		||||
#define   MPU_REGION_SIZE_2GB        ((uint8_t)0x1E)
 | 
			
		||||
#define   MPU_REGION_SIZE_4GB        ((uint8_t)0x1F)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_REGION_NO_ACCESS        ((uint8_t)0x00)
 | 
			
		||||
#define  MPU_REGION_PRIV_RW          ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_REGION_PRIV_RW_URO      ((uint8_t)0x02)
 | 
			
		||||
#define  MPU_REGION_FULL_ACCESS      ((uint8_t)0x03)
 | 
			
		||||
#define  MPU_REGION_PRIV_RO          ((uint8_t)0x05)
 | 
			
		||||
#define  MPU_REGION_PRIV_RO_URO      ((uint8_t)0x06)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_REGION_NUMBER0          ((uint8_t)0x00)
 | 
			
		||||
#define  MPU_REGION_NUMBER1          ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_REGION_NUMBER2          ((uint8_t)0x02)
 | 
			
		||||
#define  MPU_REGION_NUMBER3          ((uint8_t)0x03)
 | 
			
		||||
#define  MPU_REGION_NUMBER4          ((uint8_t)0x04)
 | 
			
		||||
#define  MPU_REGION_NUMBER5          ((uint8_t)0x05)
 | 
			
		||||
#define  MPU_REGION_NUMBER6          ((uint8_t)0x06)
 | 
			
		||||
#define  MPU_REGION_NUMBER7          ((uint8_t)0x07)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macros -----------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_Exported_Macros CORTEX Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and Configuration functions 
 | 
			
		||||
  * @brief    Initialization and Configuration functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Initialization and Configuration 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_SYSTICK_Config(uint32_t TicksNumb);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions 
 | 
			
		||||
  * @brief   Cortex control functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Peripheral Control functions ***********************************************/
 | 
			
		||||
uint32_t HAL_NVIC_GetPriorityGrouping(void);
 | 
			
		||||
void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* 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);
 | 
			
		||||
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);
 | 
			
		||||
void HAL_SYSTICK_IRQHandler(void);
 | 
			
		||||
void HAL_SYSTICK_Callback(void);
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1)
 | 
			
		||||
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(MPU_Region_InitTypeDef *MPU_Init);
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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) < 0x10U)
 | 
			
		||||
 | 
			
		||||
#define IS_NVIC_SUB_PRIORITY(PRIORITY)         ((PRIORITY) < 0x10U)
 | 
			
		||||
 | 
			
		||||
#define IS_NVIC_DEVICE_IRQ(IRQ)                ((IRQ) > SysTick_IRQn)
 | 
			
		||||
 | 
			
		||||
#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \
 | 
			
		||||
                                       ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8))
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1)
 | 
			
		||||
#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_SHAREABLE) || \
 | 
			
		||||
                                          ((STATE) == MPU_ACCESS_NOT_SHAREABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_ACCESS_CACHEABLE(STATE)   (((STATE) == MPU_ACCESS_CACHEABLE) || \
 | 
			
		||||
                                          ((STATE) == MPU_ACCESS_NOT_CACHEABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_ACCESS_BUFFERABLE(STATE)   (((STATE) == MPU_ACCESS_BUFFERABLE) || \
 | 
			
		||||
                                          ((STATE) == MPU_ACCESS_NOT_BUFFERABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0)  || \
 | 
			
		||||
                                ((TYPE) == MPU_TEX_LEVEL1)  || \
 | 
			
		||||
                                ((TYPE) == MPU_TEX_LEVEL2)  || \
 | 
			
		||||
                                ((TYPE) == MPU_TEX_LEVEL4))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS)   || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_PRIV_RW)     || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_PRIV_RW_URO) || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_FULL_ACCESS) || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_PRIV_RO)     || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_PRIV_RO_URO))
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_REGION_SIZE(SIZE)    (((SIZE) == MPU_REGION_SIZE_32B)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_64B)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_128B)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_256B)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_512B)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_1KB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_2KB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_4KB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_8KB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_16KB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_32KB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_64KB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_128KB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_256KB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_512KB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_1MB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_2MB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_4MB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_8MB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_16MB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_32MB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_64MB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_128MB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_256MB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_512MB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_1GB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_2GB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_4GB))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_SUB_REGION_DISABLE(SUBREGION)  ((SUBREGION) < (uint16_t)0x00FF)
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32G4xx_HAL_CORTEX_H */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										211
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_def.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										211
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_def.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,211 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_def.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   This file contains HAL common defines, enumeration, macros and
 | 
			
		||||
  *          structures definitions.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 __STM32G4xx_HAL_DEF
 | 
			
		||||
#define __STM32G4xx_HAL_DEF
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx.h"
 | 
			
		||||
#include "Legacy/stm32_hal_legacy.h"  /* Aliases file for old names compatibility */
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  HAL Status structures definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_OK       = 0x00U,
 | 
			
		||||
  HAL_ERROR    = 0x01U,
 | 
			
		||||
  HAL_BUSY     = 0x02U,
 | 
			
		||||
  HAL_TIMEOUT  = 0x03U
 | 
			
		||||
} HAL_StatusTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  HAL Lock structures definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_UNLOCKED = 0x00U,
 | 
			
		||||
  HAL_LOCKED   = 0x01U
 | 
			
		||||
} HAL_LockTypeDef;
 | 
			
		||||
 | 
			
		||||
/* Exported macros -----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#define HAL_MAX_DELAY      0xFFFFFFFFU
 | 
			
		||||
 | 
			
		||||
#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         /* To avoid gcc/g++ warnings */
 | 
			
		||||
#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 == 1U)
 | 
			
		||||
/* 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 (0U)
 | 
			
		||||
 | 
			
		||||
#define __HAL_UNLOCK(__HANDLE__)           \
 | 
			
		||||
  do{                                      \
 | 
			
		||||
    (__HANDLE__)->Lock = HAL_UNLOCKED;     \
 | 
			
		||||
  }while (0U)
 | 
			
		||||
#endif /* USE_RTOS */
 | 
			
		||||
 | 
			
		||||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */
 | 
			
		||||
#ifndef __weak
 | 
			
		||||
#define __weak  __attribute__((weak))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef __packed
 | 
			
		||||
#define __packed  __attribute__((packed))
 | 
			
		||||
#endif
 | 
			
		||||
#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
 | 
			
		||||
#ifndef __weak
 | 
			
		||||
#define __weak   __attribute__((weak))
 | 
			
		||||
#endif /* __weak */
 | 
			
		||||
#ifndef __packed
 | 
			
		||||
#define __packed __attribute__((__packed__))
 | 
			
		||||
#endif /* __packed */
 | 
			
		||||
#endif /* __GNUC__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */
 | 
			
		||||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */
 | 
			
		||||
#ifndef __ALIGN_BEGIN
 | 
			
		||||
#define __ALIGN_BEGIN
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef __ALIGN_END
 | 
			
		||||
#define __ALIGN_END      __attribute__ ((aligned (4)))
 | 
			
		||||
#endif
 | 
			
		||||
#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
 | 
			
		||||
#ifndef __ALIGN_END
 | 
			
		||||
#define __ALIGN_END    __attribute__ ((aligned (4U)))
 | 
			
		||||
#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 V5*/
 | 
			
		||||
#define __ALIGN_BEGIN    __align(4U)
 | 
			
		||||
#elif defined (__ICCARM__)    /* IAR Compiler */
 | 
			
		||||
#define __ALIGN_BEGIN
 | 
			
		||||
#endif /* __CC_ARM */
 | 
			
		||||
#endif /* __ALIGN_BEGIN */
 | 
			
		||||
#endif /* __GNUC__ */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  __RAM_FUNC definition
 | 
			
		||||
  */
 | 
			
		||||
#if defined ( __CC_ARM   ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
 | 
			
		||||
/* ARM Compiler V4/V5 and V6
 | 
			
		||||
   --------------------------
 | 
			
		||||
   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
 | 
			
		||||
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
/* ICCARM Compiler
 | 
			
		||||
   ---------------
 | 
			
		||||
   RAM functions are defined using a specific toolchain keyword "__ramfunc".
 | 
			
		||||
*/
 | 
			
		||||
#define __RAM_FUNC __ramfunc
 | 
			
		||||
 | 
			
		||||
#elif defined   (  __GNUC__  )
 | 
			
		||||
/* GNU Compiler
 | 
			
		||||
   ------------
 | 
			
		||||
  RAM functions are defined using a specific toolchain attribute
 | 
			
		||||
   "__attribute__((section(".RamFunc")))".
 | 
			
		||||
*/
 | 
			
		||||
#define __RAM_FUNC __attribute__((section(".RamFunc")))
 | 
			
		||||
 | 
			
		||||
#endif /* __CC_ARM */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  __NOINLINE definition
 | 
			
		||||
  */
 | 
			
		||||
#if defined ( __CC_ARM   ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || defined   (  __GNUC__  )
 | 
			
		||||
/* ARM V4/V5 and V6 & GNU Compiler
 | 
			
		||||
   -------------------------------
 | 
			
		||||
*/
 | 
			
		||||
#define __NOINLINE __attribute__ ( (noinline) )
 | 
			
		||||
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
/* ICCARM Compiler
 | 
			
		||||
   ---------------
 | 
			
		||||
*/
 | 
			
		||||
#define __NOINLINE _Pragma("optimize = no_inline")
 | 
			
		||||
 | 
			
		||||
#endif /* __CC_ARM || __GNUC__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* ___STM32G4xx_HAL_DEF */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										852
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_dma.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										852
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_dma.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,852 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_dma.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of DMA HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 __STM32G4xx_HAL_DMA_H
 | 
			
		||||
#define __STM32G4xx_HAL_DMA_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMA
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMA_Exported_Types DMA Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  DMA Configuration Structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t Request;                   /*!< Specifies the request selected for the specified channel.
 | 
			
		||||
                                           This parameter can be a value of @ref DMA_request */
 | 
			
		||||
 | 
			
		||||
  uint32_t Direction;                 /*!< Specifies if the data will be transferred from memory to peripheral,
 | 
			
		||||
                                           from memory to memory or from peripheral to memory.
 | 
			
		||||
                                           This parameter can be a value of @ref DMA_Data_transfer_direction */
 | 
			
		||||
 | 
			
		||||
  uint32_t PeriphInc;                 /*!< Specifies whether the Peripheral address register should be incremented or not.
 | 
			
		||||
                                           This parameter can be a value of @ref DMA_Peripheral_incremented_mode */
 | 
			
		||||
 | 
			
		||||
  uint32_t MemInc;                    /*!< Specifies whether the memory address register should be incremented or not.
 | 
			
		||||
                                           This parameter can be a value of @ref DMA_Memory_incremented_mode */
 | 
			
		||||
 | 
			
		||||
  uint32_t PeriphDataAlignment;       /*!< Specifies the Peripheral data width.
 | 
			
		||||
                                           This parameter can be a value of @ref DMA_Peripheral_data_size */
 | 
			
		||||
 | 
			
		||||
  uint32_t MemDataAlignment;          /*!< Specifies the Memory data width.
 | 
			
		||||
                                           This parameter can be a value of @ref DMA_Memory_data_size */
 | 
			
		||||
 | 
			
		||||
  uint32_t Mode;                      /*!< Specifies the operation mode of the DMAy Channelx.
 | 
			
		||||
                                           This parameter can be a value of @ref DMA_mode
 | 
			
		||||
                                           @note The circular buffer mode cannot be used if the memory-to-memory
 | 
			
		||||
                                                 data transfer is configured on the selected Channel */
 | 
			
		||||
 | 
			
		||||
  uint32_t Priority;                  /*!< Specifies the software priority for the DMAy Channelx.
 | 
			
		||||
                                           This parameter can be a value of @ref DMA_Priority_level */
 | 
			
		||||
} DMA_InitTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  HAL DMA State structures definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_DMA_STATE_RESET             = 0x00U,  /*!< DMA not yet initialized or disabled    */
 | 
			
		||||
  HAL_DMA_STATE_READY             = 0x01U,  /*!< DMA initialized and ready for use      */
 | 
			
		||||
  HAL_DMA_STATE_BUSY              = 0x02U,  /*!< DMA process is ongoing                 */
 | 
			
		||||
  HAL_DMA_STATE_TIMEOUT           = 0x03U,  /*!< DMA timeout state                     */
 | 
			
		||||
} HAL_DMA_StateTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  HAL DMA Error Code structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_DMA_FULL_TRANSFER      = 0x00U,    /*!< Full transfer     */
 | 
			
		||||
  HAL_DMA_HALF_TRANSFER      = 0x01U     /*!< Half Transfer     */
 | 
			
		||||
} HAL_DMA_LevelCompleteTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  HAL DMA Callback ID structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_DMA_XFER_CPLT_CB_ID          = 0x00U,    /*!< Full transfer     */
 | 
			
		||||
  HAL_DMA_XFER_HALFCPLT_CB_ID      = 0x01U,    /*!< Half transfer     */
 | 
			
		||||
  HAL_DMA_XFER_ERROR_CB_ID         = 0x02U,    /*!< Error             */
 | 
			
		||||
  HAL_DMA_XFER_ABORT_CB_ID         = 0x03U,    /*!< Abort             */
 | 
			
		||||
  HAL_DMA_XFER_ALL_CB_ID           = 0x04U     /*!< All               */
 | 
			
		||||
 | 
			
		||||
} HAL_DMA_CallbackIDTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  DMA handle Structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct __DMA_HandleTypeDef
 | 
			
		||||
{
 | 
			
		||||
  DMA_Channel_TypeDef    *Instance;                                                  /*!< Register base address                */
 | 
			
		||||
 | 
			
		||||
  DMA_InitTypeDef       Init;                                                        /*!< DMA communication parameters         */
 | 
			
		||||
 | 
			
		||||
  HAL_LockTypeDef       Lock;                                                        /*!< DMA locking object                   */
 | 
			
		||||
 | 
			
		||||
  __IO HAL_DMA_StateTypeDef  State;                                                  /*!< DMA transfer state                   */
 | 
			
		||||
 | 
			
		||||
  void                  *Parent;                                                     /*!< Parent object state                  */
 | 
			
		||||
 | 
			
		||||
  void (* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma);                       /*!< DMA transfer complete callback       */
 | 
			
		||||
 | 
			
		||||
  void (* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma);                   /*!< DMA Half transfer complete callback  */
 | 
			
		||||
 | 
			
		||||
  void (* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma);                      /*!< DMA transfer error callback          */
 | 
			
		||||
 | 
			
		||||
  void (* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma);                      /*!< DMA transfer abort callback          */
 | 
			
		||||
 | 
			
		||||
  __IO uint32_t          ErrorCode;                                                  /*!< DMA Error code                       */
 | 
			
		||||
 | 
			
		||||
  DMA_TypeDef            *DmaBaseAddress;                                            /*!< DMA Channel Base Address             */
 | 
			
		||||
 | 
			
		||||
  uint32_t               ChannelIndex;                                               /*!< DMA Channel Index                    */
 | 
			
		||||
 | 
			
		||||
  DMAMUX_Channel_TypeDef           *DMAmuxChannel;                                   /*!< Register base address                */
 | 
			
		||||
 | 
			
		||||
  DMAMUX_ChannelStatus_TypeDef     *DMAmuxChannelStatus;                             /*!< DMAMUX Channels Status Base Address  */
 | 
			
		||||
 | 
			
		||||
  uint32_t                         DMAmuxChannelStatusMask;                          /*!< DMAMUX Channel Status Mask           */
 | 
			
		||||
 | 
			
		||||
  DMAMUX_RequestGen_TypeDef        *DMAmuxRequestGen;                                /*!< DMAMUX request generator Base Address */
 | 
			
		||||
 | 
			
		||||
  DMAMUX_RequestGenStatus_TypeDef  *DMAmuxRequestGenStatus;                          /*!< DMAMUX request generator Address     */
 | 
			
		||||
 | 
			
		||||
  uint32_t                         DMAmuxRequestGenStatusMask;                       /*!< DMAMUX request generator Status mask */
 | 
			
		||||
 | 
			
		||||
} DMA_HandleTypeDef;
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Exported_Constants DMA Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Error_Code DMA Error Code
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_DMA_ERROR_NONE             0x00000000U    /*!< No error                              */
 | 
			
		||||
#define HAL_DMA_ERROR_TE               0x00000001U    /*!< Transfer error                        */
 | 
			
		||||
#define HAL_DMA_ERROR_NO_XFER          0x00000004U    /*!< Abort requested with no Xfer ongoing  */
 | 
			
		||||
#define HAL_DMA_ERROR_TIMEOUT          0x00000020U    /*!< Timeout error                         */
 | 
			
		||||
#define HAL_DMA_ERROR_NOT_SUPPORTED    0x00000100U    /*!< Not supported mode                    */
 | 
			
		||||
#define HAL_DMA_ERROR_SYNC             0x00000200U    /*!< DMAMUX sync overrun  error              */
 | 
			
		||||
#define HAL_DMA_ERROR_REQGEN           0x00000400U    /*!< DMAMUX request generator overrun  error */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_request DMA request
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_REQUEST_MEM2MEM            0U  /*!< memory to memory transfer   */
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_GENERATOR0         1U
 | 
			
		||||
#define DMA_REQUEST_GENERATOR1         2U
 | 
			
		||||
#define DMA_REQUEST_GENERATOR2         3U
 | 
			
		||||
#define DMA_REQUEST_GENERATOR3         4U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_ADC1               5U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_DAC1_CHANNEL1      6U
 | 
			
		||||
#define DMA_REQUEST_DAC1_CHANNEL2      7U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_TIM6_UP            8U
 | 
			
		||||
#define DMA_REQUEST_TIM7_UP            9U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_SPI1_RX           10U
 | 
			
		||||
#define DMA_REQUEST_SPI1_TX           11U
 | 
			
		||||
#define DMA_REQUEST_SPI2_RX           12U
 | 
			
		||||
#define DMA_REQUEST_SPI2_TX           13U
 | 
			
		||||
#define DMA_REQUEST_SPI3_RX           14U
 | 
			
		||||
#define DMA_REQUEST_SPI3_TX           15U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_I2C1_RX           16U
 | 
			
		||||
#define DMA_REQUEST_I2C1_TX           17U
 | 
			
		||||
#define DMA_REQUEST_I2C2_RX           18U
 | 
			
		||||
#define DMA_REQUEST_I2C2_TX           19U
 | 
			
		||||
#define DMA_REQUEST_I2C3_RX           20U
 | 
			
		||||
#define DMA_REQUEST_I2C3_TX           21U
 | 
			
		||||
#if defined (I2C4)
 | 
			
		||||
#define DMA_REQUEST_I2C4_RX           22U
 | 
			
		||||
#define DMA_REQUEST_I2C4_TX           23U
 | 
			
		||||
#endif /* I2C4 */
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_USART1_RX         24U
 | 
			
		||||
#define DMA_REQUEST_USART1_TX         25U
 | 
			
		||||
#define DMA_REQUEST_USART2_RX         26U
 | 
			
		||||
#define DMA_REQUEST_USART2_TX         27U
 | 
			
		||||
#define DMA_REQUEST_USART3_RX         28U
 | 
			
		||||
#define DMA_REQUEST_USART3_TX         29U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_UART4_RX          30U
 | 
			
		||||
#define DMA_REQUEST_UART4_TX          31U
 | 
			
		||||
#if defined (UART5)
 | 
			
		||||
#define DMA_REQUEST_UART5_RX          32U
 | 
			
		||||
#define DMA_REQUEST_UART5_TX          33U
 | 
			
		||||
#endif /* UART5 */
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_LPUART1_RX        34U
 | 
			
		||||
#define DMA_REQUEST_LPUART1_TX        35U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_ADC2              36U
 | 
			
		||||
#if defined (ADC3)
 | 
			
		||||
#define DMA_REQUEST_ADC3              37U
 | 
			
		||||
#endif /* ADC3 */
 | 
			
		||||
#if defined (ADC4)
 | 
			
		||||
#define DMA_REQUEST_ADC4              38U
 | 
			
		||||
#endif /* ADC4 */
 | 
			
		||||
#if defined (ADC5)
 | 
			
		||||
#define DMA_REQUEST_ADC5              39U
 | 
			
		||||
#endif /* ADC5 */
 | 
			
		||||
 | 
			
		||||
#if defined (QUADSPI)
 | 
			
		||||
#define DMA_REQUEST_QUADSPI           40U
 | 
			
		||||
#endif /* QUADSPI */
 | 
			
		||||
 | 
			
		||||
#if defined (DAC2)
 | 
			
		||||
#define DMA_REQUEST_DAC2_CHANNEL1     41U
 | 
			
		||||
#endif /* DAC2 */
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_TIM1_CH1          42U
 | 
			
		||||
#define DMA_REQUEST_TIM1_CH2          43U
 | 
			
		||||
#define DMA_REQUEST_TIM1_CH3          44U
 | 
			
		||||
#define DMA_REQUEST_TIM1_CH4          45U
 | 
			
		||||
#define DMA_REQUEST_TIM1_UP           46U
 | 
			
		||||
#define DMA_REQUEST_TIM1_TRIG         47U
 | 
			
		||||
#define DMA_REQUEST_TIM1_COM          48U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_TIM8_CH1          49U
 | 
			
		||||
#define DMA_REQUEST_TIM8_CH2          50U
 | 
			
		||||
#define DMA_REQUEST_TIM8_CH3          51U
 | 
			
		||||
#define DMA_REQUEST_TIM8_CH4          52U
 | 
			
		||||
#define DMA_REQUEST_TIM8_UP           53U
 | 
			
		||||
#define DMA_REQUEST_TIM8_TRIG         54U
 | 
			
		||||
#define DMA_REQUEST_TIM8_COM          55U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_TIM2_CH1          56U
 | 
			
		||||
#define DMA_REQUEST_TIM2_CH2          57U
 | 
			
		||||
#define DMA_REQUEST_TIM2_CH3          58U
 | 
			
		||||
#define DMA_REQUEST_TIM2_CH4          59U
 | 
			
		||||
#define DMA_REQUEST_TIM2_UP           60U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_TIM3_CH1          61U
 | 
			
		||||
#define DMA_REQUEST_TIM3_CH2          62U
 | 
			
		||||
#define DMA_REQUEST_TIM3_CH3          63U
 | 
			
		||||
#define DMA_REQUEST_TIM3_CH4          64U
 | 
			
		||||
#define DMA_REQUEST_TIM3_UP           65U
 | 
			
		||||
#define DMA_REQUEST_TIM3_TRIG         66U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_TIM4_CH1          67U
 | 
			
		||||
#define DMA_REQUEST_TIM4_CH2          68U
 | 
			
		||||
#define DMA_REQUEST_TIM4_CH3          69U
 | 
			
		||||
#define DMA_REQUEST_TIM4_CH4          70U
 | 
			
		||||
#define DMA_REQUEST_TIM4_UP           71U
 | 
			
		||||
 | 
			
		||||
#if defined (TIM5)
 | 
			
		||||
#define DMA_REQUEST_TIM5_CH1          72U
 | 
			
		||||
#define DMA_REQUEST_TIM5_CH2          73U
 | 
			
		||||
#define DMA_REQUEST_TIM5_CH3          74U
 | 
			
		||||
#define DMA_REQUEST_TIM5_CH4          75U
 | 
			
		||||
#define DMA_REQUEST_TIM5_UP           76U
 | 
			
		||||
#define DMA_REQUEST_TIM5_TRIG         77U
 | 
			
		||||
#endif /* TIM5 */
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_TIM15_CH1         78U
 | 
			
		||||
#define DMA_REQUEST_TIM15_UP          79U
 | 
			
		||||
#define DMA_REQUEST_TIM15_TRIG        80U
 | 
			
		||||
#define DMA_REQUEST_TIM15_COM         81U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_TIM16_CH1         82U
 | 
			
		||||
#define DMA_REQUEST_TIM16_UP          83U
 | 
			
		||||
#define DMA_REQUEST_TIM17_CH1         84U
 | 
			
		||||
#define DMA_REQUEST_TIM17_UP          85U
 | 
			
		||||
 | 
			
		||||
#if defined (TIM20)
 | 
			
		||||
#define DMA_REQUEST_TIM20_CH1         86U
 | 
			
		||||
#define DMA_REQUEST_TIM20_CH2         87U
 | 
			
		||||
#define DMA_REQUEST_TIM20_CH3         88U
 | 
			
		||||
#define DMA_REQUEST_TIM20_CH4         89U
 | 
			
		||||
#define DMA_REQUEST_TIM20_UP          90U
 | 
			
		||||
#endif /* TIM20 */
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_AES_IN            91U
 | 
			
		||||
#define DMA_REQUEST_AES_OUT           92U
 | 
			
		||||
 | 
			
		||||
#if defined (TIM20)
 | 
			
		||||
#define DMA_REQUEST_TIM20_TRIG        93U
 | 
			
		||||
#define DMA_REQUEST_TIM20_COM         94U
 | 
			
		||||
#endif /* TIM20 */
 | 
			
		||||
 | 
			
		||||
#if defined (HRTIM1)
 | 
			
		||||
#define DMA_REQUEST_HRTIM1_M          95U
 | 
			
		||||
#define DMA_REQUEST_HRTIM1_A          96U
 | 
			
		||||
#define DMA_REQUEST_HRTIM1_B          97U
 | 
			
		||||
#define DMA_REQUEST_HRTIM1_C          98U
 | 
			
		||||
#define DMA_REQUEST_HRTIM1_D          99U
 | 
			
		||||
#define DMA_REQUEST_HRTIM1_E          100U
 | 
			
		||||
#define DMA_REQUEST_HRTIM1_F          101U
 | 
			
		||||
#endif /* HRTIM1 */
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_DAC3_CHANNEL1     102U
 | 
			
		||||
#define DMA_REQUEST_DAC3_CHANNEL2     103U
 | 
			
		||||
#if defined (DAC4)
 | 
			
		||||
#define DMA_REQUEST_DAC4_CHANNEL1     104U
 | 
			
		||||
#define DMA_REQUEST_DAC4_CHANNEL2     105U
 | 
			
		||||
#endif /* DAC4 */
 | 
			
		||||
 | 
			
		||||
#if defined (SPI4)
 | 
			
		||||
#define DMA_REQUEST_SPI4_RX           106U
 | 
			
		||||
#define DMA_REQUEST_SPI4_TX           107U
 | 
			
		||||
#endif /* SPI4 */
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_SAI1_A            108U
 | 
			
		||||
#define DMA_REQUEST_SAI1_B            109U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_FMAC_READ         110U
 | 
			
		||||
#define DMA_REQUEST_FMAC_WRITE        111U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_CORDIC_READ       112U
 | 
			
		||||
#define DMA_REQUEST_CORDIC_WRITE      113U
 | 
			
		||||
 | 
			
		||||
#define DMA_REQUEST_UCPD1_RX         114U
 | 
			
		||||
#define DMA_REQUEST_UCPD1_TX         115U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_PERIPH_TO_MEMORY         0x00000000U                   /*!< Peripheral to memory direction */
 | 
			
		||||
#define DMA_MEMORY_TO_PERIPH         DMA_CCR_DIR                   /*!< Memory to peripheral direction */
 | 
			
		||||
#define DMA_MEMORY_TO_MEMORY         DMA_CCR_MEM2MEM               /*!< Memory to memory direction     */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_PINC_ENABLE        DMA_CCR_PINC              /*!< Peripheral increment mode Enable */
 | 
			
		||||
#define DMA_PINC_DISABLE       0x00000000U               /*!< Peripheral increment mode Disable */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_MINC_ENABLE         DMA_CCR_MINC              /*!< Memory increment mode Enable  */
 | 
			
		||||
#define DMA_MINC_DISABLE        0x00000000U               /*!< Memory increment mode Disable */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_PDATAALIGN_BYTE          0x00000000U                  /*!< Peripheral data alignment : Byte     */
 | 
			
		||||
#define DMA_PDATAALIGN_HALFWORD      DMA_CCR_PSIZE_0              /*!< Peripheral data alignment : HalfWord */
 | 
			
		||||
#define DMA_PDATAALIGN_WORD          DMA_CCR_PSIZE_1              /*!< Peripheral data alignment : Word     */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Memory_data_size DMA Memory data size
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_MDATAALIGN_BYTE          0x00000000U                  /*!< Memory data alignment : Byte     */
 | 
			
		||||
#define DMA_MDATAALIGN_HALFWORD      DMA_CCR_MSIZE_0              /*!< Memory data alignment : HalfWord */
 | 
			
		||||
#define DMA_MDATAALIGN_WORD          DMA_CCR_MSIZE_1              /*!< Memory data alignment : Word     */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_mode DMA mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_NORMAL         0x00000000U       /*!< Normal mode                  */
 | 
			
		||||
#define DMA_CIRCULAR       DMA_CCR_CIRC      /*!< Circular mode                */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Priority_level DMA Priority level
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_PRIORITY_LOW              0x00000000U              /*!< Priority level : Low       */
 | 
			
		||||
#define DMA_PRIORITY_MEDIUM           DMA_CCR_PL_0             /*!< Priority level : Medium    */
 | 
			
		||||
#define DMA_PRIORITY_HIGH             DMA_CCR_PL_1             /*!< Priority level : High      */
 | 
			
		||||
#define DMA_PRIORITY_VERY_HIGH        DMA_CCR_PL               /*!< Priority level : Very_High */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_IT_TC                     DMA_CCR_TCIE
 | 
			
		||||
#define DMA_IT_HT                     DMA_CCR_HTIE
 | 
			
		||||
#define DMA_IT_TE                     DMA_CCR_TEIE
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_flag_definitions DMA flag definitions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_FLAG_GL1                      0x00000001U
 | 
			
		||||
#define DMA_FLAG_TC1                      0x00000002U
 | 
			
		||||
#define DMA_FLAG_HT1                      0x00000004U
 | 
			
		||||
#define DMA_FLAG_TE1                      0x00000008U
 | 
			
		||||
#define DMA_FLAG_GL2                      0x00000010U
 | 
			
		||||
#define DMA_FLAG_TC2                      0x00000020U
 | 
			
		||||
#define DMA_FLAG_HT2                      0x00000040U
 | 
			
		||||
#define DMA_FLAG_TE2                      0x00000080U
 | 
			
		||||
#define DMA_FLAG_GL3                      0x00000100U
 | 
			
		||||
#define DMA_FLAG_TC3                      0x00000200U
 | 
			
		||||
#define DMA_FLAG_HT3                      0x00000400U
 | 
			
		||||
#define DMA_FLAG_TE3                      0x00000800U
 | 
			
		||||
#define DMA_FLAG_GL4                      0x00001000U
 | 
			
		||||
#define DMA_FLAG_TC4                      0x00002000U
 | 
			
		||||
#define DMA_FLAG_HT4                      0x00004000U
 | 
			
		||||
#define DMA_FLAG_TE4                      0x00008000U
 | 
			
		||||
#define DMA_FLAG_GL5                      0x00010000U
 | 
			
		||||
#define DMA_FLAG_TC5                      0x00020000U
 | 
			
		||||
#define DMA_FLAG_HT5                      0x00040000U
 | 
			
		||||
#define DMA_FLAG_TE5                      0x00080000U
 | 
			
		||||
#define DMA_FLAG_GL6                      0x00100000U
 | 
			
		||||
#define DMA_FLAG_TC6                      0x00200000U
 | 
			
		||||
#define DMA_FLAG_HT6                      0x00400000U
 | 
			
		||||
#define DMA_FLAG_TE6                      0x00800000U
 | 
			
		||||
#if defined (DMA1_Channel7)
 | 
			
		||||
#define DMA_FLAG_GL7                      0x01000000U
 | 
			
		||||
#define DMA_FLAG_TC7                      0x02000000U
 | 
			
		||||
#define DMA_FLAG_HT7                      0x04000000U
 | 
			
		||||
#define DMA_FLAG_TE7                      0x08000000U
 | 
			
		||||
#endif /* DMA1_Channel7 */
 | 
			
		||||
#if defined (DMA1_Channel8)
 | 
			
		||||
#define DMA_FLAG_GL8                      0x10000000U
 | 
			
		||||
#define DMA_FLAG_TC8                      0x20000000U
 | 
			
		||||
#define DMA_FLAG_HT8                      0x40000000U
 | 
			
		||||
#define DMA_FLAG_TE8                      0x80000000U
 | 
			
		||||
#endif /* DMA1_Channel8 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macros -----------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMA_Exported_Macros DMA Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @brief  Reset DMA handle state.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the specified DMA Channel.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_ENABLE(__HANDLE__)        ((__HANDLE__)->Instance->CCR |=  DMA_CCR_EN)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the specified DMA Channel.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_DISABLE(__HANDLE__)       ((__HANDLE__)->Instance->CCR &=  ~DMA_CCR_EN)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Interrupt & Flag management */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Channel transfer complete flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified transfer complete flag index.
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (DMA1_Channel8)
 | 
			
		||||
#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \
 | 
			
		||||
  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TC1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TC2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TC3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TC4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_TC5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel6))? DMA_FLAG_TC6 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TC7 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel7))? DMA_FLAG_TC7 :\
 | 
			
		||||
   DMA_FLAG_TC8)
 | 
			
		||||
#elif defined (DMA1_Channel6)
 | 
			
		||||
#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \
 | 
			
		||||
  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TC1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TC2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TC3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TC4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_TC5 :\
 | 
			
		||||
   DMA_FLAG_TC6)
 | 
			
		||||
#endif /* DMA1_Channel8 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Channel half transfer complete flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified half transfer complete flag index.
 | 
			
		||||
  */
 | 
			
		||||
#if defined (DMA1_Channel8)
 | 
			
		||||
#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_HT1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_HT2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_HT3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_HT4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_HT5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel6))? DMA_FLAG_HT6 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_HT7 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel7))? DMA_FLAG_HT7 :\
 | 
			
		||||
   DMA_FLAG_HT8)
 | 
			
		||||
#elif defined (DMA1_Channel6)
 | 
			
		||||
#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_HT1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_HT2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_HT3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_HT4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_HT5 :\
 | 
			
		||||
   DMA_FLAG_HT6)
 | 
			
		||||
#endif /* DMA1_Channel8 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Channel transfer error flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified transfer error flag index.
 | 
			
		||||
  */
 | 
			
		||||
#if defined (DMA1_Channel8)
 | 
			
		||||
#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TE1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TE2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TE3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TE4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_TE5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel6))? DMA_FLAG_TE6 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TE7 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel7))? DMA_FLAG_TE7 :\
 | 
			
		||||
   DMA_FLAG_TE8)
 | 
			
		||||
#elif defined (DMA1_Channel6)
 | 
			
		||||
#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TE1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TE2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TE3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TE4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_TE5 :\
 | 
			
		||||
   DMA_FLAG_TE6)
 | 
			
		||||
#endif /* DMA1_Channel8 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Channel Global interrupt flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified transfer error flag index.
 | 
			
		||||
  */
 | 
			
		||||
#if defined (DMA1_Channel8)
 | 
			
		||||
#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_ISR_GIF1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_ISR_GIF1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_ISR_GIF2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_ISR_GIF2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_ISR_GIF3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_ISR_GIF3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_ISR_GIF4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_ISR_GIF4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_ISR_GIF5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_ISR_GIF5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_ISR_GIF6 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel6))? DMA_ISR_GIF6 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_ISR_GIF7 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel7))? DMA_ISR_GIF7 :\
 | 
			
		||||
   DMA_ISR_GIF8)
 | 
			
		||||
#elif defined (DMA1_Channel6)
 | 
			
		||||
#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_ISR_GIF1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_ISR_GIF1 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_ISR_GIF2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_ISR_GIF2 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_ISR_GIF3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_ISR_GIF3 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_ISR_GIF4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_ISR_GIF4 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_ISR_GIF5 :\
 | 
			
		||||
   ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_ISR_GIF5 :\
 | 
			
		||||
   DMA_ISR_GIF6)
 | 
			
		||||
#endif /* DMA1_Channel8 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the DMA Channel pending flags.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __FLAG__ Get the specified flag.
 | 
			
		||||
  *          This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg DMA_FLAG_TCx  Transfer complete flag
 | 
			
		||||
  *            @arg DMA_FLAG_HTx  Half transfer complete flag
 | 
			
		||||
  *            @arg DMA_FLAG_TEx  Transfer error flag
 | 
			
		||||
  *            @arg DMA_FLAG_GLx  Global interrupt flag
 | 
			
		||||
  *         Where x can be from 1 to 8 to select the DMA Channel x flag.
 | 
			
		||||
  * @retval The state of FLAG (SET or RESET).
 | 
			
		||||
  */
 | 
			
		||||
#if defined (DMA1_Channel8)
 | 
			
		||||
#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > ((uint32_t)DMA1_Channel8))? \
 | 
			
		||||
                                                  (DMA2->ISR & (__FLAG__)) : (DMA1->ISR & (__FLAG__)))
 | 
			
		||||
#elif defined (DMA1_Channel6)
 | 
			
		||||
#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > ((uint32_t)DMA1_Channel6))? \
 | 
			
		||||
                                                  (DMA2->ISR & (__FLAG__)) : (DMA1->ISR & (__FLAG__)))
 | 
			
		||||
#endif /* DMA1_Channel8 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear the DMA Channel pending flags.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __FLAG__ specifies the flag to clear.
 | 
			
		||||
  *          This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg DMA_FLAG_TCx  Transfer complete flag
 | 
			
		||||
  *            @arg DMA_FLAG_HTx  Half transfer complete flag
 | 
			
		||||
  *            @arg DMA_FLAG_TEx  Transfer error flag
 | 
			
		||||
  *            @arg DMA_FLAG_GLx  Global interrupt flag
 | 
			
		||||
  *         Where x can be from 1 to 8 to select the DMA Channel x flag.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#if defined (DMA1_Channel8)
 | 
			
		||||
#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > ((uint32_t)DMA1_Channel8))? \
 | 
			
		||||
                                                    (DMA2->IFCR = (__FLAG__)) : (DMA1->IFCR = (__FLAG__)))
 | 
			
		||||
#else
 | 
			
		||||
#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > ((uint32_t)DMA1_Channel6))? \
 | 
			
		||||
                                                    (DMA2->IFCR = (__FLAG__)) : (DMA1->IFCR = (__FLAG__)))
 | 
			
		||||
#endif /* DMA1_Channel8 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the specified DMA Channel interrupts.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled.
 | 
			
		||||
  *          This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg DMA_IT_TC  Transfer complete interrupt mask
 | 
			
		||||
  *            @arg DMA_IT_HT  Half transfer complete interrupt mask
 | 
			
		||||
  *            @arg DMA_IT_TE  Transfer error interrupt mask
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->CCR |= (__INTERRUPT__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the specified DMA Channel interrupts.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled.
 | 
			
		||||
  *          This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg DMA_IT_TC  Transfer complete interrupt mask
 | 
			
		||||
  *            @arg DMA_IT_HT  Half transfer complete interrupt mask
 | 
			
		||||
  *            @arg DMA_IT_TE  Transfer error interrupt mask
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((__HANDLE__)->Instance->CCR &= ~(__INTERRUPT__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check whether the specified DMA Channel interrupt is enabled or not.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __INTERRUPT__ specifies the DMA interrupt source to check.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg DMA_IT_TC  Transfer complete interrupt mask
 | 
			
		||||
  *            @arg DMA_IT_HT  Half transfer complete interrupt mask
 | 
			
		||||
  *            @arg DMA_IT_TE  Transfer error interrupt mask
 | 
			
		||||
  * @retval The state of DMA_IT (SET or RESET).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)  (((__HANDLE__)->Instance->CCR & (__INTERRUPT__)))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the number of remaining data units in the current DMA Channel transfer.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The number of remaining data units in the current DMA Channel transfer.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Include DMA HAL Extension module */
 | 
			
		||||
#include "stm32g4xx_hal_dma_ex.h"
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMA_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMA_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Initialization and de-initialization functions *****************************/
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMA_Exported_Functions_Group2
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* IO operation functions *****************************************************/
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress,
 | 
			
		||||
                                   uint32_t DataLength);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel,
 | 
			
		||||
                                          uint32_t Timeout);
 | 
			
		||||
void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)(DMA_HandleTypeDef *_hdma));
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMA_Exported_Functions_Group3
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Peripheral State and Error functions ***************************************/
 | 
			
		||||
HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);
 | 
			
		||||
uint32_t             HAL_DMA_GetError(DMA_HandleTypeDef *hdma);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMA_Private_Macros DMA Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \
 | 
			
		||||
                                     ((DIRECTION) == DMA_MEMORY_TO_PERIPH)  || \
 | 
			
		||||
                                     ((DIRECTION) == DMA_MEMORY_TO_MEMORY))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x40000U))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \
 | 
			
		||||
                                            ((STATE) == DMA_PINC_DISABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE)  || \
 | 
			
		||||
                                        ((STATE) == DMA_MINC_DISABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_ALL_REQUEST(REQUEST)    ((REQUEST) <= DMA_REQUEST_UCPD1_TX)
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE)     || \
 | 
			
		||||
                                           ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \
 | 
			
		||||
                                           ((SIZE) == DMA_PDATAALIGN_WORD))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE)     || \
 | 
			
		||||
                                       ((SIZE) == DMA_MDATAALIGN_HALFWORD) || \
 | 
			
		||||
                                       ((SIZE) == DMA_MDATAALIGN_WORD ))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL )  || \
 | 
			
		||||
                           ((MODE) == DMA_CIRCULAR))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW )   || \
 | 
			
		||||
                                   ((PRIORITY) == DMA_PRIORITY_MEDIUM) || \
 | 
			
		||||
                                   ((PRIORITY) == DMA_PRIORITY_HIGH)   || \
 | 
			
		||||
                                   ((PRIORITY) == DMA_PRIORITY_VERY_HIGH))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32G4xx_HAL_DMA_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										264
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_dma_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_dma_ex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,264 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_dma_ex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of DMA HAL extension module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 __STM32G4xx_HAL_DMA_EX_H
 | 
			
		||||
#define __STM32G4xx_HAL_DMA_EX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMAEx
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMAEx_Exported_Types DMAEx Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  HAL DMA Synchro definition
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  HAL DMAMUX Synchronization configuration structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t SyncSignalID;  /*!< Specifies the synchronization signal gating the DMA request in periodic mode.
 | 
			
		||||
                              This parameter can be a value of @ref DMAEx_DMAMUX_SyncSignalID_selection */
 | 
			
		||||
 | 
			
		||||
  uint32_t SyncPolarity;  /*!< Specifies the polarity of the signal on which the DMA request is synchronized.
 | 
			
		||||
                              This parameter can be a value of @ref DMAEx_DMAMUX_SyncPolarity_selection */
 | 
			
		||||
 | 
			
		||||
  FunctionalState SyncEnable;  /*!< Specifies if the synchronization shall be enabled or disabled
 | 
			
		||||
                                    This parameter can take the value ENABLE or DISABLE*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  FunctionalState EventEnable;    /*!< Specifies if an event shall be generated once the RequestNumber is reached.
 | 
			
		||||
                                       This parameter can take the value ENABLE or DISABLE */
 | 
			
		||||
 | 
			
		||||
  uint32_t RequestNumber; /*!< Specifies the number of DMA request that will be authorized after a sync event
 | 
			
		||||
                               This parameter must be a number between Min_Data = 1 and Max_Data = 32 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} HAL_DMA_MuxSyncConfigTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  HAL DMAMUX request generator parameters structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t SignalID;      /*!< Specifies the ID of the signal used for DMAMUX request generator
 | 
			
		||||
                              This parameter can be a value of @ref DMAEx_DMAMUX_SignalGeneratorID_selection */
 | 
			
		||||
 | 
			
		||||
  uint32_t Polarity;       /*!< Specifies the polarity of the signal on which the request is generated.
 | 
			
		||||
                             This parameter can be a value of @ref DMAEx_DMAMUX_RequestGeneneratorPolarity_selection */
 | 
			
		||||
 | 
			
		||||
  uint32_t RequestNumber;  /*!< Specifies the number of DMA request that will be generated after a signal event
 | 
			
		||||
                                This parameter must be a number between Min_Data = 1 and Max_Data = 32 */
 | 
			
		||||
 | 
			
		||||
} HAL_DMA_MuxRequestGeneratorConfigTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMAEx_Exported_Constants DMAEx Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx_DMAMUX_SyncSignalID_selection DMAMUX SyncSignalID selection
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI0                      0U     /*!<  Synchronization Signal is EXTI0  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI1                      1U     /*!<  Synchronization Signal is EXTI1  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI2                      2U     /*!<  Synchronization Signal is EXTI2  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI3                      3U     /*!<  Synchronization Signal is EXTI3  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI4                      4U     /*!<  Synchronization Signal is EXTI4  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI5                      5U     /*!<  Synchronization Signal is EXTI5  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI6                      6U     /*!<  Synchronization Signal is EXTI6  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI7                      7U     /*!<  Synchronization Signal is EXTI7  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI8                      8U     /*!<  Synchronization Signal is EXTI8  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI9                      9U     /*!<  Synchronization Signal is EXTI9  IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI10                    10U     /*!<  Synchronization Signal is EXTI10 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI11                    11U     /*!<  Synchronization Signal is EXTI11 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI12                    12U     /*!<  Synchronization Signal is EXTI12 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI13                    13U     /*!<  Synchronization Signal is EXTI13 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI14                    14U     /*!<  Synchronization Signal is EXTI14 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_EXTI15                    15U     /*!<  Synchronization Signal is EXTI15 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT           16U     /*!<  Synchronization Signal is DMAMUX1 Channel0 Event  */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_DMAMUX1_CH1_EVT           17U     /*!<  Synchronization Signal is DMAMUX1 Channel1 Event  */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_DMAMUX1_CH2_EVT           18U     /*!<  Synchronization Signal is DMAMUX1 Channel2 Event  */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_DMAMUX1_CH3_EVT           19U     /*!<  Synchronization Signal is DMAMUX1 Channel3 Event  */
 | 
			
		||||
#define HAL_DMAMUX1_SYNC_LPTIM1_OUT                20U     /*!<  Synchronization Signal is LPTIM1 OUT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx_DMAMUX_SyncPolarity_selection DMAMUX SyncPolarity selection
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_DMAMUX_SYNC_NO_EVENT                               0U    /*!< block synchronization events        */
 | 
			
		||||
#define HAL_DMAMUX_SYNC_RISING     ((uint32_t)DMAMUX_CxCR_SPOL_0)    /*!< synchronize with rising edge events */
 | 
			
		||||
#define HAL_DMAMUX_SYNC_FALLING    ((uint32_t)DMAMUX_CxCR_SPOL_1)    /*!< synchronize with falling edge events */
 | 
			
		||||
#define HAL_DMAMUX_SYNC_RISING_FALLING ((uint32_t)DMAMUX_CxCR_SPOL)  /*!< synchronize with rising and falling edge events */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx_DMAMUX_SignalGeneratorID_selection DMAMUX SignalGeneratorID selection
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI0                0U        /*!< Request generator Signal is EXTI0 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI1                1U        /*!< Request generator Signal is EXTI1 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI2                2U        /*!< Request generator Signal is EXTI2 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI3                3U        /*!< Request generator Signal is EXTI3 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI4                4U        /*!< Request generator Signal is EXTI4 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI5                5U        /*!< Request generator Signal is EXTI5 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI6                6U        /*!< Request generator Signal is EXTI6 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI7                7U        /*!< Request generator Signal is EXTI7 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI8                8U        /*!< Request generator Signal is EXTI8 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI9                9U        /*!< Request generator Signal is EXTI9 IT    */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI10              10U        /*!< Request generator Signal is EXTI10 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI11              11U        /*!< Request generator Signal is EXTI11 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI12              12U        /*!< Request generator Signal is EXTI12 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI13              13U        /*!< Request generator Signal is EXTI13 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI14              14U        /*!< Request generator Signal is EXTI14 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_EXTI15              15U        /*!< Request generator Signal is EXTI15 IT   */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT     16U        /*!< Request generator Signal is DMAMUX1 Channel0 Event */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT     17U        /*!< Request generator Signal is DMAMUX1 Channel1 Event */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT     18U        /*!< Request generator Signal is DMAMUX1 Channel2 Event */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT     19U        /*!< Request generator Signal is DMAMUX1 Channel3 Event */
 | 
			
		||||
#define HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT          20U        /*!< Request generator Signal is LPTIM1 OUT  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx_DMAMUX_RequestGeneneratorPolarity_selection DMAMUX RequestGeneneratorPolarity selection
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_DMAMUX_REQ_GEN_NO_EVENT         0x00000000U           /*!< block request generator events        */
 | 
			
		||||
#define HAL_DMAMUX_REQ_GEN_RISING           DMAMUX_RGxCR_GPOL_0   /*!< generate request on rising edge events */
 | 
			
		||||
#define HAL_DMAMUX_REQ_GEN_FALLING          DMAMUX_RGxCR_GPOL_1   /*!< generate request on falling edge events */
 | 
			
		||||
#define HAL_DMAMUX_REQ_GEN_RISING_FALLING   DMAMUX_RGxCR_GPOL     /*!< generate request on rising and falling edge events */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup DMAEx_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* IO operation functions *****************************************************/
 | 
			
		||||
/** @addtogroup DMAEx_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* ------------------------- REQUEST -----------------------------------------*/
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_ConfigMuxRequestGenerator(DMA_HandleTypeDef *hdma,
 | 
			
		||||
                                                      HAL_DMA_MuxRequestGeneratorConfigTypeDef *pRequestGeneratorConfig);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_EnableMuxRequestGenerator(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_DisableMuxRequestGenerator(DMA_HandleTypeDef *hdma);
 | 
			
		||||
/* -------------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/* ------------------------- SYNCHRO -----------------------------------------*/
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_ConfigMuxSync(DMA_HandleTypeDef *hdma, HAL_DMA_MuxSyncConfigTypeDef *pSyncConfig);
 | 
			
		||||
/* -------------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
void HAL_DMAEx_MUX_IRQHandler(DMA_HandleTypeDef *hdma);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMAEx_Private_Macros DMAEx Private Macros
 | 
			
		||||
  * @brief    DMAEx private macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define IS_DMAMUX_SYNC_SIGNAL_ID(SIGNAL_ID) ((SIGNAL_ID) <= HAL_DMAMUX1_SYNC_LPTIM1_OUT)
 | 
			
		||||
 | 
			
		||||
#define IS_DMAMUX_SYNC_REQUEST_NUMBER(REQUEST_NUMBER) (((REQUEST_NUMBER) > 0U) && ((REQUEST_NUMBER) <= 32U))
 | 
			
		||||
 | 
			
		||||
#define IS_DMAMUX_SYNC_POLARITY(POLARITY) (((POLARITY) == HAL_DMAMUX_SYNC_NO_EVENT)    || \
 | 
			
		||||
                                           ((POLARITY) == HAL_DMAMUX_SYNC_RISING)   || \
 | 
			
		||||
                                           ((POLARITY) == HAL_DMAMUX_SYNC_FALLING)  || \
 | 
			
		||||
                                           ((POLARITY) == HAL_DMAMUX_SYNC_RISING_FALLING))
 | 
			
		||||
 | 
			
		||||
#define IS_DMAMUX_SYNC_STATE(SYNC) (((SYNC) == DISABLE)   || ((SYNC) == ENABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_DMAMUX_SYNC_EVENT(EVENT) (((EVENT) == DISABLE)   || \
 | 
			
		||||
                                     ((EVENT) == ENABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_DMAMUX_REQUEST_GEN_SIGNAL_ID(SIGNAL_ID) ((SIGNAL_ID) <= HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT)
 | 
			
		||||
 | 
			
		||||
#define IS_DMAMUX_REQUEST_GEN_REQUEST_NUMBER(REQUEST_NUMBER) (((REQUEST_NUMBER) > 0U) && ((REQUEST_NUMBER) <= 32U))
 | 
			
		||||
 | 
			
		||||
#define IS_DMAMUX_REQUEST_GEN_POLARITY(POLARITY) (((POLARITY) == HAL_DMAMUX_REQ_GEN_NO_EVENT)   || \
 | 
			
		||||
                                                  ((POLARITY) == HAL_DMAMUX_REQ_GEN_RISING)  || \
 | 
			
		||||
                                                  ((POLARITY) == HAL_DMAMUX_REQ_GEN_FALLING) || \
 | 
			
		||||
                                                  ((POLARITY) == HAL_DMAMUX_REQ_GEN_RISING_FALLING))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32G4xx_HAL_DMA_EX_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										315
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_exti.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										315
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_exti.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,315 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_exti.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of EXTI HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_HAL_EXTI_H
 | 
			
		||||
#define STM32G4xx_HAL_EXTI_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_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         = 0x00UL
 | 
			
		||||
} EXTI_CallbackIDTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI Handle structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t Line;                    /*!<  Exti line number */
 | 
			
		||||
  void (* PendingCallback)(void);   /*!<  Exti pending 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_CONFIG   | EXTI_REG1 | 0x11u)
 | 
			
		||||
#define EXTI_LINE_18                        (EXTI_DIRECT   | EXTI_REG1 | 0x12u)
 | 
			
		||||
#define EXTI_LINE_19                        (EXTI_CONFIG   | EXTI_REG1 | 0x13u)
 | 
			
		||||
#define EXTI_LINE_20                        (EXTI_CONFIG   | EXTI_REG1 | 0x14u)
 | 
			
		||||
#define EXTI_LINE_21                        (EXTI_CONFIG   | EXTI_REG1 | 0x15u)
 | 
			
		||||
#define EXTI_LINE_22                        (EXTI_CONFIG   | EXTI_REG1 | 0x16u)
 | 
			
		||||
#define EXTI_LINE_23                        (EXTI_DIRECT   | EXTI_REG1 | 0x17u)
 | 
			
		||||
#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_CONFIG   | EXTI_REG1 | 0x1Du)
 | 
			
		||||
#define EXTI_LINE_30                        (EXTI_CONFIG   | EXTI_REG1 | 0x1Eu)
 | 
			
		||||
#define EXTI_LINE_31                        (EXTI_CONFIG   | EXTI_REG1 | 0x1Fu)
 | 
			
		||||
#define EXTI_LINE_32                        (EXTI_CONFIG   | EXTI_REG2 | 0x00u)
 | 
			
		||||
#define EXTI_LINE_33                        (EXTI_CONFIG   | EXTI_REG2 | 0x01u)
 | 
			
		||||
#define EXTI_LINE_34                        (EXTI_DIRECT   | EXTI_REG2 | 0x02u)
 | 
			
		||||
#define EXTI_LINE_35                        (EXTI_DIRECT   | EXTI_REG2 | 0x03u)
 | 
			
		||||
#define EXTI_LINE_36                        (EXTI_DIRECT   | EXTI_REG2 | 0x04u)
 | 
			
		||||
#define EXTI_LINE_37                        (EXTI_DIRECT   | EXTI_REG2 | 0x05u)
 | 
			
		||||
#define EXTI_LINE_38                        (EXTI_CONFIG   | EXTI_REG2 | 0x06u)
 | 
			
		||||
#define EXTI_LINE_39                        (EXTI_CONFIG   | EXTI_REG2 | 0x07u)
 | 
			
		||||
#define EXTI_LINE_40                        (EXTI_CONFIG   | EXTI_REG2 | 0x08u)
 | 
			
		||||
#define EXTI_LINE_41                        (EXTI_CONFIG   | EXTI_REG2 | 0x09u)
 | 
			
		||||
#define EXTI_LINE_42                        (EXTI_DIRECT   | EXTI_REG2 | 0x0Au)
 | 
			
		||||
#define EXTI_LINE_43                        (EXTI_DIRECT   | EXTI_REG2 | 0x0Bu)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @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
 | 
			
		||||
#define EXTI_GPIOE                          0x00000004U
 | 
			
		||||
#define EXTI_GPIOF                          0x00000005U
 | 
			
		||||
#define EXTI_GPIOG                          0x00000006U
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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                         (0x01uL << EXTI_PROPERTY_SHIFT)
 | 
			
		||||
#define EXTI_CONFIG                         (0x02uL << EXTI_PROPERTY_SHIFT)
 | 
			
		||||
#define EXTI_GPIO                           ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
 | 
			
		||||
#define EXTI_RESERVED                       (0x08uL << 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                           (0x00uL << EXTI_REG_SHIFT)
 | 
			
		||||
#define EXTI_REG2                           (0x01uL << 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
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_LINE_NB                        44UL
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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_CONFIG_LINE(__EXTI_LINE__)   (((__EXTI_LINE__) & EXTI_CONFIG) != 0x00U)
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
 | 
			
		||||
#define IS_EXTI_GPIO_PIN(__PIN__)        ((__PIN__) < 16u)
 | 
			
		||||
 | 
			
		||||
#define IS_EXTI_PENDING_EDGE(__EDGE__)   (((__EDGE__) == EXTI_TRIGGER_RISING)   || \
 | 
			
		||||
                                          ((__EDGE__) == EXTI_TRIGGER_FALLING)|| \
 | 
			
		||||
                                          ((__EDGE__) == EXTI_TRIGGER_RISING_FALLING))
 | 
			
		||||
 | 
			
		||||
#define IS_EXTI_CB(__CB__)               ((__CB__) == HAL_EXTI_COMMON_CB_ID)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* 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(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(EXTI_HandleTypeDef *hexti);
 | 
			
		||||
uint32_t          HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge);
 | 
			
		||||
void              HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge);
 | 
			
		||||
void              HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_HAL_EXTI_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1018
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_flash.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1018
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_flash.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -0,0 +1,89 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_flash_ex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of FLASH HAL Extended module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_HAL_FLASH_EX_H
 | 
			
		||||
#define STM32G4xx_HAL_FLASH_EX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASHEx
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup FLASHEx_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Extended Program operation functions  *************************************/
 | 
			
		||||
/** @addtogroup FLASHEx_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);
 | 
			
		||||
void              HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASHEx_EnableSecMemProtection(uint32_t Bank);
 | 
			
		||||
void              HAL_FLASHEx_EnableDebugger(void);
 | 
			
		||||
void              HAL_FLASHEx_DisableDebugger(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASHEx_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
void              FLASH_PageErase(uint32_t Page, uint32_t Banks);
 | 
			
		||||
void              FLASH_FlushCaches(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_HAL_FLASH_EX_H */
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,74 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_flash_ramfunc.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of FLASH RAMFUNC driver.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_FLASH_RAMFUNC_H
 | 
			
		||||
#define STM32G4xx_FLASH_RAMFUNC_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASH_RAMFUNC
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup FLASH_RAMFUNC_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Peripheral Control functions  ************************************************/
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableRunPowerDown(void);
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableRunPowerDown(void);
 | 
			
		||||
#if defined (FLASH_OPTR_DBANK)
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_OB_DBankConfig(uint32_t DBankConfig);
 | 
			
		||||
#endif
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_FLASH_RAMFUNC_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										326
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_gpio.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										326
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_gpio.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,326 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_gpio.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of GPIO HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_HAL_GPIO_H
 | 
			
		||||
#define STM32G4xx_HAL_GPIO_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_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 any 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: 0x00WX00YZ
 | 
			
		||||
  *           - W  : EXTI trigger detection on 3 bits
 | 
			
		||||
  *           - X  : EXTI mode (IT or Event) on 2 bits
 | 
			
		||||
  *           - Y  : Output type (Push Pull or Open Drain) on 1 bit
 | 
			
		||||
  *           - Z  : GPIO mode (Input, Output, Alternate or Analog) on 2 bits
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define  GPIO_MODE_INPUT                        MODE_INPUT                                                  /*!< Input Floating Mode                   */
 | 
			
		||||
#define  GPIO_MODE_OUTPUT_PP                    (MODE_OUTPUT | OUTPUT_PP)                                   /*!< Output Push Pull Mode                 */
 | 
			
		||||
#define  GPIO_MODE_OUTPUT_OD                    (MODE_OUTPUT | OUTPUT_OD)                                   /*!< Output Open Drain Mode                */
 | 
			
		||||
#define  GPIO_MODE_AF_PP                        (MODE_AF | OUTPUT_PP)                                       /*!< Alternate Function Push Pull Mode     */
 | 
			
		||||
#define  GPIO_MODE_AF_OD                        (MODE_AF | OUTPUT_OD)                                       /*!< Alternate Function Open Drain Mode    */
 | 
			
		||||
 | 
			
		||||
#define  GPIO_MODE_ANALOG                       MODE_ANALOG                                                 /*!< Analog Mode  */
 | 
			
		||||
    
 | 
			
		||||
#define  GPIO_MODE_IT_RISING                    (MODE_INPUT | EXTI_IT | TRIGGER_RISING)                     /*!< External Interrupt Mode with Rising edge trigger detection          */
 | 
			
		||||
#define  GPIO_MODE_IT_FALLING                   (MODE_INPUT | EXTI_IT | TRIGGER_FALLING)                    /*!< External Interrupt Mode with Falling edge trigger detection         */
 | 
			
		||||
#define  GPIO_MODE_IT_RISING_FALLING            (MODE_INPUT | EXTI_IT | TRIGGER_RISING | TRIGGER_FALLING)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */
 | 
			
		||||
 
 | 
			
		||||
#define  GPIO_MODE_EVT_RISING                   (MODE_INPUT | EXTI_EVT | TRIGGER_RISING)                     /*!< External Event Mode with Rising edge trigger detection             */
 | 
			
		||||
#define  GPIO_MODE_EVT_FALLING                  (MODE_INPUT | EXTI_EVT | TRIGGER_FALLING)                    /*!< External Event Mode with Falling edge trigger detection            */
 | 
			
		||||
#define  GPIO_MODE_EVT_RISING_FALLING           (MODE_INPUT | EXTI_EVT | TRIGGER_RISING | TRIGGER_FALLING)   /*!< External Event Mode with Rising/Falling edge trigger detection     */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_speed GPIO speed
 | 
			
		||||
  * @brief GPIO Output Maximum frequency
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  GPIO_SPEED_FREQ_LOW        (0x00000000U)   /*!< range up to 5 MHz, please refer to the product datasheet */
 | 
			
		||||
#define  GPIO_SPEED_FREQ_MEDIUM     (0x00000001U)   /*!< range  5 MHz to 25 MHz, please refer to the product datasheet */
 | 
			
		||||
#define  GPIO_SPEED_FREQ_HIGH       (0x00000002U)   /*!< range 25 MHz to 50 MHz, please refer to the product datasheet */
 | 
			
		||||
#define  GPIO_SPEED_FREQ_VERY_HIGH  (0x00000003U)   /*!< range 50 MHz to 120 MHz, please refer to the product datasheet */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @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                */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Exported_Macros GPIO Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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__)       (EXTI->PR1 & (__EXTI_LINE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear the EXTI's 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__)     (EXTI->PR1 = (__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__)         (EXTI->PR1 & (__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__)       (EXTI->PR1 = (__EXTI_LINE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generate a Software interrupt on selected EXTI line.
 | 
			
		||||
  * @param  __EXTI_LINE__ specifies the EXTI line to check.
 | 
			
		||||
  *          This parameter can be GPIO_PIN_x where x can be(0..15)
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__)  (EXTI->SWIER1 |= (__EXTI_LINE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Private_Constants GPIO Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_MODE_Pos                           0U
 | 
			
		||||
#define GPIO_MODE                               (0x3UL << GPIO_MODE_Pos)
 | 
			
		||||
#define MODE_INPUT                              (0x0UL << GPIO_MODE_Pos)
 | 
			
		||||
#define MODE_OUTPUT                             (0x1UL << GPIO_MODE_Pos)
 | 
			
		||||
#define MODE_AF                                 (0x2UL << GPIO_MODE_Pos)
 | 
			
		||||
#define MODE_ANALOG                             (0x3UL << GPIO_MODE_Pos)
 | 
			
		||||
#define OUTPUT_TYPE_Pos                         4U
 | 
			
		||||
#define OUTPUT_TYPE                             (0x1UL << OUTPUT_TYPE_Pos)
 | 
			
		||||
#define OUTPUT_PP                               (0x0UL << OUTPUT_TYPE_Pos)
 | 
			
		||||
#define OUTPUT_OD                               (0x1UL << OUTPUT_TYPE_Pos)
 | 
			
		||||
#define EXTI_MODE_Pos                           16U
 | 
			
		||||
#define EXTI_MODE                               (0x3UL << EXTI_MODE_Pos)
 | 
			
		||||
#define EXTI_IT                                 (0x1UL << EXTI_MODE_Pos)
 | 
			
		||||
#define EXTI_EVT                                (0x2UL << EXTI_MODE_Pos)
 | 
			
		||||
#define TRIGGER_MODE_Pos                         20U
 | 
			
		||||
#define TRIGGER_MODE                            (0x7UL << TRIGGER_MODE_Pos)
 | 
			
		||||
#define TRIGGER_RISING                          (0x1UL << TRIGGER_MODE_Pos)
 | 
			
		||||
#define TRIGGER_FALLING                         (0x2UL << TRIGGER_MODE_Pos)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @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_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))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Include GPIO HAL Extended module */
 | 
			
		||||
#include "stm32g4xx_hal_gpio_ex.h"
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Exported_Functions GPIO Exported Functions
 | 
			
		||||
  *  @brief    GPIO Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup 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, GPIO_InitTypeDef *GPIO_Init);
 | 
			
		||||
void              HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions
 | 
			
		||||
  *  @brief    IO operation functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* IO operation functions *****************************************************/
 | 
			
		||||
GPIO_PinState     HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
 | 
			
		||||
void              HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
 | 
			
		||||
void              HAL_GPIO_TogglePin(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_Callback(uint16_t GPIO_Pin);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_HAL_GPIO_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										340
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_gpio_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										340
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_gpio_ex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,340 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_gpio_ex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of GPIO HAL Extended module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_HAL_GPIO_EX_H
 | 
			
		||||
#define STM32G4xx_HAL_GPIO_EX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_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                          */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 1 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF1_TIM2          ((uint8_t)0x01)  /* TIM2 Alternate Function mapping   */
 | 
			
		||||
#if defined(TIM5)
 | 
			
		||||
#define GPIO_AF1_TIM5          ((uint8_t)0x01)  /* TIM5 Alternate Function mapping   */
 | 
			
		||||
#endif /* TIM5 */
 | 
			
		||||
#define GPIO_AF1_TIM16         ((uint8_t)0x01)  /* TIM16 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF1_TIM17         ((uint8_t)0x01)  /* TIM17 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF1_TIM17_COMP1   ((uint8_t)0x01)  /* TIM17/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF1_TIM15         ((uint8_t)0x01)  /* TIM15 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF1_LPTIM1        ((uint8_t)0x01)  /* LPTIM1 Alternate Function mapping */
 | 
			
		||||
#define GPIO_AF1_IR            ((uint8_t)0x01)  /* IR Alternate Function mapping     */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 2 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF2_TIM1          ((uint8_t)0x02)  /* TIM1 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF2_TIM2          ((uint8_t)0x02)  /* TIM2 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF2_TIM3          ((uint8_t)0x02)  /* TIM3 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF2_TIM4          ((uint8_t)0x02)  /* TIM4 Alternate Function mapping  */
 | 
			
		||||
#if defined(TIM5)
 | 
			
		||||
#define GPIO_AF2_TIM5          ((uint8_t)0x02)  /* TIM5 Alternate Function mapping  */
 | 
			
		||||
#endif /* TIM5 */
 | 
			
		||||
#define GPIO_AF2_TIM8          ((uint8_t)0x02)  /* TIM8 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF2_TIM15         ((uint8_t)0x02)  /* TIM15 Alternate Function mapping */
 | 
			
		||||
#define GPIO_AF2_TIM16         ((uint8_t)0x02)  /* TIM16 Alternate Function mapping */
 | 
			
		||||
#if defined(TIM20)
 | 
			
		||||
#define GPIO_AF2_TIM20         ((uint8_t)0x02)  /* TIM20 Alternate Function mapping */
 | 
			
		||||
#endif /* TIM20 */
 | 
			
		||||
#define GPIO_AF2_TIM1_COMP1    ((uint8_t)0x02)  /* TIM1/COMP1 Break in Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF2_TIM15_COMP1   ((uint8_t)0x02)  /* TIM15/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF2_TIM16_COMP1   ((uint8_t)0x02)  /* TIM16/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#if defined(TIM20)
 | 
			
		||||
#define GPIO_AF2_TIM20_COMP1   ((uint8_t)0x02)  /* TIM20/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF2_TIM20_COMP2   ((uint8_t)0x02)  /* TIM20/COMP2 Break in Alternate Function mapping  */
 | 
			
		||||
#endif /* TIM20 */
 | 
			
		||||
#define GPIO_AF2_I2C3          ((uint8_t)0x02)  /* I2C3 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF2_COMP1         ((uint8_t)0x02)  /* COMP1 Alternate Function mapping */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 3 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF3_TIM15         ((uint8_t)0x03)  /* TIM15 Alternate Function mapping   */
 | 
			
		||||
#if defined(TIM20)
 | 
			
		||||
#define GPIO_AF3_TIM20         ((uint8_t)0x03)  /* TIM20 Alternate Function mapping   */
 | 
			
		||||
#endif /* TIM20 */
 | 
			
		||||
#define GPIO_AF3_UCPD1         ((uint8_t)0x03)  /* UCPD1 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF3_I2C3          ((uint8_t)0x03)  /* I2C3 Alternate Function mapping    */
 | 
			
		||||
#if defined(I2C4)
 | 
			
		||||
#define GPIO_AF3_I2C4          ((uint8_t)0x03)  /* I2C4 Alternate Function mapping    */
 | 
			
		||||
#endif /* I2C4 */
 | 
			
		||||
#if defined(HRTIM1)
 | 
			
		||||
#define GPIO_AF3_HRTIM1        ((uint8_t)0x03)  /* HRTIM1 Alternate Function mapping  */
 | 
			
		||||
#endif /* HRTIM1 */
 | 
			
		||||
#if defined(QUADSPI)
 | 
			
		||||
#define GPIO_AF3_QUADSPI       ((uint8_t)0x03)  /* QUADSPI Alternate Function mapping */
 | 
			
		||||
#endif /* QUADSPI */
 | 
			
		||||
#define GPIO_AF3_TIM8          ((uint8_t)0x03)  /* TIM8 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF3_SAI1          ((uint8_t)0x03)  /* SAI1 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF3_COMP3         ((uint8_t)0x03)  /* COMP3 Alternate Function mapping */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 4 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF4_TIM1          ((uint8_t)0x04)  /* TIM1 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF4_TIM8          ((uint8_t)0x04)  /* TIM8 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF4_TIM16         ((uint8_t)0x04)  /* TIM16 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF4_TIM17         ((uint8_t)0x04)  /* TIM17 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF4_TIM8_COMP1    ((uint8_t)0x04)  /* TIM8/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF4_I2C1          ((uint8_t)0x04)  /* I2C1 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF4_I2C2          ((uint8_t)0x04)  /* I2C2 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF4_I2C3          ((uint8_t)0x04)  /* I2C3 Alternate Function mapping    */
 | 
			
		||||
#if defined(I2C4)
 | 
			
		||||
#define GPIO_AF4_I2C4          ((uint8_t)0x04)  /* I2C4 Alternate Function mapping    */
 | 
			
		||||
#endif /* I2C4 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 5 selection
 | 
			
		||||
  */
 | 
			
		||||
#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 */
 | 
			
		||||
#define GPIO_AF5_IR            ((uint8_t)0x05)  /* IR Alternate Function mapping         */
 | 
			
		||||
#define GPIO_AF5_TIM8          ((uint8_t)0x05)  /* TIM8 Alternate Function mapping       */
 | 
			
		||||
#define GPIO_AF5_TIM8_COMP1    ((uint8_t)0x05)  /* TIM8/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF5_UART4         ((uint8_t)0x05)  /* UART4 Alternate Function mapping      */
 | 
			
		||||
#if defined(UART5)
 | 
			
		||||
#define GPIO_AF5_UART5         ((uint8_t)0x05)  /* UART5 Alternate Function mapping      */
 | 
			
		||||
#endif /* UART5 */
 | 
			
		||||
#define GPIO_AF5_I2S2ext       ((uint8_t)0x05)  /* I2S2ext_SD Alternate Function mapping */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 6 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF6_SPI2          ((uint8_t)0x06)  /* SPI2 Alternate Function mapping       */
 | 
			
		||||
#define GPIO_AF6_SPI3          ((uint8_t)0x06)  /* SPI3 Alternate Function mapping       */
 | 
			
		||||
#define GPIO_AF6_TIM1          ((uint8_t)0x06)  /* TIM1 Alternate Function mapping       */
 | 
			
		||||
#if defined(TIM5)
 | 
			
		||||
#define GPIO_AF6_TIM5          ((uint8_t)0x06)  /* TIM5 Alternate Function mapping       */
 | 
			
		||||
#endif /* TIM5 */
 | 
			
		||||
#define GPIO_AF6_TIM8          ((uint8_t)0x06)  /* TIM8 Alternate Function mapping       */
 | 
			
		||||
#if defined(TIM20)
 | 
			
		||||
#define GPIO_AF6_TIM20         ((uint8_t)0x06)  /* TIM20 Alternate Function mapping      */
 | 
			
		||||
#endif /* TIM20 */
 | 
			
		||||
#define GPIO_AF6_TIM1_COMP1    ((uint8_t)0x06)  /* TIM1/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF6_TIM1_COMP2    ((uint8_t)0x06)  /* TIM1/COMP2 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF6_TIM8_COMP2    ((uint8_t)0x06)  /* TIM8/COMP2 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF6_IR            ((uint8_t)0x06)  /* IR Alternate Function mapping         */
 | 
			
		||||
#define GPIO_AF6_I2S3ext       ((uint8_t)0x06)  /* I2S3ext_SD Alternate Function mapping */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 7 selection
 | 
			
		||||
  */
 | 
			
		||||
#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(COMP5)
 | 
			
		||||
#define GPIO_AF7_COMP5         ((uint8_t)0x07)  /* COMP5 Alternate Function mapping   */
 | 
			
		||||
#endif /* COMP5 */
 | 
			
		||||
#if defined(COMP6)
 | 
			
		||||
#define GPIO_AF7_COMP6         ((uint8_t)0x07)  /* COMP6 Alternate Function mapping   */
 | 
			
		||||
#endif /* COMP6 */
 | 
			
		||||
#if defined(COMP7)
 | 
			
		||||
#define GPIO_AF7_COMP7         ((uint8_t)0x07)  /* COMP7 Alternate Function mapping   */
 | 
			
		||||
#endif /* COMP7 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 8 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF8_COMP1         ((uint8_t)0x08)  /* COMP1 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF8_COMP2         ((uint8_t)0x08)  /* COMP2 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF8_COMP3         ((uint8_t)0x08)  /* COMP3 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF8_COMP4         ((uint8_t)0x08)  /* COMP4 Alternate Function mapping   */
 | 
			
		||||
#if defined(COMP5)
 | 
			
		||||
#define GPIO_AF8_COMP5         ((uint8_t)0x08)  /* COMP5 Alternate Function mapping   */
 | 
			
		||||
#endif /* COMP5 */
 | 
			
		||||
#if defined(COMP6)
 | 
			
		||||
#define GPIO_AF8_COMP6         ((uint8_t)0x08)  /* COMP6 Alternate Function mapping   */
 | 
			
		||||
#endif /* COMP6 */
 | 
			
		||||
#if defined(COMP7)
 | 
			
		||||
#define GPIO_AF8_COMP7         ((uint8_t)0x08)  /* COMP7 Alternate Function mapping   */
 | 
			
		||||
#endif /* COMP7 */
 | 
			
		||||
#define GPIO_AF8_I2C3          ((uint8_t)0x08)  /* I2C3 Alternate Function mapping    */
 | 
			
		||||
#if defined(I2C4)
 | 
			
		||||
#define GPIO_AF8_I2C4          ((uint8_t)0x08)  /* I2C4 Alternate Function mapping    */
 | 
			
		||||
#endif /* I2C4 */
 | 
			
		||||
#define GPIO_AF8_LPUART1       ((uint8_t)0x08)  /* LPUART1 Alternate Function mapping */
 | 
			
		||||
#define GPIO_AF8_UART4         ((uint8_t)0x08)  /* UART4 Alternate Function mapping   */
 | 
			
		||||
#if defined(UART5)
 | 
			
		||||
#define GPIO_AF8_UART5         ((uint8_t)0x08)  /* UART5 Alternate Function mapping   */
 | 
			
		||||
#endif /* UART5 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 9 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF9_TIM1          ((uint8_t)0x09)  /* TIM1 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF9_TIM8          ((uint8_t)0x09)  /* TIM8 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF9_TIM15         ((uint8_t)0x09)  /* TIM15 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF9_TIM1_COMP1    ((uint8_t)0x09)  /* TIM1/COMP1 Break in Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF9_TIM8_COMP1    ((uint8_t)0x09)  /* TIM8/COMP1 Break in Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF9_TIM15_COMP1   ((uint8_t)0x09)  /* TIM15/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#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 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 10 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF10_TIM2         ((uint8_t)0x0A)  /* TIM2 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF10_TIM3         ((uint8_t)0x0A)  /* TIM3 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF10_TIM4         ((uint8_t)0x0A)  /* TIM4 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF10_TIM8         ((uint8_t)0x0A)  /* TIM8 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF10_TIM17        ((uint8_t)0x0A)  /* TIM17 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF10_TIM8_COMP2   ((uint8_t)0x0A)  /* TIM8/COMP2 Break in Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF10_TIM17_COMP1  ((uint8_t)0x0A)  /* TIM17/COMP1 Break in Alternate Function mapping   */
 | 
			
		||||
#if defined(QUADSPI)
 | 
			
		||||
#define GPIO_AF10_QUADSPI      ((uint8_t)0x0A)  /* OctoSPI Manager Port 1 Alternate Function mapping */
 | 
			
		||||
#endif /* QUADSPI */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 11 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF11_FDCAN1       ((uint8_t)0x0B)  /* FDCAN1 Alternate Function mapping  */
 | 
			
		||||
#if defined(FDCAN3)
 | 
			
		||||
#define GPIO_AF11_FDCAN3       ((uint8_t)0x0B)  /* FDCAN3 Alternate Function mapping  */
 | 
			
		||||
#endif /* FDCAN3 */
 | 
			
		||||
#define GPIO_AF11_TIM1         ((uint8_t)0x0B)  /* TIM1 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF11_TIM8         ((uint8_t)0x0B)  /* TIM8 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF11_TIM8_COMP1   ((uint8_t)0x0B)  /* TIM8/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF11_LPTIM1       ((uint8_t)0x0B)  /* LPTIM1 Alternate Function mapping  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 12 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF12_LPUART1      ((uint8_t)0x0C)  /* LPUART1 Alternate Function mapping */
 | 
			
		||||
#define GPIO_AF12_TIM1         ((uint8_t)0x0C)  /* TIM1 Alternate Function mapping    */
 | 
			
		||||
#define GPIO_AF12_TIM1_COMP1   ((uint8_t)0x0C)  /* TIM1/COMP1 Break in Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF12_TIM1_COMP2   ((uint8_t)0x0C)  /* TIM1/COMP2 Break in Alternate Function mapping  */
 | 
			
		||||
#if defined(HRTIM1)
 | 
			
		||||
#define GPIO_AF12_HRTIM1       ((uint8_t)0x0C)  /* HRTIM1 Alternate Function mapping  */
 | 
			
		||||
#endif /* HRTIM1 */
 | 
			
		||||
#if defined(FMC_BANK1)
 | 
			
		||||
#define GPIO_AF12_FMC          ((uint8_t)0x0C)  /* FMC Alternate Function mapping     */
 | 
			
		||||
#endif /* FMC_BANK1 */
 | 
			
		||||
#define GPIO_AF12_SAI1         ((uint8_t)0x0C)  /* SAI1 Alternate Function mapping  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 13 selection
 | 
			
		||||
  */
 | 
			
		||||
#if defined(HRTIM1)
 | 
			
		||||
#define GPIO_AF13_HRTIM1       ((uint8_t)0x0D)  /* HRTIM1 Alternate Function mapping  */
 | 
			
		||||
#endif /* HRTIM1 */
 | 
			
		||||
#define GPIO_AF13_SAI1         ((uint8_t)0x0D)  /* SAI1 Alternate Function mapping  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   AF 14 selection
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_AF14_TIM2         ((uint8_t)0x0E)  /* TIM2 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF14_TIM15        ((uint8_t)0x0E)  /* TIM15 Alternate Function mapping   */
 | 
			
		||||
#define GPIO_AF14_UCPD1        ((uint8_t)0x0E)  /* UCPD1 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF14_SAI1         ((uint8_t)0x0E)  /* SAI1 Alternate Function mapping  */
 | 
			
		||||
#define GPIO_AF14_UART4        ((uint8_t)0x0E)  /* UART4 Alternate Function mapping      */
 | 
			
		||||
#if defined(UART5)
 | 
			
		||||
#define GPIO_AF14_UART5        ((uint8_t)0x0E)  /* UART5 Alternate Function mapping      */
 | 
			
		||||
#endif /* UART5 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_GET_INDEX(__GPIOx__)    (((__GPIOx__) == (GPIOA))? 0UL :\
 | 
			
		||||
                                      ((__GPIOx__) == (GPIOB))? 1UL :\
 | 
			
		||||
                                      ((__GPIOx__) == (GPIOC))? 2UL :\
 | 
			
		||||
                                      ((__GPIOx__) == (GPIOD))? 3UL :\
 | 
			
		||||
                                      ((__GPIOx__) == (GPIOE))? 4UL :\
 | 
			
		||||
                                      ((__GPIOx__) == (GPIOF))? 5UL : 6UL)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_HAL_GPIO_EX_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										411
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_pwr.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										411
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_pwr.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,411 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_pwr.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of PWR HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_HAL_PWR_H
 | 
			
		||||
#define STM32G4xx_HAL_PWR_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWR
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Exported_Types PWR Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PWR PVD configuration structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PVDLevel;   /*!< PVDLevel: Specifies the PVD detection level.
 | 
			
		||||
                            This parameter can be a value of @ref PWR_PVD_detection_level. */
 | 
			
		||||
 | 
			
		||||
  uint32_t Mode;      /*!< 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 levels
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_PVDLEVEL_0                  PWR_CR2_PLS_LEV0  /*!< PVD threshold around 2.0 V */
 | 
			
		||||
#define PWR_PVDLEVEL_1                  PWR_CR2_PLS_LEV1  /*!< PVD threshold around 2.2 V */
 | 
			
		||||
#define PWR_PVDLEVEL_2                  PWR_CR2_PLS_LEV2  /*!< PVD threshold around 2.4 V */
 | 
			
		||||
#define PWR_PVDLEVEL_3                  PWR_CR2_PLS_LEV3  /*!< PVD threshold around 2.5 V */
 | 
			
		||||
#define PWR_PVDLEVEL_4                  PWR_CR2_PLS_LEV4  /*!< PVD threshold around 2.6 V */
 | 
			
		||||
#define PWR_PVDLEVEL_5                  PWR_CR2_PLS_LEV5  /*!< PVD threshold around 2.8 V */
 | 
			
		||||
#define PWR_PVDLEVEL_6                  PWR_CR2_PLS_LEV6  /*!< PVD threshold around 2.9 V */
 | 
			
		||||
#define PWR_PVDLEVEL_7                  PWR_CR2_PLS_LEV7  /*!< External input analog voltage (compared internally to VREFINT) */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_PVD_Mode  PWR PVD interrupt and event mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_PVD_MODE_NORMAL                 ((uint32_t)0x00000000)   /*!< Basic mode is used */
 | 
			
		||||
#define PWR_PVD_MODE_IT_RISING              ((uint32_t)0x00010001)   /*!< External Interrupt Mode with Rising edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_IT_FALLING             ((uint32_t)0x00010002)   /*!< External Interrupt Mode with Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_IT_RISING_FALLING      ((uint32_t)0x00010003)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_EVENT_RISING           ((uint32_t)0x00020001)   /*!< Event Mode with Rising edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_EVENT_FALLING          ((uint32_t)0x00020002)   /*!< Event Mode with Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_EVENT_RISING_FALLING   ((uint32_t)0x00020003)   /*!< Event Mode with Rising/Falling edge trigger detection */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Regulator_state_in_SLEEP_STOP_mode  PWR regulator mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_MAINREGULATOR_ON            ((uint32_t)0x00000000) /*!< Regulator in main mode      */
 | 
			
		||||
#define PWR_LOWPOWERREGULATOR_ON        PWR_CR1_LPR            /*!< Regulator in low-power mode */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_SLEEP_mode_entry  PWR SLEEP mode entry
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_SLEEPENTRY_WFI              ((uint8_t)0x01)        /*!< Wait For Interruption instruction to enter Sleep mode */
 | 
			
		||||
#define PWR_SLEEPENTRY_WFE              ((uint8_t)0x02)        /*!< Wait For Event instruction to enter Sleep mode        */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_STOP_mode_entry  PWR STOP mode entry
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_STOPENTRY_WFI               ((uint8_t)0x01)       /*!< Wait For Interruption instruction to enter Stop mode */
 | 
			
		||||
#define PWR_STOPENTRY_WFE               ((uint8_t)0x02)       /*!< Wait For Event instruction to enter Stop mode        */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_PVD_EXTI_LINE  PWR PVD external interrupt line
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_EXTI_LINE_PVD  ((uint32_t)0x00010000)   /*!< External interrupt line 16 Connected to the PVD EXTI Line */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_PVD_EVENT_LINE  PWR PVD event line
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_EVENT_LINE_PVD  ((uint32_t)0x00010000)  /*!< Event line 16 Connected to the PVD Event Line */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macros -----------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWR_Exported_Macros  PWR Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @brief  Check whether or not a specific PWR flag is set.
 | 
			
		||||
  * @param  __FLAG__: specifies the flag to check.
 | 
			
		||||
  *           This parameter can be one of the following values:
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF1 Wake Up Flag 1. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 1.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF2 Wake Up Flag 2. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 2.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF3 Wake Up Flag 3. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 3.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF4 Wake Up Flag 4. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 4.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF5 Wake Up Flag 5. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 5.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_SB StandBy Flag. Indicates that the system
 | 
			
		||||
  *                  entered StandBy mode.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUFI Wake-Up Flag Internal. Set when a wakeup is detected on
 | 
			
		||||
  *                 the internal wakeup line.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_REGLPS Low Power Regulator Started. Indicates whether or not the
 | 
			
		||||
  *                 low-power regulator is ready.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_REGLPF Low Power Regulator Flag. Indicates whether the
 | 
			
		||||
  *                 regulator is ready in main mode or is in low-power mode.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_VOSF Voltage Scaling Flag. Indicates whether the regulator is ready
 | 
			
		||||
  *                 in the selected voltage range or is still changing to the required voltage level.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_PVDO Power Voltage Detector Output. Indicates whether VDD voltage is
 | 
			
		||||
  *                  below or above the selected PVD threshold.
 | 
			
		||||
@if PWR_CR2_PVME1
 | 
			
		||||
  *            @arg @ref PWR_FLAG_PVMO1 Peripheral Voltage Monitoring Output 1. Indicates whether VDDUSB voltage is
 | 
			
		||||
  *                  is below or above PVM1 threshold (applicable when USB feature is supported).
 | 
			
		||||
@endif
 | 
			
		||||
@if PWR_CR2_PVME2
 | 
			
		||||
  *            @arg @ref PWR_FLAG_PVMO2 Peripheral Voltage Monitoring Output 2. Indicates whether VDDIO2 voltage is
 | 
			
		||||
  *                  is below or above PVM2 threshold (applicable when VDDIO2 is present on device).
 | 
			
		||||
@endif
 | 
			
		||||
  *            @arg @ref PWR_FLAG_PVMO3 Peripheral Voltage Monitoring Output 3. Indicates whether VDDA voltage is
 | 
			
		||||
  *                  is below or above PVM3 threshold.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_PVMO4 Peripheral Voltage Monitoring Output 4. Indicates whether VDDA voltage is
 | 
			
		||||
  *                  is below or above PVM4 threshold.
 | 
			
		||||
  *
 | 
			
		||||
  * @retval The new state of __FLAG__ (TRUE or FALSE).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_GET_FLAG(__FLAG__)  ( ((((uint8_t)(__FLAG__)) >> 5U) == 1)  ?\
 | 
			
		||||
                                      (PWR->SR1 & (1U << ((__FLAG__) & 31U))) :\
 | 
			
		||||
                                      (PWR->SR2 & (1U << ((__FLAG__) & 31U))) )
 | 
			
		||||
 | 
			
		||||
/** @brief  Clear a specific PWR flag.
 | 
			
		||||
  * @param  __FLAG__: specifies the flag to clear.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF1 Wake Up Flag 1. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 1.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF2 Wake Up Flag 2. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 2.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF3 Wake Up Flag 3. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 3.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF4 Wake Up Flag 4. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 4.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WUF5 Wake Up Flag 5. Indicates that a wakeup event
 | 
			
		||||
  *                  was received from the WKUP pin 5.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_WU Encompasses all five Wake Up Flags.
 | 
			
		||||
  *            @arg @ref PWR_FLAG_SB Standby Flag. Indicates that the system
 | 
			
		||||
  *                  entered Standby mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_CLEAR_FLAG(__FLAG__)   ( (((uint8_t)(__FLAG__)) == PWR_FLAG_WU) ?\
 | 
			
		||||
                                         (PWR->SCR  = (__FLAG__)) :\
 | 
			
		||||
                                         (PWR->SCR = (1U << ((__FLAG__) & 31U))) )
 | 
			
		||||
/**
 | 
			
		||||
  * @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_EVENT_LINE_PVD)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVD Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT()  CLEAR_BIT(EXTI->EMR1, PWR_EVENT_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 or not the PVD EXTI interrupt flag is set.
 | 
			
		||||
  * @retval EXTI PVD Line Status.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_GET_FLAG()  (EXTI->PR1 & PWR_EXTI_LINE_PVD)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Clear the PVD EXTI interrupt flag.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG()  WRITE_REG(EXTI->PR1, PWR_EXTI_LINE_PVD)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Private macros --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup  PWR_Private_Macros   PWR Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_REGULATOR(REGULATOR)      (((REGULATOR) == PWR_MAINREGULATOR_ON) || \
 | 
			
		||||
                                          ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE) )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Include PWR HAL Extended module */
 | 
			
		||||
#include "stm32g4xx_hal_pwr_ex.h"
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWR_Exported_Functions PWR Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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 Peripheral Control functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Peripheral Control functions  ************************************************/
 | 
			
		||||
HAL_StatusTypeDef HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);
 | 
			
		||||
void HAL_PWR_EnablePVD(void);
 | 
			
		||||
void HAL_PWR_DisablePVD(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* WakeUp 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);
 | 
			
		||||
 | 
			
		||||
void HAL_PWR_EnableSleepOnExit(void);
 | 
			
		||||
void HAL_PWR_DisableSleepOnExit(void);
 | 
			
		||||
void HAL_PWR_EnableSEVOnPend(void);
 | 
			
		||||
void HAL_PWR_DisableSEVOnPend(void);
 | 
			
		||||
 | 
			
		||||
void HAL_PWR_PVDCallback(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_HAL_PWR_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										817
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_pwr_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										817
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_pwr_ex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,817 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_pwr_ex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of PWR HAL Extended module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_HAL_PWR_EX_H
 | 
			
		||||
#define STM32G4xx_HAL_PWR_EX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWREx
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_Exported_Types PWR Extended Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PWR PVM configuration structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PVMType;   /*!< PVMType: Specifies which voltage is monitored and against which threshold.
 | 
			
		||||
                           This parameter can be a value of @ref PWREx_PVM_Type. */
 | 
			
		||||
  uint32_t Mode;      /*!< Mode: Specifies the operating mode for the selected pins.
 | 
			
		||||
                           This parameter can be a value of @ref PWREx_PVM_Mode. */
 | 
			
		||||
}PWR_PVMTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_Exported_Constants  PWR Extended Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_WUP_Polarity Shift to apply to retrieve polarity information from PWR_WAKEUP_PINy_xxx constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_WUP_POLARITY_SHIFT                  0x05U   /*!< Internal constant used to retrieve wakeup pin polariry */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_WakeUp_Pins  PWR wake-up pins
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_WAKEUP_PIN1                 PWR_CR3_EWUP1  /*!< Wakeup pin 1 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN2                 PWR_CR3_EWUP2  /*!< Wakeup pin 2 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN3                 PWR_CR3_EWUP3  /*!< Wakeup pin 3 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN4                 PWR_CR3_EWUP4  /*!< Wakeup pin 4 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN5                 PWR_CR3_EWUP5  /*!< Wakeup pin 5 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN1_HIGH            PWR_CR3_EWUP1  /*!< Wakeup pin 1 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN2_HIGH            PWR_CR3_EWUP2  /*!< Wakeup pin 2 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN3_HIGH            PWR_CR3_EWUP3  /*!< Wakeup pin 3 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN4_HIGH            PWR_CR3_EWUP4  /*!< Wakeup pin 4 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN5_HIGH            PWR_CR3_EWUP5  /*!< Wakeup pin 5 (with high level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN1_LOW             (uint32_t)((PWR_CR4_WP1<<PWR_WUP_POLARITY_SHIFT) | PWR_CR3_EWUP1) /*!< Wakeup pin 1 (with low level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN2_LOW             (uint32_t)((PWR_CR4_WP2<<PWR_WUP_POLARITY_SHIFT) | PWR_CR3_EWUP2) /*!< Wakeup pin 2 (with low level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN3_LOW             (uint32_t)((PWR_CR4_WP3<<PWR_WUP_POLARITY_SHIFT) | PWR_CR3_EWUP3) /*!< Wakeup pin 3 (with low level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN4_LOW             (uint32_t)((PWR_CR4_WP4<<PWR_WUP_POLARITY_SHIFT) | PWR_CR3_EWUP4) /*!< Wakeup pin 4 (with low level polarity) */
 | 
			
		||||
#define PWR_WAKEUP_PIN5_LOW             (uint32_t)((PWR_CR4_WP5<<PWR_WUP_POLARITY_SHIFT) | PWR_CR3_EWUP5) /*!< Wakeup pin 5 (with low level polarity) */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_PVM_Type Peripheral Voltage Monitoring type
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(PWR_CR2_PVME1)
 | 
			
		||||
#define PWR_PVM_1                  PWR_CR2_PVME1  /*!< Peripheral Voltage Monitoring 1 enable: VDDUSB versus 1.2 V (applicable when USB feature is supported) */
 | 
			
		||||
#endif /* PWR_CR2_PVME1 */
 | 
			
		||||
#if defined(PWR_CR2_PVME2)
 | 
			
		||||
#define PWR_PVM_2                  PWR_CR2_PVME2  /*!< Peripheral Voltage Monitoring 2 enable: VDDIO2 versus 0.9 V (applicable when VDDIO2 is present on device) */
 | 
			
		||||
#endif /* PWR_CR2_PVME2 */
 | 
			
		||||
#define PWR_PVM_3                  PWR_CR2_PVME3  /*!< Peripheral Voltage Monitoring 3 enable: VDDA versus 1.62 V */
 | 
			
		||||
#define PWR_PVM_4                  PWR_CR2_PVME4  /*!< Peripheral Voltage Monitoring 4 enable: VDDA versus 2.2 V  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_PVM_Mode  PWR PVM interrupt and event mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_PVM_MODE_NORMAL                 0x00000000U   /*!< basic mode is used */
 | 
			
		||||
#define PWR_PVM_MODE_IT_RISING              0x00010001U   /*!< External Interrupt Mode with Rising edge trigger detection */
 | 
			
		||||
#define PWR_PVM_MODE_IT_FALLING             0x00010002U   /*!< External Interrupt Mode with Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVM_MODE_IT_RISING_FALLING      0x00010003U   /*!< External Interrupt Mode with Rising/Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVM_MODE_EVENT_RISING           0x00020001U   /*!< Event Mode with Rising edge trigger detection */
 | 
			
		||||
#define PWR_PVM_MODE_EVENT_FALLING          0x00020002U   /*!< Event Mode with Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVM_MODE_EVENT_RISING_FALLING   0x00020003U   /*!< Event Mode with Rising/Falling edge trigger detection */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_Regulator_Voltage_Scale  PWR Regulator voltage scale
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(PWR_CR5_R1MODE)
 | 
			
		||||
#define PWR_REGULATOR_VOLTAGE_SCALE1_BOOST  ((uint32_t)0x00000000)  /*!< Voltage scaling range 1 boost mode  */
 | 
			
		||||
#endif /*PWR_CR5_R1MODE */
 | 
			
		||||
#define PWR_REGULATOR_VOLTAGE_SCALE1        PWR_CR1_VOS_0           /*!< Voltage scaling range 1 normal mode */
 | 
			
		||||
#define PWR_REGULATOR_VOLTAGE_SCALE2        PWR_CR1_VOS_1           /*!< Voltage scaling range 2             */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_VBAT_Battery_Charging_Selection PWR battery charging resistor selection
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_BATTERY_CHARGING_RESISTOR_5           0x00000000U           /*!< VBAT charging through a 5 kOhms resistor   */
 | 
			
		||||
#define PWR_BATTERY_CHARGING_RESISTOR_1_5         PWR_CR4_VBRS          /*!< VBAT charging through a 1.5 kOhms resistor */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_VBAT_Battery_Charging PWR battery charging
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_BATTERY_CHARGING_DISABLE        0x00000000U
 | 
			
		||||
#define PWR_BATTERY_CHARGING_ENABLE         PWR_CR4_VBE
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_GPIO_Bit_Number GPIO bit number for I/O setting in standby/shutdown mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_GPIO_BIT_0   PWR_PUCRA_PA0    /*!< GPIO port I/O pin 0  */
 | 
			
		||||
#define PWR_GPIO_BIT_1   PWR_PUCRA_PA1    /*!< GPIO port I/O pin 1  */
 | 
			
		||||
#define PWR_GPIO_BIT_2   PWR_PUCRA_PA2    /*!< GPIO port I/O pin 2  */
 | 
			
		||||
#define PWR_GPIO_BIT_3   PWR_PUCRA_PA3    /*!< GPIO port I/O pin 3  */
 | 
			
		||||
#define PWR_GPIO_BIT_4   PWR_PUCRA_PA4    /*!< GPIO port I/O pin 4  */
 | 
			
		||||
#define PWR_GPIO_BIT_5   PWR_PUCRA_PA5    /*!< GPIO port I/O pin 5  */
 | 
			
		||||
#define PWR_GPIO_BIT_6   PWR_PUCRA_PA6    /*!< GPIO port I/O pin 6  */
 | 
			
		||||
#define PWR_GPIO_BIT_7   PWR_PUCRA_PA7    /*!< GPIO port I/O pin 7  */
 | 
			
		||||
#define PWR_GPIO_BIT_8   PWR_PUCRA_PA8    /*!< GPIO port I/O pin 8  */
 | 
			
		||||
#define PWR_GPIO_BIT_9   PWR_PUCRA_PA9    /*!< GPIO port I/O pin 9  */
 | 
			
		||||
#define PWR_GPIO_BIT_10  PWR_PUCRA_PA10   /*!< GPIO port I/O pin 10 */
 | 
			
		||||
#define PWR_GPIO_BIT_11  PWR_PUCRA_PA11   /*!< GPIO port I/O pin 11 */
 | 
			
		||||
#define PWR_GPIO_BIT_12  PWR_PUCRA_PA12   /*!< GPIO port I/O pin 12 */
 | 
			
		||||
#define PWR_GPIO_BIT_13  PWR_PUCRA_PA13   /*!< GPIO port I/O pin 13 */
 | 
			
		||||
#define PWR_GPIO_BIT_14  PWR_PDCRA_PA14   /*!< GPIO port I/O pin 14 */
 | 
			
		||||
#define PWR_GPIO_BIT_15  PWR_PUCRA_PA15   /*!< GPIO port I/O pin 15 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_GPIO GPIO port
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_GPIO_A   0x00000000U      /*!< GPIO port A */
 | 
			
		||||
#define PWR_GPIO_B   0x00000001U      /*!< GPIO port B */
 | 
			
		||||
#define PWR_GPIO_C   0x00000002U      /*!< GPIO port C */
 | 
			
		||||
#define PWR_GPIO_D   0x00000003U      /*!< GPIO port D */
 | 
			
		||||
#define PWR_GPIO_E   0x00000004U      /*!< GPIO port E */
 | 
			
		||||
#define PWR_GPIO_F   0x00000005U      /*!< GPIO port F */
 | 
			
		||||
#define PWR_GPIO_G   0x00000006U      /*!< GPIO port G */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_PVM_EXTI_LINE PWR PVM external interrupts lines
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(PWR_CR2_PVME1)
 | 
			
		||||
#define PWR_EXTI_LINE_PVM1  0x00000008U  /*!< External interrupt line 35 Connected to the PVM1 EXTI Line   */
 | 
			
		||||
#endif /* PWR_CR2_PVME1 */
 | 
			
		||||
#if defined(PWR_CR2_PVME2)
 | 
			
		||||
#define PWR_EXTI_LINE_PVM2  0x00000010U  /*!< External interrupt line 36 Connected to the PVM2 EXTI Line   */
 | 
			
		||||
#endif /* PWR_CR2_PVME2 */
 | 
			
		||||
#define PWR_EXTI_LINE_PVM3  0x00000020U  /*!< External interrupt line 37 Connected to the PVM3 EXTI Line   */
 | 
			
		||||
#define PWR_EXTI_LINE_PVM4  0x00000040U  /*!< External interrupt line 38 Connected to the PVM4 EXTI Line   */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_PVM_EVENT_LINE PWR PVM event lines
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(PWR_CR2_PVME1)
 | 
			
		||||
#define PWR_EVENT_LINE_PVM1     0x00000008U     /*!< Event line 35 Connected to the PVM1 EXTI Line */
 | 
			
		||||
#endif /* PWR_CR2_PVME1 */
 | 
			
		||||
#if defined(PWR_CR2_PVME2)
 | 
			
		||||
#define PWR_EVENT_LINE_PVM2     0x00000010U     /*!< Event line 36 Connected to the PVM2 EXTI Line */
 | 
			
		||||
#endif /* PWR_CR2_PVME2 */
 | 
			
		||||
#define PWR_EVENT_LINE_PVM3     0x00000020U     /*!< Event line 37 Connected to the PVM3 EXTI Line */
 | 
			
		||||
#define PWR_EVENT_LINE_PVM4     0x00000040U     /*!< Event line 38 Connected to the PVM4 EXTI Line */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_Flag  PWR Status Flags
 | 
			
		||||
  *        Elements values convention: 0000 0000 0XXY YYYYb
 | 
			
		||||
  *           - Y YYYY  : Flag position in the XX register (5 bits)
 | 
			
		||||
  *           - XX  : Status register (2 bits)
 | 
			
		||||
  *                 - 01: SR1 register
 | 
			
		||||
  *                 - 10: SR2 register
 | 
			
		||||
  *        The only exception is PWR_FLAG_WU, encompassing all
 | 
			
		||||
  *        wake-up flags and set to PWR_SR1_WUF.
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_FLAG_WUF1                       0x0020U              /*!< Wakeup event on wakeup pin 1 */
 | 
			
		||||
#define PWR_FLAG_WUF2                       0x0021U              /*!< Wakeup event on wakeup pin 2 */
 | 
			
		||||
#define PWR_FLAG_WUF3                       0x0022U              /*!< Wakeup event on wakeup pin 3 */
 | 
			
		||||
#define PWR_FLAG_WUF4                       0x0023U              /*!< Wakeup event on wakeup pin 4 */
 | 
			
		||||
#define PWR_FLAG_WUF5                       0x0024U              /*!< Wakeup event on wakeup pin 5 */
 | 
			
		||||
#define PWR_FLAG_WU                         PWR_SR1_WUF          /*!< Encompass wakeup event on all wakeup pins */
 | 
			
		||||
#define PWR_FLAG_SB                         0x0028U              /*!< Standby flag */
 | 
			
		||||
#define PWR_FLAG_WUFI                       0x002FU              /*!< Wakeup on internal wakeup line */
 | 
			
		||||
 | 
			
		||||
#define PWR_FLAG_REGLPS                     0x0048U              /*!< Low-power regulator start flag */
 | 
			
		||||
#define PWR_FLAG_REGLPF                     0x0049U              /*!< Low-power regulator flag */
 | 
			
		||||
#define PWR_FLAG_VOSF                       0x004AU              /*!< Voltage scaling flag */
 | 
			
		||||
#define PWR_FLAG_PVDO                       0x004BU              /*!< Power Voltage Detector output flag */
 | 
			
		||||
#if defined(PWR_CR2_PVME1)
 | 
			
		||||
#define PWR_FLAG_PVMO1                      0x004CU              /*!< Power Voltage Monitoring 1 output flag */
 | 
			
		||||
#endif /* PWR_CR2_PVME1 */
 | 
			
		||||
#if defined(PWR_CR2_PVME2)
 | 
			
		||||
#define PWR_FLAG_PVMO2                      0x004DU              /*!< Power Voltage Monitoring 2 output flag */
 | 
			
		||||
#endif /* PWR_CR2_PVME2 */
 | 
			
		||||
#define PWR_FLAG_PVMO3                      0x004EU              /*!< Power Voltage Monitoring 3 output flag */
 | 
			
		||||
#define PWR_FLAG_PVMO4                      0x004FU              /*!< Power Voltage Monitoring 4 output flag */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macros -----------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWREx_Exported_Macros PWR Extended Exported Macros
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR2_PVME1)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM1 Extended Interrupt Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_ENABLE_IT()   SET_BIT(EXTI->IMR2, PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM1 Extended Interrupt Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_DISABLE_IT()  CLEAR_BIT(EXTI->IMR2, PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM1 Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_ENABLE_EVENT()   SET_BIT(EXTI->EMR2, PWR_EVENT_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM1 Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_DISABLE_EVENT()  CLEAR_BIT(EXTI->EMR2, PWR_EVENT_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM1 Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_ENABLE_RISING_EDGE()   SET_BIT(EXTI->RTSR2, PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM1 Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR2, PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM1 Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_ENABLE_FALLING_EDGE()   SET_BIT(EXTI->FTSR2, PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM1 Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR2, PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PVM1 EXTI line configuration: set rising & falling edge trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_ENABLE_RISING_FALLING_EDGE()  \
 | 
			
		||||
  do {                                                    \
 | 
			
		||||
    __HAL_PWR_PVM1_EXTI_ENABLE_RISING_EDGE();             \
 | 
			
		||||
    __HAL_PWR_PVM1_EXTI_ENABLE_FALLING_EDGE();            \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM1 Extended Interrupt Rising & Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_DISABLE_RISING_FALLING_EDGE()  \
 | 
			
		||||
  do {                                                     \
 | 
			
		||||
    __HAL_PWR_PVM1_EXTI_DISABLE_RISING_EDGE();             \
 | 
			
		||||
    __HAL_PWR_PVM1_EXTI_DISABLE_FALLING_EDGE();            \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generate a Software interrupt on selected EXTI line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER2, PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Check whether the specified PVM1 EXTI interrupt flag is set or not.
 | 
			
		||||
  * @retval EXTI PVM1 Line Status.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_GET_FLAG()  (EXTI->PR2 & PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Clear the PVM1 EXTI flag.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM1_EXTI_CLEAR_FLAG()  WRITE_REG(EXTI->PR2, PWR_EXTI_LINE_PVM1)
 | 
			
		||||
 | 
			
		||||
#endif /* PWR_CR2_PVME1 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR2_PVME2)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM2 Extended Interrupt Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_ENABLE_IT()   SET_BIT(EXTI->IMR2, PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM2 Extended Interrupt Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_DISABLE_IT()  CLEAR_BIT(EXTI->IMR2, PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM2 Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_ENABLE_EVENT()   SET_BIT(EXTI->EMR2, PWR_EVENT_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM2 Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_DISABLE_EVENT()  CLEAR_BIT(EXTI->EMR2, PWR_EVENT_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM2 Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_ENABLE_RISING_EDGE()   SET_BIT(EXTI->RTSR2, PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM2 Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR2, PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM2 Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_ENABLE_FALLING_EDGE()   SET_BIT(EXTI->FTSR2, PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM2 Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR2, PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PVM2 EXTI line configuration: set rising & falling edge trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_ENABLE_RISING_FALLING_EDGE()  \
 | 
			
		||||
  do {                                                    \
 | 
			
		||||
    __HAL_PWR_PVM2_EXTI_ENABLE_RISING_EDGE();             \
 | 
			
		||||
    __HAL_PWR_PVM2_EXTI_ENABLE_FALLING_EDGE();            \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM2 Extended Interrupt Rising & Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_DISABLE_RISING_FALLING_EDGE()  \
 | 
			
		||||
  do {                                                     \
 | 
			
		||||
    __HAL_PWR_PVM2_EXTI_DISABLE_RISING_EDGE();             \
 | 
			
		||||
    __HAL_PWR_PVM2_EXTI_DISABLE_FALLING_EDGE();            \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generate a Software interrupt on selected EXTI line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER2, PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Check whether the specified PVM2 EXTI interrupt flag is set or not.
 | 
			
		||||
  * @retval EXTI PVM2 Line Status.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_GET_FLAG()  (EXTI->PR2 & PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Clear the PVM2 EXTI flag.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM2_EXTI_CLEAR_FLAG()  WRITE_REG(EXTI->PR2, PWR_EXTI_LINE_PVM2)
 | 
			
		||||
 | 
			
		||||
#endif /* PWR_CR2_PVME2 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM3 Extended Interrupt Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_ENABLE_IT()   SET_BIT(EXTI->IMR2, PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM3 Extended Interrupt Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_DISABLE_IT()  CLEAR_BIT(EXTI->IMR2, PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM3 Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_ENABLE_EVENT()   SET_BIT(EXTI->EMR2, PWR_EVENT_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM3 Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_DISABLE_EVENT()  CLEAR_BIT(EXTI->EMR2, PWR_EVENT_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM3 Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_ENABLE_RISING_EDGE()   SET_BIT(EXTI->RTSR2, PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM3 Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR2, PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM3 Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_ENABLE_FALLING_EDGE()   SET_BIT(EXTI->FTSR2, PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM3 Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR2, PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PVM3 EXTI line configuration: set rising & falling edge trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_ENABLE_RISING_FALLING_EDGE()  \
 | 
			
		||||
  do {                                                    \
 | 
			
		||||
    __HAL_PWR_PVM3_EXTI_ENABLE_RISING_EDGE();             \
 | 
			
		||||
    __HAL_PWR_PVM3_EXTI_ENABLE_FALLING_EDGE();            \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM3 Extended Interrupt Rising & Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_DISABLE_RISING_FALLING_EDGE()  \
 | 
			
		||||
  do {                                                     \
 | 
			
		||||
    __HAL_PWR_PVM3_EXTI_DISABLE_RISING_EDGE();             \
 | 
			
		||||
    __HAL_PWR_PVM3_EXTI_DISABLE_FALLING_EDGE();            \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generate a Software interrupt on selected EXTI line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER2, PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Check whether the specified PVM3 EXTI interrupt flag is set or not.
 | 
			
		||||
  * @retval EXTI PVM3 Line Status.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_GET_FLAG()  (EXTI->PR2 & PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Clear the PVM3 EXTI flag.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM3_EXTI_CLEAR_FLAG()  WRITE_REG(EXTI->PR2, PWR_EXTI_LINE_PVM3)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM4 Extended Interrupt Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_ENABLE_IT()   SET_BIT(EXTI->IMR2, PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM4 Extended Interrupt Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_DISABLE_IT()  CLEAR_BIT(EXTI->IMR2, PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM4 Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_ENABLE_EVENT()   SET_BIT(EXTI->EMR2, PWR_EVENT_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM4 Event Line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_DISABLE_EVENT()  CLEAR_BIT(EXTI->EMR2, PWR_EVENT_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM4 Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_ENABLE_RISING_EDGE()   SET_BIT(EXTI->RTSR2, PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM4 Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR2, PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVM4 Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_ENABLE_FALLING_EDGE()   SET_BIT(EXTI->FTSR2, PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM4 Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR2, PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PVM4 EXTI line configuration: set rising & falling edge trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_ENABLE_RISING_FALLING_EDGE()  \
 | 
			
		||||
  do {                                                    \
 | 
			
		||||
    __HAL_PWR_PVM4_EXTI_ENABLE_RISING_EDGE();             \
 | 
			
		||||
    __HAL_PWR_PVM4_EXTI_ENABLE_FALLING_EDGE();            \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVM4 Extended Interrupt Rising & Falling Trigger.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_DISABLE_RISING_FALLING_EDGE()  \
 | 
			
		||||
  do {                                                     \
 | 
			
		||||
    __HAL_PWR_PVM4_EXTI_DISABLE_RISING_EDGE();             \
 | 
			
		||||
    __HAL_PWR_PVM4_EXTI_DISABLE_FALLING_EDGE();            \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generate a Software interrupt on selected EXTI line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER2, PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Check whether or not the specified PVM4 EXTI interrupt flag is set.
 | 
			
		||||
  * @retval EXTI PVM4 Line Status.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_GET_FLAG()  (EXTI->PR2 & PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Clear the PVM4 EXTI flag.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVM4_EXTI_CLEAR_FLAG()  WRITE_REG(EXTI->PR2, PWR_EXTI_LINE_PVM4)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Configure the main internal regulator output voltage.
 | 
			
		||||
  * @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_SCALE1_BOOST  Regulator voltage output range 1 mode,
 | 
			
		||||
  *                                                typical output voltage at 1.28 V,
 | 
			
		||||
  *                                                system frequency up to 170 MHz.
 | 
			
		||||
  *            @arg @ref PWR_REGULATOR_VOLTAGE_SCALE1  Regulator voltage output range 1 mode,
 | 
			
		||||
  *                                                typical output voltage at 1.2 V,
 | 
			
		||||
  *                                                system frequency up to 150 MHz.
 | 
			
		||||
  *            @arg @ref PWR_REGULATOR_VOLTAGE_SCALE2  Regulator voltage output range 2 mode,
 | 
			
		||||
  *                                                typical output voltage at 1.0 V,
 | 
			
		||||
  *                                                system frequency up to 26 MHz.
 | 
			
		||||
  * @note  This macro is similar to HAL_PWREx_ControlVoltageScaling() API but doesn't check
 | 
			
		||||
  *        whether or not VOSF flag is cleared when moving from range 2 to range 1. User
 | 
			
		||||
  *        may resort to __HAL_PWR_GET_FLAG() macro to check VOSF bit resetting.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do {                                                     \
 | 
			
		||||
                                                            __IO uint32_t tmpreg;                               \
 | 
			
		||||
                                                            MODIFY_REG(PWR->CR1, PWR_CR1_VOS, (__REGULATOR__)); \
 | 
			
		||||
                                                            /* Delay after an RCC peripheral clock enabling */  \
 | 
			
		||||
                                                            tmpreg = READ_BIT(PWR->CR1, PWR_CR1_VOS);           \
 | 
			
		||||
                                                            UNUSED(tmpreg);                                     \
 | 
			
		||||
                                                          } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup  PWREx_Private_Macros   PWR Extended Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_PVM_TYPE(TYPE) (((TYPE) == PWR_PVM_1) ||\
 | 
			
		||||
                               ((TYPE) == PWR_PVM_2) ||\
 | 
			
		||||
                               ((TYPE) == PWR_PVM_3) ||\
 | 
			
		||||
                               ((TYPE) == PWR_PVM_4))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_PVM_MODE(MODE)  (((MODE) == PWR_PVM_MODE_NORMAL)              ||\
 | 
			
		||||
                                ((MODE) == PWR_PVM_MODE_IT_RISING)           ||\
 | 
			
		||||
                                ((MODE) == PWR_PVM_MODE_IT_FALLING)          ||\
 | 
			
		||||
                                ((MODE) == PWR_PVM_MODE_IT_RISING_FALLING)   ||\
 | 
			
		||||
                                ((MODE) == PWR_PVM_MODE_EVENT_RISING)        ||\
 | 
			
		||||
                                ((MODE) == PWR_PVM_MODE_EVENT_FALLING)       ||\
 | 
			
		||||
                                ((MODE) == PWR_PVM_MODE_EVENT_RISING_FALLING))
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR5_R1MODE)
 | 
			
		||||
#define IS_PWR_VOLTAGE_SCALING_RANGE(RANGE) (((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE1_BOOST) || \
 | 
			
		||||
                                             ((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE1)       || \
 | 
			
		||||
                                             ((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE2))
 | 
			
		||||
#else
 | 
			
		||||
#define IS_PWR_VOLTAGE_SCALING_RANGE(RANGE) (((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \
 | 
			
		||||
                                             ((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE2))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_BATTERY_RESISTOR_SELECT(RESISTOR) (((RESISTOR) == PWR_BATTERY_CHARGING_RESISTOR_5) ||\
 | 
			
		||||
                                                  ((RESISTOR) == PWR_BATTERY_CHARGING_RESISTOR_1_5))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_BATTERY_CHARGING(CHARGING) (((CHARGING) == PWR_BATTERY_CHARGING_DISABLE) ||\
 | 
			
		||||
                                           ((CHARGING) == PWR_BATTERY_CHARGING_ENABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_GPIO_BIT_NUMBER(BIT_NUMBER) (((BIT_NUMBER) & GPIO_PIN_MASK) != (uint32_t)0x00U)
 | 
			
		||||
#define IS_PWR_GPIO(GPIO) (((GPIO) == PWR_GPIO_A) ||\
 | 
			
		||||
                           ((GPIO) == PWR_GPIO_B) ||\
 | 
			
		||||
                           ((GPIO) == PWR_GPIO_C) ||\
 | 
			
		||||
                           ((GPIO) == PWR_GPIO_D) ||\
 | 
			
		||||
                           ((GPIO) == PWR_GPIO_E) ||\
 | 
			
		||||
                           ((GPIO) == PWR_GPIO_F) ||\
 | 
			
		||||
                           ((GPIO) == PWR_GPIO_G))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWREx_Exported_Functions PWR Extended Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWREx_Exported_Functions_Group1 Extended Peripheral Control functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Peripheral Control functions  **********************************************/
 | 
			
		||||
uint32_t HAL_PWREx_GetVoltageRange(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling);
 | 
			
		||||
void HAL_PWREx_EnableBatteryCharging(uint32_t ResistorSelection);
 | 
			
		||||
void HAL_PWREx_DisableBatteryCharging(void);
 | 
			
		||||
void HAL_PWREx_EnableInternalWakeUpLine(void);
 | 
			
		||||
void HAL_PWREx_DisableInternalWakeUpLine(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_EnableGPIOPullUp(uint32_t GPIO, uint32_t GPIONumber);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_DisableGPIOPullUp(uint32_t GPIO, uint32_t GPIONumber);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_EnableGPIOPullDown(uint32_t GPIO, uint32_t GPIONumber);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_DisableGPIOPullDown(uint32_t GPIO, uint32_t GPIONumber);
 | 
			
		||||
void HAL_PWREx_EnablePullUpPullDownConfig(void);
 | 
			
		||||
void HAL_PWREx_DisablePullUpPullDownConfig(void);
 | 
			
		||||
void HAL_PWREx_EnableSRAM2ContentRetention(void);
 | 
			
		||||
void HAL_PWREx_DisableSRAM2ContentRetention(void);
 | 
			
		||||
#if defined(PWR_CR2_PVME1)
 | 
			
		||||
void HAL_PWREx_EnablePVM1(void);
 | 
			
		||||
void HAL_PWREx_DisablePVM1(void);
 | 
			
		||||
#endif /* PWR_CR2_PVME1 */
 | 
			
		||||
#if defined(PWR_CR2_PVME2)
 | 
			
		||||
void HAL_PWREx_EnablePVM2(void);
 | 
			
		||||
void HAL_PWREx_DisablePVM2(void);
 | 
			
		||||
#endif /* PWR_CR2_PVME2 */
 | 
			
		||||
void HAL_PWREx_EnablePVM3(void);
 | 
			
		||||
void HAL_PWREx_DisablePVM3(void);
 | 
			
		||||
void HAL_PWREx_EnablePVM4(void);
 | 
			
		||||
void HAL_PWREx_DisablePVM4(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_ConfigPVM(PWR_PVMTypeDef *sConfigPVM);
 | 
			
		||||
 | 
			
		||||
/* Low Power modes configuration functions ************************************/
 | 
			
		||||
void HAL_PWREx_EnableLowPowerRunMode(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_DisableLowPowerRunMode(void);
 | 
			
		||||
void HAL_PWREx_EnterSTOP0Mode(uint8_t STOPEntry);
 | 
			
		||||
void HAL_PWREx_EnterSTOP1Mode(uint8_t STOPEntry);
 | 
			
		||||
void HAL_PWREx_EnterSHUTDOWNMode(void);
 | 
			
		||||
 | 
			
		||||
void HAL_PWREx_PVD_PVM_IRQHandler(void);
 | 
			
		||||
#if defined(PWR_CR2_PVME1)
 | 
			
		||||
void HAL_PWREx_PVM1Callback(void);
 | 
			
		||||
#endif /* PWR_CR2_PVME1 */
 | 
			
		||||
#if defined(PWR_CR2_PVME2)
 | 
			
		||||
void HAL_PWREx_PVM2Callback(void);
 | 
			
		||||
#endif /* PWR_CR2_PVME2 */
 | 
			
		||||
void HAL_PWREx_PVM3Callback(void);
 | 
			
		||||
void HAL_PWREx_PVM4Callback(void);
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR3_UCPD_STDBY)
 | 
			
		||||
void HAL_PWREx_EnableUCPDStandbyMode(void);
 | 
			
		||||
void HAL_PWREx_DisableUCPDStandbyMode(void);
 | 
			
		||||
#endif /* PWR_CR3_UCPD_STDBY */
 | 
			
		||||
#if defined(PWR_CR3_UCPD_DBDIS)
 | 
			
		||||
void HAL_PWREx_EnableUCPDDeadBattery(void);
 | 
			
		||||
void HAL_PWREx_DisableUCPDDeadBattery(void);
 | 
			
		||||
#endif /* PWR_CR3_UCPD_DBDIS */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_HAL_PWR_EX_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3406
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_rcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3406
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_rcc.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1632
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_rcc_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1632
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_rcc_ex.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2611
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_tim.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2611
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_tim.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2140
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_tim_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2140
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal_tim_ex.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1680
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_bus.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1680
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_bus.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										637
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_cortex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										637
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_cortex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,637 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_ll_cortex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of CORTEX LL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    The LL CORTEX driver contains a set of generic APIs that can be
 | 
			
		||||
    used by user:
 | 
			
		||||
      (+) SYSTICK configuration used by LL_mDelay and LL_Init1msTick
 | 
			
		||||
          functions
 | 
			
		||||
      (+) Low power mode configuration (SCB register of Cortex-MCU)
 | 
			
		||||
      (+) MPU API to configure and enable regions
 | 
			
		||||
      (+) API to access to MCU info (CPUID register)
 | 
			
		||||
      (+) API to enable fault handler (SHCSR accesses)
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32G4xx_LL_CORTEX_H
 | 
			
		||||
#define __STM32G4xx_LL_CORTEX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_LL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL CORTEX
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_LL_Exported_Constants CORTEX Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_CLKSOURCE_HCLK SYSTICK Clock Source
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_SYSTICK_CLKSOURCE_HCLK_DIV8     0x00000000U                 /*!< AHB clock divided by 8 selected as SysTick clock source.*/
 | 
			
		||||
#define LL_SYSTICK_CLKSOURCE_HCLK          SysTick_CTRL_CLKSOURCE_Msk  /*!< AHB clock selected as SysTick clock source. */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_FAULT Handler Fault type
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_HANDLER_FAULT_USG               SCB_SHCSR_USGFAULTENA_Msk              /*!< Usage fault */
 | 
			
		||||
#define LL_HANDLER_FAULT_BUS               SCB_SHCSR_BUSFAULTENA_Msk              /*!< Bus fault */
 | 
			
		||||
#define LL_HANDLER_FAULT_MEM               SCB_SHCSR_MEMFAULTENA_Msk              /*!< Memory management fault */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if __MPU_PRESENT
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_CTRL_HFNMI_PRIVDEF MPU Control
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_CTRL_HFNMI_PRIVDEF_NONE     0x00000000U                                       /*!< Disable NMI and privileged SW access */
 | 
			
		||||
#define LL_MPU_CTRL_HARDFAULT_NMI          MPU_CTRL_HFNMIENA_Msk                             /*!< Enables the operation of MPU during hard fault, NMI, and FAULTMASK handlers */
 | 
			
		||||
#define LL_MPU_CTRL_PRIVILEGED_DEFAULT     MPU_CTRL_PRIVDEFENA_Msk                           /*!< Enable privileged software access to default memory map */
 | 
			
		||||
#define LL_MPU_CTRL_HFNMI_PRIVDEF          (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk) /*!< Enable NMI and privileged SW access */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_REGION MPU Region Number
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER0              0x00U /*!< REGION Number 0 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER1              0x01U /*!< REGION Number 1 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER2              0x02U /*!< REGION Number 2 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER3              0x03U /*!< REGION Number 3 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER4              0x04U /*!< REGION Number 4 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER5              0x05U /*!< REGION Number 5 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER6              0x06U /*!< REGION Number 6 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER7              0x07U /*!< REGION Number 7 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_REGION_SIZE MPU Region Size
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_32B             (0x04U << MPU_RASR_SIZE_Pos) /*!< 32B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_64B             (0x05U << MPU_RASR_SIZE_Pos) /*!< 64B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_128B            (0x06U << MPU_RASR_SIZE_Pos) /*!< 128B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_256B            (0x07U << MPU_RASR_SIZE_Pos) /*!< 256B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_512B            (0x08U << MPU_RASR_SIZE_Pos) /*!< 512B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_1KB             (0x09U << MPU_RASR_SIZE_Pos) /*!< 1KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_2KB             (0x0AU << MPU_RASR_SIZE_Pos) /*!< 2KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_4KB             (0x0BU << MPU_RASR_SIZE_Pos) /*!< 4KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_8KB             (0x0CU << MPU_RASR_SIZE_Pos) /*!< 8KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_16KB            (0x0DU << MPU_RASR_SIZE_Pos) /*!< 16KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_32KB            (0x0EU << MPU_RASR_SIZE_Pos) /*!< 32KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_64KB            (0x0FU << MPU_RASR_SIZE_Pos) /*!< 64KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_128KB           (0x10U << MPU_RASR_SIZE_Pos) /*!< 128KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_256KB           (0x11U << MPU_RASR_SIZE_Pos) /*!< 256KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_512KB           (0x12U << MPU_RASR_SIZE_Pos) /*!< 512KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_1MB             (0x13U << MPU_RASR_SIZE_Pos) /*!< 1MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_2MB             (0x14U << MPU_RASR_SIZE_Pos) /*!< 2MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_4MB             (0x15U << MPU_RASR_SIZE_Pos) /*!< 4MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_8MB             (0x16U << MPU_RASR_SIZE_Pos) /*!< 8MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_16MB            (0x17U << MPU_RASR_SIZE_Pos) /*!< 16MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_32MB            (0x18U << MPU_RASR_SIZE_Pos) /*!< 32MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_64MB            (0x19U << MPU_RASR_SIZE_Pos) /*!< 64MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_128MB           (0x1AU << MPU_RASR_SIZE_Pos) /*!< 128MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_256MB           (0x1BU << MPU_RASR_SIZE_Pos) /*!< 256MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_512MB           (0x1CU << MPU_RASR_SIZE_Pos) /*!< 512MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_1GB             (0x1DU << MPU_RASR_SIZE_Pos) /*!< 1GB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_2GB             (0x1EU << MPU_RASR_SIZE_Pos) /*!< 2GB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_4GB             (0x1FU << MPU_RASR_SIZE_Pos) /*!< 4GB Size of the MPU protection region */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_REGION_PRIVILEDGES MPU Region Privileges
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_REGION_NO_ACCESS            (0x00U << MPU_RASR_AP_Pos) /*!< No access*/
 | 
			
		||||
#define LL_MPU_REGION_PRIV_RW              (0x01U << MPU_RASR_AP_Pos) /*!< RW privileged (privileged access only)*/
 | 
			
		||||
#define LL_MPU_REGION_PRIV_RW_URO          (0x02U << MPU_RASR_AP_Pos) /*!< RW privileged - RO user (Write in a user program generates a fault) */
 | 
			
		||||
#define LL_MPU_REGION_FULL_ACCESS          (0x03U << MPU_RASR_AP_Pos) /*!< RW privileged & user (Full access) */
 | 
			
		||||
#define LL_MPU_REGION_PRIV_RO              (0x05U << MPU_RASR_AP_Pos) /*!< RO privileged (privileged read only)*/
 | 
			
		||||
#define LL_MPU_REGION_PRIV_RO_URO          (0x06U << MPU_RASR_AP_Pos) /*!< RO privileged & user (read only) */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_TEX MPU TEX Level
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_TEX_LEVEL0                  (0x00U << MPU_RASR_TEX_Pos) /*!< b000 for TEX bits */
 | 
			
		||||
#define LL_MPU_TEX_LEVEL1                  (0x01U << MPU_RASR_TEX_Pos) /*!< b001 for TEX bits */
 | 
			
		||||
#define LL_MPU_TEX_LEVEL2                  (0x02U << MPU_RASR_TEX_Pos) /*!< b010 for TEX bits */
 | 
			
		||||
#define LL_MPU_TEX_LEVEL4                  (0x04U << MPU_RASR_TEX_Pos) /*!< b100 for TEX bits */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_INSTRUCTION_ACCESS MPU Instruction Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_INSTRUCTION_ACCESS_ENABLE   0x00U            /*!< Instruction fetches enabled */
 | 
			
		||||
#define LL_MPU_INSTRUCTION_ACCESS_DISABLE  MPU_RASR_XN_Msk  /*!< Instruction fetches disabled*/
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_SHAREABLE_ACCESS MPU Shareable Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_ACCESS_SHAREABLE            MPU_RASR_S_Msk   /*!< Shareable memory attribute */
 | 
			
		||||
#define LL_MPU_ACCESS_NOT_SHAREABLE        0x00U            /*!< Not Shareable memory attribute */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_CACHEABLE_ACCESS MPU Cacheable Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_ACCESS_CACHEABLE            MPU_RASR_C_Msk   /*!< Cacheable memory attribute */
 | 
			
		||||
#define LL_MPU_ACCESS_NOT_CACHEABLE        0x00U            /*!< Not Cacheable memory attribute */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_BUFFERABLE_ACCESS MPU Bufferable Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_ACCESS_BUFFERABLE           MPU_RASR_B_Msk   /*!< Bufferable memory attribute */
 | 
			
		||||
#define LL_MPU_ACCESS_NOT_BUFFERABLE       0x00U            /*!< Not Bufferable memory attribute */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_LL_Exported_Functions CORTEX Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_SYSTICK SYSTICK
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function checks if the Systick counter flag is active or not.
 | 
			
		||||
  * @note   It can be used in timeout function on application side.
 | 
			
		||||
  * @rmtoll STK_CTRL     COUNTFLAG     LL_SYSTICK_IsActiveCounterFlag
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_SYSTICK_IsActiveCounterFlag(void)
 | 
			
		||||
{
 | 
			
		||||
  return (((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == (SysTick_CTRL_COUNTFLAG_Msk)) ? 1UL : 0UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configures the SysTick clock source
 | 
			
		||||
  * @rmtoll STK_CTRL     CLKSOURCE     LL_SYSTICK_SetClkSource
 | 
			
		||||
  * @param  Source This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8
 | 
			
		||||
  *         @arg @ref LL_SYSTICK_CLKSOURCE_HCLK
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_SYSTICK_SetClkSource(uint32_t Source)
 | 
			
		||||
{
 | 
			
		||||
  if (Source == LL_SYSTICK_CLKSOURCE_HCLK)
 | 
			
		||||
  {
 | 
			
		||||
    SET_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    CLEAR_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the SysTick clock source
 | 
			
		||||
  * @rmtoll STK_CTRL     CLKSOURCE     LL_SYSTICK_GetClkSource
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8
 | 
			
		||||
  *         @arg @ref LL_SYSTICK_CLKSOURCE_HCLK
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_SYSTICK_GetClkSource(void)
 | 
			
		||||
{
 | 
			
		||||
  return READ_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable SysTick exception request
 | 
			
		||||
  * @rmtoll STK_CTRL     TICKINT       LL_SYSTICK_EnableIT
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_SYSTICK_EnableIT(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable SysTick exception request
 | 
			
		||||
  * @rmtoll STK_CTRL     TICKINT       LL_SYSTICK_DisableIT
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_SYSTICK_DisableIT(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Checks if the SYSTICK interrupt is enabled or disabled.
 | 
			
		||||
  * @rmtoll STK_CTRL     TICKINT       LL_SYSTICK_IsEnabledIT
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_SYSTICK_IsEnabledIT(void)
 | 
			
		||||
{
 | 
			
		||||
  return ((READ_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk) == (SysTick_CTRL_TICKINT_Msk)) ? 1UL : 0UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_LOW_POWER_MODE LOW POWER MODE
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Processor uses sleep as its low power mode
 | 
			
		||||
  * @rmtoll SCB_SCR      SLEEPDEEP     LL_LPM_EnableSleep
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_EnableSleep(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Processor uses deep sleep as its low power mode
 | 
			
		||||
  * @rmtoll SCB_SCR      SLEEPDEEP     LL_LPM_EnableDeepSleep
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_EnableDeepSleep(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configures sleep-on-exit when returning from Handler mode to Thread mode.
 | 
			
		||||
  * @note   Setting this bit to 1 enables an interrupt-driven application to avoid returning to an
 | 
			
		||||
  *         empty main application.
 | 
			
		||||
  * @rmtoll SCB_SCR      SLEEPONEXIT   LL_LPM_EnableSleepOnExit
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_EnableSleepOnExit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SLEEPONEXIT bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Do not sleep when returning to Thread mode.
 | 
			
		||||
  * @rmtoll SCB_SCR      SLEEPONEXIT   LL_LPM_DisableSleepOnExit
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_DisableSleepOnExit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SLEEPONEXIT bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enabled events and all interrupts, including disabled interrupts, can wakeup the
 | 
			
		||||
  *         processor.
 | 
			
		||||
  * @rmtoll SCB_SCR      SEVEONPEND    LL_LPM_EnableEventOnPend
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_EnableEventOnPend(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SEVEONPEND bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Only enabled interrupts or events can wakeup the processor, disabled interrupts are
 | 
			
		||||
  *         excluded
 | 
			
		||||
  * @rmtoll SCB_SCR      SEVEONPEND    LL_LPM_DisableEventOnPend
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_DisableEventOnPend(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SEVEONPEND bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_HANDLER HANDLER
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable a fault in System handler control register (SHCSR)
 | 
			
		||||
  * @rmtoll SCB_SHCSR    MEMFAULTENA   LL_HANDLER_EnableFault
 | 
			
		||||
  * @param  Fault This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_USG
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_BUS
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_MEM
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_HANDLER_EnableFault(uint32_t Fault)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable the system handler fault */
 | 
			
		||||
  SET_BIT(SCB->SHCSR, Fault);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable a fault in System handler control register (SHCSR)
 | 
			
		||||
  * @rmtoll SCB_SHCSR    MEMFAULTENA   LL_HANDLER_DisableFault
 | 
			
		||||
  * @param  Fault This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_USG
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_BUS
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_MEM
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_HANDLER_DisableFault(uint32_t Fault)
 | 
			
		||||
{
 | 
			
		||||
  /* Disable the system handler fault */
 | 
			
		||||
  CLEAR_BIT(SCB->SHCSR, Fault);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_MCU_INFO MCU INFO
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Implementer code
 | 
			
		||||
  * @rmtoll SCB_CPUID    IMPLEMENTER   LL_CPUID_GetImplementer
 | 
			
		||||
  * @retval Value should be equal to 0x41 for ARM
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetImplementer(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_IMPLEMENTER_Msk) >> SCB_CPUID_IMPLEMENTER_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Variant number (The r value in the rnpn product revision identifier)
 | 
			
		||||
  * @rmtoll SCB_CPUID    VARIANT       LL_CPUID_GetVariant
 | 
			
		||||
  * @retval Value between 0 and 255 (0x0: revision 0)
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetVariant(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_VARIANT_Msk) >> SCB_CPUID_VARIANT_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Architecture number 
 | 
			
		||||
  * @rmtoll SCB_CPUID    ARCHITECTURE  LL_CPUID_GetArchitecture
 | 
			
		||||
  * @retval Value should be equal to 0xF for Cortex-M4 devices
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetArchitecture(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_ARCHITECTURE_Msk) >> SCB_CPUID_ARCHITECTURE_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Part number
 | 
			
		||||
  * @rmtoll SCB_CPUID    PARTNO        LL_CPUID_GetParNo
 | 
			
		||||
  * @retval Value should be equal to 0xC24 for Cortex-M4
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetParNo(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_PARTNO_Msk) >> SCB_CPUID_PARTNO_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Revision number (The p value in the rnpn product revision identifier, indicates patch release)
 | 
			
		||||
  * @rmtoll SCB_CPUID    REVISION      LL_CPUID_GetRevision
 | 
			
		||||
  * @retval Value between 0 and 255 (0x1: patch 1)
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetRevision(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_REVISION_Msk) >> SCB_CPUID_REVISION_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if __MPU_PRESENT
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_MPU MPU
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable MPU with input options
 | 
			
		||||
  * @rmtoll MPU_CTRL     ENABLE        LL_MPU_Enable
 | 
			
		||||
  * @param  Options This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF_NONE
 | 
			
		||||
  *         @arg @ref LL_MPU_CTRL_HARDFAULT_NMI
 | 
			
		||||
  *         @arg @ref LL_MPU_CTRL_PRIVILEGED_DEFAULT
 | 
			
		||||
  *         @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_Enable(uint32_t Options)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable the MPU*/
 | 
			
		||||
  WRITE_REG(MPU->CTRL, (MPU_CTRL_ENABLE_Msk | Options));
 | 
			
		||||
  /* Ensure MPU settings take effects */
 | 
			
		||||
  __DSB();
 | 
			
		||||
  /* Sequence instruction fetches using update settings */
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable MPU
 | 
			
		||||
  * @rmtoll MPU_CTRL     ENABLE        LL_MPU_Disable
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_Disable(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Make sure outstanding transfers are done */
 | 
			
		||||
  __DMB();
 | 
			
		||||
  /* Disable MPU*/
 | 
			
		||||
  WRITE_REG(MPU->CTRL, 0U);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if MPU is enabled or not
 | 
			
		||||
  * @rmtoll MPU_CTRL     ENABLE        LL_MPU_IsEnabled
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_MPU_IsEnabled(void)
 | 
			
		||||
{
 | 
			
		||||
  return ((READ_BIT(MPU->CTRL, MPU_CTRL_ENABLE_Msk) == (MPU_CTRL_ENABLE_Msk)) ? 1UL : 0UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable a MPU region
 | 
			
		||||
  * @rmtoll MPU_RASR     ENABLE        LL_MPU_EnableRegion
 | 
			
		||||
  * @param  Region This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER0
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER1
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER2
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER3
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER4
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER5
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER6
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER7
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_EnableRegion(uint32_t Region)
 | 
			
		||||
{
 | 
			
		||||
  /* Set Region number */
 | 
			
		||||
  WRITE_REG(MPU->RNR, Region);
 | 
			
		||||
  /* Enable the MPU region */
 | 
			
		||||
  SET_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure and enable a region
 | 
			
		||||
  * @rmtoll MPU_RNR      REGION        LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RBAR     REGION        LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RBAR     ADDR          LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     XN            LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     AP            LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     S             LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     C             LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     B             LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     SIZE          LL_MPU_ConfigRegion
 | 
			
		||||
  * @param  Region This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER0
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER1
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER2
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER3
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER4
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER5
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER6
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER7
 | 
			
		||||
  * @param  Address Value of region base address
 | 
			
		||||
  * @param  SubRegionDisable Sub-region disable value between Min_Data = 0x00 and Max_Data = 0xFF
 | 
			
		||||
  * @param  Attributes This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_SIZE_32B or @ref LL_MPU_REGION_SIZE_64B or @ref LL_MPU_REGION_SIZE_128B or @ref LL_MPU_REGION_SIZE_256B or @ref LL_MPU_REGION_SIZE_512B
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_1KB or @ref LL_MPU_REGION_SIZE_2KB or @ref LL_MPU_REGION_SIZE_4KB or @ref LL_MPU_REGION_SIZE_8KB or @ref LL_MPU_REGION_SIZE_16KB
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_32KB or @ref LL_MPU_REGION_SIZE_64KB or @ref LL_MPU_REGION_SIZE_128KB or @ref LL_MPU_REGION_SIZE_256KB or @ref LL_MPU_REGION_SIZE_512KB
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_1MB or @ref LL_MPU_REGION_SIZE_2MB or @ref LL_MPU_REGION_SIZE_4MB or @ref LL_MPU_REGION_SIZE_8MB or @ref LL_MPU_REGION_SIZE_16MB
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_32MB or @ref LL_MPU_REGION_SIZE_64MB or @ref LL_MPU_REGION_SIZE_128MB or @ref LL_MPU_REGION_SIZE_256MB or @ref LL_MPU_REGION_SIZE_512MB
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_1GB or @ref LL_MPU_REGION_SIZE_2GB or @ref LL_MPU_REGION_SIZE_4GB
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NO_ACCESS or @ref LL_MPU_REGION_PRIV_RW or @ref LL_MPU_REGION_PRIV_RW_URO or @ref LL_MPU_REGION_FULL_ACCESS
 | 
			
		||||
  *           or @ref LL_MPU_REGION_PRIV_RO or @ref LL_MPU_REGION_PRIV_RO_URO
 | 
			
		||||
  *         @arg @ref LL_MPU_TEX_LEVEL0 or @ref LL_MPU_TEX_LEVEL1 or @ref LL_MPU_TEX_LEVEL2 or @ref LL_MPU_TEX_LEVEL4
 | 
			
		||||
  *         @arg @ref LL_MPU_INSTRUCTION_ACCESS_ENABLE or  @ref LL_MPU_INSTRUCTION_ACCESS_DISABLE
 | 
			
		||||
  *         @arg @ref LL_MPU_ACCESS_SHAREABLE or @ref LL_MPU_ACCESS_NOT_SHAREABLE
 | 
			
		||||
  *         @arg @ref LL_MPU_ACCESS_CACHEABLE or @ref LL_MPU_ACCESS_NOT_CACHEABLE
 | 
			
		||||
  *         @arg @ref LL_MPU_ACCESS_BUFFERABLE or @ref LL_MPU_ACCESS_NOT_BUFFERABLE
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_ConfigRegion(uint32_t Region, uint32_t SubRegionDisable, uint32_t Address, uint32_t Attributes)
 | 
			
		||||
{
 | 
			
		||||
  /* Set Region number */
 | 
			
		||||
  WRITE_REG(MPU->RNR, Region);
 | 
			
		||||
  /* Set base address */
 | 
			
		||||
  WRITE_REG(MPU->RBAR, (Address & 0xFFFFFFE0U));
 | 
			
		||||
  /* Configure MPU */
 | 
			
		||||
  WRITE_REG(MPU->RASR, (MPU_RASR_ENABLE_Msk | Attributes | (SubRegionDisable << MPU_RASR_SRD_Pos)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable a region
 | 
			
		||||
  * @rmtoll MPU_RNR      REGION        LL_MPU_DisableRegion\n
 | 
			
		||||
  *         MPU_RASR     ENABLE        LL_MPU_DisableRegion
 | 
			
		||||
  * @param  Region This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER0
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER1
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER2
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER3
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER4
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER5
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER6
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER7
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_DisableRegion(uint32_t Region)
 | 
			
		||||
{
 | 
			
		||||
  /* Set Region number */
 | 
			
		||||
  WRITE_REG(MPU->RNR, Region);
 | 
			
		||||
  /* Disable the MPU region */
 | 
			
		||||
  CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32G4xx_LL_CORTEX_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										781
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_crs.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										781
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_crs.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,781 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_ll_crs.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of CRS LL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2018 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 __STM32G4xx_LL_CRS_H
 | 
			
		||||
#define __STM32G4xx_LL_CRS_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_LL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(CRS)
 | 
			
		||||
 | 
			
		||||
/** @defgroup CRS_LL CRS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/* 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                  ((uint32_t)0x00U)                         /*!< 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            ((uint32_t)0x00U)       /*!< 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        ((uint32_t)0x00U)     /*!< 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             ((uint32_t)0x00U)         /*!< Upcounting direction, the actual frequency is above the target */
 | 
			
		||||
#define LL_CRS_FREQ_ERROR_DIR_DOWN           ((uint32_t)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         ((uint32_t)0xBB7FU)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Reset value of Frequency error limit.
 | 
			
		||||
  */
 | 
			
		||||
#define LL_CRS_ERRORLIMIT_DEFAULT          ((uint32_t)0x22U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Reset value of the HSI48 Calibration field
 | 
			
		||||
  * @note The default value is 64, 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    ((uint32_t)0x40U)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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_CR_TRIM_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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_CR_TRIM_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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_CFGR_FELIM_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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_CFGR_FELIM_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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_CFGR_FELIM_Pos) | 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_ISR_FECAP_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @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 /* __STM32G4xx_LL_CRS_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2578
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_dma.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2578
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_dma.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2006
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_dmamux.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2006
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_dmamux.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1422
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_exti.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1422
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_exti.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										994
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_gpio.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										994
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_gpio.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,994 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_ll_gpio.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of GPIO LL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 STM32G4xx_LL_GPIO_H
 | 
			
		||||
#define STM32G4xx_LL_GPIO_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_LL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG)
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL GPIO
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** MISRA C:2012 deviation rule has been granted for following rules:
 | 
			
		||||
  * Rule-18.1_d - Medium: Array pointer `GPIOx' is accessed with index [..,..]
 | 
			
		||||
  * which may be out of array bounds [..,UNKNOWN] in following APIs:
 | 
			
		||||
  * LL_GPIO_GetAFPin_0_7
 | 
			
		||||
  * LL_GPIO_SetAFPin_0_7
 | 
			
		||||
  * LL_GPIO_SetAFPin_8_15
 | 
			
		||||
  * LL_GPIO_GetAFPin_8_15
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup GPIO_LL_Private_Macros GPIO Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /*USE_FULL_LL_DRIVER*/
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup GPIO_LL_ES_INIT GPIO Exported Init structures
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief LL GPIO Init Structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t Pin;          /*!< Specifies the GPIO pins to be configured.
 | 
			
		||||
                              This parameter can be any value of @ref GPIO_LL_EC_PIN */
 | 
			
		||||
 | 
			
		||||
  uint32_t Mode;         /*!< Specifies the operating mode for the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_MODE.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinMode().*/
 | 
			
		||||
 | 
			
		||||
  uint32_t Speed;        /*!< Specifies the speed for the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_SPEED.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinSpeed().*/
 | 
			
		||||
 | 
			
		||||
  uint32_t OutputType;   /*!< Specifies the operating output type for the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_OUTPUT.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinOutputType().*/
 | 
			
		||||
 | 
			
		||||
  uint32_t Pull;         /*!< Specifies the operating Pull-up/Pull down for the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_PULL.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinPull().*/
 | 
			
		||||
 | 
			
		||||
  uint32_t Alternate;    /*!< Specifies the Peripheral to be connected to the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_AF.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetAFPin_0_7() and LL_GPIO_SetAFPin_8_15().*/
 | 
			
		||||
} LL_GPIO_InitTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* USE_FULL_LL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_PIN PIN
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_PIN_0                      GPIO_BSRR_BS0 /*!< Select pin 0 */
 | 
			
		||||
#define LL_GPIO_PIN_1                      GPIO_BSRR_BS1 /*!< Select pin 1 */
 | 
			
		||||
#define LL_GPIO_PIN_2                      GPIO_BSRR_BS2 /*!< Select pin 2 */
 | 
			
		||||
#define LL_GPIO_PIN_3                      GPIO_BSRR_BS3 /*!< Select pin 3 */
 | 
			
		||||
#define LL_GPIO_PIN_4                      GPIO_BSRR_BS4 /*!< Select pin 4 */
 | 
			
		||||
#define LL_GPIO_PIN_5                      GPIO_BSRR_BS5 /*!< Select pin 5 */
 | 
			
		||||
#define LL_GPIO_PIN_6                      GPIO_BSRR_BS6 /*!< Select pin 6 */
 | 
			
		||||
#define LL_GPIO_PIN_7                      GPIO_BSRR_BS7 /*!< Select pin 7 */
 | 
			
		||||
#define LL_GPIO_PIN_8                      GPIO_BSRR_BS8 /*!< Select pin 8 */
 | 
			
		||||
#define LL_GPIO_PIN_9                      GPIO_BSRR_BS9 /*!< Select pin 9 */
 | 
			
		||||
#define LL_GPIO_PIN_10                     GPIO_BSRR_BS10 /*!< Select pin 10 */
 | 
			
		||||
#define LL_GPIO_PIN_11                     GPIO_BSRR_BS11 /*!< Select pin 11 */
 | 
			
		||||
#define LL_GPIO_PIN_12                     GPIO_BSRR_BS12 /*!< Select pin 12 */
 | 
			
		||||
#define LL_GPIO_PIN_13                     GPIO_BSRR_BS13 /*!< Select pin 13 */
 | 
			
		||||
#define LL_GPIO_PIN_14                     GPIO_BSRR_BS14 /*!< Select pin 14 */
 | 
			
		||||
#define LL_GPIO_PIN_15                     GPIO_BSRR_BS15 /*!< Select pin 15 */
 | 
			
		||||
#define LL_GPIO_PIN_ALL                    (GPIO_BSRR_BS0 | GPIO_BSRR_BS1  | GPIO_BSRR_BS2  | \
 | 
			
		||||
                                           GPIO_BSRR_BS3  | GPIO_BSRR_BS4  | GPIO_BSRR_BS5  | \
 | 
			
		||||
                                           GPIO_BSRR_BS6  | GPIO_BSRR_BS7  | GPIO_BSRR_BS8  | \
 | 
			
		||||
                                           GPIO_BSRR_BS9  | GPIO_BSRR_BS10 | GPIO_BSRR_BS11 | \
 | 
			
		||||
                                           GPIO_BSRR_BS12 | GPIO_BSRR_BS13 | GPIO_BSRR_BS14 | \
 | 
			
		||||
                                           GPIO_BSRR_BS15) /*!< Select all pins */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_MODE Mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_MODE_INPUT                 (0x00000000U) /*!< Select input mode */
 | 
			
		||||
#define LL_GPIO_MODE_OUTPUT                GPIO_MODER_MODE0_0  /*!< Select output mode */
 | 
			
		||||
#define LL_GPIO_MODE_ALTERNATE             GPIO_MODER_MODE0_1  /*!< Select alternate function mode */
 | 
			
		||||
#define LL_GPIO_MODE_ANALOG                GPIO_MODER_MODE0    /*!< Select analog mode */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_OUTPUT Output Type
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_OUTPUT_PUSHPULL            (0x00000000U) /*!< Select push-pull as output type */
 | 
			
		||||
#define LL_GPIO_OUTPUT_OPENDRAIN           GPIO_OTYPER_OT0 /*!< Select open-drain as output type */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_SPEED Output Speed
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_SPEED_FREQ_LOW             (0x00000000U) /*!< Select I/O low output speed    */
 | 
			
		||||
#define LL_GPIO_SPEED_FREQ_MEDIUM          GPIO_OSPEEDR_OSPEED0_0 /*!< Select I/O medium output speed */
 | 
			
		||||
#define LL_GPIO_SPEED_FREQ_HIGH            GPIO_OSPEEDR_OSPEED0_1 /*!< Select I/O fast output speed   */
 | 
			
		||||
#define LL_GPIO_SPEED_FREQ_VERY_HIGH       GPIO_OSPEEDR_OSPEED0   /*!< Select I/O high output speed   */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_SPEED_LOW                  LL_GPIO_SPEED_FREQ_LOW
 | 
			
		||||
#define LL_GPIO_SPEED_MEDIUM               LL_GPIO_SPEED_FREQ_MEDIUM
 | 
			
		||||
#define LL_GPIO_SPEED_FAST                 LL_GPIO_SPEED_FREQ_HIGH
 | 
			
		||||
#define LL_GPIO_SPEED_HIGH                 LL_GPIO_SPEED_FREQ_VERY_HIGH
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_PULL_NO                    (0x00000000U) /*!< Select I/O no pull */
 | 
			
		||||
#define LL_GPIO_PULL_UP                    GPIO_PUPDR_PUPD0_0 /*!< Select I/O pull up */
 | 
			
		||||
#define LL_GPIO_PULL_DOWN                  GPIO_PUPDR_PUPD0_1 /*!< Select I/O pull down */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_AF Alternate Function
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_AF_0                       (0x0000000U) /*!< Select alternate function 0 */
 | 
			
		||||
#define LL_GPIO_AF_1                       (0x0000001U) /*!< Select alternate function 1 */
 | 
			
		||||
#define LL_GPIO_AF_2                       (0x0000002U) /*!< Select alternate function 2 */
 | 
			
		||||
#define LL_GPIO_AF_3                       (0x0000003U) /*!< Select alternate function 3 */
 | 
			
		||||
#define LL_GPIO_AF_4                       (0x0000004U) /*!< Select alternate function 4 */
 | 
			
		||||
#define LL_GPIO_AF_5                       (0x0000005U) /*!< Select alternate function 5 */
 | 
			
		||||
#define LL_GPIO_AF_6                       (0x0000006U) /*!< Select alternate function 6 */
 | 
			
		||||
#define LL_GPIO_AF_7                       (0x0000007U) /*!< Select alternate function 7 */
 | 
			
		||||
#define LL_GPIO_AF_8                       (0x0000008U) /*!< Select alternate function 8 */
 | 
			
		||||
#define LL_GPIO_AF_9                       (0x0000009U) /*!< Select alternate function 9 */
 | 
			
		||||
#define LL_GPIO_AF_10                      (0x000000AU) /*!< Select alternate function 10 */
 | 
			
		||||
#define LL_GPIO_AF_11                      (0x000000BU) /*!< Select alternate function 11 */
 | 
			
		||||
#define LL_GPIO_AF_12                      (0x000000CU) /*!< Select alternate function 12 */
 | 
			
		||||
#define LL_GPIO_AF_13                      (0x000000DU) /*!< Select alternate function 13 */
 | 
			
		||||
#define LL_GPIO_AF_14                      (0x000000EU) /*!< Select alternate function 14 */
 | 
			
		||||
#define LL_GPIO_AF_15                      (0x000000FU) /*!< Select alternate function 15 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Write a value in GPIO register
 | 
			
		||||
  * @param  __INSTANCE__ GPIO Instance
 | 
			
		||||
  * @param  __REG__ Register to be written
 | 
			
		||||
  * @param  __VALUE__ Value to be written in the register
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Read a value in GPIO register
 | 
			
		||||
  * @param  __INSTANCE__ GPIO Instance
 | 
			
		||||
  * @param  __REG__ Register to be read
 | 
			
		||||
  * @retval Register value
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_LL_Exported_Functions GPIO Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio mode for a dedicated pin on dedicated port.
 | 
			
		||||
  * @note   I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll MODER        MODEy         LL_GPIO_SetPinMode
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @param  Mode This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_INPUT
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_OUTPUT
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_ALTERNATE
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_ANALOG
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->MODER, (GPIO_MODER_MODE0 << (POSITION_VAL(Pin) * 2U)), (Mode << (POSITION_VAL(Pin) * 2U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio mode for a dedicated pin on dedicated port.
 | 
			
		||||
  * @note   I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll MODER        MODEy         LL_GPIO_GetPinMode
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_INPUT
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_OUTPUT
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_ALTERNATE
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_ANALOG
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->MODER,
 | 
			
		||||
                             (GPIO_MODER_MODE0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio output type for several pins on dedicated port.
 | 
			
		||||
  * @note   Output type as to be set when gpio pin is in output or
 | 
			
		||||
  *         alternate modes. Possible type are Push-pull or Open-drain.
 | 
			
		||||
  * @rmtoll OTYPER       OTy           LL_GPIO_SetPinOutputType
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @param  OutputType This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
 | 
			
		||||
  *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio output type for several pins on dedicated port.
 | 
			
		||||
  * @note   Output type as to be set when gpio pin is in output or
 | 
			
		||||
  *         alternate modes. Possible type are Push-pull or Open-drain.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll OTYPER       OTy           LL_GPIO_GetPinOutputType
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
 | 
			
		||||
  *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) >> POSITION_VAL(Pin));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio speed for a dedicated pin on dedicated port.
 | 
			
		||||
  * @note   I/O speed can be Low, Medium, Fast or High speed.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @note   Refer to datasheet for frequency specifications and the power
 | 
			
		||||
  *         supply and load conditions for each speed.
 | 
			
		||||
  * @rmtoll OSPEEDR      OSPEEDy       LL_GPIO_SetPinSpeed
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @param  Speed This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t  Speed)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->OSPEEDR, (GPIO_OSPEEDR_OSPEED0 << (POSITION_VAL(Pin) * 2U)),
 | 
			
		||||
             (Speed << (POSITION_VAL(Pin) * 2U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio speed for a dedicated pin on dedicated port.
 | 
			
		||||
  * @note   I/O speed can be Low, Medium, Fast or High speed.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @note   Refer to datasheet for frequency specifications and the power
 | 
			
		||||
  *         supply and load conditions for each speed.
 | 
			
		||||
  * @rmtoll OSPEEDR      OSPEEDy       LL_GPIO_GetPinSpeed
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->OSPEEDR,
 | 
			
		||||
                             (GPIO_OSPEEDR_OSPEED0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll PUPDR        PUPDy         LL_GPIO_SetPinPull
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @param  Pull This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_NO
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_UP
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_DOWN
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->PUPDR, (GPIO_PUPDR_PUPD0 << (POSITION_VAL(Pin) * 2U)), (Pull << (POSITION_VAL(Pin) * 2U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio pull-up or pull-down for a dedicated pin on a dedicated port
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll PUPDR        PUPDy         LL_GPIO_GetPinPull
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_NO
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_UP
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_DOWN
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->PUPDR,
 | 
			
		||||
                             (GPIO_PUPDR_PUPD0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
 | 
			
		||||
  * @note   Possible values are from AF0 to AF15 depending on target.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll AFRL         AFSELy        LL_GPIO_SetAFPin_0_7
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  * @param  Alternate This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_15
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->AFR[0], (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U)),
 | 
			
		||||
             (Alternate << (POSITION_VAL(Pin) * 4U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
 | 
			
		||||
  * @rmtoll AFRL         AFSELy        LL_GPIO_GetAFPin_0_7
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_15
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->AFR[0],
 | 
			
		||||
                             (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U))) >> (POSITION_VAL(Pin) * 4U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
 | 
			
		||||
  * @note   Possible values are from AF0 to AF15 depending on target.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll AFRH         AFSELy        LL_GPIO_SetAFPin_8_15
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @param  Alternate This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_15
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->AFR[1], (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U)),
 | 
			
		||||
             (Alternate << (POSITION_VAL(Pin >> 8U) * 4U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
 | 
			
		||||
  * @note   Possible values are from AF0 to AF15 depending on target.
 | 
			
		||||
  * @rmtoll AFRH         AFSELy        LL_GPIO_GetAFPin_8_15
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_15
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->AFR[1],
 | 
			
		||||
                             (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U))) >> (POSITION_VAL(Pin >> 8U) * 4U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Lock configuration of several pins for a dedicated port.
 | 
			
		||||
  * @note   When the lock sequence has been applied on a port bit, the
 | 
			
		||||
  *         value of this port bit can no longer be modified until the
 | 
			
		||||
  *         next reset.
 | 
			
		||||
  * @note   Each lock bit freezes a specific configuration register
 | 
			
		||||
  *         (control and alternate function registers).
 | 
			
		||||
  * @rmtoll LCKR         LCKK          LL_GPIO_LockPin
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t temp;
 | 
			
		||||
  WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
 | 
			
		||||
  WRITE_REG(GPIOx->LCKR, PinMask);
 | 
			
		||||
  WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
 | 
			
		||||
  /* Read LCKR register. This read is mandatory to complete key lock sequence */
 | 
			
		||||
  temp = READ_REG(GPIOx->LCKR);
 | 
			
		||||
  (void) temp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return 1 if all pins passed as parameter, of a dedicated port, are locked. else Return 0.
 | 
			
		||||
  * @rmtoll LCKR         LCKy          LL_GPIO_IsPinLocked
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  return ((READ_BIT(GPIOx->LCKR, PinMask) == (PinMask)) ? 1UL : 0UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return 1 if one of the pin of a dedicated port is locked. else return 0.
 | 
			
		||||
  * @rmtoll LCKR         LCKK          LL_GPIO_IsAnyPinLocked
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx)
 | 
			
		||||
{
 | 
			
		||||
  return ((READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK)) ? 1UL : 0UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EF_Data_Access Data Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return full input data register value for a dedicated port.
 | 
			
		||||
  * @rmtoll IDR          IDy           LL_GPIO_ReadInputPort
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @retval Input data register value of port
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(GPIOx->IDR));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return if input data level for several pins of dedicated port is high or low.
 | 
			
		||||
  * @rmtoll IDR          IDy           LL_GPIO_IsInputPinSet
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  return ((READ_BIT(GPIOx->IDR, PinMask) == (PinMask)) ? 1UL : 0UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Write output data register for the port.
 | 
			
		||||
  * @rmtoll ODR          ODy           LL_GPIO_WriteOutputPort
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PortValue Level value for each pin of the port
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue)
 | 
			
		||||
{
 | 
			
		||||
  WRITE_REG(GPIOx->ODR, PortValue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return full output data register value for a dedicated port.
 | 
			
		||||
  * @rmtoll ODR          ODy           LL_GPIO_ReadOutputPort
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @retval Output data register value of port
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(GPIOx->ODR));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return if input data level for several pins of dedicated port is high or low.
 | 
			
		||||
  * @rmtoll ODR          ODy           LL_GPIO_IsOutputPinSet
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  return ((READ_BIT(GPIOx->ODR, PinMask) == (PinMask)) ? 1UL : 0UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set several pins to high level on dedicated gpio port.
 | 
			
		||||
  * @rmtoll BSRR         BSy           LL_GPIO_SetOutputPin
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  WRITE_REG(GPIOx->BSRR, PinMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set several pins to low level on dedicated gpio port.
 | 
			
		||||
  * @rmtoll BRR          BRy           LL_GPIO_ResetOutputPin
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  WRITE_REG(GPIOx->BRR, PinMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Toggle data value for several pin of dedicated port.
 | 
			
		||||
  * @rmtoll ODR          ODy           LL_GPIO_TogglePin
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t odr = READ_REG(GPIOx->ODR);
 | 
			
		||||
  WRITE_REG(GPIOx->BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);
 | 
			
		||||
ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
 | 
			
		||||
void        LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* USE_FULL_LL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_LL_GPIO_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1604
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_pwr.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1604
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_pwr.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3008
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_rcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3008
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_rcc.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1523
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_system.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1523
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_system.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6724
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_tim.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6724
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_tim.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										329
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_utils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										329
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_ll_utils.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,329 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_ll_utils.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of UTILS LL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    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
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef STM32G4xx_LL_UTILS_H
 | 
			
		||||
#define STM32G4xx_LL_UTILS_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_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 can be a value of @ref RCC_LL_EC_PLLM_DIV
 | 
			
		||||
 | 
			
		||||
                        This feature can be modified afterwards using unitary function
 | 
			
		||||
                        @ref LL_RCC_PLL_ConfigDomain_SYS(). */
 | 
			
		||||
 | 
			
		||||
  uint32_t PLLN;   /*!< Multiplication factor for PLL VCO output clock.
 | 
			
		||||
                        This parameter must be a number between Min_Data = 8 and Max_Data = 86
 | 
			
		||||
 | 
			
		||||
                        This feature can be modified afterwards using unitary function
 | 
			
		||||
                        @ref LL_RCC_PLL_ConfigDomain_SYS(). */
 | 
			
		||||
 | 
			
		||||
  uint32_t PLLR;   /*!< Division for the main system clock.
 | 
			
		||||
                        This parameter can be a value of @ref RCC_LL_EC_PLLR_DIV
 | 
			
		||||
 | 
			
		||||
                        This feature can be modified afterwards using unitary function
 | 
			
		||||
                        @ref LL_RCC_PLL_ConfigDomain_SYS(). */
 | 
			
		||||
} LL_UTILS_PLLInitTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  UTILS System, AHB and APB buses clock configuration structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t AHBCLKDivider;         /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).
 | 
			
		||||
                                       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(). */
 | 
			
		||||
 | 
			
		||||
} 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 is enabled                    */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup UTILS_EC_PACKAGETYPE PACKAGE TYPE
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP64             0x00000000U /*!< LQFP64 package type                      */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_WLCSP64            0x00000001U /*!< WLCSP64 package type                     */
 | 
			
		||||
#if defined (STM32G431xx) || defined (STM32G414xx) || defined (STM32G441xx) || defined (STM32G471xx) || \
 | 
			
		||||
    defined (STM32G473xx) || defined (STM32G483xx) || defined (STM32G474xx) || defined (STM32G484xx)
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP100_LQFP80     0x00000002U /*!< LQFP100 \ LQFP80 package type             */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP100 LL_UTILS_PACKAGETYPE_LQFP100_LQFP80  /*!< For backward compatibility  */
 | 
			
		||||
#else
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP100            0x00000002U /*!< LQFP100 package type                      */
 | 
			
		||||
#endif /* STM32G431xx || STM32G414xx || STM32G441xx || STM32G471xx || STM32G473xx || STM32G483xx || STM32G474xx || STM32G484xx */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_WLCSP81            0x00000005U /*!< WLCSP81 package type                      */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP128_UFBGA121   0x00000007U /*!< LQFP128 \ UFBGA121 package type           */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP128 LL_UTILS_PACKAGETYPE_LQFP128_UFBGA121 /*!< For backward compatibility */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_UFQFPN32           0x00000008U /*!< UFQFPN32 package type                     */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP32             0x00000009U /*!< LQFP32 package type                       */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_UFQFPN48           0x0000000AU /*!< UFQFPN48 package type                     */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP48             0x0000000BU /*!< LQFP48 package type                       */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_WLCSP49            0x0000000CU /*!< WLCSP49 package type                      */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_UFBGA64            0x0000000DU /*!< UFBGA64 package type                      */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_TFBGA100           0x0000000EU /*!< TFBGA100 package type                     */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_UFBGA100 LL_UTILS_PACKAGETYPE_TFBGA100  /*!< For backward compatibility       */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP48_EBIKE       0x00000010U /*!< LQFP48 EBIKE package type                 */
 | 
			
		||||
#if defined (STM32G491xx) || defined (STM32G4A1xx)
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP80             0x00000011U /*!< LQFP80 package type                       */
 | 
			
		||||
#endif /* STM32G491xx || STM32G4A1xx */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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)) & 0x0000FFFFUL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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_LQFP100
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_WLCSP81
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_LQFP128
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_UFQFPN32
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_LQFP32
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_UFQFPN48
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_LQFP48
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_WLCSP49
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_UFBGA64
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_UFBGA100
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_LQFP48_EBIKE
 | 
			
		||||
  *
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GetPackageType(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(*((uint32_t *)PACKAGE_BASE_ADDRESS)) & 0x1FU);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @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 Frequency of Ticks (Hz)
 | 
			
		||||
  * @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_mDelay(uint32_t Delay);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup UTILS_EF_SYSTEM SYSTEM
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
void        LL_SetSystemCoreClock(uint32_t HCLKFrequency);
 | 
			
		||||
ErrorStatus LL_SetFlashLatency(uint32_t HCLKFrequency);
 | 
			
		||||
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);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32G4xx_LL_UTILS_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								exp6/Drivers/STM32G4xx_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
 | 
			
		||||
							
								
								
									
										801
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										801
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,801 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   HAL module driver.
 | 
			
		||||
  *          This is the common part of the HAL initialization
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    The common HAL driver contains a set of generic and common APIs that can be
 | 
			
		||||
    used by the PPP peripheral drivers and the user to start using the HAL.
 | 
			
		||||
    [..]
 | 
			
		||||
    The HAL contains two APIs' categories:
 | 
			
		||||
         (+) Common HAL APIs
 | 
			
		||||
         (+) Services HAL APIs
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL HAL
 | 
			
		||||
  * @brief HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief STM32G4xx HAL Driver version number V1.2.4
 | 
			
		||||
  */
 | 
			
		||||
#define __STM32G4xx_HAL_VERSION_MAIN   (0x01U) /*!< [31:24] main version */
 | 
			
		||||
#define __STM32G4xx_HAL_VERSION_SUB1   (0x02U) /*!< [23:16] sub1 version */
 | 
			
		||||
#define __STM32G4xx_HAL_VERSION_SUB2   (0x04U) /*!< [15:8]  sub2 version */
 | 
			
		||||
#define __STM32G4xx_HAL_VERSION_RC     (0x00U) /*!< [7:0]  release candidate */
 | 
			
		||||
#define __STM32G4xx_HAL_VERSION         ((__STM32G4xx_HAL_VERSION_MAIN << 24U)\
 | 
			
		||||
                                         |(__STM32G4xx_HAL_VERSION_SUB1 << 16U)\
 | 
			
		||||
                                         |(__STM32G4xx_HAL_VERSION_SUB2 << 8U )\
 | 
			
		||||
                                         |(__STM32G4xx_HAL_VERSION_RC))
 | 
			
		||||
 | 
			
		||||
#if defined(VREFBUF)
 | 
			
		||||
#define VREFBUF_TIMEOUT_VALUE     10U   /* 10 ms */
 | 
			
		||||
#endif /* VREFBUF */
 | 
			
		||||
 | 
			
		||||
/* ------------ SYSCFG registers bit address in the alias region ------------ */
 | 
			
		||||
#define SYSCFG_OFFSET             (SYSCFG_BASE - PERIPH_BASE)
 | 
			
		||||
/* ---  MEMRMP Register ---*/
 | 
			
		||||
/* Alias word address of FB_MODE bit */
 | 
			
		||||
#define MEMRMP_OFFSET           SYSCFG_OFFSET
 | 
			
		||||
#define FB_MODE_BitNumber       ((uint8_t)0x8)
 | 
			
		||||
#define FB_MODE_BB              (PERIPH_BB_BASE + (MEMRMP_OFFSET * 32) + (FB_MODE_BitNumber * 4))
 | 
			
		||||
 | 
			
		||||
/* --- GPC Register ---*/
 | 
			
		||||
/* Alias word address of CCMER bit */
 | 
			
		||||
#define SCSR_OFFSET             (SYSCFG_OFFSET + 0x18)
 | 
			
		||||
#define CCMER_BitNumber         ((uint8_t)0x0)
 | 
			
		||||
#define SCSR_CCMER_BB           (PERIPH_BB_BASE + (SCSR_OFFSET * 32) + (CCMER_BitNumber * 4))
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Exported variables ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup HAL_Exported_Variables HAL Exported Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
__IO uint32_t uwTick;
 | 
			
		||||
uint32_t uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */
 | 
			
		||||
uint32_t uwTickFreq = HAL_TICK_FREQ_DEFAULT;  /* 1KHz */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Functions HAL Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions
 | 
			
		||||
  *  @brief    HAL Initialization and de-initialization functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
              ##### Initialization and Configuration functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]  This section provides functions allowing to:
 | 
			
		||||
      (+) Initialize the Flash interface the NVIC allocation and initial time base
 | 
			
		||||
          clock configuration.
 | 
			
		||||
      (+) De-Initialize common part of the HAL.
 | 
			
		||||
      (+) Configure the time base source to have 1ms time base with a dedicated
 | 
			
		||||
          Tick interrupt priority.
 | 
			
		||||
        (++) SysTick timer is used by default as source of time base, but user
 | 
			
		||||
             can eventually implement his proper time base source (a general purpose
 | 
			
		||||
             timer for example or other time source), keeping in mind that Time base
 | 
			
		||||
             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
 | 
			
		||||
             handled in milliseconds basis.
 | 
			
		||||
        (++) Time base configuration function (HAL_InitTick ()) is called automatically
 | 
			
		||||
             at the beginning of the program after reset by HAL_Init() or at any time
 | 
			
		||||
             when clock is configured, by HAL_RCC_ClockConfig().
 | 
			
		||||
        (++) Source of time base is configured  to generate interrupts at regular
 | 
			
		||||
             time intervals. Care must be taken if HAL_Delay() is called from a
 | 
			
		||||
             peripheral ISR process, the Tick interrupt line must have higher priority
 | 
			
		||||
            (numerically lower) than the peripheral interrupt. Otherwise the caller
 | 
			
		||||
            ISR process will be blocked.
 | 
			
		||||
       (++) functions affecting time base configurations are declared as __weak
 | 
			
		||||
             to make  override possible  in case of other  implementations in user file.
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function is used to configure the Flash prefetch, the Instruction and Data caches,
 | 
			
		||||
  *         the time base source, NVIC and any required global low level hardware
 | 
			
		||||
  *         by calling the HAL_MspInit() callback function to be optionally defined in user file
 | 
			
		||||
  *         stm32g4xx_hal_msp.c.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   HAL_Init() function is called at the beginning of program after reset and before
 | 
			
		||||
  *         the clock configuration.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   In the default implementation the System Timer (Systick) is used as source of time base.
 | 
			
		||||
  *         The Systick configuration is based on HSI clock, as HSI is the clock
 | 
			
		||||
  *         used after a system Reset and the NVIC configuration is set to Priority group 4.
 | 
			
		||||
  *         Once done, time base tick starts incrementing: the tick variable counter is incremented
 | 
			
		||||
  *         each 1ms in the SysTick_Handler() interrupt handler.
 | 
			
		||||
  *
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_Init(void)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef  status = HAL_OK;
 | 
			
		||||
  /* Configure Flash prefetch, Instruction cache, Data cache */
 | 
			
		||||
  /* Default configuration at reset is:                      */
 | 
			
		||||
  /* - Prefetch disabled                                     */
 | 
			
		||||
  /* - Instruction cache enabled                             */
 | 
			
		||||
  /* - Data cache enabled                                    */
 | 
			
		||||
#if (INSTRUCTION_CACHE_ENABLE == 0U)
 | 
			
		||||
  __HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
 | 
			
		||||
#endif /* INSTRUCTION_CACHE_ENABLE */
 | 
			
		||||
 | 
			
		||||
#if (DATA_CACHE_ENABLE == 0U)
 | 
			
		||||
  __HAL_FLASH_DATA_CACHE_DISABLE();
 | 
			
		||||
#endif /* DATA_CACHE_ENABLE */
 | 
			
		||||
 | 
			
		||||
#if (PREFETCH_ENABLE != 0U)
 | 
			
		||||
  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
 | 
			
		||||
#endif /* PREFETCH_ENABLE */
 | 
			
		||||
 | 
			
		||||
  /* Set Interrupt Group Priority */
 | 
			
		||||
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
 | 
			
		||||
 | 
			
		||||
  /* Use SysTick as time base source and configure 1ms tick (default clock after Reset is HSI) */
 | 
			
		||||
  if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    status = HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /* Init the low level hardware */
 | 
			
		||||
    HAL_MspInit();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Return function status */
 | 
			
		||||
  return status;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function de-initializes common part of the HAL and stops the source of time base.
 | 
			
		||||
  * @note   This function is optional.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DeInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Reset of all peripherals */
 | 
			
		||||
  __HAL_RCC_APB1_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_APB1_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_APB2_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_APB2_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_AHB1_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_AHB1_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_AHB2_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_AHB2_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_AHB3_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_AHB3_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  /* De-Init the low level hardware */
 | 
			
		||||
  HAL_MspDeInit();
 | 
			
		||||
 | 
			
		||||
  /* Return function status */
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Initialize the MSP.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_MspInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* NOTE : This function should not be modified, when the callback is needed,
 | 
			
		||||
            the HAL_MspInit could be implemented in the user file
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  DeInitializes the MSP.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_MspDeInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* NOTE : This function should not be modified, when the callback is needed,
 | 
			
		||||
            the HAL_MspDeInit could be implemented in the user file
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function configures the source of the time base:
 | 
			
		||||
  *        The time source is configured to have 1ms time base with a dedicated
 | 
			
		||||
  *        Tick interrupt priority.
 | 
			
		||||
  * @note This function is called  automatically at the beginning of program after
 | 
			
		||||
  *       reset by HAL_Init() or at any time when clock is reconfigured  by HAL_RCC_ClockConfig().
 | 
			
		||||
  * @note In the default implementation, SysTick timer is the source of time base.
 | 
			
		||||
  *       It is used to generate interrupts at regular time intervals.
 | 
			
		||||
  *       Care must be taken if HAL_Delay() is called from a peripheral ISR process,
 | 
			
		||||
  *       The SysTick interrupt must have higher priority (numerically lower)
 | 
			
		||||
  *       than the peripheral interrupt. Otherwise the caller ISR process will be blocked.
 | 
			
		||||
  *       The function is declared as __weak  to be overwritten  in case of other
 | 
			
		||||
  *       implementation  in user file.
 | 
			
		||||
  * @param TickPriority: Tick interrupt priority.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef  status = HAL_OK;
 | 
			
		||||
 | 
			
		||||
  if (uwTickFreq != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    /* Configure the SysTick to have interrupt in 1ms time basis*/
 | 
			
		||||
    if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) == 0U)
 | 
			
		||||
    {
 | 
			
		||||
      /* Configure the SysTick IRQ priority */
 | 
			
		||||
      if (TickPriority < (1UL << __NVIC_PRIO_BITS))
 | 
			
		||||
      {
 | 
			
		||||
        HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
 | 
			
		||||
        uwTickPrio = TickPriority;
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        status = HAL_ERROR;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      status = HAL_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    status = HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Return function status */
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions
 | 
			
		||||
  *  @brief    HAL Control functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                      ##### HAL Control functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]  This section provides functions allowing to:
 | 
			
		||||
      (+) Provide a tick value in millisecond
 | 
			
		||||
      (+) Provide a blocking delay in millisecond
 | 
			
		||||
      (+) Suspend the time base source interrupt
 | 
			
		||||
      (+) Resume the time base source interrupt
 | 
			
		||||
      (+) Get the HAL API driver version
 | 
			
		||||
      (+) Get the device identifier
 | 
			
		||||
      (+) Get the device revision identifier
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function is called to increment a global variable "uwTick"
 | 
			
		||||
  *        used as application time base.
 | 
			
		||||
  * @note In the default implementation, this variable is incremented each 1ms
 | 
			
		||||
  *       in SysTick ISR.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other
 | 
			
		||||
  *      implementations in user file.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_IncTick(void)
 | 
			
		||||
{
 | 
			
		||||
  uwTick += uwTickFreq;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Provides a tick value in millisecond.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other
 | 
			
		||||
  *       implementations in user file.
 | 
			
		||||
  * @retval tick value
 | 
			
		||||
  */
 | 
			
		||||
__weak uint32_t HAL_GetTick(void)
 | 
			
		||||
{
 | 
			
		||||
  return uwTick;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function returns a tick priority.
 | 
			
		||||
  * @retval tick priority
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetTickPrio(void)
 | 
			
		||||
{
 | 
			
		||||
  return uwTickPrio;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Set new tick Freq.
 | 
			
		||||
  * @retval status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_SetTickFreq(uint32_t Freq)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status  = HAL_OK;
 | 
			
		||||
  uint32_t prevTickFreq;
 | 
			
		||||
 | 
			
		||||
  assert_param(IS_TICKFREQ(Freq));
 | 
			
		||||
 | 
			
		||||
  if (uwTickFreq != Freq)
 | 
			
		||||
  {
 | 
			
		||||
    /* Back up uwTickFreq frequency */
 | 
			
		||||
    prevTickFreq = uwTickFreq;
 | 
			
		||||
 | 
			
		||||
    /* Update uwTickFreq global variable used by HAL_InitTick() */
 | 
			
		||||
    uwTickFreq = Freq;
 | 
			
		||||
 | 
			
		||||
    /* Apply the new tick Freq  */
 | 
			
		||||
    status = HAL_InitTick(uwTickPrio);
 | 
			
		||||
 | 
			
		||||
    if (status != HAL_OK)
 | 
			
		||||
    {
 | 
			
		||||
      /* Restore previous tick frequency */
 | 
			
		||||
      uwTickFreq = prevTickFreq;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Returns tick frequency.
 | 
			
		||||
  * @retval Tick frequency.
 | 
			
		||||
  *         Value of @ref HAL_TickFreqTypeDef.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetTickFreq(void)
 | 
			
		||||
{
 | 
			
		||||
  return uwTickFreq;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function provides minimum delay (in milliseconds) based
 | 
			
		||||
  *        on variable incremented.
 | 
			
		||||
  * @note In the default implementation , SysTick timer is the source of time base.
 | 
			
		||||
  *       It is used to generate interrupts at regular time intervals where uwTick
 | 
			
		||||
  *       is incremented.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other
 | 
			
		||||
  *       implementations in user file.
 | 
			
		||||
  * @param Delay specifies the delay time length, in milliseconds.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_Delay(uint32_t Delay)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = HAL_GetTick();
 | 
			
		||||
  uint32_t wait = Delay;
 | 
			
		||||
 | 
			
		||||
  /* Add a freq to guarantee minimum wait */
 | 
			
		||||
  if (wait < HAL_MAX_DELAY)
 | 
			
		||||
  {
 | 
			
		||||
    wait += (uint32_t)(uwTickFreq);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  while ((HAL_GetTick() - tickstart) < wait)
 | 
			
		||||
  {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Suspends Tick increment.
 | 
			
		||||
  * @note In the default implementation , SysTick timer is the source of time base. It is
 | 
			
		||||
  *       used to generate interrupts at regular time intervals. Once HAL_SuspendTick()
 | 
			
		||||
  *       is called, the SysTick interrupt will be disabled and so Tick increment
 | 
			
		||||
  *       is suspended.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other
 | 
			
		||||
  *       implementations in user file.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_SuspendTick(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Disable SysTick Interrupt */
 | 
			
		||||
  CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Resume Tick increment.
 | 
			
		||||
  * @note In the default implementation , SysTick timer is the source of time base. It is
 | 
			
		||||
  *       used to generate interrupts at regular time intervals. Once HAL_ResumeTick()
 | 
			
		||||
  *       is called, the SysTick interrupt will be enabled and so Tick increment
 | 
			
		||||
  *       is resumed.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other
 | 
			
		||||
  *       implementations in user file.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_ResumeTick(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable SysTick Interrupt */
 | 
			
		||||
  SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns the HAL revision.
 | 
			
		||||
  * @retval version : 0xXYZR (8bits for each decimal, R for RC)
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetHalVersion(void)
 | 
			
		||||
{
 | 
			
		||||
  return __STM32G4xx_HAL_VERSION;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns the device revision identifier.
 | 
			
		||||
  * @retval Device revision identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetREVID(void)
 | 
			
		||||
{
 | 
			
		||||
  return ((DBGMCU->IDCODE & DBGMCU_IDCODE_REV_ID) >> 16U);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns the device identifier.
 | 
			
		||||
  * @retval Device identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetDEVID(void)
 | 
			
		||||
{
 | 
			
		||||
  return (DBGMCU->IDCODE & DBGMCU_IDCODE_DEV_ID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the first word of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval Device identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetUIDw0(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_REG(*((uint32_t *)UID_BASE)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the second word of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval Device identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetUIDw1(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_REG(*((uint32_t *)(UID_BASE + 4U))));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the third word of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval Device identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetUIDw2(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_REG(*((uint32_t *)(UID_BASE + 8U))));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Functions_Group3 HAL Debug functions
 | 
			
		||||
  *  @brief    HAL Debug functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                      ##### HAL Debug functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]  This section provides functions allowing to:
 | 
			
		||||
      (+) Enable/Disable Debug module during SLEEP mode
 | 
			
		||||
      (+) Enable/Disable Debug module during STOP0/STOP1/STOP2 modes
 | 
			
		||||
      (+) Enable/Disable Debug module during STANDBY mode
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Debug Module during SLEEP mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_EnableDBGSleepMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Debug Module during SLEEP mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_DisableDBGSleepMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Debug Module during STOP0/STOP1/STOP2 modes.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_EnableDBGStopMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Debug Module during STOP0/STOP1/STOP2 modes.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_DisableDBGStopMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Debug Module during STANDBY mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_EnableDBGStandbyMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Debug Module during STANDBY mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_DisableDBGStandbyMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Functions_Group4 HAL SYSCFG configuration functions
 | 
			
		||||
  *  @brief    HAL SYSCFG configuration functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                      ##### HAL SYSCFG configuration functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]  This section provides functions allowing to:
 | 
			
		||||
      (+) Start a hardware CCMSRAM erase operation
 | 
			
		||||
      (+) Enable/Disable the Internal FLASH Bank Swapping
 | 
			
		||||
      (+) Configure the Voltage reference buffer
 | 
			
		||||
      (+) Enable/Disable the Voltage reference buffer
 | 
			
		||||
      (+) Enable/Disable the I/O analog switch voltage booster
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined (CCMSRAM_BASE)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Start a hardware CCMSRAM erase operation.
 | 
			
		||||
  * @note   As long as CCMSRAM is not erased the CCMER bit will be set.
 | 
			
		||||
  *         This bit is automatically reset at the end of the CCMSRAM erase operation.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_CCMSRAMErase(void)
 | 
			
		||||
{
 | 
			
		||||
  /* unlock the write protection of the CCMER bit */
 | 
			
		||||
  SYSCFG->SKR = 0xCA;
 | 
			
		||||
  SYSCFG->SKR = 0x53;
 | 
			
		||||
  /* Starts a hardware CCMSRAM erase operation*/
 | 
			
		||||
  SET_BIT(SYSCFG->SCSR, SYSCFG_SCSR_CCMER);
 | 
			
		||||
}
 | 
			
		||||
#endif /* CCMSRAM_BASE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Internal FLASH Bank Swapping.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   This function can be used only for STM32G4xx devices.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   Flash Bank2 mapped at 0x08000000 (and aliased @0x00000000)
 | 
			
		||||
  *         and Flash Bank1 mapped at 0x08040000 (and aliased at 0x00040000)
 | 
			
		||||
  *
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_EnableMemorySwappingBank(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_FB_MODE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Internal FLASH Bank Swapping.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   This function can be used only for STM32G4xx devices.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   The default state : Flash Bank1 mapped at 0x08000000 (and aliased @0x0000 0000)
 | 
			
		||||
  *         and Flash Bank2 mapped at 0x08040000 (and aliased at 0x00040000)
 | 
			
		||||
  *
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_DisableMemorySwappingBank(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_FB_MODE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(VREFBUF)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Configure the internal voltage reference buffer voltage scale.
 | 
			
		||||
  * @param  VoltageScaling: specifies the output voltage to achieve
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg SYSCFG_VREFBUF_VOLTAGE_SCALE0: VREFBUF_OUT around 2.048 V.
 | 
			
		||||
  *                                                This requires VDDA equal to or higher than 2.4 V.
 | 
			
		||||
  *            @arg SYSCFG_VREFBUF_VOLTAGE_SCALE1: VREFBUF_OUT around 2.5 V.
 | 
			
		||||
  *                                                This requires VDDA equal to or higher than 2.8 V.
 | 
			
		||||
  *            @arg SYSCFG_VREFBUF_VOLTAGE_SCALE2: VREFBUF_OUT around 2.9 V.
 | 
			
		||||
  *                                                This requires VDDA equal to or higher than 3.15 V.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_VREFBUF_VoltageScalingConfig(uint32_t VoltageScaling)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_SYSCFG_VREFBUF_VOLTAGE_SCALE(VoltageScaling));
 | 
			
		||||
 | 
			
		||||
  MODIFY_REG(VREFBUF->CSR, VREFBUF_CSR_VRS, VoltageScaling);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Configure the internal voltage reference buffer high impedance mode.
 | 
			
		||||
  * @param  Mode: specifies the high impedance mode
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE: VREF+ pin is internally connect to VREFINT output.
 | 
			
		||||
  *            @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE: VREF+ pin is high impedance.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_VREFBUF_HighImpedanceConfig(uint32_t Mode)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_SYSCFG_VREFBUF_HIGH_IMPEDANCE(Mode));
 | 
			
		||||
 | 
			
		||||
  MODIFY_REG(VREFBUF->CSR, VREFBUF_CSR_HIZ, Mode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Tune the Internal Voltage Reference buffer (VREFBUF).
 | 
			
		||||
  * @param TrimmingValue specifies trimming code for VREFBUF calibration
 | 
			
		||||
  *        This parameter can be a number between Min_Data = 0x00 and Max_Data = 0x3F
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_VREFBUF_TrimmingConfig(uint32_t TrimmingValue)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_SYSCFG_VREFBUF_TRIMMING(TrimmingValue));
 | 
			
		||||
 | 
			
		||||
  MODIFY_REG(VREFBUF->CCR, VREFBUF_CCR_TRIM, TrimmingValue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Internal Voltage Reference buffer (VREFBUF).
 | 
			
		||||
  * @retval HAL_OK/HAL_TIMEOUT
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_SYSCFG_EnableVREFBUF(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart;
 | 
			
		||||
 | 
			
		||||
  SET_BIT(VREFBUF->CSR, VREFBUF_CSR_ENVR);
 | 
			
		||||
 | 
			
		||||
  /* Get Start Tick*/
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
 | 
			
		||||
  /* Wait for VRR bit  */
 | 
			
		||||
  while (READ_BIT(VREFBUF->CSR, VREFBUF_CSR_VRR) == 0x00U)
 | 
			
		||||
  {
 | 
			
		||||
    if ((HAL_GetTick() - tickstart) > VREFBUF_TIMEOUT_VALUE)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Internal Voltage Reference buffer (VREFBUF).
 | 
			
		||||
  *
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_DisableVREFBUF(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(VREFBUF->CSR, VREFBUF_CSR_ENVR);
 | 
			
		||||
}
 | 
			
		||||
#endif /* VREFBUF */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the I/O analog switch voltage booster
 | 
			
		||||
  *
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_EnableIOSwitchBooster(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_BOOSTEN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the I/O analog switch voltage booster
 | 
			
		||||
  *
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_DisableIOSwitchBooster(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_BOOSTEN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the I/O analog switch voltage by VDD
 | 
			
		||||
  *
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_EnableIOSwitchVDD(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_ANASWVDD);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the I/O analog switch voltage by VDD
 | 
			
		||||
  *
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_DisableIOSwitchVDD(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_ANASWVDD);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(CCMSRAM_BASE)
 | 
			
		||||
/** @brief  CCMSRAM page write protection enable
 | 
			
		||||
  * @param Page: This parameter is a long 32bit value and can be a value of @ref SYSCFG_CCMSRAMWRP
 | 
			
		||||
  * @note   write protection can only be disabled by a system reset
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSCFG_CCMSRAM_WriteProtectionEnable(uint32_t Page)
 | 
			
		||||
{
 | 
			
		||||
  assert_param(IS_SYSCFG_CCMSRAMWRP_PAGE(Page));
 | 
			
		||||
 | 
			
		||||
  SET_BIT(SYSCFG->SWPR, (uint32_t)(Page));
 | 
			
		||||
}
 | 
			
		||||
#endif /* CCMSRAM_BASE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										541
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_cortex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										541
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_cortex.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,541 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_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) 2019 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-M4 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 stm32g4xx_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
 | 
			
		||||
 | 
			
		||||
  @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 "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CORTEX
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CORTEX_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CORTEX_Exported_Functions_Group1
 | 
			
		||||
 *  @brief    Initialization and Configuration functions
 | 
			
		||||
 *
 | 
			
		||||
@verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
              ##### Initialization and Configuration functions #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
      This section provides the CORTEX HAL driver functions allowing to configure Interrupts
 | 
			
		||||
      SysTick 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 (stm32g4xxxx.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 (stm32g4xxxx.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 (stm32g4xxxx.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  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)
 | 
			
		||||
{
 | 
			
		||||
   return SysTick_Config(TicksNumb);
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CORTEX_Exported_Functions_Group2
 | 
			
		||||
 *  @brief   Cortex control functions
 | 
			
		||||
 *
 | 
			
		||||
@verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                      ##### Peripheral Control functions #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
      This subsection provides a set of functions allowing to control the CORTEX
 | 
			
		||||
      (NVIC, SYSTICK, MPU) functionalities.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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 (stm32g4xxxx.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 *pPreemptPriority, uint32_t *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 (stm32g4xxxx.h))
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(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 (stm32g4xxxx.h))
 | 
			
		||||
  * @retval status: - 0  Interrupt status is not pending.
 | 
			
		||||
  *                 - 1  Interrupt status is pending.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(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 (stm32g4xxxx.h))
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(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 (stm32g4xxxx.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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.
 | 
			
		||||
  *             @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));
 | 
			
		||||
  if (CLKSource == SYSTICK_CLKSOURCE_HCLK)
 | 
			
		||||
  {
 | 
			
		||||
    SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the MPU.
 | 
			
		||||
  * @param  MPU_Control: Specifies the control mode of the MPU during hard fault, 
 | 
			
		||||
  *          NMI, FAULTMASK and privileged accessto 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)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable the MPU */
 | 
			
		||||
  MPU->CTRL = (MPU_Control | MPU_CTRL_ENABLE_Msk);
 | 
			
		||||
 | 
			
		||||
  /* Ensure MPU setting take effects */
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the MPU.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MPU_Disable(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Make sure outstanding transfers are done */
 | 
			
		||||
  __DMB();
 | 
			
		||||
 | 
			
		||||
  /* Disable the MPU and clear the control register*/
 | 
			
		||||
  MPU->CTRL  = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the MPU Region.
 | 
			
		||||
  * @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->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the MPU Region.
 | 
			
		||||
  * @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->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Initialize and configure the Region and the memory to be protected.
 | 
			
		||||
  * @param  MPU_Init: Pointer to a MPU_Region_InitTypeDef structure that contains
 | 
			
		||||
  *                the initialization and configuration information.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number));
 | 
			
		||||
  assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable));
 | 
			
		||||
  assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec));
 | 
			
		||||
  assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission));
 | 
			
		||||
  assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField));
 | 
			
		||||
  assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable));
 | 
			
		||||
  assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable));
 | 
			
		||||
  assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));
 | 
			
		||||
  assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));
 | 
			
		||||
  assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));
 | 
			
		||||
  /* Set the Region number */
 | 
			
		||||
  MPU->RNR = MPU_Init->Number;
 | 
			
		||||
 | 
			
		||||
  /* Disable the Region */
 | 
			
		||||
  CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
 | 
			
		||||
  /* Apply configuration */
 | 
			
		||||
  MPU->RBAR = MPU_Init->BaseAddress;
 | 
			
		||||
  MPU->RASR = ((uint32_t)MPU_Init->DisableExec             << MPU_RASR_XN_Pos)   |
 | 
			
		||||
              ((uint32_t)MPU_Init->AccessPermission        << MPU_RASR_AP_Pos)   |
 | 
			
		||||
              ((uint32_t)MPU_Init->TypeExtField            << MPU_RASR_TEX_Pos)  |
 | 
			
		||||
              ((uint32_t)MPU_Init->IsShareable             << MPU_RASR_S_Pos)    |
 | 
			
		||||
              ((uint32_t)MPU_Init->IsCacheable             << MPU_RASR_C_Pos)    |
 | 
			
		||||
              ((uint32_t)MPU_Init->IsBufferable            << MPU_RASR_B_Pos)    |
 | 
			
		||||
              ((uint32_t)MPU_Init->SubRegionDisable        << MPU_RASR_SRD_Pos)  |
 | 
			
		||||
              ((uint32_t)MPU_Init->Size                    << MPU_RASR_SIZE_Pos) |
 | 
			
		||||
              ((uint32_t)MPU_Init->Enable                  << MPU_RASR_ENABLE_Pos);
 | 
			
		||||
}
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1110
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_dma.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1110
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_dma.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										298
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_dma_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										298
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_dma_ex.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,298 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_dma_ex.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   DMA Extension HAL module driver
 | 
			
		||||
  *         This file provides firmware functions to manage the following
 | 
			
		||||
  *         functionalities of the DMA Extension peripheral:
 | 
			
		||||
  *           + Extended features functions
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
  [..]
 | 
			
		||||
  The DMA Extension HAL driver can be used as follows:
 | 
			
		||||
 | 
			
		||||
   (+) Configure the DMA_MUX Synchronization Block using HAL_DMAEx_ConfigMuxSync function.
 | 
			
		||||
   (+) Configure the DMA_MUX Request Generator Block using HAL_DMAEx_ConfigMuxRequestGenerator function.
 | 
			
		||||
       Functions HAL_DMAEx_EnableMuxRequestGenerator and HAL_DMAEx_DisableMuxRequestGenerator can then be used
 | 
			
		||||
       to respectively enable/disable the request generator.
 | 
			
		||||
 | 
			
		||||
   (+) To handle the DMAMUX Interrupts, the function  HAL_DMAEx_MUX_IRQHandler should be called from
 | 
			
		||||
       the DMAMUX IRQ handler i.e DMAMUX1_OVR_IRQHandler.
 | 
			
		||||
       As only one interrupt line is available for all DMAMUX channels and request generators , HAL_DMAEx_MUX_IRQHandler should be
 | 
			
		||||
       called with, as parameter, the appropriate DMA handle as many as used DMAs in the user project
 | 
			
		||||
      (exception done if a given DMA is not using the DMAMUX SYNC block neither a request generator)
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx DMAEx
 | 
			
		||||
  * @brief DMA Extended HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private Constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx_Exported_Functions DMAEx Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx_Exported_Functions_Group1 DMAEx Extended features functions
 | 
			
		||||
  *  @brief   Extended features functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                #####  Extended features functions  #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]  This section provides functions allowing to:
 | 
			
		||||
 | 
			
		||||
    (+) Configure the DMAMUX Synchronization Block using HAL_DMAEx_ConfigMuxSync function.
 | 
			
		||||
    (+) Configure the DMAMUX Request Generator Block using HAL_DMAEx_ConfigMuxRequestGenerator function.
 | 
			
		||||
       Functions HAL_DMAEx_EnableMuxRequestGenerator and HAL_DMAEx_DisableMuxRequestGenerator can then be used
 | 
			
		||||
       to respectively enable/disable the request generator.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure the DMAMUX synchronization parameters for a given DMA channel (instance).
 | 
			
		||||
  * @param  hdma:       pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *                     the configuration information for the specified DMA channel.
 | 
			
		||||
  * @param  pSyncConfig : pointer to HAL_DMA_MuxSyncConfigTypeDef : contains the DMAMUX synchronization parameters
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_ConfigMuxSync(DMA_HandleTypeDef *hdma, HAL_DMA_MuxSyncConfigTypeDef *pSyncConfig)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));
 | 
			
		||||
 | 
			
		||||
  assert_param(IS_DMAMUX_SYNC_SIGNAL_ID(pSyncConfig->SyncSignalID));
 | 
			
		||||
 | 
			
		||||
  assert_param(IS_DMAMUX_SYNC_POLARITY(pSyncConfig-> SyncPolarity));
 | 
			
		||||
  assert_param(IS_DMAMUX_SYNC_STATE(pSyncConfig->SyncEnable));
 | 
			
		||||
  assert_param(IS_DMAMUX_SYNC_EVENT(pSyncConfig->EventEnable));
 | 
			
		||||
  assert_param(IS_DMAMUX_SYNC_REQUEST_NUMBER(pSyncConfig->RequestNumber));
 | 
			
		||||
 | 
			
		||||
  /*Check if the DMA state is ready */
 | 
			
		||||
  if (hdma->State == HAL_DMA_STATE_READY)
 | 
			
		||||
  {
 | 
			
		||||
    /* Process Locked */
 | 
			
		||||
    __HAL_LOCK(hdma);
 | 
			
		||||
 | 
			
		||||
    /* Set the new synchronization parameters (and keep the request ID filled during the Init)*/
 | 
			
		||||
    MODIFY_REG(hdma->DMAmuxChannel->CCR, \
 | 
			
		||||
               (~DMAMUX_CxCR_DMAREQ_ID), \
 | 
			
		||||
               ((pSyncConfig->SyncSignalID) << DMAMUX_CxCR_SYNC_ID_Pos) | ((pSyncConfig->RequestNumber - 1U) << DMAMUX_CxCR_NBREQ_Pos) | \
 | 
			
		||||
               pSyncConfig->SyncPolarity | ((uint32_t)pSyncConfig->SyncEnable << DMAMUX_CxCR_SE_Pos) | \
 | 
			
		||||
               ((uint32_t)pSyncConfig->EventEnable << DMAMUX_CxCR_EGE_Pos));
 | 
			
		||||
 | 
			
		||||
    /* Process UnLocked */
 | 
			
		||||
    __HAL_UNLOCK(hdma);
 | 
			
		||||
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /*DMA State not Ready*/
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure the DMAMUX request generator block used by the given DMA channel (instance).
 | 
			
		||||
  * @param  hdma:       pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *                     the configuration information for the specified DMA channel.
 | 
			
		||||
  * @param  pRequestGeneratorConfig : pointer to HAL_DMA_MuxRequestGeneratorConfigTypeDef :
 | 
			
		||||
  *         contains the request generator parameters.
 | 
			
		||||
  *
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_ConfigMuxRequestGenerator(DMA_HandleTypeDef *hdma,
 | 
			
		||||
                                                      HAL_DMA_MuxRequestGeneratorConfigTypeDef *pRequestGeneratorConfig)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));
 | 
			
		||||
 | 
			
		||||
  assert_param(IS_DMAMUX_REQUEST_GEN_SIGNAL_ID(pRequestGeneratorConfig->SignalID));
 | 
			
		||||
 | 
			
		||||
  assert_param(IS_DMAMUX_REQUEST_GEN_POLARITY(pRequestGeneratorConfig->Polarity));
 | 
			
		||||
  assert_param(IS_DMAMUX_REQUEST_GEN_REQUEST_NUMBER(pRequestGeneratorConfig->RequestNumber));
 | 
			
		||||
 | 
			
		||||
  /* check if the DMA state is ready
 | 
			
		||||
     and DMA is using a DMAMUX request generator block
 | 
			
		||||
  */
 | 
			
		||||
  if ((hdma->State == HAL_DMA_STATE_READY) && (hdma->DMAmuxRequestGen != 0U))
 | 
			
		||||
  {
 | 
			
		||||
    /* Process Locked */
 | 
			
		||||
    __HAL_LOCK(hdma);
 | 
			
		||||
 | 
			
		||||
    /* Set the request generator new parameters */
 | 
			
		||||
    hdma->DMAmuxRequestGen->RGCR = pRequestGeneratorConfig->SignalID | \
 | 
			
		||||
                                   ((pRequestGeneratorConfig->RequestNumber - 1U) << (POSITION_VAL(DMAMUX_RGxCR_GNBREQ) & 0x1FU)) | \
 | 
			
		||||
                                   pRequestGeneratorConfig->Polarity;
 | 
			
		||||
    /* Process UnLocked */
 | 
			
		||||
    __HAL_UNLOCK(hdma);
 | 
			
		||||
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the DMAMUX request generator block used by the given DMA channel (instance).
 | 
			
		||||
  * @param  hdma:       pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *                     the configuration information for the specified DMA channel.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_EnableMuxRequestGenerator(DMA_HandleTypeDef *hdma)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));
 | 
			
		||||
 | 
			
		||||
  /* check if the DMA state is ready
 | 
			
		||||
     and DMA is using a DMAMUX request generator block
 | 
			
		||||
  */
 | 
			
		||||
  if ((hdma->State != HAL_DMA_STATE_RESET) && (hdma->DMAmuxRequestGen != 0))
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
    /* Enable the request generator*/
 | 
			
		||||
    hdma->DMAmuxRequestGen->RGCR |= DMAMUX_RGxCR_GE;
 | 
			
		||||
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the DMAMUX request generator block used by the given DMA channel (instance).
 | 
			
		||||
  * @param  hdma:       pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *                     the configuration information for the specified DMA channel.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_DisableMuxRequestGenerator(DMA_HandleTypeDef *hdma)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));
 | 
			
		||||
 | 
			
		||||
  /* check if the DMA state is ready
 | 
			
		||||
     and DMA is using a DMAMUX request generator block
 | 
			
		||||
  */
 | 
			
		||||
  if ((hdma->State != HAL_DMA_STATE_RESET) && (hdma->DMAmuxRequestGen != 0))
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
    /* Disable the request generator*/
 | 
			
		||||
    hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_GE;
 | 
			
		||||
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Handles DMAMUX interrupt request.
 | 
			
		||||
  * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *               the configuration information for the specified DMA channel.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DMAEx_MUX_IRQHandler(DMA_HandleTypeDef *hdma)
 | 
			
		||||
{
 | 
			
		||||
  /* Check for DMAMUX Synchronization overrun */
 | 
			
		||||
  if ((hdma->DMAmuxChannelStatus->CSR & hdma->DMAmuxChannelStatusMask) != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    /* Disable the synchro overrun interrupt */
 | 
			
		||||
    hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
 | 
			
		||||
 | 
			
		||||
    /* Clear the DMAMUX synchro overrun flag */
 | 
			
		||||
    hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
 | 
			
		||||
 | 
			
		||||
    /* Update error code */
 | 
			
		||||
    hdma->ErrorCode |= HAL_DMA_ERROR_SYNC;
 | 
			
		||||
 | 
			
		||||
    if (hdma->XferErrorCallback != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      /* Transfer error callback */
 | 
			
		||||
      hdma->XferErrorCallback(hdma);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (hdma->DMAmuxRequestGen != 0)
 | 
			
		||||
  {
 | 
			
		||||
    /* if using a DMAMUX request generator block Check for DMAMUX request generator overrun */
 | 
			
		||||
    if ((hdma->DMAmuxRequestGenStatus->RGSR & hdma->DMAmuxRequestGenStatusMask) != 0U)
 | 
			
		||||
    {
 | 
			
		||||
      /* Disable the request gen overrun interrupt */
 | 
			
		||||
      hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
 | 
			
		||||
 | 
			
		||||
      /* Clear the DMAMUX request generator overrun flag */
 | 
			
		||||
      hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
 | 
			
		||||
 | 
			
		||||
      /* Update error code */
 | 
			
		||||
      hdma->ErrorCode |= HAL_DMA_ERROR_REQGEN;
 | 
			
		||||
 | 
			
		||||
      if (hdma->XferErrorCallback != NULL)
 | 
			
		||||
      {
 | 
			
		||||
        /* Transfer error callback */
 | 
			
		||||
        hdma->XferErrorCallback(hdma);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_DMA_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										639
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_exti.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										639
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_exti.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,639 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_exti.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   EXTI HAL module driver.
 | 
			
		||||
  *          This file provides firmware functions to manage the following
 | 
			
		||||
  *          functionalities of the Extended Interrupts and events controller (EXTI) peripheral:
 | 
			
		||||
  *          functionalities of the General Purpose Input/Output (EXTI) peripheral:
 | 
			
		||||
  *           + Initialization and de-initialization functions
 | 
			
		||||
  *           + IO operation functions
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 different
 | 
			
		||||
        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_ClearConfigLine().
 | 
			
		||||
        (++) 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_ClearPending().
 | 
			
		||||
 | 
			
		||||
    (#) Generate software interrupt using HAL_EXTI_GenerateSWI().
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup EXTI
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** MISRA C:2012 deviation rule has been granted for following rule:
 | 
			
		||||
  * Rule-18.1_b - Medium: Array `EXTICR' 1st subscript interval [0,7] may be out
 | 
			
		||||
  * of bounds [0,3] in following API :
 | 
			
		||||
  * HAL_EXTI_SetConfigLine
 | 
			
		||||
  * HAL_EXTI_GetConfigLine
 | 
			
		||||
  * HAL_EXTI_ClearConfigLine
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private defines ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_Private_Constants EXTI Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_MODE_OFFSET                    0x08U   /* 0x20: offset between MCU IMR/EMR registers */
 | 
			
		||||
#define EXTI_CONFIG_OFFSET                  0x08U   /* 0x20: offset between MCU Rising/Falling configuration 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 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 */
 | 
			
		||||
  offset = ((pExtiConfig->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
 | 
			
		||||
  /* Compute line position */
 | 
			
		||||
  linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  maskline = (1uL << linepos);
 | 
			
		||||
 | 
			
		||||
  /* Configure triggers for configurable lines */
 | 
			
		||||
  if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
 | 
			
		||||
 | 
			
		||||
    /* Configure rising trigger */
 | 
			
		||||
    regaddr = (&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
 | 
			
		||||
    regval = *regaddr;
 | 
			
		||||
 | 
			
		||||
    /* Mask or set line */
 | 
			
		||||
    if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      regval |= maskline;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      regval &= ~maskline;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Store rising trigger mode */
 | 
			
		||||
    *regaddr = regval;
 | 
			
		||||
 | 
			
		||||
    /* Configure falling trigger */
 | 
			
		||||
    regaddr = (&EXTI->FTSR1 + (EXTI_CONFIG_OFFSET * offset));
 | 
			
		||||
    regval = *regaddr;
 | 
			
		||||
 | 
			
		||||
    /* Mask or set line */
 | 
			
		||||
    if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      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 = SYSCFG->EXTICR[linepos >> 2u];
 | 
			
		||||
      regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
 | 
			
		||||
      regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
 | 
			
		||||
      SYSCFG->EXTICR[linepos >> 2u] = regval;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Configure interrupt mode : read current mode */
 | 
			
		||||
  regaddr = (&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
 | 
			
		||||
  regval = *regaddr;
 | 
			
		||||
 | 
			
		||||
  /* Mask or set line */
 | 
			
		||||
  if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    regval |= maskline;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    regval &= ~maskline;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Store interrupt mode */
 | 
			
		||||
  *regaddr = regval;
 | 
			
		||||
 | 
			
		||||
  /* Configure event mode : read current mode */
 | 
			
		||||
  regaddr = (&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
 | 
			
		||||
  regval = *regaddr;
 | 
			
		||||
 | 
			
		||||
  /* Mask or set line */
 | 
			
		||||
  if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
  __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 configuration structure */
 | 
			
		||||
  pExtiConfig->Line = hexti->Line;
 | 
			
		||||
 | 
			
		||||
  /* Compute line register offset and line mask */
 | 
			
		||||
  offset = ((pExtiConfig->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
 | 
			
		||||
  /* Compute line position */
 | 
			
		||||
  linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
 | 
			
		||||
  /* Compute mask */
 | 
			
		||||
  maskline = (1uL << linepos);
 | 
			
		||||
 | 
			
		||||
  /* 1] Get core mode : interrupt */
 | 
			
		||||
  regaddr = (&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
 | 
			
		||||
  regval = *regaddr;
 | 
			
		||||
 | 
			
		||||
  /* Check if selected line is enable */
 | 
			
		||||
  if ((regval & maskline) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    pExtiConfig->Mode = EXTI_MODE_NONE;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Get event mode */
 | 
			
		||||
  regaddr = (&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
 | 
			
		||||
  regval = *regaddr;
 | 
			
		||||
 | 
			
		||||
  /* Check if selected line is enable */
 | 
			
		||||
  if ((regval & maskline) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    pExtiConfig->Mode |= EXTI_MODE_EVENT;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Get default Trigger and GPIOSel configuration */
 | 
			
		||||
  pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
 | 
			
		||||
  pExtiConfig->GPIOSel = 0x00u;
 | 
			
		||||
 | 
			
		||||
  /* 2] Get trigger for configurable lines : rising */
 | 
			
		||||
  if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    regaddr = (&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
 | 
			
		||||
    regval = *regaddr;
 | 
			
		||||
 | 
			
		||||
    /* Check if configuration of selected line is enable */
 | 
			
		||||
    if ((regval & maskline) != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Get falling configuration */
 | 
			
		||||
    regaddr = (&EXTI->FTSR1 + (EXTI_CONFIG_OFFSET * offset));
 | 
			
		||||
    regval = *regaddr;
 | 
			
		||||
 | 
			
		||||
    /* Check if configuration of selected line is enable */
 | 
			
		||||
    if ((regval & maskline) != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      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 = SYSCFG->EXTICR[linepos >> 2u];
 | 
			
		||||
      pExtiConfig->GPIOSel = (regval >> (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))) & SYSCFG_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(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);
 | 
			
		||||
  /* compute line position */
 | 
			
		||||
  linepos = (hexti->Line & EXTI_PIN_MASK);
 | 
			
		||||
  /* compute line mask */
 | 
			
		||||
  maskline = (1uL << linepos);
 | 
			
		||||
 | 
			
		||||
  /* 1] Clear interrupt mode */
 | 
			
		||||
  regaddr = (&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
 | 
			
		||||
  regval = (*regaddr & ~maskline);
 | 
			
		||||
  *regaddr = regval;
 | 
			
		||||
 | 
			
		||||
  /* 2] Clear event mode */
 | 
			
		||||
  regaddr = (&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
 | 
			
		||||
  regval = (*regaddr & ~maskline);
 | 
			
		||||
  *regaddr = regval;
 | 
			
		||||
 | 
			
		||||
  /* 3] Clear triggers in case of configurable lines */
 | 
			
		||||
  if ((hexti->Line & EXTI_CONFIG) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    regaddr = (&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
 | 
			
		||||
    regval = (*regaddr & ~maskline);
 | 
			
		||||
    *regaddr = regval;
 | 
			
		||||
 | 
			
		||||
    regaddr = (&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 = SYSCFG->EXTICR[linepos >> 2u];
 | 
			
		||||
      regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
 | 
			
		||||
      SYSCFG->EXTICR[linepos >> 2u] = regval;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Register callback for a dedicated 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;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_EXTI_CB(CallbackID));
 | 
			
		||||
 | 
			
		||||
  switch (CallbackID)
 | 
			
		||||
  {
 | 
			
		||||
    /* set common callback */
 | 
			
		||||
    case  HAL_EXTI_COMMON_CB_ID:
 | 
			
		||||
      hexti->PendingCallback = pPendingCbfn;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      hexti->PendingCallback = NULL;
 | 
			
		||||
      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(EXTI_HandleTypeDef *hexti)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t *regaddr;
 | 
			
		||||
  uint32_t regval;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
  uint32_t offset;
 | 
			
		||||
 | 
			
		||||
  /* Compute line register offset */
 | 
			
		||||
  offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
 | 
			
		||||
  /* compute line mask */
 | 
			
		||||
  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
 | 
			
		||||
 | 
			
		||||
  /* Get pending bit  */
 | 
			
		||||
  regaddr = (&EXTI->PR1 + (EXTI_CONFIG_OFFSET * offset));
 | 
			
		||||
  regval = (*regaddr & maskline);
 | 
			
		||||
 | 
			
		||||
  if (regval != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    /* Clear pending bit */
 | 
			
		||||
    *regaddr = maskline;
 | 
			
		||||
 | 
			
		||||
    /* Call pending callback */
 | 
			
		||||
    if (hexti->PendingCallback != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      hexti->PendingCallback();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get interrupt pending bit of a dedicated line.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @param  Edge unused
 | 
			
		||||
  * @retval 1 if interrupt is pending else 0.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t *regaddr;
 | 
			
		||||
  uint32_t regval;
 | 
			
		||||
  uint32_t linepos;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
  uint32_t offset;
 | 
			
		||||
 | 
			
		||||
  /* Check parameters */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(hexti->Line));
 | 
			
		||||
  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
 | 
			
		||||
  UNUSED(Edge);
 | 
			
		||||
 | 
			
		||||
  /* Compute line register offset */
 | 
			
		||||
  offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
 | 
			
		||||
  /* Compute line position */
 | 
			
		||||
  linepos = (hexti->Line & EXTI_PIN_MASK);
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  maskline = (1uL << linepos);
 | 
			
		||||
 | 
			
		||||
  /* Get pending bit */
 | 
			
		||||
  regaddr = (&EXTI->PR1 + (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 unused
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t *regaddr;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
  uint32_t offset;
 | 
			
		||||
 | 
			
		||||
  /* Check parameters */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(hexti->Line));
 | 
			
		||||
  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
 | 
			
		||||
  UNUSED(Edge);
 | 
			
		||||
 | 
			
		||||
  /* Compute line register offset */
 | 
			
		||||
  offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
 | 
			
		||||
 | 
			
		||||
  /* Get pending register address */
 | 
			
		||||
  regaddr = (&EXTI->PR1 + (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(EXTI_HandleTypeDef *hexti)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t *regaddr;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
  uint32_t offset;
 | 
			
		||||
 | 
			
		||||
  /* Check parameter */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(hexti->Line));
 | 
			
		||||
  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
 | 
			
		||||
 | 
			
		||||
  /* compute line register offset */
 | 
			
		||||
  offset = ((hexti->Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
 | 
			
		||||
  /* compute line mask */
 | 
			
		||||
  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
 | 
			
		||||
 | 
			
		||||
  regaddr = (&EXTI->SWIER1 + (EXTI_CONFIG_OFFSET * offset));
 | 
			
		||||
  *regaddr = maskline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_EXTI_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										794
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_flash.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										794
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_flash.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,794 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_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
 | 
			
		||||
  *
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                        ##### FLASH peripheral features #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
  [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses
 | 
			
		||||
       to the Flash memory. It implements the erase and program Flash memory operations
 | 
			
		||||
       and the read and write protection mechanisms.
 | 
			
		||||
 | 
			
		||||
  [..] The Flash memory interface accelerates code execution with a system of instruction
 | 
			
		||||
       prefetch and cache lines.
 | 
			
		||||
 | 
			
		||||
  [..] The FLASH main features are:
 | 
			
		||||
      (+) Flash memory read operations
 | 
			
		||||
      (+) Flash memory program/erase operations
 | 
			
		||||
      (+) Read / write protections
 | 
			
		||||
      (+) Option bytes programming
 | 
			
		||||
      (+) Prefetch on I-Code
 | 
			
		||||
      (+) 32 cache lines of 4*64 or 2*128 bits on I-Code
 | 
			
		||||
      (+) 8 cache lines of 4*64 or 2*128 bits on D-Code
 | 
			
		||||
      (+) Error code correction (ECC) : Data in flash are 72-bits word
 | 
			
		||||
          (8 bits added per double word)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
      This driver provides functions and macros to configure and program the FLASH
 | 
			
		||||
      memory of all STM32G4xx devices.
 | 
			
		||||
 | 
			
		||||
      (#) Flash Memory IO Programming functions:
 | 
			
		||||
           (++) Lock and Unlock the FLASH interface using HAL_FLASH_Unlock() and
 | 
			
		||||
                HAL_FLASH_Lock() functions
 | 
			
		||||
           (++) Program functions: double word and fast program (full row programming)
 | 
			
		||||
           (++) There are 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_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_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 prefetch buffer
 | 
			
		||||
       (+) Enable/Disable the Instruction cache and the Data cache
 | 
			
		||||
       (+) Reset the Instruction cache and the Data cache
 | 
			
		||||
       (+) Enable/Disable the Flash power-down during low-power run and sleep modes
 | 
			
		||||
       (+) Enable/Disable the Flash interrupts
 | 
			
		||||
       (+) Monitor the Flash flags status
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH FLASH
 | 
			
		||||
  * @brief FLASH HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private defines -----------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Private_Constants FLASH Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define FLASH_NB_DOUBLE_WORDS_IN_ROW  32
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/* 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 = FLASH_PROC_NONE,
 | 
			
		||||
                                .Address = 0U,
 | 
			
		||||
                                .Bank = FLASH_BANK_1,
 | 
			
		||||
                                .Page = 0U,
 | 
			
		||||
                                .NbPagesToErase = 0U,
 | 
			
		||||
                                .CacheToReactivate = FLASH_CACHE_DISABLED};
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Private_Functions FLASH Private Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
static void          FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data);
 | 
			
		||||
static void          FLASH_Program_Fast(uint32_t Address, uint32_t DataAddress);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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 double word or fast program of a row 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  Address specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed.
 | 
			
		||||
  *         This parameter is the data for the double word program and the address where
 | 
			
		||||
  *         are stored the data for the row fast program.
 | 
			
		||||
  *
 | 
			
		||||
  * @retval HAL_Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status;
 | 
			
		||||
  uint32_t prog_bit = 0;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
 | 
			
		||||
 | 
			
		||||
  /* Process Locked */
 | 
			
		||||
  __HAL_LOCK(&pFlash);
 | 
			
		||||
 | 
			
		||||
  /* Wait for last operation to be completed */
 | 
			
		||||
  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);
 | 
			
		||||
 | 
			
		||||
  if (status == HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;
 | 
			
		||||
 | 
			
		||||
    /* Deactivate the data cache if they are activated to avoid data misbehavior */
 | 
			
		||||
    if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
 | 
			
		||||
    {
 | 
			
		||||
      /* Disable data cache  */
 | 
			
		||||
      __HAL_FLASH_DATA_CACHE_DISABLE();
 | 
			
		||||
      pFlash.CacheToReactivate = FLASH_CACHE_DCACHE_ENABLED;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      pFlash.CacheToReactivate = FLASH_CACHE_DISABLED;
 | 
			
		||||
    }
 | 
			
		||||
    if (TypeProgram == FLASH_TYPEPROGRAM_DOUBLEWORD)
 | 
			
		||||
    {
 | 
			
		||||
      /* Program double-word (64-bit) at a specified address */
 | 
			
		||||
      FLASH_Program_DoubleWord(Address, Data);
 | 
			
		||||
      prog_bit = FLASH_CR_PG;
 | 
			
		||||
    }
 | 
			
		||||
    else if ((TypeProgram == FLASH_TYPEPROGRAM_FAST) || (TypeProgram == FLASH_TYPEPROGRAM_FAST_AND_LAST))
 | 
			
		||||
    {
 | 
			
		||||
      /* Fast program a 32 row double-word (64-bit) at a specified address */
 | 
			
		||||
      FLASH_Program_Fast(Address, (uint32_t)Data);
 | 
			
		||||
 | 
			
		||||
      /* If it is the last row, the bit will be cleared at the end of the operation */
 | 
			
		||||
      if (TypeProgram == FLASH_TYPEPROGRAM_FAST_AND_LAST)
 | 
			
		||||
      {
 | 
			
		||||
        prog_bit = FLASH_CR_FSTPG;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      /* Nothing to do */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Wait for last operation to be completed */
 | 
			
		||||
    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);
 | 
			
		||||
 | 
			
		||||
    /* If the program operation is completed, disable the PG or FSTPG Bit */
 | 
			
		||||
    if (prog_bit != 0U)
 | 
			
		||||
    {
 | 
			
		||||
      CLEAR_BIT(FLASH->CR, prog_bit);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Flush the caches to be sure of the data consistency */
 | 
			
		||||
    FLASH_FlushCaches();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Process Unlocked */
 | 
			
		||||
  __HAL_UNLOCK(&pFlash);
 | 
			
		||||
 | 
			
		||||
  /* return status */
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Program double word or fast program of a row 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  Address specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed.
 | 
			
		||||
  *         This parameter is the data for the double word program and the address where
 | 
			
		||||
  *         are stored the data for the row fast program.
 | 
			
		||||
  *
 | 
			
		||||
  * @retval HAL_Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
 | 
			
		||||
 | 
			
		||||
  /* Process Locked */
 | 
			
		||||
  __HAL_LOCK(&pFlash);
 | 
			
		||||
 | 
			
		||||
  /* Reset error code */
 | 
			
		||||
  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;
 | 
			
		||||
 | 
			
		||||
  /* Deactivate the data cache if they are activated to avoid data misbehavior */
 | 
			
		||||
  if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    /* Disable data cache  */
 | 
			
		||||
    __HAL_FLASH_DATA_CACHE_DISABLE();
 | 
			
		||||
    pFlash.CacheToReactivate = FLASH_CACHE_DCACHE_ENABLED;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    pFlash.CacheToReactivate = FLASH_CACHE_DISABLED;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* 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 */
 | 
			
		||||
    if (TypeProgram == FLASH_TYPEPROGRAM_FAST_AND_LAST)
 | 
			
		||||
    {
 | 
			
		||||
      pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAM_LAST;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAM;
 | 
			
		||||
    }
 | 
			
		||||
    pFlash.Address = Address;
 | 
			
		||||
 | 
			
		||||
    /* Enable End of Operation and Error interrupts */
 | 
			
		||||
    __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_OPERR);
 | 
			
		||||
 | 
			
		||||
    if (TypeProgram == FLASH_TYPEPROGRAM_DOUBLEWORD)
 | 
			
		||||
    {
 | 
			
		||||
      /* Program double-word (64-bit) at a specified address */
 | 
			
		||||
      FLASH_Program_DoubleWord(Address, Data);
 | 
			
		||||
    }
 | 
			
		||||
    else if ((TypeProgram == FLASH_TYPEPROGRAM_FAST) || (TypeProgram == FLASH_TYPEPROGRAM_FAST_AND_LAST))
 | 
			
		||||
    {
 | 
			
		||||
      /* Fast program a 32 row double-word (64-bit) at a specified address */
 | 
			
		||||
      FLASH_Program_Fast(Address, (uint32_t)Data);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      /* Nothing to do */
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Handle FLASH interrupt request.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_FLASH_IRQHandler(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tmp_page;
 | 
			
		||||
  uint32_t error;
 | 
			
		||||
  FLASH_ProcedureTypeDef procedure;
 | 
			
		||||
 | 
			
		||||
  /* If the operation is completed, disable the PG, PNB, MER1, MER2 and PER Bit */
 | 
			
		||||
  CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_MER1 | FLASH_CR_PER | FLASH_CR_PNB));
 | 
			
		||||
#if defined (FLASH_OPTR_DBANK)
 | 
			
		||||
  CLEAR_BIT(FLASH->CR, FLASH_CR_MER2);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* Disable the FSTPG Bit only if it is the last row programmed */
 | 
			
		||||
  if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAM_LAST)
 | 
			
		||||
  {
 | 
			
		||||
    CLEAR_BIT(FLASH->CR, FLASH_CR_FSTPG);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check FLASH operation error flags */
 | 
			
		||||
  error = (FLASH->SR & FLASH_FLAG_SR_ERRORS);
 | 
			
		||||
 | 
			
		||||
  if (error != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    /* Save the error code */
 | 
			
		||||
    pFlash.ErrorCode |= error;
 | 
			
		||||
 | 
			
		||||
    /* Clear error programming flags */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(error);
 | 
			
		||||
 | 
			
		||||
    /* Flush the caches to be sure of the data consistency */
 | 
			
		||||
    FLASH_FlushCaches();
 | 
			
		||||
 | 
			
		||||
    /* FLASH error interrupt user callback */
 | 
			
		||||
    procedure = pFlash.ProcedureOnGoing;
 | 
			
		||||
    if (procedure == FLASH_PROC_PAGE_ERASE)
 | 
			
		||||
    {
 | 
			
		||||
      HAL_FLASH_OperationErrorCallback(pFlash.Page);
 | 
			
		||||
    }
 | 
			
		||||
    else if (procedure == FLASH_PROC_MASS_ERASE)
 | 
			
		||||
    {
 | 
			
		||||
      HAL_FLASH_OperationErrorCallback(pFlash.Bank);
 | 
			
		||||
    }
 | 
			
		||||
    else if ((procedure == FLASH_PROC_PROGRAM) ||
 | 
			
		||||
             (procedure == FLASH_PROC_PROGRAM_LAST))
 | 
			
		||||
    {
 | 
			
		||||
      HAL_FLASH_OperationErrorCallback(pFlash.Address);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      /* Nothing to do */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*Stop the procedure ongoing*/
 | 
			
		||||
    pFlash.ProcedureOnGoing = FLASH_PROC_NONE;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check FLASH End of Operation flag  */
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP))
 | 
			
		||||
  {
 | 
			
		||||
    /* Clear FLASH End of Operation pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
 | 
			
		||||
 | 
			
		||||
    if (pFlash.ProcedureOnGoing == FLASH_PROC_PAGE_ERASE)
 | 
			
		||||
    {
 | 
			
		||||
      /* Nb of pages to erased can be decreased */
 | 
			
		||||
      pFlash.NbPagesToErase--;
 | 
			
		||||
 | 
			
		||||
      /* Check if there are still pages to erase*/
 | 
			
		||||
      if (pFlash.NbPagesToErase != 0U)
 | 
			
		||||
      {
 | 
			
		||||
        /* Indicate user which page has been erased*/
 | 
			
		||||
        HAL_FLASH_EndOfOperationCallback(pFlash.Page);
 | 
			
		||||
 | 
			
		||||
        /* Increment page number */
 | 
			
		||||
        pFlash.Page++;
 | 
			
		||||
        tmp_page = pFlash.Page;
 | 
			
		||||
        FLASH_PageErase(tmp_page, pFlash.Bank);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /* No more pages to Erase */
 | 
			
		||||
        /* Reset Address and stop Erase pages procedure */
 | 
			
		||||
        pFlash.Page = 0xFFFFFFFFU;
 | 
			
		||||
        pFlash.ProcedureOnGoing = FLASH_PROC_NONE;
 | 
			
		||||
 | 
			
		||||
        /* Flush the caches to be sure of the data consistency */
 | 
			
		||||
        FLASH_FlushCaches();
 | 
			
		||||
 | 
			
		||||
        /* FLASH EOP interrupt user callback */
 | 
			
		||||
        HAL_FLASH_EndOfOperationCallback(pFlash.Page);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      /* Flush the caches to be sure of the data consistency */
 | 
			
		||||
      FLASH_FlushCaches();
 | 
			
		||||
 | 
			
		||||
      procedure = pFlash.ProcedureOnGoing;
 | 
			
		||||
      if (procedure == FLASH_PROC_MASS_ERASE)
 | 
			
		||||
      {
 | 
			
		||||
        /* MassErase ended. Return the selected bank */
 | 
			
		||||
        /* FLASH EOP interrupt user callback */
 | 
			
		||||
        HAL_FLASH_EndOfOperationCallback(pFlash.Bank);
 | 
			
		||||
      }
 | 
			
		||||
      else if ((procedure == FLASH_PROC_PROGRAM) ||
 | 
			
		||||
               (procedure == FLASH_PROC_PROGRAM_LAST))
 | 
			
		||||
      {
 | 
			
		||||
        /* Program ended. Return the selected address */
 | 
			
		||||
        /* FLASH EOP interrupt user callback */
 | 
			
		||||
        HAL_FLASH_EndOfOperationCallback(pFlash.Address);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /* Nothing to do */
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /*Clear the procedure ongoing*/
 | 
			
		||||
      pFlash.ProcedureOnGoing = FLASH_PROC_NONE;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (pFlash.ProcedureOnGoing == FLASH_PROC_NONE)
 | 
			
		||||
  {
 | 
			
		||||
    /* Disable End of Operation and Error interrupts */
 | 
			
		||||
    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_OPERR);
 | 
			
		||||
 | 
			
		||||
    /* Process Unlocked */
 | 
			
		||||
    __HAL_UNLOCK(&pFlash);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  FLASH end of operation interrupt callback.
 | 
			
		||||
  * @param  ReturnValue The value saved in this parameter depends on the ongoing procedure:
 | 
			
		||||
  *           @arg Mass Erase: Bank number which has been requested to erase
 | 
			
		||||
  *           @arg Page Erase: Page which has been erased
 | 
			
		||||
  *                            (if 0xFFFFFFFF, it means that all the selected pages have been erased)
 | 
			
		||||
  *           @arg 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:
 | 
			
		||||
  *           @arg Mass Erase: Bank number which has been requested to erase
 | 
			
		||||
  *           @arg Page Erase: Page number which returned an error
 | 
			
		||||
  *           @arg 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 register access.
 | 
			
		||||
  * @retval HAL_Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Unlock(void)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_OK;
 | 
			
		||||
 | 
			
		||||
  if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    /* Authorize the FLASH Registers access */
 | 
			
		||||
    WRITE_REG(FLASH->KEYR, FLASH_KEY1);
 | 
			
		||||
    WRITE_REG(FLASH->KEYR, FLASH_KEY2);
 | 
			
		||||
 | 
			
		||||
    /* verify Flash is unlocked */
 | 
			
		||||
    if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != 0U)
 | 
			
		||||
    {
 | 
			
		||||
      status = HAL_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Lock the FLASH control register access.
 | 
			
		||||
  * @retval HAL_Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Lock(void)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_ERROR;
 | 
			
		||||
 | 
			
		||||
  /* Set the LOCK Bit to lock the FLASH Registers access */
 | 
			
		||||
  SET_BIT(FLASH->CR, FLASH_CR_LOCK);
 | 
			
		||||
 | 
			
		||||
  /* verify Flash is locked */
 | 
			
		||||
  if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    status = HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Unlock the FLASH Option Bytes Registers access.
 | 
			
		||||
  * @retval HAL_Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_OK;
 | 
			
		||||
 | 
			
		||||
  if (READ_BIT(FLASH->CR, FLASH_CR_OPTLOCK) != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    /* Authorizes the Option Byte register programming */
 | 
			
		||||
    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1);
 | 
			
		||||
    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2);
 | 
			
		||||
 | 
			
		||||
    /* verify option bytes are unlocked */
 | 
			
		||||
    if (READ_BIT(FLASH->CR, FLASH_CR_OPTLOCK) != 0U)
 | 
			
		||||
    {
 | 
			
		||||
      status = HAL_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Lock the FLASH Option Bytes Registers access.
 | 
			
		||||
  * @retval HAL_Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_ERROR;
 | 
			
		||||
 | 
			
		||||
  /* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */
 | 
			
		||||
  SET_BIT(FLASH->CR, FLASH_CR_OPTLOCK);
 | 
			
		||||
 | 
			
		||||
  /* Verify option bytes are locked */
 | 
			
		||||
  if (READ_BIT(FLASH->CR, FLASH_CR_OPTLOCK) != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    status = HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Launch the option byte loading.
 | 
			
		||||
  * @retval HAL_Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set the bit to force the option byte reloading */
 | 
			
		||||
  SET_BIT(FLASH->CR, FLASH_CR_OBL_LAUNCH);
 | 
			
		||||
 | 
			
		||||
  /* Wait for last operation to be completed */
 | 
			
		||||
  return (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @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 FLASH_ErrorCode. The returned value can be:
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_RD: FLASH Read Protection error flag (PCROP)
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PGS: FLASH Programming Sequence error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PGP: FLASH Programming Parallelism error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PGA: FLASH Programming Alignment error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_WRP: FLASH Write protected error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_OPERATION: FLASH operation Error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_NONE: No error set
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_OP: FLASH Operation error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PROG: FLASH Programming error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_WRP: FLASH Write protection error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PGA: FLASH Programming alignment error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_SIZ: FLASH Size error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PGS: FLASH Programming sequence error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_MIS: FLASH Fast programming data miss error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_FAST: FLASH Fast programming error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_RD: FLASH PCROP read error
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_OPTV: FLASH Option validity 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_Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
 | 
			
		||||
{
 | 
			
		||||
  /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
 | 
			
		||||
     Even if the FLASH operation fails, the BUSY flag will be reset and an error
 | 
			
		||||
     flag will be set */
 | 
			
		||||
 | 
			
		||||
  uint32_t tickstart = HAL_GetTick();
 | 
			
		||||
  uint32_t error;
 | 
			
		||||
 | 
			
		||||
  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY))
 | 
			
		||||
  {
 | 
			
		||||
    if ((HAL_GetTick() - tickstart) > Timeout)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check FLASH operation error flags */
 | 
			
		||||
  error = (FLASH->SR & FLASH_FLAG_SR_ERRORS);
 | 
			
		||||
  if (error != 0u)
 | 
			
		||||
  {
 | 
			
		||||
    /* Save the error code */
 | 
			
		||||
    pFlash.ErrorCode |= error;
 | 
			
		||||
 | 
			
		||||
    /* Clear error programming flags */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(error);
 | 
			
		||||
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check FLASH End of Operation flag  */
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP))
 | 
			
		||||
  {
 | 
			
		||||
    /* Clear FLASH End of Operation pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* If there is an error flag set */
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Program double-word (64-bit) at a specified address.
 | 
			
		||||
  * @param  Address specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));
 | 
			
		||||
 | 
			
		||||
  /* Set PG bit */
 | 
			
		||||
  SET_BIT(FLASH->CR, FLASH_CR_PG);
 | 
			
		||||
 | 
			
		||||
  /* Program first word */
 | 
			
		||||
  *(uint32_t *)Address = (uint32_t)Data;
 | 
			
		||||
 | 
			
		||||
  /* Barrier to ensure programming is performed in 2 steps, in right order
 | 
			
		||||
    (independently of compiler optimization behavior) */
 | 
			
		||||
  __ISB();
 | 
			
		||||
 | 
			
		||||
  /* Program second word */
 | 
			
		||||
  *(uint32_t *)(Address + 4U) = (uint32_t)(Data >> 32U);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Fast program a row double-word (64-bit) at a specified address.
 | 
			
		||||
  * @param  Address specifies the address to be programmed.
 | 
			
		||||
  * @param  DataAddress specifies the address where the data are stored.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
static void FLASH_Program_Fast(uint32_t Address, uint32_t DataAddress)
 | 
			
		||||
{
 | 
			
		||||
  uint8_t row_index = (2 * FLASH_NB_DOUBLE_WORDS_IN_ROW);
 | 
			
		||||
  uint32_t *dest_addr = (uint32_t *)Address;
 | 
			
		||||
  uint32_t *src_addr = (uint32_t *)DataAddress;
 | 
			
		||||
  uint32_t primask_bit;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_MAIN_MEM_ADDRESS(Address));
 | 
			
		||||
 | 
			
		||||
  /* Set FSTPG bit */
 | 
			
		||||
  SET_BIT(FLASH->CR, FLASH_CR_FSTPG);
 | 
			
		||||
 | 
			
		||||
  /* Enter critical section: Disable interrupts to avoid any interruption during the loop */
 | 
			
		||||
  primask_bit = __get_PRIMASK();
 | 
			
		||||
  __disable_irq();
 | 
			
		||||
 | 
			
		||||
  /* Program the double words of the row */
 | 
			
		||||
  do
 | 
			
		||||
  {
 | 
			
		||||
    *dest_addr = *src_addr;
 | 
			
		||||
    dest_addr++;
 | 
			
		||||
    src_addr++;
 | 
			
		||||
    row_index--;
 | 
			
		||||
  }
 | 
			
		||||
  while (row_index != 0U);
 | 
			
		||||
 | 
			
		||||
  /* Exit critical section: restore previous priority mask */
 | 
			
		||||
  __set_PRIMASK(primask_bit);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_FLASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1433
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_flash_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1433
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_flash_ex.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -0,0 +1,253 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_hal_flash_ramfunc.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   FLASH RAMFUNC driver.
 | 
			
		||||
  *          This file provides a Flash firmware functions which should be
 | 
			
		||||
  *          executed from internal SRAM
 | 
			
		||||
  *            + FLASH Power Down in Run mode
 | 
			
		||||
  *            + FLASH DBANK User Option Byte
 | 
			
		||||
  *
 | 
			
		||||
  *
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                   ##### Flash RAM functions #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
    *** 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.
 | 
			
		||||
 | 
			
		||||
    *** ICCARM Compiler ***
 | 
			
		||||
    -----------------------
 | 
			
		||||
    [..] RAM functions are defined using a specific toolchain keyword "__ramfunc".
 | 
			
		||||
 | 
			
		||||
    *** GNU Compiler ***
 | 
			
		||||
    --------------------
 | 
			
		||||
    [..] RAM functions are defined using a specific toolchain attribute
 | 
			
		||||
         "__attribute__((section(".RamFunc")))".
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_RAMFUNC FLASH_RAMFUNC
 | 
			
		||||
  * @brief FLASH functions executed from RAM
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Exported functions -------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_RAMFUNC_Exported_Functions FLASH_RAMFUNC Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_RAMFUNC_Exported_Functions_Group1 Peripheral features functions
 | 
			
		||||
 *  @brief   Data transfers functions
 | 
			
		||||
 *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                      ##### ramfunc functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    This subsection provides a set of functions that should be executed from RAM.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Power down in Run Mode
 | 
			
		||||
  * @note   This function should be called and executed from SRAM memory.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableRunPowerDown(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable the Power Down in Run mode*/
 | 
			
		||||
  __HAL_FLASH_POWER_DOWN_ENABLE();
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Power down in Run Mode
 | 
			
		||||
  * @note   This function should be called and executed from SRAM memory.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableRunPowerDown(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Disable the Power Down in Run mode*/
 | 
			
		||||
  __HAL_FLASH_POWER_DOWN_DISABLE();
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined (FLASH_OPTR_DBANK)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Program the FLASH DBANK User Option Byte.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   To configure the user option bytes, the option lock bit OPTLOCK must
 | 
			
		||||
  *         be cleared with the call of the HAL_FLASH_OB_Unlock() function.
 | 
			
		||||
  * @note   To modify the DBANK option byte, no PCROP region should be defined.
 | 
			
		||||
  *         To deactivate PCROP, user should perform RDP changing.
 | 
			
		||||
  *
 | 
			
		||||
  * @param  DBankConfig The FLASH DBANK User Option Byte value.
 | 
			
		||||
  *         This parameter  can be one of the following values:
 | 
			
		||||
  *            @arg OB_DBANK_128_BITS: Single-bank with 128-bits data
 | 
			
		||||
  *            @arg OB_DBANK_64_BITS: Dual-bank with 64-bits data
 | 
			
		||||
  *
 | 
			
		||||
  * @retval HAL_Status
 | 
			
		||||
  */
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_OB_DBankConfig(uint32_t DBankConfig)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t count, reg;
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_ERROR;
 | 
			
		||||
 | 
			
		||||
  /* Process Locked */
 | 
			
		||||
  __HAL_LOCK(&pFlash);
 | 
			
		||||
 | 
			
		||||
  /* Check if the PCROP is disabled */
 | 
			
		||||
  reg = FLASH->PCROP1SR;
 | 
			
		||||
  if (reg > FLASH->PCROP1ER)
 | 
			
		||||
  {
 | 
			
		||||
    reg = FLASH->PCROP2SR;
 | 
			
		||||
    if (reg > FLASH->PCROP2ER)
 | 
			
		||||
    {
 | 
			
		||||
      /* Disable Flash prefetch */
 | 
			
		||||
      __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
 | 
			
		||||
 | 
			
		||||
      if (READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) != 0U)
 | 
			
		||||
      {
 | 
			
		||||
        /* Disable Flash instruction cache */
 | 
			
		||||
        __HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
 | 
			
		||||
 | 
			
		||||
        /* Flush Flash instruction cache */
 | 
			
		||||
        __HAL_FLASH_INSTRUCTION_CACHE_RESET();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != 0U)
 | 
			
		||||
      {
 | 
			
		||||
        /* Disable Flash data cache */
 | 
			
		||||
        __HAL_FLASH_DATA_CACHE_DISABLE();
 | 
			
		||||
 | 
			
		||||
        /* Flush Flash data cache */
 | 
			
		||||
        __HAL_FLASH_DATA_CACHE_RESET();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* Disable WRP zone A of 1st bank if needed */
 | 
			
		||||
      reg = FLASH->WRP1AR;
 | 
			
		||||
      if (((reg & FLASH_WRP1AR_WRP1A_STRT) >> FLASH_WRP1AR_WRP1A_STRT_Pos) <=
 | 
			
		||||
          ((reg & FLASH_WRP1AR_WRP1A_END) >> FLASH_WRP1AR_WRP1A_END_Pos))
 | 
			
		||||
      {
 | 
			
		||||
        MODIFY_REG(FLASH->WRP1AR, (FLASH_WRP1AR_WRP1A_STRT | FLASH_WRP1AR_WRP1A_END), FLASH_WRP1AR_WRP1A_STRT);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* Disable WRP zone B of 1st bank if needed */
 | 
			
		||||
      reg = FLASH->WRP1BR;
 | 
			
		||||
      if (((reg & FLASH_WRP1BR_WRP1B_STRT) >> FLASH_WRP1BR_WRP1B_STRT_Pos) <=
 | 
			
		||||
          ((reg & FLASH_WRP1BR_WRP1B_END) >> FLASH_WRP1BR_WRP1B_END_Pos))
 | 
			
		||||
      {
 | 
			
		||||
        MODIFY_REG(FLASH->WRP1BR, (FLASH_WRP1BR_WRP1B_STRT | FLASH_WRP1BR_WRP1B_END), FLASH_WRP1BR_WRP1B_STRT);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* Disable WRP zone A of 2nd bank if needed */
 | 
			
		||||
      reg = FLASH->WRP2AR;
 | 
			
		||||
      if (((reg & FLASH_WRP2AR_WRP2A_STRT) >> FLASH_WRP2AR_WRP2A_STRT_Pos) <=
 | 
			
		||||
          ((reg & FLASH_WRP2AR_WRP2A_END) >> FLASH_WRP2AR_WRP2A_END_Pos))
 | 
			
		||||
      {
 | 
			
		||||
        MODIFY_REG(FLASH->WRP2AR, (FLASH_WRP2AR_WRP2A_STRT | FLASH_WRP2AR_WRP2A_END), FLASH_WRP2AR_WRP2A_STRT);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* Disable WRP zone B of 2nd bank if needed */
 | 
			
		||||
      reg = FLASH->WRP2BR;
 | 
			
		||||
      if (((reg & FLASH_WRP2BR_WRP2B_STRT) >> FLASH_WRP2BR_WRP2B_STRT_Pos) <=
 | 
			
		||||
          ((reg & FLASH_WRP2BR_WRP2B_END) >> FLASH_WRP2BR_WRP2B_END_Pos))
 | 
			
		||||
      {
 | 
			
		||||
        MODIFY_REG(FLASH->WRP2BR, (FLASH_WRP2BR_WRP2B_STRT | FLASH_WRP2BR_WRP2B_END), FLASH_WRP2BR_WRP2B_STRT);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* Modify the DBANK user option byte */
 | 
			
		||||
      MODIFY_REG(FLASH->OPTR, FLASH_OPTR_DBANK, DBankConfig);
 | 
			
		||||
 | 
			
		||||
      /* Set OPTSTRT Bit */
 | 
			
		||||
      SET_BIT(FLASH->CR, FLASH_CR_OPTSTRT);
 | 
			
		||||
 | 
			
		||||
      /* Wait for last operation to be completed */
 | 
			
		||||
      /* 8 is the number of required instruction cycles for the below loop statement (timeout expressed in ms) */
 | 
			
		||||
      count = FLASH_TIMEOUT_VALUE * (SystemCoreClock / 8U / 1000U);
 | 
			
		||||
      do
 | 
			
		||||
      {
 | 
			
		||||
        if (count == 0U)
 | 
			
		||||
        {
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
        count--;
 | 
			
		||||
      }
 | 
			
		||||
      while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != RESET);
 | 
			
		||||
 | 
			
		||||
      /* If the option byte program operation is completed, disable the OPTSTRT Bit */
 | 
			
		||||
      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTSTRT);
 | 
			
		||||
 | 
			
		||||
      /* Set the bit to force the option byte reloading */
 | 
			
		||||
      SET_BIT(FLASH->CR, FLASH_CR_OBL_LAUNCH);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Process Unlocked */
 | 
			
		||||
  __HAL_UNLOCK(&pFlash);
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* HAL_FLASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										532
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_gpio.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										532
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_gpio.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,532 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_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) 2019 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 44 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 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 PF0 and PF1, respectively, when the HSE oscillator is off.
 | 
			
		||||
        The HSE has priority over the GPIO function.
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup GPIO
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** MISRA C:2012 deviation rule has been granted for following rules:
 | 
			
		||||
  * Rule-12.2 - Medium: RHS argument is in interval [0,INF] which is out of
 | 
			
		||||
  * range of the shift operator in following API :
 | 
			
		||||
  * HAL_GPIO_Init
 | 
			
		||||
  * HAL_GPIO_DeInit
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private defines -----------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup GPIO_Private_Constants GPIO Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_NUMBER           (16U)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @addtogroup 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 GPIO_Init.
 | 
			
		||||
  * @param  GPIOx where x can be (A..G) to select the GPIO peripheral for STM32G4xx family
 | 
			
		||||
  * @param  GPIO_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, GPIO_InitTypeDef *GPIO_Init)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t position = 0x00U;
 | 
			
		||||
  uint32_t iocurrent;
 | 
			
		||||
  uint32_t temp;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
 | 
			
		||||
  assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
 | 
			
		||||
  assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
 | 
			
		||||
 | 
			
		||||
  /* Configure the port pins */
 | 
			
		||||
  while (((GPIO_Init->Pin) >> position) != 0U)
 | 
			
		||||
  {
 | 
			
		||||
    /* Get current io position */
 | 
			
		||||
    iocurrent = (GPIO_Init->Pin) & (1UL << position);
 | 
			
		||||
 | 
			
		||||
    if (iocurrent != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      /*--------------------- GPIO Mode Configuration ------------------------*/
 | 
			
		||||
      /* In case of Output or Alternate function mode selection */
 | 
			
		||||
      if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) ||
 | 
			
		||||
         ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF))
 | 
			
		||||
      {
 | 
			
		||||
        /* Check the Speed parameter */
 | 
			
		||||
        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
 | 
			
		||||
        /* Configure the IO Speed */
 | 
			
		||||
        temp = GPIOx->OSPEEDR;
 | 
			
		||||
        temp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2U));
 | 
			
		||||
        temp |= (GPIO_Init->Speed << (position * 2U));
 | 
			
		||||
        GPIOx->OSPEEDR = temp;
 | 
			
		||||
 | 
			
		||||
        /* Configure the IO Output Type */
 | 
			
		||||
        temp = GPIOx->OTYPER;
 | 
			
		||||
        temp &= ~(GPIO_OTYPER_OT0 << position) ;
 | 
			
		||||
        temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
 | 
			
		||||
        GPIOx->OTYPER = temp;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
 | 
			
		||||
      {
 | 
			
		||||
        /* Check the Pull parameter */
 | 
			
		||||
        assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
 | 
			
		||||
 | 
			
		||||
        /* Activate the Pull-up or Pull down resistor for the current IO */
 | 
			
		||||
        temp = GPIOx->PUPDR;
 | 
			
		||||
        temp &= ~(GPIO_PUPDR_PUPD0 << (position * 2U));
 | 
			
		||||
        temp |= ((GPIO_Init->Pull) << (position * 2U));
 | 
			
		||||
        GPIOx->PUPDR = temp;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* In case of Alternate function mode selection */
 | 
			
		||||
      if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
 | 
			
		||||
      {
 | 
			
		||||
        /* Check the Alternate function parameters */
 | 
			
		||||
        assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
 | 
			
		||||
        assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
 | 
			
		||||
 | 
			
		||||
        /* Configure Alternate function mapped with the current IO */
 | 
			
		||||
        temp = GPIOx->AFR[position >> 3U];
 | 
			
		||||
        temp &= ~(0xFU << ((position & 0x07U) * 4U));
 | 
			
		||||
        temp |= ((GPIO_Init->Alternate) << ((position & 0x07U) * 4U));
 | 
			
		||||
        GPIOx->AFR[position >> 3U] = temp;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
 | 
			
		||||
      temp = GPIOx->MODER;
 | 
			
		||||
      temp &= ~(GPIO_MODER_MODE0 << (position * 2U));
 | 
			
		||||
      temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));
 | 
			
		||||
      GPIOx->MODER = temp;
 | 
			
		||||
 | 
			
		||||
      /*--------------------- EXTI Mode Configuration ------------------------*/
 | 
			
		||||
      /* Configure the External Interrupt or event for the current IO */
 | 
			
		||||
      if ((GPIO_Init->Mode & EXTI_MODE) != 0x00u)
 | 
			
		||||
      {
 | 
			
		||||
        /* Enable SYSCFG Clock */
 | 
			
		||||
        __HAL_RCC_SYSCFG_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
        temp = SYSCFG->EXTICR[position >> 2U];
 | 
			
		||||
        temp &= ~(0x0FUL << (4U * (position & 0x03U)));
 | 
			
		||||
        temp |= (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)));
 | 
			
		||||
        SYSCFG->EXTICR[position >> 2U] = temp;
 | 
			
		||||
 | 
			
		||||
        /* Clear Rising Falling edge configuration */
 | 
			
		||||
        temp = EXTI->RTSR1;
 | 
			
		||||
        temp &= ~(iocurrent);
 | 
			
		||||
        if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U)
 | 
			
		||||
        {
 | 
			
		||||
          temp |= iocurrent;
 | 
			
		||||
        }
 | 
			
		||||
        EXTI->RTSR1 = temp;
 | 
			
		||||
 | 
			
		||||
        temp = EXTI->FTSR1;
 | 
			
		||||
        temp &= ~(iocurrent);
 | 
			
		||||
        if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U)
 | 
			
		||||
        {
 | 
			
		||||
          temp |= iocurrent;
 | 
			
		||||
        }
 | 
			
		||||
        EXTI->FTSR1 = temp;
 | 
			
		||||
 | 
			
		||||
        temp = EXTI->EMR1;
 | 
			
		||||
        temp &= ~(iocurrent);
 | 
			
		||||
        if ((GPIO_Init->Mode & EXTI_EVT) != 0x00U)
 | 
			
		||||
        {
 | 
			
		||||
          temp |= iocurrent;
 | 
			
		||||
        }
 | 
			
		||||
        EXTI->EMR1 = temp;
 | 
			
		||||
 | 
			
		||||
        /* Clear EXTI line configuration */
 | 
			
		||||
        temp = EXTI->IMR1;
 | 
			
		||||
        temp &= ~(iocurrent);
 | 
			
		||||
        if ((GPIO_Init->Mode & EXTI_IT) != 0x00U)
 | 
			
		||||
        {
 | 
			
		||||
          temp |= iocurrent;
 | 
			
		||||
        }
 | 
			
		||||
        EXTI->IMR1 = temp;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    position++;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  De-initialize the GPIOx peripheral registers to their default reset values.
 | 
			
		||||
  * @param  GPIOx where x can be (A..G) to select the GPIO peripheral for STM32G4xx 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_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t position = 0x00U;
 | 
			
		||||
  uint32_t iocurrent;
 | 
			
		||||
  uint32_t tmp;
 | 
			
		||||
 | 
			
		||||
  /* 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 != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      /*------------------------- EXTI Mode Configuration --------------------*/
 | 
			
		||||
      /* Clear the External Interrupt or Event for the current IO */
 | 
			
		||||
 | 
			
		||||
      tmp = SYSCFG->EXTICR[position >> 2U];
 | 
			
		||||
      tmp &= (0x0FUL << (4U * (position & 0x03U)));
 | 
			
		||||
      if (tmp == (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U))))
 | 
			
		||||
      {
 | 
			
		||||
        /* Clear EXTI line configuration */
 | 
			
		||||
        EXTI->IMR1 &= ~(iocurrent);
 | 
			
		||||
        EXTI->EMR1 &= ~(iocurrent);
 | 
			
		||||
 | 
			
		||||
        /* Clear Rising Falling edge configuration */
 | 
			
		||||
        EXTI->FTSR1 &= ~(iocurrent);
 | 
			
		||||
        EXTI->RTSR1 &= ~(iocurrent);
 | 
			
		||||
 | 
			
		||||
        tmp = 0x0FUL << (4U * (position & 0x03U));
 | 
			
		||||
        SYSCFG->EXTICR[position >> 2U] &= ~tmp;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /*------------------------- GPIO Mode Configuration --------------------*/
 | 
			
		||||
      /* Configure IO in Analog Mode */
 | 
			
		||||
      GPIOx->MODER |= (GPIO_MODER_MODE0 << (position * 2u));
 | 
			
		||||
 | 
			
		||||
      /* Configure the default Alternate Function in current IO */
 | 
			
		||||
      GPIOx->AFR[position >> 3u] &= ~(0xFu << ((position & 0x07u) * 4u));
 | 
			
		||||
 | 
			
		||||
      /* Deactivate the Pull-up and Pull-down resistor for the current IO */
 | 
			
		||||
      GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPD0 << (position * 2u));
 | 
			
		||||
 | 
			
		||||
      /* Configure the default value IO Output Type */
 | 
			
		||||
      GPIOx->OTYPER  &= ~(GPIO_OTYPER_OT0 << position);
 | 
			
		||||
 | 
			
		||||
      /* Configure the default value for IO Speed */
 | 
			
		||||
      GPIOx->OSPEEDR &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2u));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    position++;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup GPIO_Exported_Functions_Group2
 | 
			
		||||
  *  @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..G) to select the GPIO peripheral for STM32G4xx family
 | 
			
		||||
  * @param  GPIO_Pin specifies the port bit to read.
 | 
			
		||||
  *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15).
 | 
			
		||||
  * @retval The input port pin value.
 | 
			
		||||
  */
 | 
			
		||||
GPIO_PinState HAL_GPIO_ReadPin(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) != 0x00U)
 | 
			
		||||
  {
 | 
			
		||||
    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..G) to select the GPIO peripheral for STM32G4xx 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).
 | 
			
		||||
  * @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  Toggle the specified GPIO pin.
 | 
			
		||||
  * @param  GPIOx where x can be (A..G) to select the GPIO peripheral for STM32G4xx family
 | 
			
		||||
  * @param  GPIO_Pin specifies the pin to be toggled.
 | 
			
		||||
  *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15).
 | 
			
		||||
  * @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..G) to select the GPIO peripheral for STM32G4xx 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 register. This read is mandatory to complete key lock sequence */
 | 
			
		||||
  tmp = GPIOx->LCKR;
 | 
			
		||||
 | 
			
		||||
  /* read again in order to confirm lock is active */
 | 
			
		||||
  if ((GPIOx->LCKR & GPIO_LCKR_LCKK) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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_IT(GPIO_Pin) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
 | 
			
		||||
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI line detection callback.
 | 
			
		||||
  * @param  GPIO_Pin: Specifies the port pin connected to corresponding EXTI line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_GPIO_EXTI_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_Callback could be implemented in the user file
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_GPIO_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										652
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_pwr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										652
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_pwr.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,652 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32g4xx_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
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2019 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 "stm32g4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32G4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR PWR
 | 
			
		||||
  * @brief PWR HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef 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_MODE_IT               ((uint32_t)0x00010000)  /*!< Mask for interruption yielded by PVD threshold crossing */
 | 
			
		||||
#define PVD_MODE_EVT              ((uint32_t)0x00020000)  /*!< Mask for event yielded by PVD threshold crossing        */
 | 
			
		||||
#define PVD_RISING_EDGE           ((uint32_t)0x00000001)  /*!< Mask for rising edge set as PVD trigger                 */
 | 
			
		||||
#define PVD_FALLING_EDGE          ((uint32_t)0x00000002)  /*!< Mask for falling edge set as PVD trigger                */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* 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.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DeInit(void)
 | 
			
		||||
{
 | 
			
		||||
  __HAL_RCC_PWR_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_PWR_RELEASE_RESET();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable access to the backup domain
 | 
			
		||||
  *        (RTC registers, RTC backup data registers).
 | 
			
		||||
  * @note  After reset, the backup domain is protected against
 | 
			
		||||
  *        possible unwanted write accesses.
 | 
			
		||||
  * @note  RTCSEL that sets the RTC clock source selection is in the RTC back-up domain.
 | 
			
		||||
  *        In order to set or modify the RTC clock, the backup domain access must be
 | 
			
		||||
  *        disabled.
 | 
			
		||||
  * @note  LSEON bit that switches on and off the LSE crystal belongs as well to the
 | 
			
		||||
  *        back-up domain.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnableBkUpAccess(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR1, PWR_CR1_DBP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable access to the backup domain
 | 
			
		||||
  *        (RTC registers, RTC backup data registers).
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisableBkUpAccess(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR1, PWR_CR1_DBP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions
 | 
			
		||||
  *  @brief Low Power modes configuration functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                 ##### Peripheral Control functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
 | 
			
		||||
     [..]
 | 
			
		||||
     *** PVD configuration ***
 | 
			
		||||
    =========================
 | 
			
		||||
    [..]
 | 
			
		||||
      (+) The PVD is used to monitor the VDD power supply by comparing it to a
 | 
			
		||||
          threshold selected by the PVD Level (PLS[2:0] bits in PWR_CR2 register).
 | 
			
		||||
 | 
			
		||||
      (+) PVDO flag is available to indicate if VDD/VDDA is higher or lower
 | 
			
		||||
          than the PVD threshold. This event is internally connected to the EXTI
 | 
			
		||||
          line16 and can generate an interrupt if enabled. This is done through
 | 
			
		||||
          __HAL_PVD_EXTI_ENABLE_IT() macro.
 | 
			
		||||
      (+) The PVD is stopped in Standby mode.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    *** WakeUp pin configuration ***
 | 
			
		||||
    ================================
 | 
			
		||||
    [..]
 | 
			
		||||
      (+) WakeUp pins are used to wakeup the system from Standby mode or Shutdown mode.
 | 
			
		||||
          The polarity of these pins can be set to configure event detection on high
 | 
			
		||||
          level (rising edge) or low level (falling edge).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    *** Low Power modes configuration ***
 | 
			
		||||
    =====================================
 | 
			
		||||
    [..]
 | 
			
		||||
      The devices feature 8 low-power modes:
 | 
			
		||||
      (+) Low-power Run mode: core and peripherals are running, main regulator off, low power regulator on.
 | 
			
		||||
      (+) Sleep mode: Cortex-M4 core stopped, peripherals kept running, main and low power regulators on.
 | 
			
		||||
      (+) Low-power Sleep mode: Cortex-M4 core stopped, peripherals kept running, main regulator off, low power regulator on.
 | 
			
		||||
      (+) Stop 0 mode: all clocks are stopped except LSI and LSE, main and low power regulators on.
 | 
			
		||||
      (+) Stop 1 mode: all clocks are stopped except LSI and LSE, main regulator off, low power regulator on.
 | 
			
		||||
      (+) Standby mode with SRAM2: all clocks are stopped except LSI and LSE, SRAM2 content preserved, main regulator off, low power regulator on.
 | 
			
		||||
      (+) Standby mode without SRAM2: all clocks are stopped except LSI and LSE, main and low power regulators off.
 | 
			
		||||
      (+) Shutdown mode: all clocks are stopped except LSE, main and low power regulators off.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   *** Low-power run mode ***
 | 
			
		||||
   ==========================
 | 
			
		||||
    [..]
 | 
			
		||||
      (+) Entry: (from main run mode)
 | 
			
		||||
        (++) set LPR bit with HAL_PWREx_EnableLowPowerRunMode() API after having decreased the system clock below 2 MHz.
 | 
			
		||||
 | 
			
		||||
      (+) Exit:
 | 
			
		||||
        (++) clear LPR bit then wait for REGLP bit to be reset with HAL_PWREx_DisableLowPowerRunMode() API. Only
 | 
			
		||||
             then can the system clock frequency be increased above 2 MHz.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   *** Sleep mode / Low-power sleep mode ***
 | 
			
		||||
   =========================================
 | 
			
		||||
    [..]
 | 
			
		||||
      (+) Entry:
 | 
			
		||||
          The Sleep mode / Low-power Sleep mode is entered through HAL_PWR_EnterSLEEPMode() API
 | 
			
		||||
          in specifying whether or not the regulator is forced to low-power mode and if exit is interrupt or event-triggered.
 | 
			
		||||
          (++) PWR_MAINREGULATOR_ON: Sleep mode (regulator in main mode).
 | 
			
		||||
          (++) PWR_LOWPOWERREGULATOR_ON: Low-power sleep (regulator in low power mode).
 | 
			
		||||
          In the latter case, the system clock frequency must have been decreased below 2 MHz beforehand.
 | 
			
		||||
          (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction
 | 
			
		||||
          (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction
 | 
			
		||||
 | 
			
		||||
      (+) WFI Exit:
 | 
			
		||||
        (++) Any peripheral interrupt acknowledged by the nested vectored interrupt
 | 
			
		||||
             controller (NVIC) or any wake-up event.
 | 
			
		||||
 | 
			
		||||
      (+) WFE Exit:
 | 
			
		||||
        (++) Any wake-up event such as an EXTI line configured in event mode.
 | 
			
		||||
 | 
			
		||||
         [..] When exiting the Low-power sleep mode by issuing an interrupt or a wakeup event,
 | 
			
		||||
             the MCU is in Low-power Run mode.
 | 
			
		||||
 | 
			
		||||
   *** Stop 0, Stop 1 modes ***
 | 
			
		||||
   ===============================
 | 
			
		||||
    [..]
 | 
			
		||||
      (+) Entry:
 | 
			
		||||
          The Stop 0, Stop 1 modes are entered through the following API's:
 | 
			
		||||
          (++) HAL_PWREx_EnterSTOP0Mode() for mode 0 or HAL_PWREx_EnterSTOP1Mode() for mode 1 or for porting reasons HAL_PWR_EnterSTOPMode().
 | 
			
		||||
      (+) Regulator setting (applicable to HAL_PWR_EnterSTOPMode() only):
 | 
			
		||||
          (++) PWR_MAINREGULATOR_ON
 | 
			
		||||
          (++) PWR_LOWPOWERREGULATOR_ON
 | 
			
		||||
      (+) Exit (interrupt or event-triggered, specified when entering STOP mode):
 | 
			
		||||
          (++) PWR_STOPENTRY_WFI: enter Stop mode with WFI instruction
 | 
			
		||||
          (++) PWR_STOPENTRY_WFE: enter Stop mode with WFE instruction
 | 
			
		||||
 | 
			
		||||
      (+) WFI Exit:
 | 
			
		||||
          (++) Any EXTI Line (Internal or External) configured in Interrupt mode.
 | 
			
		||||
          (++) Some specific communication peripherals (USART, LPUART, I2C) interrupts
 | 
			
		||||
               when programmed in wakeup mode.
 | 
			
		||||
      (+) WFE Exit:
 | 
			
		||||
          (++) Any EXTI Line (Internal or External) configured in Event mode.
 | 
			
		||||
 | 
			
		||||
       [..]
 | 
			
		||||
          When exiting Stop 0 and Stop 1 modes, the MCU is either in Run mode or in Low-power Run mode
 | 
			
		||||
          depending on the LPR bit setting.
 | 
			
		||||
 | 
			
		||||
   *** Standby mode ***
 | 
			
		||||
   ====================
 | 
			
		||||
     [..]
 | 
			
		||||
      The Standby mode offers two options:
 | 
			
		||||
      (+) option a) all clocks off except LSI and LSE, RRS bit set (keeps voltage regulator in low power mode).
 | 
			
		||||
        SRAM and registers contents are lost except for the SRAM2 content, the RTC registers, RTC backup registers
 | 
			
		||||
        and Standby circuitry.
 | 
			
		||||
      (+) option b) all clocks off except LSI and LSE, RRS bit cleared (voltage regulator then disabled).
 | 
			
		||||
        SRAM and register contents are lost except for the RTC registers, RTC backup registers
 | 
			
		||||
        and Standby circuitry.
 | 
			
		||||
 | 
			
		||||
      (++) Entry:
 | 
			
		||||
          (+++) The Standby mode is entered through HAL_PWR_EnterSTANDBYMode() API.
 | 
			
		||||
                SRAM1 and register contents are lost except for registers in the Backup domain and
 | 
			
		||||
                Standby circuitry. SRAM2 content can be preserved if the bit RRS is set in PWR_CR3 register.
 | 
			
		||||
                To enable this feature, the user can resort to HAL_PWREx_EnableSRAM2ContentRetention() API
 | 
			
		||||
                to set RRS bit.
 | 
			
		||||
 | 
			
		||||
      (++) Exit:
 | 
			
		||||
          (+++) WKUP pin rising edge, RTC alarm or wakeup, tamper event, time-stamp event,
 | 
			
		||||
                external reset in NRST pin, IWDG reset.
 | 
			
		||||
 | 
			
		||||
      [..]    After waking up from Standby mode, program execution restarts in the same way as after a Reset.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    *** Shutdown mode ***
 | 
			
		||||
   ======================
 | 
			
		||||
     [..]
 | 
			
		||||
      In Shutdown mode,
 | 
			
		||||
        voltage regulator is disabled, all clocks are off except LSE, RRS bit is cleared.
 | 
			
		||||
        SRAM and registers contents are lost except for backup domain registers.
 | 
			
		||||
 | 
			
		||||
      (+) Entry:
 | 
			
		||||
          The Shutdown mode is entered through HAL_PWREx_EnterSHUTDOWNMode() API.
 | 
			
		||||
 | 
			
		||||
      (+) Exit:
 | 
			
		||||
          (++) WKUP pin rising edge, RTC alarm or wakeup, tamper event, time-stamp event,
 | 
			
		||||
               external reset in NRST pin.
 | 
			
		||||
 | 
			
		||||
         [..] After waking up from Shutdown mode, program execution restarts in the same way as after a Reset.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   *** Auto-wakeup (AWU) from low-power mode ***
 | 
			
		||||
   =============================================
 | 
			
		||||
    [..]
 | 
			
		||||
      The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC
 | 
			
		||||
      Wakeup event, a tamper event or a time-stamp event, without depending on
 | 
			
		||||
      an external interrupt (Auto-wakeup mode).
 | 
			
		||||
 | 
			
		||||
      (+) RTC auto-wakeup (AWU) from the Stop, Standby and Shutdown modes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to
 | 
			
		||||
             configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function.
 | 
			
		||||
 | 
			
		||||
        (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it
 | 
			
		||||
             is necessary to configure the RTC to detect the tamper or time stamp event using the
 | 
			
		||||
             HAL_RTCEx_SetTimeStamp_IT() or HAL_RTCEx_SetTamper_IT() functions.
 | 
			
		||||
 | 
			
		||||
        (++) To wake up from the Stop mode with an RTC WakeUp event, it is necessary to
 | 
			
		||||
              configure the RTC to generate the RTC WakeUp event using the HAL_RTCEx_SetWakeUpTimer_IT() function.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Configure the voltage threshold detected by the Power Voltage Detector (PVD).
 | 
			
		||||
  * @param sConfigPVD: pointer to a PWR_PVDTypeDef structure that contains the PVD
 | 
			
		||||
  *        configuration information.
 | 
			
		||||
  * @note Refer to the electrical characteristics of your device datasheet for
 | 
			
		||||
  *         more details about the voltage thresholds corresponding to each
 | 
			
		||||
  *         detection level.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel));
 | 
			
		||||
  assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode));
 | 
			
		||||
 | 
			
		||||
  /* Set PLS bits according to PVDLevel value */
 | 
			
		||||
  MODIFY_REG(PWR->CR2, PWR_CR2_PLS, sConfigPVD->PVDLevel);
 | 
			
		||||
 | 
			
		||||
  /* Clear any previous config. Keep it clear if no event or IT mode is selected */
 | 
			
		||||
  __HAL_PWR_PVD_EXTI_DISABLE_EVENT();
 | 
			
		||||
  __HAL_PWR_PVD_EXTI_DISABLE_IT();
 | 
			
		||||
  __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();
 | 
			
		||||
  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();
 | 
			
		||||
 | 
			
		||||
  /* Configure interrupt mode */
 | 
			
		||||
  if((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_ENABLE_IT();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Configure event mode */
 | 
			
		||||
  if((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_ENABLE_EVENT();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Configure the edge */
 | 
			
		||||
  if((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the Power Voltage Detector (PVD).
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnablePVD(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR2, PWR_CR2_PVDE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the Power Voltage Detector (PVD).
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisablePVD(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR2, PWR_CR2_PVDE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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 set the default polarity
 | 
			
		||||
  *         i.e. detection on high level (rising edge):
 | 
			
		||||
  *           @arg @ref PWR_WAKEUP_PIN1, PWR_WAKEUP_PIN2, PWR_WAKEUP_PIN3, PWR_WAKEUP_PIN4, PWR_WAKEUP_PIN5
 | 
			
		||||
  *
 | 
			
		||||
  *         or one of the following value where the user can explicitly specify the enabled pin and
 | 
			
		||||
  *         the chosen polarity:
 | 
			
		||||
  *           @arg @ref PWR_WAKEUP_PIN1_HIGH or PWR_WAKEUP_PIN1_LOW
 | 
			
		||||
  *           @arg @ref PWR_WAKEUP_PIN2_HIGH or PWR_WAKEUP_PIN2_LOW
 | 
			
		||||
  *           @arg @ref PWR_WAKEUP_PIN3_HIGH or PWR_WAKEUP_PIN3_LOW
 | 
			
		||||
  *           @arg @ref PWR_WAKEUP_PIN4_HIGH or PWR_WAKEUP_PIN4_LOW
 | 
			
		||||
  *           @arg @ref PWR_WAKEUP_PIN5_HIGH or PWR_WAKEUP_PIN5_LOW
 | 
			
		||||
  * @note  PWR_WAKEUP_PINx and PWR_WAKEUP_PINx_HIGH are equivalent.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinPolarity)
 | 
			
		||||
{
 | 
			
		||||
  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinPolarity));
 | 
			
		||||
 | 
			
		||||
  /* Specifies the Wake-Up pin polarity for the event detection
 | 
			
		||||
    (rising or falling edge) */
 | 
			
		||||
  MODIFY_REG(PWR->CR4, (PWR_CR3_EWUP & WakeUpPinPolarity), (WakeUpPinPolarity >> PWR_WUP_POLARITY_SHIFT));
 | 
			
		||||
 | 
			
		||||
  /* Enable wake-up pin */
 | 
			
		||||
  SET_BIT(PWR->CR3, (PWR_CR3_EWUP & 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 @ref PWR_WAKEUP_PIN1, PWR_WAKEUP_PIN2, PWR_WAKEUP_PIN3, PWR_WAKEUP_PIN4, PWR_WAKEUP_PIN5
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx)
 | 
			
		||||
{
 | 
			
		||||
  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));
 | 
			
		||||
 | 
			
		||||
  CLEAR_BIT(PWR->CR3, (PWR_CR3_EWUP & WakeUpPinx));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enter Sleep or Low-power Sleep mode.
 | 
			
		||||
  * @note  In Sleep/Low-power Sleep mode, all I/O pins keep the same state as in Run mode.
 | 
			
		||||
  * @param Regulator: Specifies the regulator state in Sleep/Low-power Sleep mode.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg @ref PWR_MAINREGULATOR_ON Sleep mode (regulator in main mode)
 | 
			
		||||
  *            @arg @ref PWR_LOWPOWERREGULATOR_ON Low-power Sleep mode (regulator in low-power mode)
 | 
			
		||||
  * @note  Low-power Sleep mode is entered from Low-power Run mode. Therefore, if not yet
 | 
			
		||||
  *        in Low-power Run mode before calling HAL_PWR_EnterSLEEPMode() with Regulator set
 | 
			
		||||
  *        to PWR_LOWPOWERREGULATOR_ON, the user can optionally configure the
 | 
			
		||||
  *        Flash in power-down monde in setting the SLEEP_PD bit in FLASH_ACR register.
 | 
			
		||||
  *        Additionally, the clock frequency must be reduced below 2 MHz.
 | 
			
		||||
  *        Setting SLEEP_PD in FLASH_ACR then appropriately reducing the clock frequency must
 | 
			
		||||
  *        be done before calling HAL_PWR_EnterSLEEPMode() API.
 | 
			
		||||
  * @note  When exiting Low-power Sleep mode, the MCU is in Low-power Run mode. To move in
 | 
			
		||||
  *        Run mode, the user must resort to HAL_PWREx_DisableLowPowerRunMode() API.
 | 
			
		||||
  * @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 or Low-power Sleep mode with WFI instruction
 | 
			
		||||
  *            @arg @ref PWR_SLEEPENTRY_WFE enter Sleep or Low-power Sleep mode with WFE instruction
 | 
			
		||||
  * @note  When WFI entry is used, tick interrupt have to be disabled if not desired as
 | 
			
		||||
  *        the interrupt wake up source.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_PWR_REGULATOR(Regulator));
 | 
			
		||||
  assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry));
 | 
			
		||||
 | 
			
		||||
  /* Set Regulator parameter */
 | 
			
		||||
  if (Regulator == PWR_MAINREGULATOR_ON)
 | 
			
		||||
  {
 | 
			
		||||
    /* If in low-power run mode at this point, exit it */
 | 
			
		||||
    if (HAL_IS_BIT_SET(PWR->SR2, PWR_SR2_REGLPF))
 | 
			
		||||
    {
 | 
			
		||||
      (void)HAL_PWREx_DisableLowPowerRunMode();
 | 
			
		||||
    }
 | 
			
		||||
    /* Regulator now in main mode. */
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /* If in run mode, first move to low-power run mode.
 | 
			
		||||
       The system clock frequency must be below 2 MHz at this point. */
 | 
			
		||||
    if (HAL_IS_BIT_SET(PWR->SR2, PWR_SR2_REGLPF) == 0U)
 | 
			
		||||
    {
 | 
			
		||||
      HAL_PWREx_EnableLowPowerRunMode();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* 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)
 | 
			
		||||
  {
 | 
			
		||||
    /* Request Wait For Interrupt */
 | 
			
		||||
    __WFI();
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /* Request Wait For Event */
 | 
			
		||||
    __SEV();
 | 
			
		||||
    __WFE();
 | 
			
		||||
    __WFE();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enter Stop mode
 | 
			
		||||
  * @note  This API is named HAL_PWR_EnterSTOPMode to ensure compatibility with legacy code running
 | 
			
		||||
  *        on devices where only "Stop mode" is mentioned with main or low power regulator ON.
 | 
			
		||||
  * @note  In Stop mode, all I/O pins keep the same state as in Run mode.
 | 
			
		||||
  * @note  All clocks in the VCORE domain are stopped; the PLL,
 | 
			
		||||
  *        the HSI and the HSE oscillators are disabled. Some peripherals with the wakeup capability
 | 
			
		||||
  *        (I2Cx, USARTx and LPUART) can switch on the HSI to receive a frame, and switch off the HSI
 | 
			
		||||
  *        after receiving the frame if it is not a wakeup frame. In this case, the HSI clock is propagated
 | 
			
		||||
  *        only to the peripheral requesting it.
 | 
			
		||||
  *        SRAM1, SRAM2 and register contents are preserved.
 | 
			
		||||
  *        The BOR is available.
 | 
			
		||||
  *        The voltage regulator can be configured either in normal (Stop 0) or low-power mode (Stop 1).
 | 
			
		||||
  * @note  When exiting Stop 0 or Stop 1 mode by issuing an interrupt or a wakeup event,
 | 
			
		||||
  *         the HSI RC oscillator is selected as system clock.
 | 
			
		||||
  * @note  When the voltage regulator operates in low power mode (Stop 1), an additional
 | 
			
		||||
  *         startup delay is incurred when waking up.
 | 
			
		||||
  *         By keeping the internal regulator ON during Stop mode (Stop 0), the consumption
 | 
			
		||||
  *         is higher although the startup time is reduced.
 | 
			
		||||
  * @param Regulator: Specifies the regulator state in Stop mode.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg @ref PWR_MAINREGULATOR_ON  Stop 0 mode (main regulator ON)
 | 
			
		||||
  *            @arg @ref PWR_LOWPOWERREGULATOR_ON  Stop 1 mode (low power regulator ON)
 | 
			
		||||
  * @param STOPEntry: Specifies Stop 0 or Stop 1 mode is entered with WFI or WFE instruction.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg @ref PWR_STOPENTRY_WFI  Enter Stop 0 or Stop 1 mode with WFI instruction.
 | 
			
		||||
  *            @arg @ref PWR_STOPENTRY_WFE  Enter Stop 0 or Stop 1 mode with WFE instruction.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_PWR_REGULATOR(Regulator));
 | 
			
		||||
 | 
			
		||||
  if(Regulator == PWR_LOWPOWERREGULATOR_ON)
 | 
			
		||||
  {
 | 
			
		||||
    HAL_PWREx_EnterSTOP1Mode(STOPEntry);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    HAL_PWREx_EnterSTOP0Mode(STOPEntry);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enter Standby mode.
 | 
			
		||||
  * @note  In Standby mode, the PLL, the HSI and the HSE oscillators are switched
 | 
			
		||||
  *        off. The voltage regulator is disabled, except when SRAM2 content is preserved
 | 
			
		||||
  *        in which case the regulator is in low-power mode.
 | 
			
		||||
  *        SRAM1 and register contents are lost except for registers in the Backup domain and
 | 
			
		||||
  *        Standby circuitry. SRAM2 content can be preserved if the bit RRS is set in PWR_CR3 register.
 | 
			
		||||
  *        To enable this feature, the user can resort to HAL_PWREx_EnableSRAM2ContentRetention() API
 | 
			
		||||
  *        to set RRS bit.
 | 
			
		||||
  *        The BOR is available.
 | 
			
		||||
  * @note  The I/Os can be configured either with a pull-up or pull-down or can be kept in analog state.
 | 
			
		||||
  *        HAL_PWREx_EnableGPIOPullUp() and HAL_PWREx_EnableGPIOPullDown() respectively enable Pull Up and
 | 
			
		||||
  *        Pull Down state, HAL_PWREx_DisableGPIOPullUp() and HAL_PWREx_DisableGPIOPullDown() disable the
 | 
			
		||||
  *        same.
 | 
			
		||||
  *        These states are effective in Standby mode only if APC bit is set through
 | 
			
		||||
  *        HAL_PWREx_EnablePullUpPullDownConfig() API.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnterSTANDBYMode(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set Stand-by mode */
 | 
			
		||||
  MODIFY_REG(PWR->CR1, PWR_CR1_LPMS, PWR_CR1_LPMS_STANDBY);
 | 
			
		||||
 | 
			
		||||
  /* Set SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
 | 
			
		||||
 | 
			
		||||
/* This option is used to ensure that store operations are completed */
 | 
			
		||||
#if defined ( __CC_ARM)
 | 
			
		||||
  __force_stores();
 | 
			
		||||
#endif
 | 
			
		||||
  /* Request Wait For Interrupt */
 | 
			
		||||
  __WFI();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Indicate Sleep-On-Exit 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 System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable Sleep-On-Exit feature when returning from Handler mode to Thread mode.
 | 
			
		||||
  * @note Clear 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 System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable CORTEX M4 SEVONPEND bit.
 | 
			
		||||
  * @note Set SEVONPEND bit of SCR register. When this bit is set, this causes
 | 
			
		||||
  *       WFE to wake up when an interrupt moves from inactive to pended.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnableSEVOnPend(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SEVONPEND bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable CORTEX M4 SEVONPEND bit.
 | 
			
		||||
  * @note Clear SEVONPEND bit of SCR register. When this bit is set, this causes
 | 
			
		||||
  *       WFE to wake up when an interrupt moves from inactive to pended.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisableSEVOnPend(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SEVONPEND bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @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
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_PWR_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1182
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_pwr_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1182
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_pwr_ex.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1400
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1400
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1866
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1866
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc_ex.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										8122
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8122
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3682
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3682
									
								
								exp6/Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim_ex.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										619
									
								
								exp6/MDK-ARM/exp6.uvprojx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										619
									
								
								exp6/MDK-ARM/exp6.uvprojx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,619 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
 | 
			
		||||
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
 | 
			
		||||
 | 
			
		||||
  <SchemaVersion>2.1</SchemaVersion>
 | 
			
		||||
 | 
			
		||||
  <Header>### uVision Project, (C) Keil Software</Header>
 | 
			
		||||
 | 
			
		||||
  <Targets>
 | 
			
		||||
    <Target>
 | 
			
		||||
      <TargetName>exp6</TargetName>
 | 
			
		||||
      <ToolsetNumber>0x4</ToolsetNumber>
 | 
			
		||||
      <ToolsetName>ARM-ADS</ToolsetName>
 | 
			
		||||
      <pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
 | 
			
		||||
      <uAC6>1</uAC6>
 | 
			
		||||
      <TargetOption>
 | 
			
		||||
        <TargetCommonOption>
 | 
			
		||||
          <Device>STM32G473RCTx</Device>
 | 
			
		||||
          <Vendor>STMicroelectronics</Vendor>
 | 
			
		||||
          <PackID>Keil.STM32G4xx_DFP.1.5.0</PackID>
 | 
			
		||||
          <PackURL>https://www.keil.com/pack/</PackURL>
 | 
			
		||||
          <Cpu>IRAM(0x20000000-0x2001FFFF) IROM(0x8000000-0x803FFFF) CLOCK(8000000) FPU2 CPUTYPE("Cortex-M4") TZ</Cpu>
 | 
			
		||||
          <FlashUtilSpec></FlashUtilSpec>
 | 
			
		||||
          <StartupFile></StartupFile>
 | 
			
		||||
          <FlashDriverDll></FlashDriverDll>
 | 
			
		||||
          <DeviceId>0</DeviceId>
 | 
			
		||||
          <RegisterFile></RegisterFile>
 | 
			
		||||
          <MemoryEnv></MemoryEnv>
 | 
			
		||||
          <Cmp></Cmp>
 | 
			
		||||
          <Asm></Asm>
 | 
			
		||||
          <Linker></Linker>
 | 
			
		||||
          <OHString></OHString>
 | 
			
		||||
          <InfinionOptionDll></InfinionOptionDll>
 | 
			
		||||
          <SLE66CMisc></SLE66CMisc>
 | 
			
		||||
          <SLE66AMisc></SLE66AMisc>
 | 
			
		||||
          <SLE66LinkerMisc></SLE66LinkerMisc>
 | 
			
		||||
          <SFDFile>$$Device:STM32G473RCTx$CMSIS\SVD\STM32G473xx.svd</SFDFile>
 | 
			
		||||
          <bCustSvd>0</bCustSvd>
 | 
			
		||||
          <UseEnv>0</UseEnv>
 | 
			
		||||
          <BinPath></BinPath>
 | 
			
		||||
          <IncludePath></IncludePath>
 | 
			
		||||
          <LibPath></LibPath>
 | 
			
		||||
          <RegisterFilePath></RegisterFilePath>
 | 
			
		||||
          <DBRegisterFilePath></DBRegisterFilePath>
 | 
			
		||||
          <TargetStatus>
 | 
			
		||||
            <Error>0</Error>
 | 
			
		||||
            <ExitCodeStop>0</ExitCodeStop>
 | 
			
		||||
            <ButtonStop>0</ButtonStop>
 | 
			
		||||
            <NotGenerated>0</NotGenerated>
 | 
			
		||||
            <InvalidFlash>1</InvalidFlash>
 | 
			
		||||
          </TargetStatus>
 | 
			
		||||
          <OutputDirectory>exp2\</OutputDirectory>
 | 
			
		||||
          <OutputName>exp2</OutputName>
 | 
			
		||||
          <CreateExecutable>1</CreateExecutable>
 | 
			
		||||
          <CreateLib>0</CreateLib>
 | 
			
		||||
          <CreateHexFile>1</CreateHexFile>
 | 
			
		||||
          <DebugInformation>1</DebugInformation>
 | 
			
		||||
          <BrowseInformation>1</BrowseInformation>
 | 
			
		||||
          <ListingPath></ListingPath>
 | 
			
		||||
          <HexFormatSelection>1</HexFormatSelection>
 | 
			
		||||
          <Merge32K>0</Merge32K>
 | 
			
		||||
          <CreateBatchFile>0</CreateBatchFile>
 | 
			
		||||
          <BeforeCompile>
 | 
			
		||||
            <RunUserProg1>0</RunUserProg1>
 | 
			
		||||
            <RunUserProg2>0</RunUserProg2>
 | 
			
		||||
            <UserProg1Name></UserProg1Name>
 | 
			
		||||
            <UserProg2Name></UserProg2Name>
 | 
			
		||||
            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
 | 
			
		||||
            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
 | 
			
		||||
            <nStopU1X>0</nStopU1X>
 | 
			
		||||
            <nStopU2X>0</nStopU2X>
 | 
			
		||||
          </BeforeCompile>
 | 
			
		||||
          <BeforeMake>
 | 
			
		||||
            <RunUserProg1>0</RunUserProg1>
 | 
			
		||||
            <RunUserProg2>0</RunUserProg2>
 | 
			
		||||
            <UserProg1Name></UserProg1Name>
 | 
			
		||||
            <UserProg2Name></UserProg2Name>
 | 
			
		||||
            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
 | 
			
		||||
            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
 | 
			
		||||
            <nStopB1X>0</nStopB1X>
 | 
			
		||||
            <nStopB2X>0</nStopB2X>
 | 
			
		||||
          </BeforeMake>
 | 
			
		||||
          <AfterMake>
 | 
			
		||||
            <RunUserProg1>0</RunUserProg1>
 | 
			
		||||
            <RunUserProg2>1</RunUserProg2>
 | 
			
		||||
            <UserProg1Name></UserProg1Name>
 | 
			
		||||
            <UserProg2Name></UserProg2Name>
 | 
			
		||||
            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
 | 
			
		||||
            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
 | 
			
		||||
            <nStopA1X>0</nStopA1X>
 | 
			
		||||
            <nStopA2X>0</nStopA2X>
 | 
			
		||||
          </AfterMake>
 | 
			
		||||
          <SelectedForBatchBuild>1</SelectedForBatchBuild>
 | 
			
		||||
          <SVCSIdString></SVCSIdString>
 | 
			
		||||
        </TargetCommonOption>
 | 
			
		||||
        <CommonProperty>
 | 
			
		||||
          <UseCPPCompiler>0</UseCPPCompiler>
 | 
			
		||||
          <RVCTCodeConst>0</RVCTCodeConst>
 | 
			
		||||
          <RVCTZI>0</RVCTZI>
 | 
			
		||||
          <RVCTOtherData>0</RVCTOtherData>
 | 
			
		||||
          <ModuleSelection>0</ModuleSelection>
 | 
			
		||||
          <IncludeInBuild>1</IncludeInBuild>
 | 
			
		||||
          <AlwaysBuild>0</AlwaysBuild>
 | 
			
		||||
          <GenerateAssemblyFile>0</GenerateAssemblyFile>
 | 
			
		||||
          <AssembleAssemblyFile>0</AssembleAssemblyFile>
 | 
			
		||||
          <PublicsOnly>0</PublicsOnly>
 | 
			
		||||
          <StopOnExitCode>3</StopOnExitCode>
 | 
			
		||||
          <CustomArgument></CustomArgument>
 | 
			
		||||
          <IncludeLibraryModules></IncludeLibraryModules>
 | 
			
		||||
          <ComprImg>0</ComprImg>
 | 
			
		||||
        </CommonProperty>
 | 
			
		||||
        <DllOption>
 | 
			
		||||
          <SimDllName>SARMCM3.DLL</SimDllName>
 | 
			
		||||
          <SimDllArguments>-REMAP -MPU</SimDllArguments>
 | 
			
		||||
          <SimDlgDll>DCM.DLL</SimDlgDll>
 | 
			
		||||
          <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
 | 
			
		||||
          <TargetDllName>SARMCM3.DLL</TargetDllName>
 | 
			
		||||
          <TargetDllArguments>-MPU</TargetDllArguments>
 | 
			
		||||
          <TargetDlgDll>TCM.DLL</TargetDlgDll>
 | 
			
		||||
          <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
 | 
			
		||||
        </DllOption>
 | 
			
		||||
        <DebugOption>
 | 
			
		||||
          <OPTHX>
 | 
			
		||||
            <HexSelection>1</HexSelection>
 | 
			
		||||
            <HexRangeLowAddress>0</HexRangeLowAddress>
 | 
			
		||||
            <HexRangeHighAddress>0</HexRangeHighAddress>
 | 
			
		||||
            <HexOffset>0</HexOffset>
 | 
			
		||||
            <Oh166RecLen>16</Oh166RecLen>
 | 
			
		||||
          </OPTHX>
 | 
			
		||||
        </DebugOption>
 | 
			
		||||
        <Utilities>
 | 
			
		||||
          <Flash1>
 | 
			
		||||
            <UseTargetDll>1</UseTargetDll>
 | 
			
		||||
            <UseExternalTool>0</UseExternalTool>
 | 
			
		||||
            <RunIndependent>0</RunIndependent>
 | 
			
		||||
            <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
 | 
			
		||||
            <Capability>1</Capability>
 | 
			
		||||
            <DriverSelection>4101</DriverSelection>
 | 
			
		||||
          </Flash1>
 | 
			
		||||
          <bUseTDR>1</bUseTDR>
 | 
			
		||||
          <Flash2>BIN\UL2CM3.DLL</Flash2>
 | 
			
		||||
          <Flash3></Flash3>
 | 
			
		||||
          <Flash4></Flash4>
 | 
			
		||||
          <pFcarmOut></pFcarmOut>
 | 
			
		||||
          <pFcarmGrp></pFcarmGrp>
 | 
			
		||||
          <pFcArmRoot></pFcArmRoot>
 | 
			
		||||
          <FcArmLst>0</FcArmLst>
 | 
			
		||||
        </Utilities>
 | 
			
		||||
        <TargetArmAds>
 | 
			
		||||
          <ArmAdsMisc>
 | 
			
		||||
            <GenerateListings>0</GenerateListings>
 | 
			
		||||
            <asHll>1</asHll>
 | 
			
		||||
            <asAsm>1</asAsm>
 | 
			
		||||
            <asMacX>1</asMacX>
 | 
			
		||||
            <asSyms>1</asSyms>
 | 
			
		||||
            <asFals>1</asFals>
 | 
			
		||||
            <asDbgD>1</asDbgD>
 | 
			
		||||
            <asForm>1</asForm>
 | 
			
		||||
            <ldLst>0</ldLst>
 | 
			
		||||
            <ldmm>1</ldmm>
 | 
			
		||||
            <ldXref>1</ldXref>
 | 
			
		||||
            <BigEnd>0</BigEnd>
 | 
			
		||||
            <AdsALst>1</AdsALst>
 | 
			
		||||
            <AdsACrf>1</AdsACrf>
 | 
			
		||||
            <AdsANop>0</AdsANop>
 | 
			
		||||
            <AdsANot>0</AdsANot>
 | 
			
		||||
            <AdsLLst>1</AdsLLst>
 | 
			
		||||
            <AdsLmap>1</AdsLmap>
 | 
			
		||||
            <AdsLcgr>1</AdsLcgr>
 | 
			
		||||
            <AdsLsym>1</AdsLsym>
 | 
			
		||||
            <AdsLszi>1</AdsLszi>
 | 
			
		||||
            <AdsLtoi>1</AdsLtoi>
 | 
			
		||||
            <AdsLsun>1</AdsLsun>
 | 
			
		||||
            <AdsLven>1</AdsLven>
 | 
			
		||||
            <AdsLsxf>1</AdsLsxf>
 | 
			
		||||
            <RvctClst>0</RvctClst>
 | 
			
		||||
            <GenPPlst>0</GenPPlst>
 | 
			
		||||
            <AdsCpuType>"Cortex-M4"</AdsCpuType>
 | 
			
		||||
            <RvctDeviceName></RvctDeviceName>
 | 
			
		||||
            <mOS>0</mOS>
 | 
			
		||||
            <uocRom>0</uocRom>
 | 
			
		||||
            <uocRam>0</uocRam>
 | 
			
		||||
            <hadIROM>1</hadIROM>
 | 
			
		||||
            <hadIRAM>1</hadIRAM>
 | 
			
		||||
            <hadXRAM>0</hadXRAM>
 | 
			
		||||
            <uocXRam>0</uocXRam>
 | 
			
		||||
            <RvdsVP>2</RvdsVP>
 | 
			
		||||
            <RvdsMve>0</RvdsMve>
 | 
			
		||||
            <RvdsCdeCp>0</RvdsCdeCp>
 | 
			
		||||
            <hadIRAM2>0</hadIRAM2>
 | 
			
		||||
            <hadIROM2>0</hadIROM2>
 | 
			
		||||
            <StupSel>8</StupSel>
 | 
			
		||||
            <useUlib>0</useUlib>
 | 
			
		||||
            <EndSel>0</EndSel>
 | 
			
		||||
            <uLtcg>0</uLtcg>
 | 
			
		||||
            <nSecure>0</nSecure>
 | 
			
		||||
            <RoSelD>3</RoSelD>
 | 
			
		||||
            <RwSelD>4</RwSelD>
 | 
			
		||||
            <CodeSel>0</CodeSel>
 | 
			
		||||
            <OptFeed>0</OptFeed>
 | 
			
		||||
            <NoZi1>0</NoZi1>
 | 
			
		||||
            <NoZi2>0</NoZi2>
 | 
			
		||||
            <NoZi3>0</NoZi3>
 | 
			
		||||
            <NoZi4>0</NoZi4>
 | 
			
		||||
            <NoZi5>0</NoZi5>
 | 
			
		||||
            <Ro1Chk>0</Ro1Chk>
 | 
			
		||||
            <Ro2Chk>0</Ro2Chk>
 | 
			
		||||
            <Ro3Chk>0</Ro3Chk>
 | 
			
		||||
            <Ir1Chk>1</Ir1Chk>
 | 
			
		||||
            <Ir2Chk>0</Ir2Chk>
 | 
			
		||||
            <Ra1Chk>0</Ra1Chk>
 | 
			
		||||
            <Ra2Chk>0</Ra2Chk>
 | 
			
		||||
            <Ra3Chk>0</Ra3Chk>
 | 
			
		||||
            <Im1Chk>1</Im1Chk>
 | 
			
		||||
            <Im2Chk>0</Im2Chk>
 | 
			
		||||
            <OnChipMemories>
 | 
			
		||||
              <Ocm1>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </Ocm1>
 | 
			
		||||
              <Ocm2>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </Ocm2>
 | 
			
		||||
              <Ocm3>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </Ocm3>
 | 
			
		||||
              <Ocm4>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </Ocm4>
 | 
			
		||||
              <Ocm5>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </Ocm5>
 | 
			
		||||
              <Ocm6>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </Ocm6>
 | 
			
		||||
              <IRAM>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x20000000</StartAddress>
 | 
			
		||||
                <Size>0x20000</Size>
 | 
			
		||||
              </IRAM>
 | 
			
		||||
              <IROM>
 | 
			
		||||
                <Type>1</Type>
 | 
			
		||||
                <StartAddress>0x8000000</StartAddress>
 | 
			
		||||
                <Size>0x40000</Size>
 | 
			
		||||
              </IROM>
 | 
			
		||||
              <XRAM>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </XRAM>
 | 
			
		||||
              <OCR_RVCT1>
 | 
			
		||||
                <Type>1</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </OCR_RVCT1>
 | 
			
		||||
              <OCR_RVCT2>
 | 
			
		||||
                <Type>1</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </OCR_RVCT2>
 | 
			
		||||
              <OCR_RVCT3>
 | 
			
		||||
                <Type>1</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </OCR_RVCT3>
 | 
			
		||||
              <OCR_RVCT4>
 | 
			
		||||
                <Type>1</Type>
 | 
			
		||||
                <StartAddress>0x8000000</StartAddress>
 | 
			
		||||
                <Size>0x40000</Size>
 | 
			
		||||
              </OCR_RVCT4>
 | 
			
		||||
              <OCR_RVCT5>
 | 
			
		||||
                <Type>1</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </OCR_RVCT5>
 | 
			
		||||
              <OCR_RVCT6>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </OCR_RVCT6>
 | 
			
		||||
              <OCR_RVCT7>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </OCR_RVCT7>
 | 
			
		||||
              <OCR_RVCT8>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </OCR_RVCT8>
 | 
			
		||||
              <OCR_RVCT9>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x20000000</StartAddress>
 | 
			
		||||
                <Size>0x20000</Size>
 | 
			
		||||
              </OCR_RVCT9>
 | 
			
		||||
              <OCR_RVCT10>
 | 
			
		||||
                <Type>0</Type>
 | 
			
		||||
                <StartAddress>0x0</StartAddress>
 | 
			
		||||
                <Size>0x0</Size>
 | 
			
		||||
              </OCR_RVCT10>
 | 
			
		||||
            </OnChipMemories>
 | 
			
		||||
            <RvctStartVector></RvctStartVector>
 | 
			
		||||
          </ArmAdsMisc>
 | 
			
		||||
          <Cads>
 | 
			
		||||
            <interw>1</interw>
 | 
			
		||||
            <Optim>1</Optim>
 | 
			
		||||
            <oTime>0</oTime>
 | 
			
		||||
            <SplitLS>0</SplitLS>
 | 
			
		||||
            <OneElfS>1</OneElfS>
 | 
			
		||||
            <Strict>0</Strict>
 | 
			
		||||
            <EnumInt>0</EnumInt>
 | 
			
		||||
            <PlainCh>0</PlainCh>
 | 
			
		||||
            <Ropi>0</Ropi>
 | 
			
		||||
            <Rwpi>0</Rwpi>
 | 
			
		||||
            <wLevel>3</wLevel>
 | 
			
		||||
            <uThumb>0</uThumb>
 | 
			
		||||
            <uSurpInc>0</uSurpInc>
 | 
			
		||||
            <uC99>1</uC99>
 | 
			
		||||
            <uGnu>0</uGnu>
 | 
			
		||||
            <useXO>0</useXO>
 | 
			
		||||
            <v6Lang>3</v6Lang>
 | 
			
		||||
            <v6LangP>3</v6LangP>
 | 
			
		||||
            <vShortEn>1</vShortEn>
 | 
			
		||||
            <vShortWch>1</vShortWch>
 | 
			
		||||
            <v6Lto>0</v6Lto>
 | 
			
		||||
            <v6WtE>0</v6WtE>
 | 
			
		||||
            <v6Rtti>0</v6Rtti>
 | 
			
		||||
            <VariousControls>
 | 
			
		||||
              <MiscControls></MiscControls>
 | 
			
		||||
              <Define>USE_HAL_DRIVER,STM32G473xx</Define>
 | 
			
		||||
              <Undefine></Undefine>
 | 
			
		||||
              <IncludePath>../Core/Inc;../Drivers/STM32G4xx_HAL_Driver/Inc;../Drivers/STM32G4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32G4xx/Include;../Drivers/CMSIS/Include</IncludePath>
 | 
			
		||||
            </VariousControls>
 | 
			
		||||
          </Cads>
 | 
			
		||||
          <Aads>
 | 
			
		||||
            <interw>1</interw>
 | 
			
		||||
            <Ropi>0</Ropi>
 | 
			
		||||
            <Rwpi>0</Rwpi>
 | 
			
		||||
            <thumb>0</thumb>
 | 
			
		||||
            <SplitLS>0</SplitLS>
 | 
			
		||||
            <SwStkChk>0</SwStkChk>
 | 
			
		||||
            <NoWarn>0</NoWarn>
 | 
			
		||||
            <uSurpInc>0</uSurpInc>
 | 
			
		||||
            <useXO>0</useXO>
 | 
			
		||||
            <ClangAsOpt>1</ClangAsOpt>
 | 
			
		||||
            <VariousControls>
 | 
			
		||||
              <MiscControls></MiscControls>
 | 
			
		||||
              <Define></Define>
 | 
			
		||||
              <Undefine></Undefine>
 | 
			
		||||
              <IncludePath></IncludePath>
 | 
			
		||||
            </VariousControls>
 | 
			
		||||
          </Aads>
 | 
			
		||||
          <LDads>
 | 
			
		||||
            <umfTarg>1</umfTarg>
 | 
			
		||||
            <Ropi>0</Ropi>
 | 
			
		||||
            <Rwpi>0</Rwpi>
 | 
			
		||||
            <noStLib>0</noStLib>
 | 
			
		||||
            <RepFail>1</RepFail>
 | 
			
		||||
            <useFile>0</useFile>
 | 
			
		||||
            <TextAddressRange></TextAddressRange>
 | 
			
		||||
            <DataAddressRange></DataAddressRange>
 | 
			
		||||
            <pXoBase></pXoBase>
 | 
			
		||||
            <ScatterFile></ScatterFile>
 | 
			
		||||
            <IncludeLibs></IncludeLibs>
 | 
			
		||||
            <IncludeLibsPath></IncludeLibsPath>
 | 
			
		||||
            <Misc></Misc>
 | 
			
		||||
            <LinkerInputFile></LinkerInputFile>
 | 
			
		||||
            <DisabledWarnings></DisabledWarnings>
 | 
			
		||||
          </LDads>
 | 
			
		||||
        </TargetArmAds>
 | 
			
		||||
      </TargetOption>
 | 
			
		||||
      <Groups>
 | 
			
		||||
        <Group>
 | 
			
		||||
          <GroupName>Application/MDK-ARM</GroupName>
 | 
			
		||||
          <Files>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>startup_stm32g473xx.s</FileName>
 | 
			
		||||
              <FileType>2</FileType>
 | 
			
		||||
              <FilePath>startup_stm32g473xx.s</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
          </Files>
 | 
			
		||||
        </Group>
 | 
			
		||||
        <Group>
 | 
			
		||||
          <GroupName>Application/User/Core</GroupName>
 | 
			
		||||
          <Files>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>variable.h</FileName>
 | 
			
		||||
              <FileType>5</FileType>
 | 
			
		||||
              <FilePath>..\Core\Inc\variable.h</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>DirectKey.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>..\Core\Src\DirectKey.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>directkey.h</FileName>
 | 
			
		||||
              <FileType>5</FileType>
 | 
			
		||||
              <FilePath>..\Core\Inc\directkey.h</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>MatrixKey.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>..\Core\Src\MatrixKey.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>MatrixKey.h</FileName>
 | 
			
		||||
              <FileType>5</FileType>
 | 
			
		||||
              <FilePath>..\Core\Inc\MatrixKey.h</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>SegLed.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>..\Core\Src\SegLed.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>SegLed.h</FileName>
 | 
			
		||||
              <FileType>5</FileType>
 | 
			
		||||
              <FilePath>..\Core\Inc\SegLed.h</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>main.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Core/Src/main.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>gpio.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Core/Src/gpio.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>tim.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Core/Src/tim.c</FilePath>
 | 
			
		||||
              <FileOption>
 | 
			
		||||
                <CommonProperty>
 | 
			
		||||
                  <UseCPPCompiler>2</UseCPPCompiler>
 | 
			
		||||
                  <RVCTCodeConst>0</RVCTCodeConst>
 | 
			
		||||
                  <RVCTZI>0</RVCTZI>
 | 
			
		||||
                  <RVCTOtherData>0</RVCTOtherData>
 | 
			
		||||
                  <ModuleSelection>0</ModuleSelection>
 | 
			
		||||
                  <IncludeInBuild>1</IncludeInBuild>
 | 
			
		||||
                  <AlwaysBuild>2</AlwaysBuild>
 | 
			
		||||
                  <GenerateAssemblyFile>2</GenerateAssemblyFile>
 | 
			
		||||
                  <AssembleAssemblyFile>2</AssembleAssemblyFile>
 | 
			
		||||
                  <PublicsOnly>2</PublicsOnly>
 | 
			
		||||
                  <StopOnExitCode>11</StopOnExitCode>
 | 
			
		||||
                  <CustomArgument></CustomArgument>
 | 
			
		||||
                  <IncludeLibraryModules></IncludeLibraryModules>
 | 
			
		||||
                  <ComprImg>1</ComprImg>
 | 
			
		||||
                </CommonProperty>
 | 
			
		||||
                <FileArmAds>
 | 
			
		||||
                  <Cads>
 | 
			
		||||
                    <interw>2</interw>
 | 
			
		||||
                    <Optim>0</Optim>
 | 
			
		||||
                    <oTime>2</oTime>
 | 
			
		||||
                    <SplitLS>2</SplitLS>
 | 
			
		||||
                    <OneElfS>2</OneElfS>
 | 
			
		||||
                    <Strict>2</Strict>
 | 
			
		||||
                    <EnumInt>2</EnumInt>
 | 
			
		||||
                    <PlainCh>2</PlainCh>
 | 
			
		||||
                    <Ropi>2</Ropi>
 | 
			
		||||
                    <Rwpi>2</Rwpi>
 | 
			
		||||
                    <wLevel>0</wLevel>
 | 
			
		||||
                    <uThumb>2</uThumb>
 | 
			
		||||
                    <uSurpInc>2</uSurpInc>
 | 
			
		||||
                    <uC99>2</uC99>
 | 
			
		||||
                    <uGnu>2</uGnu>
 | 
			
		||||
                    <useXO>2</useXO>
 | 
			
		||||
                    <v6Lang>0</v6Lang>
 | 
			
		||||
                    <v6LangP>0</v6LangP>
 | 
			
		||||
                    <vShortEn>2</vShortEn>
 | 
			
		||||
                    <vShortWch>2</vShortWch>
 | 
			
		||||
                    <v6Lto>2</v6Lto>
 | 
			
		||||
                    <v6WtE>2</v6WtE>
 | 
			
		||||
                    <v6Rtti>2</v6Rtti>
 | 
			
		||||
                    <VariousControls>
 | 
			
		||||
                      <MiscControls></MiscControls>
 | 
			
		||||
                      <Define></Define>
 | 
			
		||||
                      <Undefine></Undefine>
 | 
			
		||||
                      <IncludePath></IncludePath>
 | 
			
		||||
                    </VariousControls>
 | 
			
		||||
                  </Cads>
 | 
			
		||||
                </FileArmAds>
 | 
			
		||||
              </FileOption>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_it.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Core/Src/stm32g4xx_it.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_msp.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Core/Src/stm32g4xx_hal_msp.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
          </Files>
 | 
			
		||||
        </Group>
 | 
			
		||||
        <Group>
 | 
			
		||||
          <GroupName>Drivers/STM32G4xx_HAL_Driver</GroupName>
 | 
			
		||||
          <Files>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_tim.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_tim_ex.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim_ex.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_pwr_ex.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_pwr_ex.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_rcc.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_rcc_ex.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc_ex.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_flash.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_flash.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_flash_ex.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_flash_ex.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_flash_ramfunc.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_flash_ramfunc.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_gpio.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_gpio.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_exti.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_exti.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_dma.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_dma.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_dma_ex.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_dma_ex.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_pwr.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_pwr.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>stm32g4xx_hal_cortex.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_cortex.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
          </Files>
 | 
			
		||||
        </Group>
 | 
			
		||||
        <Group>
 | 
			
		||||
          <GroupName>Drivers/CMSIS</GroupName>
 | 
			
		||||
          <Files>
 | 
			
		||||
            <File>
 | 
			
		||||
              <FileName>system_stm32g4xx.c</FileName>
 | 
			
		||||
              <FileType>1</FileType>
 | 
			
		||||
              <FilePath>../Core/Src/system_stm32g4xx.c</FilePath>
 | 
			
		||||
            </File>
 | 
			
		||||
          </Files>
 | 
			
		||||
        </Group>
 | 
			
		||||
        <Group>
 | 
			
		||||
          <GroupName>::CMSIS</GroupName>
 | 
			
		||||
        </Group>
 | 
			
		||||
      </Groups>
 | 
			
		||||
    </Target>
 | 
			
		||||
  </Targets>
 | 
			
		||||
 | 
			
		||||
  <RTE>
 | 
			
		||||
    <apis/>
 | 
			
		||||
    <components>
 | 
			
		||||
      <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.6.0" condition="ARMv6_7_8-M Device">
 | 
			
		||||
        <package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
 | 
			
		||||
        <targetInfos>
 | 
			
		||||
          <targetInfo name="exp6"/>
 | 
			
		||||
        </targetInfos>
 | 
			
		||||
      </component>
 | 
			
		||||
    </components>
 | 
			
		||||
    <files/>
 | 
			
		||||
  </RTE>
 | 
			
		||||
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										469
									
								
								exp6/MDK-ARM/startup_stm32g473xx.s
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										469
									
								
								exp6/MDK-ARM/startup_stm32g473xx.s
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,469 @@
 | 
			
		||||
;*******************************************************************************
 | 
			
		||||
;* @File Name          : startup_stm32g473xx.s
 | 
			
		||||
;* @Author             : MCD Application Team
 | 
			
		||||
;* @Brief              : Vector table for MDK-ARM toolchain
 | 
			
		||||
;*******************************************************************************
 | 
			
		||||
;* Description        : STM32G473xx Mainstream devices vector table for
 | 
			
		||||
;*                      MDK-ARM toolchain.
 | 
			
		||||
;*                      This module performs:
 | 
			
		||||
;*                      - Set the initial SP
 | 
			
		||||
;*                      - Set the initial PC == Reset_Handler
 | 
			
		||||
;*                      - Set the vector table entries with the exceptions ISR address
 | 
			
		||||
;*                      - Branches to __main in the C library (which eventually
 | 
			
		||||
;*                        calls main()).
 | 
			
		||||
;*                      After Reset the Cortex-M4 processor is in Thread mode,
 | 
			
		||||
;*                      priority is Privileged, and the Stack is set to Main.
 | 
			
		||||
;********************************************************************************
 | 
			
		||||
;* @attention
 | 
			
		||||
;*
 | 
			
		||||
;* Copyright (c) 2019 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.
 | 
			
		||||
;
 | 
			
		||||
;*******************************************************************************
 | 
			
		||||
;* <<< Use Configuration Wizard in Context Menu >>>
 | 
			
		||||
;
 | 
			
		||||
; Amount of memory (in bytes) allocated for Stack
 | 
			
		||||
; Tailor this value to your application needs
 | 
			
		||||
; <h> Stack Configuration
 | 
			
		||||
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
; </h>
 | 
			
		||||
 | 
			
		||||
Stack_Size		EQU     0x400
 | 
			
		||||
 | 
			
		||||
                AREA    STACK, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
Stack_Mem       SPACE   Stack_Size
 | 
			
		||||
__initial_sp
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; <h> Heap Configuration
 | 
			
		||||
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
; </h>
 | 
			
		||||
 | 
			
		||||
Heap_Size      EQU     0x200
 | 
			
		||||
 | 
			
		||||
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__heap_base
 | 
			
		||||
Heap_Mem        SPACE   Heap_Size
 | 
			
		||||
__heap_limit
 | 
			
		||||
 | 
			
		||||
                PRESERVE8
 | 
			
		||||
                THUMB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Vector Table Mapped to Address 0 at Reset
 | 
			
		||||
                AREA    RESET, DATA, READONLY
 | 
			
		||||
                EXPORT  __Vectors
 | 
			
		||||
                EXPORT  __Vectors_End
 | 
			
		||||
                EXPORT  __Vectors_Size
 | 
			
		||||
 | 
			
		||||
__Vectors       DCD     __initial_sp               ; Top of Stack
 | 
			
		||||
                DCD     Reset_Handler              ; Reset Handler
 | 
			
		||||
                DCD     NMI_Handler                ; NMI Handler
 | 
			
		||||
                DCD     HardFault_Handler          ; Hard Fault Handler
 | 
			
		||||
                DCD     MemManage_Handler          ; MPU Fault Handler
 | 
			
		||||
                DCD     BusFault_Handler           ; Bus Fault Handler
 | 
			
		||||
                DCD     UsageFault_Handler         ; Usage Fault Handler
 | 
			
		||||
                DCD     0                          ; Reserved
 | 
			
		||||
                DCD     0                          ; Reserved
 | 
			
		||||
                DCD     0                          ; Reserved
 | 
			
		||||
                DCD     0                          ; Reserved
 | 
			
		||||
                DCD     SVC_Handler                ; SVCall Handler
 | 
			
		||||
                DCD     DebugMon_Handler           ; Debug Monitor Handler
 | 
			
		||||
                DCD     0                          ; Reserved
 | 
			
		||||
                DCD     PendSV_Handler             ; PendSV Handler
 | 
			
		||||
                DCD     SysTick_Handler            ; SysTick Handler
 | 
			
		||||
 | 
			
		||||
                ; External Interrupts
 | 
			
		||||
                DCD     WWDG_IRQHandler                   ; Window WatchDog
 | 
			
		||||
                DCD     PVD_PVM_IRQHandler                ; PVD/PVM1/PVM2/PVM3/PVM4 through EXTI Line detection
 | 
			
		||||
                DCD     RTC_TAMP_LSECSS_IRQHandler        ; RTC, TAMP and RCC LSE_CSS through the EXTI line
 | 
			
		||||
                DCD     RTC_WKUP_IRQHandler               ; RTC Wakeup through the EXTI line
 | 
			
		||||
                DCD     FLASH_IRQHandler                  ; FLASH
 | 
			
		||||
                DCD     RCC_IRQHandler                    ; RCC
 | 
			
		||||
                DCD     EXTI0_IRQHandler                  ; EXTI Line0
 | 
			
		||||
                DCD     EXTI1_IRQHandler                  ; EXTI Line1
 | 
			
		||||
                DCD     EXTI2_IRQHandler                  ; EXTI Line2
 | 
			
		||||
                DCD     EXTI3_IRQHandler                  ; EXTI Line3
 | 
			
		||||
                DCD     EXTI4_IRQHandler                  ; EXTI Line4
 | 
			
		||||
                DCD     DMA1_Channel1_IRQHandler          ; DMA1 Channel 1
 | 
			
		||||
                DCD     DMA1_Channel2_IRQHandler          ; DMA1 Channel 2
 | 
			
		||||
                DCD     DMA1_Channel3_IRQHandler          ; DMA1 Channel 3
 | 
			
		||||
                DCD     DMA1_Channel4_IRQHandler          ; DMA1 Channel 4
 | 
			
		||||
                DCD     DMA1_Channel5_IRQHandler          ; DMA1 Channel 5
 | 
			
		||||
                DCD     DMA1_Channel6_IRQHandler          ; DMA1 Channel 6
 | 
			
		||||
                DCD     DMA1_Channel7_IRQHandler          ; DMA1 Channel 7
 | 
			
		||||
                DCD     ADC1_2_IRQHandler                 ; ADC1 and ADC2
 | 
			
		||||
                DCD     USB_HP_IRQHandler                 ; USB Device High Priority
 | 
			
		||||
                DCD     USB_LP_IRQHandler                 ; USB Device Low Priority
 | 
			
		||||
                DCD     FDCAN1_IT0_IRQHandler             ; FDCAN1 interrupt line 0
 | 
			
		||||
                DCD     FDCAN1_IT1_IRQHandler             ; FDCAN1 interrupt line 1
 | 
			
		||||
                DCD     EXTI9_5_IRQHandler                ; External Line[9:5]s
 | 
			
		||||
                DCD     TIM1_BRK_TIM15_IRQHandler         ; TIM1 Break, Transition error, Index error and TIM15
 | 
			
		||||
                DCD     TIM1_UP_TIM16_IRQHandler          ; TIM1 Update and TIM16
 | 
			
		||||
                DCD     TIM1_TRG_COM_TIM17_IRQHandler     ; TIM1 Trigger, Commutation, Direction change, Index and TIM17
 | 
			
		||||
                DCD     TIM1_CC_IRQHandler                ; TIM1 Capture Compare
 | 
			
		||||
                DCD     TIM2_IRQHandler                   ; TIM2
 | 
			
		||||
                DCD     TIM3_IRQHandler                   ; TIM3
 | 
			
		||||
                DCD     TIM4_IRQHandler                   ; TIM4
 | 
			
		||||
                DCD     I2C1_EV_IRQHandler                ; I2C1 Event
 | 
			
		||||
                DCD     I2C1_ER_IRQHandler                ; I2C1 Error
 | 
			
		||||
                DCD     I2C2_EV_IRQHandler                ; I2C2 Event
 | 
			
		||||
                DCD     I2C2_ER_IRQHandler                ; I2C2 Error
 | 
			
		||||
                DCD     SPI1_IRQHandler                   ; SPI1
 | 
			
		||||
                DCD     SPI2_IRQHandler                   ; SPI2
 | 
			
		||||
                DCD     USART1_IRQHandler                 ; USART1
 | 
			
		||||
                DCD     USART2_IRQHandler                 ; USART2
 | 
			
		||||
                DCD     USART3_IRQHandler                 ; USART3
 | 
			
		||||
                DCD     EXTI15_10_IRQHandler              ; External Line[15:10]
 | 
			
		||||
                DCD     RTC_Alarm_IRQHandler              ; RTC Alarm (A and B) through EXTI Line
 | 
			
		||||
                DCD     USBWakeUp_IRQHandler              ; USB Wakeup through EXTI line
 | 
			
		||||
                DCD     TIM8_BRK_IRQHandler               ; TIM8 Break, Transition error and Index error Interrupt
 | 
			
		||||
                DCD     TIM8_UP_IRQHandler                ; TIM8 Update Interrupt
 | 
			
		||||
                DCD     TIM8_TRG_COM_IRQHandler           ; TIM8 Trigger, Commutation, Direction change and Index Interrupt
 | 
			
		||||
                DCD     TIM8_CC_IRQHandler                ; TIM8 Capture Compare Interrupt
 | 
			
		||||
                DCD     ADC3_IRQHandler                   ; ADC3
 | 
			
		||||
                DCD     FMC_IRQHandler                    ; FMC
 | 
			
		||||
                DCD     LPTIM1_IRQHandler                 ; LP TIM1 interrupt
 | 
			
		||||
                DCD     TIM5_IRQHandler                   ; TIM5
 | 
			
		||||
                DCD     SPI3_IRQHandler                   ; SPI3
 | 
			
		||||
                DCD     UART4_IRQHandler                  ; UART4
 | 
			
		||||
                DCD     UART5_IRQHandler                  ; UART5
 | 
			
		||||
                DCD     TIM6_DAC_IRQHandler               ; TIM6 and DAC1&3 underrun errors
 | 
			
		||||
                DCD     TIM7_DAC_IRQHandler               ; TIM7 and DAC2&4 underrun errors
 | 
			
		||||
                DCD     DMA2_Channel1_IRQHandler          ; DMA2 Channel 1
 | 
			
		||||
                DCD     DMA2_Channel2_IRQHandler          ; DMA2 Channel 2
 | 
			
		||||
                DCD     DMA2_Channel3_IRQHandler          ; DMA2 Channel 3
 | 
			
		||||
                DCD     DMA2_Channel4_IRQHandler          ; DMA2 Channel 4
 | 
			
		||||
                DCD     DMA2_Channel5_IRQHandler          ; DMA2 Channel 5
 | 
			
		||||
                DCD     ADC4_IRQHandler                   ; ADC4
 | 
			
		||||
                DCD     ADC5_IRQHandler                   ; ADC5
 | 
			
		||||
                DCD     UCPD1_IRQHandler                  ; UCPD1
 | 
			
		||||
                DCD     COMP1_2_3_IRQHandler              ; COMP1, COMP2 and COMP3
 | 
			
		||||
                DCD     COMP4_5_6_IRQHandler              ; COMP4, COMP5 and COMP6
 | 
			
		||||
                DCD     COMP7_IRQHandler                  ; COMP7
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     CRS_IRQHandler                    ; CRS Interrupt
 | 
			
		||||
                DCD     SAI1_IRQHandler                   ; Serial Audio Interface 1 global interrupt
 | 
			
		||||
                DCD     TIM20_BRK_IRQHandler              ; TIM20 Break, Transition error and Index error
 | 
			
		||||
                DCD     TIM20_UP_IRQHandler               ; TIM20 Update
 | 
			
		||||
                DCD     TIM20_TRG_COM_IRQHandler          ; TIM20 Trigger, Commutation, Direction change and Index
 | 
			
		||||
                DCD     TIM20_CC_IRQHandler               ; TIM20 Capture Compare
 | 
			
		||||
                DCD     FPU_IRQHandler                    ; FPU
 | 
			
		||||
                DCD     I2C4_EV_IRQHandler                ; I2C4 event
 | 
			
		||||
                DCD     I2C4_ER_IRQHandler                ; I2C4 error
 | 
			
		||||
                DCD     SPI4_IRQHandler                   ; SPI4
 | 
			
		||||
                DCD     0                                 ; Reserved
 | 
			
		||||
                DCD     FDCAN2_IT0_IRQHandler             ; FDCAN2 interrupt line 0
 | 
			
		||||
                DCD     FDCAN2_IT1_IRQHandler             ; FDCAN2 interrupt line 1
 | 
			
		||||
                DCD     FDCAN3_IT0_IRQHandler             ; FDCAN3 interrupt line 0
 | 
			
		||||
                DCD     FDCAN3_IT1_IRQHandler             ; FDCAN3 interrupt line 1
 | 
			
		||||
                DCD     RNG_IRQHandler                    ; RNG global interrupt
 | 
			
		||||
                DCD     LPUART1_IRQHandler                ; LP UART 1 interrupt
 | 
			
		||||
                DCD     I2C3_EV_IRQHandler                ; I2C3 Event
 | 
			
		||||
                DCD     I2C3_ER_IRQHandler                ; I2C3 Error
 | 
			
		||||
                DCD     DMAMUX_OVR_IRQHandler             ; DMAMUX overrun global interrupt
 | 
			
		||||
                DCD     QUADSPI_IRQHandler                ; QUADSPI
 | 
			
		||||
                DCD     DMA1_Channel8_IRQHandler          ; DMA1 Channel 8
 | 
			
		||||
                DCD     DMA2_Channel6_IRQHandler          ; DMA2 Channel 6
 | 
			
		||||
                DCD     DMA2_Channel7_IRQHandler          ; DMA2 Channel 7
 | 
			
		||||
                DCD     DMA2_Channel8_IRQHandler          ; DMA2 Channel 8
 | 
			
		||||
                DCD     CORDIC_IRQHandler                 ; CORDIC
 | 
			
		||||
                DCD     FMAC_IRQHandler                   ; FMAC
 | 
			
		||||
 | 
			
		||||
__Vectors_End
 | 
			
		||||
 | 
			
		||||
__Vectors_Size  EQU  __Vectors_End - __Vectors
 | 
			
		||||
 | 
			
		||||
                AREA    |.text|, CODE, READONLY
 | 
			
		||||
 | 
			
		||||
; Reset handler
 | 
			
		||||
Reset_Handler    PROC
 | 
			
		||||
                 EXPORT  Reset_Handler             [WEAK]
 | 
			
		||||
        IMPORT  SystemInit
 | 
			
		||||
        IMPORT  __main
 | 
			
		||||
 | 
			
		||||
                 LDR     R0, =SystemInit
 | 
			
		||||
                 BLX     R0
 | 
			
		||||
                 LDR     R0, =__main
 | 
			
		||||
                 BX      R0
 | 
			
		||||
                 ENDP
 | 
			
		||||
 | 
			
		||||
; Dummy Exception Handlers (infinite loops which can be modified)
 | 
			
		||||
 | 
			
		||||
NMI_Handler     PROC
 | 
			
		||||
                EXPORT  NMI_Handler                [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
HardFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  HardFault_Handler          [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
MemManage_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  MemManage_Handler          [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
BusFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  BusFault_Handler           [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
UsageFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  UsageFault_Handler         [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
SVC_Handler     PROC
 | 
			
		||||
                EXPORT  SVC_Handler                [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
DebugMon_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  DebugMon_Handler           [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
PendSV_Handler  PROC
 | 
			
		||||
                EXPORT  PendSV_Handler             [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
SysTick_Handler PROC
 | 
			
		||||
                EXPORT  SysTick_Handler            [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
Default_Handler PROC
 | 
			
		||||
 | 
			
		||||
        EXPORT     WWDG_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     PVD_PVM_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     RTC_TAMP_LSECSS_IRQHandler        [WEAK]
 | 
			
		||||
        EXPORT     RTC_WKUP_IRQHandler               [WEAK]
 | 
			
		||||
        EXPORT     FLASH_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     RCC_IRQHandler                    [WEAK]
 | 
			
		||||
        EXPORT     EXTI0_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     EXTI1_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     EXTI2_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     EXTI3_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     EXTI4_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     DMA1_Channel1_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA1_Channel2_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA1_Channel3_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA1_Channel4_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA1_Channel5_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA1_Channel6_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA1_Channel7_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     ADC1_2_IRQHandler                 [WEAK]
 | 
			
		||||
        EXPORT     USB_HP_IRQHandler                 [WEAK]
 | 
			
		||||
        EXPORT     USB_LP_IRQHandler                 [WEAK]
 | 
			
		||||
        EXPORT     FDCAN1_IT0_IRQHandler             [WEAK]
 | 
			
		||||
        EXPORT     FDCAN1_IT1_IRQHandler             [WEAK]
 | 
			
		||||
        EXPORT     EXTI9_5_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     TIM1_BRK_TIM15_IRQHandler         [WEAK]
 | 
			
		||||
        EXPORT     TIM1_UP_TIM16_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     TIM1_TRG_COM_TIM17_IRQHandler     [WEAK]
 | 
			
		||||
        EXPORT     TIM1_CC_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     TIM2_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     TIM3_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     TIM4_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     I2C1_EV_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     I2C1_ER_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     I2C2_EV_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     I2C2_ER_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     SPI1_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     SPI2_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     USART1_IRQHandler                 [WEAK]
 | 
			
		||||
        EXPORT     USART2_IRQHandler                 [WEAK]
 | 
			
		||||
        EXPORT     USART3_IRQHandler                 [WEAK]
 | 
			
		||||
        EXPORT     EXTI15_10_IRQHandler              [WEAK]
 | 
			
		||||
        EXPORT     RTC_Alarm_IRQHandler              [WEAK]
 | 
			
		||||
        EXPORT     USBWakeUp_IRQHandler              [WEAK]
 | 
			
		||||
        EXPORT     TIM8_BRK_IRQHandler               [WEAK]
 | 
			
		||||
        EXPORT     TIM8_UP_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     TIM8_TRG_COM_IRQHandler           [WEAK]
 | 
			
		||||
        EXPORT     TIM8_CC_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     ADC3_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     FMC_IRQHandler                    [WEAK]
 | 
			
		||||
        EXPORT     LPTIM1_IRQHandler                 [WEAK]
 | 
			
		||||
        EXPORT     TIM5_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     SPI3_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     UART4_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     UART5_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     TIM6_DAC_IRQHandler               [WEAK]
 | 
			
		||||
        EXPORT     TIM7_DAC_IRQHandler               [WEAK]
 | 
			
		||||
        EXPORT     DMA2_Channel1_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA2_Channel2_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA2_Channel3_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA2_Channel4_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA2_Channel5_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     ADC4_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     ADC5_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     UCPD1_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     COMP1_2_3_IRQHandler              [WEAK]
 | 
			
		||||
        EXPORT     COMP4_5_6_IRQHandler              [WEAK]
 | 
			
		||||
        EXPORT     COMP7_IRQHandler                  [WEAK]
 | 
			
		||||
        EXPORT     CRS_IRQHandler                    [WEAK]
 | 
			
		||||
        EXPORT     SAI1_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     TIM20_BRK_IRQHandler              [WEAK]
 | 
			
		||||
        EXPORT     TIM20_UP_IRQHandler               [WEAK]
 | 
			
		||||
        EXPORT     TIM20_TRG_COM_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     TIM20_CC_IRQHandler               [WEAK]
 | 
			
		||||
        EXPORT     FPU_IRQHandler                    [WEAK]
 | 
			
		||||
        EXPORT     I2C4_EV_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     I2C4_ER_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     SPI4_IRQHandler                   [WEAK]
 | 
			
		||||
        EXPORT     FDCAN2_IT0_IRQHandler             [WEAK]
 | 
			
		||||
        EXPORT     FDCAN2_IT1_IRQHandler             [WEAK]
 | 
			
		||||
        EXPORT     FDCAN3_IT0_IRQHandler             [WEAK]
 | 
			
		||||
        EXPORT     FDCAN3_IT1_IRQHandler             [WEAK]
 | 
			
		||||
        EXPORT     RNG_IRQHandler                    [WEAK]
 | 
			
		||||
        EXPORT     LPUART1_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     I2C3_EV_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     I2C3_ER_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     DMAMUX_OVR_IRQHandler             [WEAK]
 | 
			
		||||
        EXPORT     QUADSPI_IRQHandler                [WEAK]
 | 
			
		||||
        EXPORT     DMA1_Channel8_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA2_Channel6_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA2_Channel7_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     DMA2_Channel8_IRQHandler          [WEAK]
 | 
			
		||||
        EXPORT     CORDIC_IRQHandler                 [WEAK]
 | 
			
		||||
        EXPORT     FMAC_IRQHandler                   [WEAK]
 | 
			
		||||
 | 
			
		||||
WWDG_IRQHandler
 | 
			
		||||
PVD_PVM_IRQHandler
 | 
			
		||||
RTC_TAMP_LSECSS_IRQHandler
 | 
			
		||||
RTC_WKUP_IRQHandler
 | 
			
		||||
FLASH_IRQHandler
 | 
			
		||||
RCC_IRQHandler
 | 
			
		||||
EXTI0_IRQHandler
 | 
			
		||||
EXTI1_IRQHandler
 | 
			
		||||
EXTI2_IRQHandler
 | 
			
		||||
EXTI3_IRQHandler
 | 
			
		||||
EXTI4_IRQHandler
 | 
			
		||||
DMA1_Channel1_IRQHandler
 | 
			
		||||
DMA1_Channel2_IRQHandler
 | 
			
		||||
DMA1_Channel3_IRQHandler
 | 
			
		||||
DMA1_Channel4_IRQHandler
 | 
			
		||||
DMA1_Channel5_IRQHandler
 | 
			
		||||
DMA1_Channel6_IRQHandler
 | 
			
		||||
DMA1_Channel7_IRQHandler
 | 
			
		||||
ADC1_2_IRQHandler
 | 
			
		||||
USB_HP_IRQHandler
 | 
			
		||||
USB_LP_IRQHandler
 | 
			
		||||
FDCAN1_IT0_IRQHandler
 | 
			
		||||
FDCAN1_IT1_IRQHandler
 | 
			
		||||
EXTI9_5_IRQHandler
 | 
			
		||||
TIM1_BRK_TIM15_IRQHandler
 | 
			
		||||
TIM1_UP_TIM16_IRQHandler
 | 
			
		||||
TIM1_TRG_COM_TIM17_IRQHandler
 | 
			
		||||
TIM1_CC_IRQHandler
 | 
			
		||||
TIM2_IRQHandler
 | 
			
		||||
TIM3_IRQHandler
 | 
			
		||||
TIM4_IRQHandler
 | 
			
		||||
I2C1_EV_IRQHandler
 | 
			
		||||
I2C1_ER_IRQHandler
 | 
			
		||||
I2C2_EV_IRQHandler
 | 
			
		||||
I2C2_ER_IRQHandler
 | 
			
		||||
SPI1_IRQHandler
 | 
			
		||||
SPI2_IRQHandler
 | 
			
		||||
USART1_IRQHandler
 | 
			
		||||
USART2_IRQHandler
 | 
			
		||||
USART3_IRQHandler
 | 
			
		||||
EXTI15_10_IRQHandler
 | 
			
		||||
RTC_Alarm_IRQHandler
 | 
			
		||||
USBWakeUp_IRQHandler
 | 
			
		||||
TIM8_BRK_IRQHandler
 | 
			
		||||
TIM8_UP_IRQHandler
 | 
			
		||||
TIM8_TRG_COM_IRQHandler
 | 
			
		||||
TIM8_CC_IRQHandler
 | 
			
		||||
ADC3_IRQHandler
 | 
			
		||||
FMC_IRQHandler
 | 
			
		||||
LPTIM1_IRQHandler
 | 
			
		||||
TIM5_IRQHandler
 | 
			
		||||
SPI3_IRQHandler
 | 
			
		||||
UART4_IRQHandler
 | 
			
		||||
UART5_IRQHandler
 | 
			
		||||
TIM6_DAC_IRQHandler
 | 
			
		||||
TIM7_DAC_IRQHandler
 | 
			
		||||
DMA2_Channel1_IRQHandler
 | 
			
		||||
DMA2_Channel2_IRQHandler
 | 
			
		||||
DMA2_Channel3_IRQHandler
 | 
			
		||||
DMA2_Channel4_IRQHandler
 | 
			
		||||
DMA2_Channel5_IRQHandler
 | 
			
		||||
ADC4_IRQHandler
 | 
			
		||||
ADC5_IRQHandler
 | 
			
		||||
UCPD1_IRQHandler
 | 
			
		||||
COMP1_2_3_IRQHandler
 | 
			
		||||
COMP4_5_6_IRQHandler
 | 
			
		||||
COMP7_IRQHandler
 | 
			
		||||
CRS_IRQHandler
 | 
			
		||||
SAI1_IRQHandler
 | 
			
		||||
TIM20_BRK_IRQHandler
 | 
			
		||||
TIM20_UP_IRQHandler
 | 
			
		||||
TIM20_TRG_COM_IRQHandler
 | 
			
		||||
TIM20_CC_IRQHandler
 | 
			
		||||
FPU_IRQHandler
 | 
			
		||||
I2C4_EV_IRQHandler
 | 
			
		||||
I2C4_ER_IRQHandler
 | 
			
		||||
SPI4_IRQHandler
 | 
			
		||||
FDCAN2_IT0_IRQHandler
 | 
			
		||||
FDCAN2_IT1_IRQHandler
 | 
			
		||||
FDCAN3_IT0_IRQHandler
 | 
			
		||||
FDCAN3_IT1_IRQHandler
 | 
			
		||||
RNG_IRQHandler
 | 
			
		||||
LPUART1_IRQHandler
 | 
			
		||||
I2C3_EV_IRQHandler
 | 
			
		||||
I2C3_ER_IRQHandler
 | 
			
		||||
DMAMUX_OVR_IRQHandler
 | 
			
		||||
QUADSPI_IRQHandler
 | 
			
		||||
DMA1_Channel8_IRQHandler
 | 
			
		||||
DMA2_Channel6_IRQHandler
 | 
			
		||||
DMA2_Channel7_IRQHandler
 | 
			
		||||
DMA2_Channel8_IRQHandler
 | 
			
		||||
CORDIC_IRQHandler
 | 
			
		||||
FMAC_IRQHandler
 | 
			
		||||
 | 
			
		||||
                B       .
 | 
			
		||||
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
                ALIGN
 | 
			
		||||
 | 
			
		||||
;*******************************************************************************
 | 
			
		||||
; User Stack and Heap initialization
 | 
			
		||||
;*******************************************************************************
 | 
			
		||||
                 IF      :DEF:__MICROLIB
 | 
			
		||||
 | 
			
		||||
                 EXPORT  __initial_sp
 | 
			
		||||
                 EXPORT  __heap_base
 | 
			
		||||
                 EXPORT  __heap_limit
 | 
			
		||||
 | 
			
		||||
                 ELSE
 | 
			
		||||
 | 
			
		||||
                 IMPORT  __use_two_region_memory
 | 
			
		||||
                 EXPORT  __user_initial_stackheap
 | 
			
		||||
 | 
			
		||||
__user_initial_stackheap
 | 
			
		||||
 | 
			
		||||
                 LDR     R0, =  Heap_Mem
 | 
			
		||||
                 LDR     R1, =(Stack_Mem + Stack_Size)
 | 
			
		||||
                 LDR     R2, = (Heap_Mem +  Heap_Size)
 | 
			
		||||
                 LDR     R3, = Stack_Mem
 | 
			
		||||
                 BX      LR
 | 
			
		||||
 | 
			
		||||
                 ALIGN
 | 
			
		||||
 | 
			
		||||
                 ENDIF
 | 
			
		||||
 | 
			
		||||
                 END
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										268
									
								
								exp6/exp6.ioc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										268
									
								
								exp6/exp6.ioc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,268 @@
 | 
			
		||||
#MicroXplorer Configuration settings - do not modify
 | 
			
		||||
CAD.formats=
 | 
			
		||||
CAD.pinconfig=
 | 
			
		||||
CAD.provider=
 | 
			
		||||
File.Version=6
 | 
			
		||||
GPIO.groupedBy=Group By Peripherals
 | 
			
		||||
KeepUserPlacement=false
 | 
			
		||||
Mcu.CPN=STM32G473RCT6
 | 
			
		||||
Mcu.Family=STM32G4
 | 
			
		||||
Mcu.IP0=NVIC
 | 
			
		||||
Mcu.IP1=RCC
 | 
			
		||||
Mcu.IP2=SYS
 | 
			
		||||
Mcu.IP3=TIM3
 | 
			
		||||
Mcu.IPNb=4
 | 
			
		||||
Mcu.Name=STM32G473R(B-C-E)Tx
 | 
			
		||||
Mcu.Package=LQFP64
 | 
			
		||||
Mcu.Pin0=PC13
 | 
			
		||||
Mcu.Pin1=PF0-OSC_IN
 | 
			
		||||
Mcu.Pin10=PA3
 | 
			
		||||
Mcu.Pin11=PA4
 | 
			
		||||
Mcu.Pin12=PA5
 | 
			
		||||
Mcu.Pin13=PA6
 | 
			
		||||
Mcu.Pin14=PA7
 | 
			
		||||
Mcu.Pin15=PB0
 | 
			
		||||
Mcu.Pin16=PB1
 | 
			
		||||
Mcu.Pin17=PB2
 | 
			
		||||
Mcu.Pin18=PA13
 | 
			
		||||
Mcu.Pin19=PA14
 | 
			
		||||
Mcu.Pin2=PF1-OSC_OUT
 | 
			
		||||
Mcu.Pin20=PB3
 | 
			
		||||
Mcu.Pin21=PB4
 | 
			
		||||
Mcu.Pin22=PB5
 | 
			
		||||
Mcu.Pin23=PB6
 | 
			
		||||
Mcu.Pin24=PB7
 | 
			
		||||
Mcu.Pin25=VP_SYS_VS_Systick
 | 
			
		||||
Mcu.Pin26=VP_SYS_VS_DBSignals
 | 
			
		||||
Mcu.Pin27=VP_TIM3_VS_ClockSourceINT
 | 
			
		||||
Mcu.Pin3=PC0
 | 
			
		||||
Mcu.Pin4=PC1
 | 
			
		||||
Mcu.Pin5=PC2
 | 
			
		||||
Mcu.Pin6=PC3
 | 
			
		||||
Mcu.Pin7=PA0
 | 
			
		||||
Mcu.Pin8=PA1
 | 
			
		||||
Mcu.Pin9=PA2
 | 
			
		||||
Mcu.PinsNb=28
 | 
			
		||||
Mcu.ThirdPartyNb=0
 | 
			
		||||
Mcu.UserConstants=
 | 
			
		||||
Mcu.UserName=STM32G473RCTx
 | 
			
		||||
MxCube.Version=6.12.0
 | 
			
		||||
MxDb.Version=DB.6.0.120
 | 
			
		||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.ForceEnableDMAVector=true
 | 
			
		||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
 | 
			
		||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
 | 
			
		||||
NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
			
		||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
PA0.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
 | 
			
		||||
PA0.GPIO_Label=SegLedData
 | 
			
		||||
PA0.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PA0.Locked=true
 | 
			
		||||
PA0.PinState=GPIO_PIN_SET
 | 
			
		||||
PA0.Signal=GPIO_Output
 | 
			
		||||
PA1.GPIOParameters=PinState,GPIO_PuPd
 | 
			
		||||
PA1.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PA1.Locked=true
 | 
			
		||||
PA1.PinState=GPIO_PIN_SET
 | 
			
		||||
PA1.Signal=GPIO_Output
 | 
			
		||||
PA13.Mode=Serial_Wire
 | 
			
		||||
PA13.Signal=SYS_JTMS-SWDIO
 | 
			
		||||
PA14.Mode=Serial_Wire
 | 
			
		||||
PA14.Signal=SYS_JTCK-SWCLK
 | 
			
		||||
PA2.GPIOParameters=PinState,GPIO_PuPd
 | 
			
		||||
PA2.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PA2.Locked=true
 | 
			
		||||
PA2.PinState=GPIO_PIN_SET
 | 
			
		||||
PA2.Signal=GPIO_Output
 | 
			
		||||
PA3.GPIOParameters=PinState,GPIO_PuPd
 | 
			
		||||
PA3.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PA3.Locked=true
 | 
			
		||||
PA3.PinState=GPIO_PIN_SET
 | 
			
		||||
PA3.Signal=GPIO_Output
 | 
			
		||||
PA4.GPIOParameters=PinState,GPIO_PuPd
 | 
			
		||||
PA4.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PA4.Locked=true
 | 
			
		||||
PA4.PinState=GPIO_PIN_SET
 | 
			
		||||
PA4.Signal=GPIO_Output
 | 
			
		||||
PA5.GPIOParameters=PinState,GPIO_PuPd
 | 
			
		||||
PA5.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PA5.Locked=true
 | 
			
		||||
PA5.PinState=GPIO_PIN_SET
 | 
			
		||||
PA5.Signal=GPIO_Output
 | 
			
		||||
PA6.GPIOParameters=PinState,GPIO_PuPd
 | 
			
		||||
PA6.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PA6.Locked=true
 | 
			
		||||
PA6.PinState=GPIO_PIN_SET
 | 
			
		||||
PA6.Signal=GPIO_Output
 | 
			
		||||
PA7.GPIOParameters=PinState,GPIO_PuPd
 | 
			
		||||
PA7.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PA7.Locked=true
 | 
			
		||||
PA7.PinState=GPIO_PIN_SET
 | 
			
		||||
PA7.Signal=GPIO_Output
 | 
			
		||||
PB0.GPIOParameters=GPIO_PuPd,GPIO_Label
 | 
			
		||||
PB0.GPIO_Label=KeyLine
 | 
			
		||||
PB0.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PB0.Locked=true
 | 
			
		||||
PB0.Signal=GPIO_Input
 | 
			
		||||
PB1.GPIOParameters=GPIO_PuPd
 | 
			
		||||
PB1.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PB1.Locked=true
 | 
			
		||||
PB1.Signal=GPIO_Input
 | 
			
		||||
PB2.GPIOParameters=GPIO_PuPd
 | 
			
		||||
PB2.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PB2.Locked=true
 | 
			
		||||
PB2.Signal=GPIO_Input
 | 
			
		||||
PB3.GPIOParameters=GPIO_PuPd
 | 
			
		||||
PB3.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PB3.Locked=true
 | 
			
		||||
PB3.Signal=GPIO_Input
 | 
			
		||||
PB4.GPIOParameters=GPIO_PuPd,GPIO_Label
 | 
			
		||||
PB4.GPIO_Label=KeyRow
 | 
			
		||||
PB4.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PB4.Locked=true
 | 
			
		||||
PB4.Signal=GPIO_Input
 | 
			
		||||
PB5.GPIOParameters=GPIO_PuPd
 | 
			
		||||
PB5.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PB5.Locked=true
 | 
			
		||||
PB5.Signal=GPIO_Input
 | 
			
		||||
PB6.GPIOParameters=GPIO_PuPd
 | 
			
		||||
PB6.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PB6.Locked=true
 | 
			
		||||
PB6.Signal=GPIO_Input
 | 
			
		||||
PB7.GPIOParameters=GPIO_PuPd
 | 
			
		||||
PB7.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PB7.Locked=true
 | 
			
		||||
PB7.Signal=GPIO_Input
 | 
			
		||||
PC0.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
 | 
			
		||||
PC0.GPIO_Label=AddrA
 | 
			
		||||
PC0.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
 | 
			
		||||
PC0.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PC0.Locked=true
 | 
			
		||||
PC0.Signal=GPIO_Output
 | 
			
		||||
PC1.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
 | 
			
		||||
PC1.GPIO_Label=AddrB
 | 
			
		||||
PC1.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
 | 
			
		||||
PC1.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PC1.Locked=true
 | 
			
		||||
PC1.Signal=GPIO_Output
 | 
			
		||||
PC13.GPIOParameters=GPIO_PuPd,GPIO_Label
 | 
			
		||||
PC13.GPIO_Label=LED
 | 
			
		||||
PC13.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PC13.Locked=true
 | 
			
		||||
PC13.Signal=GPIO_Output
 | 
			
		||||
PC2.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
 | 
			
		||||
PC2.GPIO_Label=AddrC
 | 
			
		||||
PC2.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
 | 
			
		||||
PC2.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PC2.Locked=true
 | 
			
		||||
PC2.Signal=GPIO_Output
 | 
			
		||||
PC3.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
 | 
			
		||||
PC3.GPIO_Label=OE
 | 
			
		||||
PC3.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
 | 
			
		||||
PC3.GPIO_PuPd=GPIO_PULLUP
 | 
			
		||||
PC3.Locked=true
 | 
			
		||||
PC3.Signal=GPIO_Output
 | 
			
		||||
PF0-OSC_IN.Mode=HSE-External-Oscillator
 | 
			
		||||
PF0-OSC_IN.Signal=RCC_OSC_IN
 | 
			
		||||
PF1-OSC_OUT.Mode=HSE-External-Oscillator
 | 
			
		||||
PF1-OSC_OUT.Signal=RCC_OSC_OUT
 | 
			
		||||
PinOutPanel.RotationAngle=0
 | 
			
		||||
ProjectManager.AskForMigrate=true
 | 
			
		||||
ProjectManager.BackupPrevious=false
 | 
			
		||||
ProjectManager.CompilerOptimize=6
 | 
			
		||||
ProjectManager.ComputerToolchain=false
 | 
			
		||||
ProjectManager.CoupleFile=true
 | 
			
		||||
ProjectManager.CustomerFirmwarePackage=
 | 
			
		||||
ProjectManager.DefaultFWLocation=true
 | 
			
		||||
ProjectManager.DeletePrevious=true
 | 
			
		||||
ProjectManager.DeviceId=STM32G473RCTx
 | 
			
		||||
ProjectManager.FirmwarePackage=STM32Cube FW_G4 V1.6.0
 | 
			
		||||
ProjectManager.FreePins=false
 | 
			
		||||
ProjectManager.HalAssertFull=false
 | 
			
		||||
ProjectManager.HeapSize=0x200
 | 
			
		||||
ProjectManager.KeepUserCode=true
 | 
			
		||||
ProjectManager.LastFirmware=true
 | 
			
		||||
ProjectManager.LibraryCopy=1
 | 
			
		||||
ProjectManager.MainLocation=Core/Src
 | 
			
		||||
ProjectManager.NoMain=false
 | 
			
		||||
ProjectManager.PreviousToolchain=
 | 
			
		||||
ProjectManager.ProjectBuild=false
 | 
			
		||||
ProjectManager.ProjectFileName=exp6.ioc
 | 
			
		||||
ProjectManager.ProjectName=exp6
 | 
			
		||||
ProjectManager.ProjectStructure=
 | 
			
		||||
ProjectManager.RegisterCallBack=
 | 
			
		||||
ProjectManager.StackSize=0x400
 | 
			
		||||
ProjectManager.TargetToolchain=MDK-ARM V5.32
 | 
			
		||||
ProjectManager.ToolChainLocation=
 | 
			
		||||
ProjectManager.UAScriptAfterPath=
 | 
			
		||||
ProjectManager.UAScriptBeforePath=
 | 
			
		||||
ProjectManager.UnderRoot=false
 | 
			
		||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true
 | 
			
		||||
RCC.ADC12Freq_Value=170000000
 | 
			
		||||
RCC.ADC345Freq_Value=170000000
 | 
			
		||||
RCC.AHBFreq_Value=170000000
 | 
			
		||||
RCC.APB1Freq_Value=170000000
 | 
			
		||||
RCC.APB1TimFreq_Value=170000000
 | 
			
		||||
RCC.APB2Freq_Value=170000000
 | 
			
		||||
RCC.APB2TimFreq_Value=170000000
 | 
			
		||||
RCC.CRSFreq_Value=48000000
 | 
			
		||||
RCC.CortexFreq_Value=170000000
 | 
			
		||||
RCC.EXTERNAL_CLOCK_VALUE=12288000
 | 
			
		||||
RCC.FCLKCortexFreq_Value=170000000
 | 
			
		||||
RCC.FDCANFreq_Value=170000000
 | 
			
		||||
RCC.FamilyName=M
 | 
			
		||||
RCC.HCLKFreq_Value=170000000
 | 
			
		||||
RCC.HRTIM1Freq_Value=170000000
 | 
			
		||||
RCC.HSE_VALUE=24000000
 | 
			
		||||
RCC.HSI48_VALUE=48000000
 | 
			
		||||
RCC.HSI_VALUE=16000000
 | 
			
		||||
RCC.I2C1Freq_Value=170000000
 | 
			
		||||
RCC.I2C2Freq_Value=170000000
 | 
			
		||||
RCC.I2C3Freq_Value=170000000
 | 
			
		||||
RCC.I2C4Freq_Value=170000000
 | 
			
		||||
RCC.I2SFreq_Value=170000000
 | 
			
		||||
RCC.IPParameters=ADC12Freq_Value,ADC345Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HRTIM1Freq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,PLLM,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSourceVirtual,PWRFreq_Value,QSPIFreq_Value,RNGFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value
 | 
			
		||||
RCC.LPTIM1Freq_Value=170000000
 | 
			
		||||
RCC.LPUART1Freq_Value=170000000
 | 
			
		||||
RCC.LSCOPinFreq_Value=32000
 | 
			
		||||
RCC.LSE_VALUE=32768
 | 
			
		||||
RCC.LSI_VALUE=32000
 | 
			
		||||
RCC.MCO1PinFreq_Value=16000000
 | 
			
		||||
RCC.PLLM=RCC_PLLM_DIV6
 | 
			
		||||
RCC.PLLN=85
 | 
			
		||||
RCC.PLLPoutputFreq_Value=170000000
 | 
			
		||||
RCC.PLLQoutputFreq_Value=170000000
 | 
			
		||||
RCC.PLLRCLKFreq_Value=170000000
 | 
			
		||||
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
 | 
			
		||||
RCC.PWRFreq_Value=170000000
 | 
			
		||||
RCC.QSPIFreq_Value=170000000
 | 
			
		||||
RCC.RNGFreq_Value=170000000
 | 
			
		||||
RCC.SAI1Freq_Value=170000000
 | 
			
		||||
RCC.SYSCLKFreq_VALUE=170000000
 | 
			
		||||
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
 | 
			
		||||
RCC.UART4Freq_Value=170000000
 | 
			
		||||
RCC.UART5Freq_Value=170000000
 | 
			
		||||
RCC.USART1Freq_Value=170000000
 | 
			
		||||
RCC.USART2Freq_Value=170000000
 | 
			
		||||
RCC.USART3Freq_Value=170000000
 | 
			
		||||
RCC.USBFreq_Value=170000000
 | 
			
		||||
RCC.VCOInputFreq_Value=4000000
 | 
			
		||||
RCC.VCOOutputFreq_Value=340000000
 | 
			
		||||
TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
 | 
			
		||||
TIM3.CounterMode=TIM_COUNTERMODE_CENTERALIGNED1
 | 
			
		||||
TIM3.IPParameters=Prescaler,PeriodNoDither,AutoReloadPreload,CounterMode
 | 
			
		||||
TIM3.PeriodNoDither=1000-1
 | 
			
		||||
TIM3.Prescaler=170-1
 | 
			
		||||
VP_SYS_VS_DBSignals.Mode=DisableDeadBatterySignals
 | 
			
		||||
VP_SYS_VS_DBSignals.Signal=SYS_VS_DBSignals
 | 
			
		||||
VP_SYS_VS_Systick.Mode=SysTick
 | 
			
		||||
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
 | 
			
		||||
VP_TIM3_VS_ClockSourceINT.Mode=Internal
 | 
			
		||||
VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
 | 
			
		||||
board=custom
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user