514 lines
16 KiB
C
514 lines
16 KiB
C
|
|
/**
|
||
|
|
******************************************************************************
|
||
|
|
* @file stm32f4xx_syscfg.c
|
||
|
|
* @author MCD Application Team
|
||
|
|
* @version V1.8.1
|
||
|
|
* @date 27-January-2022
|
||
|
|
* @brief This file provides firmware functions to manage the SYSCFG peripheral.
|
||
|
|
*
|
||
|
|
@verbatim
|
||
|
|
|
||
|
|
===============================================================================
|
||
|
|
##### How to use this driver #####
|
||
|
|
===============================================================================
|
||
|
|
[..] This driver provides functions for:
|
||
|
|
|
||
|
|
(#) Remapping the memory accessible in the code area using SYSCFG_MemoryRemapConfig()
|
||
|
|
|
||
|
|
(#) Swapping the internal flash Bank1 and Bank2 this features is only visible for
|
||
|
|
STM32F42xxx/43xxx devices Devices.
|
||
|
|
|
||
|
|
(#) Manage the EXTI lines connection to the GPIOs using SYSCFG_EXTILineConfig()
|
||
|
|
|
||
|
|
(#) Select the ETHERNET media interface (RMII/RII) using SYSCFG_ETH_MediaInterfaceConfig()
|
||
|
|
|
||
|
|
-@- SYSCFG APB clock must be enabled to get write access to SYSCFG registers,
|
||
|
|
using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
||
|
|
|
||
|
|
@endverbatim
|
||
|
|
******************************************************************************
|
||
|
|
* @attention
|
||
|
|
*
|
||
|
|
* Copyright (c) 2016 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 "stm32f4xx_syscfg.h"
|
||
|
|
#include "stm32f4xx_rcc.h"
|
||
|
|
|
||
|
|
/** @addtogroup STM32F4xx_StdPeriph_Driver
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/** @defgroup SYSCFG
|
||
|
|
* @brief SYSCFG driver modules
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/* Private typedef -----------------------------------------------------------*/
|
||
|
|
/* Private define ------------------------------------------------------------*/
|
||
|
|
/* ------------ RCC registers bit address in the alias region ----------- */
|
||
|
|
#define SYSCFG_OFFSET (SYSCFG_BASE - PERIPH_BASE)
|
||
|
|
/* --- MEMRMP Register ---*/
|
||
|
|
/* Alias word address of UFB_MODE bit */
|
||
|
|
#define MEMRMP_OFFSET SYSCFG_OFFSET
|
||
|
|
#define UFB_MODE_BitNumber ((uint8_t)0x8)
|
||
|
|
#define UFB_MODE_BB (PERIPH_BB_BASE + (MEMRMP_OFFSET * 32) + (UFB_MODE_BitNumber * 4))
|
||
|
|
|
||
|
|
/* --- PMC Register ---*/
|
||
|
|
/* Alias word address of MII_RMII_SEL bit */
|
||
|
|
#define PMC_OFFSET (SYSCFG_OFFSET + 0x04)
|
||
|
|
#define MII_RMII_SEL_BitNumber ((uint8_t)0x17)
|
||
|
|
#define PMC_MII_RMII_SEL_BB (PERIPH_BB_BASE + (PMC_OFFSET * 32) + (MII_RMII_SEL_BitNumber * 4))
|
||
|
|
|
||
|
|
/* --- CMPCR Register ---*/
|
||
|
|
/* Alias word address of CMP_PD bit */
|
||
|
|
#define CMPCR_OFFSET (SYSCFG_OFFSET + 0x20)
|
||
|
|
#define CMP_PD_BitNumber ((uint8_t)0x00)
|
||
|
|
#define CMPCR_CMP_PD_BB (PERIPH_BB_BASE + (CMPCR_OFFSET * 32) + (CMP_PD_BitNumber * 4))
|
||
|
|
|
||
|
|
/* --- MCHDLYCR Register ---*/
|
||
|
|
/* Alias word address of BSCKSEL bit */
|
||
|
|
#define MCHDLYCR_OFFSET (SYSCFG_OFFSET + 0x30)
|
||
|
|
#define BSCKSEL_BIT_NUMBER POSITION_VAL(SYSCFG_MCHDLYCR_BSCKSEL)
|
||
|
|
#define MCHDLYCR_BSCKSEL_BB (uint32_t)(PERIPH_BB_BASE + (MCHDLYCR_OFFSET * 32) + (BSCKSEL_BIT_NUMBER * 4))
|
||
|
|
|
||
|
|
/* Private macro -------------------------------------------------------------*/
|
||
|
|
/* Private variables ---------------------------------------------------------*/
|
||
|
|
/* Private function prototypes -----------------------------------------------*/
|
||
|
|
/* Private functions ---------------------------------------------------------*/
|
||
|
|
|
||
|
|
/** @defgroup SYSCFG_Private_Functions
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Deinitializes the Alternate Functions (remap and EXTI configuration)
|
||
|
|
* registers to their default reset values.
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SYSCFG_DeInit(void)
|
||
|
|
{
|
||
|
|
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
||
|
|
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, DISABLE);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Changes the mapping of the specified pin.
|
||
|
|
* @param SYSCFG_Memory: selects the memory remapping.
|
||
|
|
* This parameter can be one of the following values:
|
||
|
|
* @arg SYSCFG_MemoryRemap_Flash: Main Flash memory mapped at 0x00000000
|
||
|
|
* @arg SYSCFG_MemoryRemap_SystemFlash: System Flash memory mapped at 0x00000000
|
||
|
|
* @arg SYSCFG_MemoryRemap_FSMC: FSMC (Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 for STM32F405xx/407xx, STM32F415xx/417xx and STM32F413_423xx devices.
|
||
|
|
* @arg SYSCFG_MemoryRemap_FMC: FMC (Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 for STM32F42xxx/43xxx devices.
|
||
|
|
* @arg SYSCFG_MemoryRemap_ExtMEM: External Memory mapped at 0x00000000 for STM32F446xx/STM32F469_479xx devices.
|
||
|
|
* @arg SYSCFG_MemoryRemap_SRAM: Embedded SRAM (112kB) mapped at 0x00000000
|
||
|
|
* @arg SYSCFG_MemoryRemap_SDRAM: FMC (External SDRAM) mapped at 0x00000000 for STM32F42xxx/43xxx devices.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SYSCFG_MemoryRemapConfig(uint8_t SYSCFG_MemoryRemap)
|
||
|
|
{
|
||
|
|
/* Check the parameters */
|
||
|
|
assert_param(IS_SYSCFG_MEMORY_REMAP_CONFING(SYSCFG_MemoryRemap));
|
||
|
|
|
||
|
|
SYSCFG->MEMRMP = SYSCFG_MemoryRemap;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Enables or disables the Internal FLASH Bank Swapping.
|
||
|
|
*
|
||
|
|
* @note This function can be used only for STM32F42xxx/43xxx devices.
|
||
|
|
*
|
||
|
|
* @param NewState: new state of Internal FLASH Bank swapping.
|
||
|
|
* This parameter can be one of the following values:
|
||
|
|
* @arg ENABLE: Flash Bank2 mapped at 0x08000000 (and aliased @0x00000000)
|
||
|
|
* and Flash Bank1 mapped at 0x08100000 (and aliased at 0x00100000)
|
||
|
|
* @arg DISABLE:(the default state) Flash Bank1 mapped at 0x08000000 (and aliased @0x0000 0000)
|
||
|
|
and Flash Bank2 mapped at 0x08100000 (and aliased at 0x00100000)
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SYSCFG_MemorySwappingBank(FunctionalState NewState)
|
||
|
|
{
|
||
|
|
/* Check the parameters */
|
||
|
|
assert_param(IS_FUNCTIONAL_STATE(NewState));
|
||
|
|
|
||
|
|
*(__IO uint32_t *) UFB_MODE_BB = (uint32_t)NewState;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Selects the GPIO pin used as EXTI Line.
|
||
|
|
* @param EXTI_PortSourceGPIOx : selects the GPIO port to be used as source for
|
||
|
|
* EXTI lines where x can be (A..K) for STM32F42xxx/43xxx devices, (A..I)
|
||
|
|
* for STM32F405xx/407xx and STM32F415xx/417xx devices or (A, B, C, D and H)
|
||
|
|
* for STM32401xx devices.
|
||
|
|
*
|
||
|
|
* @param EXTI_PinSourcex: specifies the EXTI line to be configured.
|
||
|
|
* This parameter can be EXTI_PinSourcex where x can be (0..15, except
|
||
|
|
* for EXTI_PortSourceGPIOI x can be (0..11) for STM32F405xx/407xx
|
||
|
|
* and STM32F405xx/407xx devices and for EXTI_PortSourceGPIOK x can
|
||
|
|
* be (0..7) for STM32F42xxx/43xxx devices.
|
||
|
|
*
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0x00;
|
||
|
|
|
||
|
|
/* Check the parameters */
|
||
|
|
assert_param(IS_EXTI_PORT_SOURCE(EXTI_PortSourceGPIOx));
|
||
|
|
assert_param(IS_EXTI_PIN_SOURCE(EXTI_PinSourcex));
|
||
|
|
|
||
|
|
tmp = ((uint32_t)0x0F) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03));
|
||
|
|
SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] &= ~tmp;
|
||
|
|
SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] |= (((uint32_t)EXTI_PortSourceGPIOx) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03)));
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Selects the ETHERNET media interface
|
||
|
|
* @param SYSCFG_ETH_MediaInterface: specifies the Media Interface mode.
|
||
|
|
* This parameter can be one of the following values:
|
||
|
|
* @arg SYSCFG_ETH_MediaInterface_MII: MII mode selected
|
||
|
|
* @arg SYSCFG_ETH_MediaInterface_RMII: RMII mode selected
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface)
|
||
|
|
{
|
||
|
|
assert_param(IS_SYSCFG_ETH_MEDIA_INTERFACE(SYSCFG_ETH_MediaInterface));
|
||
|
|
/* Configure MII_RMII selection bit */
|
||
|
|
*(__IO uint32_t *) PMC_MII_RMII_SEL_BB = SYSCFG_ETH_MediaInterface;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Enables or disables the I/O Compensation Cell.
|
||
|
|
* @note The I/O compensation cell can be used only when the device supply
|
||
|
|
* voltage ranges from 2.4 to 3.6 V.
|
||
|
|
* @param NewState: new state of the I/O Compensation Cell.
|
||
|
|
* This parameter can be one of the following values:
|
||
|
|
* @arg ENABLE: I/O compensation cell enabled
|
||
|
|
* @arg DISABLE: I/O compensation cell power-down mode
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SYSCFG_CompensationCellCmd(FunctionalState NewState)
|
||
|
|
{
|
||
|
|
/* Check the parameters */
|
||
|
|
assert_param(IS_FUNCTIONAL_STATE(NewState));
|
||
|
|
|
||
|
|
*(__IO uint32_t *) CMPCR_CMP_PD_BB = (uint32_t)NewState;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Checks whether the I/O Compensation Cell ready flag is set or not.
|
||
|
|
* @param None
|
||
|
|
* @retval The new state of the I/O Compensation Cell ready flag (SET or RESET)
|
||
|
|
*/
|
||
|
|
FlagStatus SYSCFG_GetCompensationCellStatus(void)
|
||
|
|
{
|
||
|
|
FlagStatus bitstatus = RESET;
|
||
|
|
|
||
|
|
if ((SYSCFG->CMPCR & SYSCFG_CMPCR_READY ) != (uint32_t)RESET)
|
||
|
|
{
|
||
|
|
bitstatus = SET;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
bitstatus = RESET;
|
||
|
|
}
|
||
|
|
return bitstatus;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx)
|
||
|
|
/**
|
||
|
|
* @brief Connects the selected parameter to the break input of TIM1.
|
||
|
|
* @note The selected configuration is locked and can be unlocked by system reset
|
||
|
|
* @param SYSCFG_Break: selects the configuration to be connected to break
|
||
|
|
* input of TIM1
|
||
|
|
* This parameter can be any combination of the following values:
|
||
|
|
* @arg SYSCFG_Break_PVD: PVD interrupt is connected to the break input of TIM1/8.
|
||
|
|
* @arg SYSCFG_Break_HardFault: Lockup output of CortexM4 is connected to the break input of TIM1/8.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void SYSCFG_BreakConfig(uint32_t SYSCFG_Break)
|
||
|
|
{
|
||
|
|
/* Check the parameter */
|
||
|
|
assert_param(IS_SYSCFG_LOCK_CONFIG(SYSCFG_Break));
|
||
|
|
|
||
|
|
SYSCFG->CFGR2 |= (uint32_t) SYSCFG_Break;
|
||
|
|
}
|
||
|
|
#endif /* STM32F410xx || STM32F412xG || STM32F413_423xx */
|
||
|
|
|
||
|
|
#if defined(STM32F413_423xx)
|
||
|
|
/**
|
||
|
|
* @brief Select the DFSDM2 or TIM2_OC1 as clock source for the bitstream clock.
|
||
|
|
* @param source: BITSTREAM_CLOCK_DFSDM2.
|
||
|
|
* BITSTREAM_CLOCK_TIM2OC1.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_BitstreamClock_SourceSelection(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
tmp = (tmp &(~SYSCFG_MCHDLYCR_BSCKSEL));
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR = (tmp|source);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Disable Delay Clock for DFSDM1/2.
|
||
|
|
* @param MCHDLY: MCHDLY_CLOCK_DFSDM2.
|
||
|
|
* MCHDLY_CLOCK_DFSDM1.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_DisableDelayClock(uint32_t MCHDLY)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
if(MCHDLY == MCHDLY_CLOCK_DFSDM2)
|
||
|
|
{
|
||
|
|
tmp =tmp &(~SYSCFG_MCHDLYCR_MCHDLY2EN);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
tmp =tmp &(~SYSCFG_MCHDLYCR_MCHDLY1EN);
|
||
|
|
}
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR = tmp;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Enable Delay Clock for DFSDM1/2.
|
||
|
|
* @param MCHDLY: MCHDLY_CLOCK_DFSDM2.
|
||
|
|
* MCHDLY_CLOCK_DFSDM1.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_EnableDelayClock(uint32_t MCHDLY)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
tmp = tmp & ~MCHDLY;
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR = (tmp|MCHDLY);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Select the source for CKin signals for DFSDM1/2.
|
||
|
|
* @param source: DFSDM2_CKIN_PAD.
|
||
|
|
* DFSDM2_CKIN_DM.
|
||
|
|
* DFSDM1_CKIN_PAD.
|
||
|
|
* DFSDM1_CKIN_DM.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_ClockIn_SourceSelection(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
if((source == DFSDM2_CKIN_PAD) || (source == DFSDM2_CKIN_DM))
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2CFG);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM1CFG);
|
||
|
|
}
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR |= (source|tmp);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Select the source for CKOut signals for DFSDM1/2.
|
||
|
|
* @param source: DFSDM2_CKOUT_DFSDM2.
|
||
|
|
* DFSDM2_CKOUT_M27.
|
||
|
|
* DFSDM1_CKOUT_DFSDM1.
|
||
|
|
* DFSDM1_CKOUT_M27.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_ClockOut_SourceSelection(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
|
||
|
|
if((source == DFSDM2_CKOUT_DFSDM2) || (source == DFSDM2_CKOUT_M27))
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2CKOSEL);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM1CKOSEL);
|
||
|
|
}
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR |= (source|tmp);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Select the source for DataIn0 signals for DFSDM1/2.
|
||
|
|
* @param source: DATAIN0_DFSDM2_PAD.
|
||
|
|
* DATAIN0_DFSDM2_DATAIN1.
|
||
|
|
* DATAIN0_DFSDM1_PAD.
|
||
|
|
* DATAIN0_DFSDM1_DATAIN1.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_DataIn0_SourceSelection(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
|
||
|
|
if((source == DATAIN0_DFSDM2_PAD)|| (source == DATAIN0_DFSDM2_DATAIN1))
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2D0SEL);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM1D0SEL);
|
||
|
|
}
|
||
|
|
SYSCFG->MCHDLYCR |= (source|tmp);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Select the source for DataIn2 signals for DFSDM1/2.
|
||
|
|
* @param source: DATAIN2_DFSDM2_PAD.
|
||
|
|
* DATAIN2_DFSDM2_DATAIN3.
|
||
|
|
* DATAIN2_DFSDM1_PAD.
|
||
|
|
* DATAIN2_DFSDM1_DATAIN3.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_DataIn2_SourceSelection(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
|
||
|
|
if((source == DATAIN2_DFSDM2_PAD)|| (source == DATAIN2_DFSDM2_DATAIN3))
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2D2SEL);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM1D2SEL);
|
||
|
|
}
|
||
|
|
SYSCFG->MCHDLYCR |= (source|tmp);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Select the source for DataIn4 signals for DFSDM2.
|
||
|
|
* @param source: DATAIN4_DFSDM2_PAD.
|
||
|
|
* DATAIN4_DFSDM2_DATAIN5
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_DataIn4_SourceSelection(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2D4SEL);
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR |= (source|tmp);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Select the source for DataIn6 signals for DFSDM2.
|
||
|
|
* @param source: DATAIN6_DFSDM2_PAD.
|
||
|
|
* DATAIN6_DFSDM2_DATAIN7.
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM_DataIn6_SourceSelection(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2D6SEL);
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR |= (source|tmp);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Configure the distribution of the bitstream clock gated from TIM4.
|
||
|
|
* @param source: DFSDM1_CLKIN0_TIM4OC2
|
||
|
|
* DFSDM1_CLKIN2_TIM4OC2
|
||
|
|
* DFSDM1_CLKIN1_TIM4OC1
|
||
|
|
* DFSDM1_CLKIN3_TIM4OC1
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM1_BitStreamClk_Config(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
|
||
|
|
if ((source == DFSDM1_CLKIN0_TIM4OC2) || (source == DFSDM1_CLKIN2_TIM4OC2))
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM1CK02SEL);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM1CK13SEL);
|
||
|
|
}
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR |= (source|tmp);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Configure the distribution of the bitstream clock gated from TIM3.
|
||
|
|
* @param source: DFSDM2_CLKIN0_TIM3OC4
|
||
|
|
* DFSDM2_CLKIN4_TIM3OC4
|
||
|
|
* DFSDM2_CLKIN1_TIM3OC3
|
||
|
|
* DFSDM2_CLKIN5_TIM3OC3
|
||
|
|
* DFSDM2_CLKIN2_TIM3OC2
|
||
|
|
* DFSDM2_CLKIN6_TIM3OC2
|
||
|
|
* DFSDM2_CLKIN3_TIM3OC1
|
||
|
|
* DFSDM2_CLKIN7_TIM3OC1
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
void DFSDM2_BitStreamClk_Config(uint32_t source)
|
||
|
|
{
|
||
|
|
uint32_t tmp = 0;
|
||
|
|
|
||
|
|
tmp = SYSCFG->MCHDLYCR;
|
||
|
|
|
||
|
|
if ((source == DFSDM2_CLKIN0_TIM3OC4) || (source == DFSDM2_CLKIN4_TIM3OC4))
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2CK04SEL);
|
||
|
|
}
|
||
|
|
else if ((source == DFSDM2_CLKIN1_TIM3OC3) || (source == DFSDM2_CLKIN5_TIM3OC3))
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2CK15SEL);
|
||
|
|
|
||
|
|
}else if ((source == DFSDM2_CLKIN2_TIM3OC2) || (source == DFSDM2_CLKIN6_TIM3OC2))
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2CK26SEL);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
tmp = (tmp & ~SYSCFG_MCHDLYCR_DFSDM2CK37SEL);
|
||
|
|
}
|
||
|
|
|
||
|
|
SYSCFG->MCHDLYCR |= (source|tmp);
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif /* STM32F413_423xx */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|