Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:05

0001 /**
0002  * @file
0003  * @ingroup stm32f4_rcc
0004  * @brief RCC support.
0005  */
0006 
0007 /*
0008  * Copyright (c) 2012 Sebastian Huber.  All rights reserved.
0009  *
0010  * The license and distribution terms for this file may be
0011  * found in the file LICENSE in this distribution or at
0012  * http://www.rtems.org/license/LICENSE.
0013  */
0014 
0015 #ifndef LIBBSP_ARM_STM32F4_RCC_H
0016 #define LIBBSP_ARM_STM32F4_RCC_H
0017 
0018 #include <stdbool.h>
0019 #include <bspopts.h>
0020 
0021 #ifdef __cplusplus
0022 extern "C" {
0023 #endif /* __cplusplus */
0024 
0025 /**
0026  * @defgroup stm32f4_rcc RCC Support
0027  * @ingroup RTEMSBSPsARMSTM32F4
0028  * @brief RCC Support
0029  * @{
0030  */
0031 
0032 #define STM32F4_RCC_INDEX(reg, idx) (((reg) << 5) | (idx))
0033 
0034 typedef enum {
0035 #ifdef STM32F4_FAMILY_F4XXXX
0036 
0037   /**
0038    * @name Family F4XXXX
0039    * @{
0040    */
0041 
0042   STM32F4_RCC_OTGHS = STM32F4_RCC_INDEX(0, 29),
0043   STM32F4_RCC_ETHMAC = STM32F4_RCC_INDEX(0, 25),
0044   STM32F4_RCC_DMA2 = STM32F4_RCC_INDEX(0, 22),
0045   STM32F4_RCC_DMA1 = STM32F4_RCC_INDEX(0, 21),
0046   STM32F4_RCC_CRC = STM32F4_RCC_INDEX(0, 12),
0047   STM32F4_RCC_GPIOI = STM32F4_RCC_INDEX(0, 8),
0048   STM32F4_RCC_GPIOH = STM32F4_RCC_INDEX(0, 7),
0049   STM32F4_RCC_GPIOG = STM32F4_RCC_INDEX(0, 6),
0050   STM32F4_RCC_GPIOF = STM32F4_RCC_INDEX(0, 5),
0051   STM32F4_RCC_GPIOE = STM32F4_RCC_INDEX(0, 4),
0052   STM32F4_RCC_GPIOD = STM32F4_RCC_INDEX(0, 3),
0053   STM32F4_RCC_GPIOC = STM32F4_RCC_INDEX(0, 2),
0054   STM32F4_RCC_GPIOB = STM32F4_RCC_INDEX(0, 1),
0055   STM32F4_RCC_GPIOA = STM32F4_RCC_INDEX(0, 0),
0056 
0057   STM32F4_RCC_OTGFS = STM32F4_RCC_INDEX(1, 7),
0058   STM32F4_RCC_RNG = STM32F4_RCC_INDEX(1, 6),
0059   STM32F4_RCC_HASH = STM32F4_RCC_INDEX(1, 5),
0060   STM32F4_RCC_CRYP = STM32F4_RCC_INDEX(1, 4),
0061   STM32F4_RCC_DCMI = STM32F4_RCC_INDEX(1, 0),
0062 
0063   STM32F4_RCC_FSMCR = STM32F4_RCC_INDEX(2, 0),
0064 
0065   STM32F4_RCC_DAC = STM32F4_RCC_INDEX(4, 29),
0066   STM32F4_RCC_PWR = STM32F4_RCC_INDEX(4, 28),
0067   STM32F4_RCC_CAN2 = STM32F4_RCC_INDEX(4, 26),
0068   STM32F4_RCC_CAN1 = STM32F4_RCC_INDEX(4, 25),
0069   STM32F4_RCC_I2C3 = STM32F4_RCC_INDEX(4, 23),
0070   STM32F4_RCC_I2C2 = STM32F4_RCC_INDEX(4, 22),
0071   STM32F4_RCC_I2C1 = STM32F4_RCC_INDEX(4, 21),
0072   STM32F4_RCC_UART5 = STM32F4_RCC_INDEX(4, 20),
0073   STM32F4_RCC_UART4 = STM32F4_RCC_INDEX(4, 19),
0074   STM32F4_RCC_USART3 = STM32F4_RCC_INDEX(4, 18),
0075   STM32F4_RCC_USART2 = STM32F4_RCC_INDEX(4, 17),
0076   STM32F4_RCC_SPI3 = STM32F4_RCC_INDEX(4, 15),
0077   STM32F4_RCC_SPI2 = STM32F4_RCC_INDEX(4, 14),
0078   STM32F4_RCC_WWDG = STM32F4_RCC_INDEX(4, 11),
0079   STM32F4_RCC_TIM14 = STM32F4_RCC_INDEX(4, 8),
0080   STM32F4_RCC_TIM13 = STM32F4_RCC_INDEX(4, 7),
0081   STM32F4_RCC_TIM12 = STM32F4_RCC_INDEX(4, 6),
0082   STM32F4_RCC_TIM7 = STM32F4_RCC_INDEX(4, 5),
0083   STM32F4_RCC_TIM6 = STM32F4_RCC_INDEX(4, 4),
0084   STM32F4_RCC_TIM5 = STM32F4_RCC_INDEX(4, 3),
0085   STM32F4_RCC_TIM4 = STM32F4_RCC_INDEX(4, 2),
0086   STM32F4_RCC_TIM3 = STM32F4_RCC_INDEX(4, 1),
0087   STM32F4_RCC_TIM2 = STM32F4_RCC_INDEX(4, 0),
0088 
0089   STM32F4_RCC_TIM11 = STM32F4_RCC_INDEX(5, 18),
0090   STM32F4_RCC_TIM10 = STM32F4_RCC_INDEX(5, 17),
0091   STM32F4_RCC_TIM9 = STM32F4_RCC_INDEX(5, 16),
0092   STM32F4_RCC_SYSCFG = STM32F4_RCC_INDEX(5, 14),
0093   STM32F4_RCC_SPI1 = STM32F4_RCC_INDEX(5, 12),
0094   STM32F4_RCC_SDIO = STM32F4_RCC_INDEX(5, 11),
0095   STM32F4_RCC_ADC3 = STM32F4_RCC_INDEX(5, 10),
0096   STM32F4_RCC_ADC2 = STM32F4_RCC_INDEX(5, 9),
0097   STM32F4_RCC_ADC1 = STM32F4_RCC_INDEX(5, 8),
0098   STM32F4_RCC_USART6 = STM32F4_RCC_INDEX(5, 5),
0099   STM32F4_RCC_USART1 = STM32F4_RCC_INDEX(5, 4),
0100   STM32F4_RCC_TIM8 = STM32F4_RCC_INDEX(5, 1),
0101   STM32F4_RCC_TIM1 = STM32F4_RCC_INDEX(5, 0),
0102 
0103   /** @} */
0104 
0105 #endif /* STM32F4_FAMILY_F4XXXX */
0106 #ifdef STM32F4_FAMILY_F10XXX
0107 
0108   /**
0109    * @name Family F10
0110    * @{
0111    */
0112 
0113   STM32F4_RCC_DMA1 = STM32F4_RCC_INDEX(0, 0),
0114   STM32F4_RCC_DMA2 = STM32F4_RCC_INDEX(0, 1),
0115   STM32F4_RCC_SRAM = STM32F4_RCC_INDEX(0, 2),
0116   STM32F4_RCC_FLITF = STM32F4_RCC_INDEX(0, 4),
0117   STM32F4_RCC_CRCEN = STM32F4_RCC_INDEX(0, 6),
0118   STM32F4_RCC_FSMC = STM32F4_RCC_INDEX(0, 8),
0119   STM32F4_RCC_SDIO = STM32F4_RCC_INDEX(0, 10),
0120   STM32F4_RCC_OTGFS = STM32F4_RCC_INDEX(0, 12),
0121   STM32F4_RCC_ETHMAC = STM32F4_RCC_INDEX(0, 14),
0122   STM32F4_RCC_ETHMACTX = STM32F4_RCC_INDEX(0, 15),
0123   STM32F4_RCC_ETHMACRX = STM32F4_RCC_INDEX(0, 16),
0124 
0125   STM32F4_RCC_AFIO = STM32F4_RCC_INDEX(1, 0),
0126   STM32F4_RCC_GPIOA = STM32F4_RCC_INDEX(1, 2),
0127   STM32F4_RCC_GPIOB = STM32F4_RCC_INDEX(1, 3),
0128   STM32F4_RCC_GPIOC = STM32F4_RCC_INDEX(1, 4),
0129   STM32F4_RCC_GPIOD = STM32F4_RCC_INDEX(1, 5),
0130   STM32F4_RCC_GPIOE = STM32F4_RCC_INDEX(1, 6),
0131   STM32F4_RCC_GPIOF = STM32F4_RCC_INDEX(1, 7),
0132   STM32F4_RCC_GPIOG = STM32F4_RCC_INDEX(1, 8),
0133   STM32F4_RCC_ADC1 = STM32F4_RCC_INDEX(1, 9),
0134   STM32F4_RCC_ADC2 = STM32F4_RCC_INDEX(1, 10),
0135   STM32F4_RCC_TIM1 = STM32F4_RCC_INDEX(1, 11),
0136   STM32F4_RCC_SPI1 = STM32F4_RCC_INDEX(1, 12),
0137   STM32F4_RCC_TIM8 = STM32F4_RCC_INDEX(1, 13),
0138   STM32F4_RCC_USART1 = STM32F4_RCC_INDEX(1, 14),
0139   STM32F4_RCC_ADC3 = STM32F4_RCC_INDEX(1, 15),
0140   STM32F4_RCC_TIM9 = STM32F4_RCC_INDEX(1, 19),
0141   STM32F4_RCC_TIM10 = STM32F4_RCC_INDEX(1, 20),
0142   STM32F4_RCC_TIM11 = STM32F4_RCC_INDEX(1, 21),
0143 
0144   STM32F4_RCC_TIM2 = STM32F4_RCC_INDEX(2, 0),
0145   STM32F4_RCC_TIM3 = STM32F4_RCC_INDEX(2, 1),
0146   STM32F4_RCC_TIM4 = STM32F4_RCC_INDEX(2, 2),
0147   STM32F4_RCC_TIM5 = STM32F4_RCC_INDEX(2, 3),
0148   STM32F4_RCC_TIM6 = STM32F4_RCC_INDEX(2, 4),
0149   STM32F4_RCC_TIM7 = STM32F4_RCC_INDEX(2, 5),
0150   STM32F4_RCC_TIM12 = STM32F4_RCC_INDEX(2, 6),
0151   STM32F4_RCC_TIM13 = STM32F4_RCC_INDEX(2, 7),
0152   STM32F4_RCC_TIM14 = STM32F4_RCC_INDEX(2, 8),
0153   STM32F4_RCC_WWDG = STM32F4_RCC_INDEX(2, 11),
0154   STM32F4_RCC_SPI2 = STM32F4_RCC_INDEX(2, 14),
0155   STM32F4_RCC_SPI3 = STM32F4_RCC_INDEX(2, 15),
0156   STM32F4_RCC_USART2 = STM32F4_RCC_INDEX(2, 17),
0157   STM32F4_RCC_USART3 = STM32F4_RCC_INDEX(2, 18),
0158   STM32F4_RCC_UART4 = STM32F4_RCC_INDEX(2, 19),
0159   STM32F4_RCC_UART5 = STM32F4_RCC_INDEX(2, 20),
0160   STM32F4_RCC_I2C1 = STM32F4_RCC_INDEX(2, 21),
0161   STM32F4_RCC_I2C2 = STM32F4_RCC_INDEX(2, 22),
0162   STM32F4_RCC_USB = STM32F4_RCC_INDEX(2, 23),
0163   STM32F4_RCC_CAN1 = STM32F4_RCC_INDEX(2, 24),
0164   STM32F4_RCC_CAN2 = STM32F4_RCC_INDEX(2, 25),
0165   STM32F4_RCC_BKP = STM32F4_RCC_INDEX(2, 27),
0166   STM32F4_RCC_PWR = STM32F4_RCC_INDEX(2, 28),
0167   STM32F4_RCC_DAC = STM32F4_RCC_INDEX(2, 29),
0168 
0169   /** @} */
0170 
0171 #endif /* STM32F4_FAMILY_F10XXX */
0172 } stm32f4_rcc_index;
0173 
0174 void stm32f4_rcc_reset(stm32f4_rcc_index index);
0175 
0176 void stm32f4_rcc_set_reset(stm32f4_rcc_index index, bool set);
0177 
0178 void stm32f4_rcc_set_clock(stm32f4_rcc_index index, bool set);
0179 
0180 #ifdef STM32F4_FAMILY_F4XXXX
0181 void stm32f4_rcc_set_low_power_clock(stm32f4_rcc_index index, bool set);
0182 #endif /* STM32F4_FAMILY_F4XXXX */
0183 
0184 /** @} */
0185 
0186 #ifdef __cplusplus
0187 }
0188 #endif /* __cplusplus */
0189 
0190 #endif /* LIBBSP_ARM_STM32F4_RCC_H */