/** **************************************************************************************** * * @file rcc.h * * @brief Header file - Reset and clock control(RCC) Driver * **************************************************************************************** */ #ifndef _RCC_H_ #define _RCC_H_ #include /* * DEFINES **************************************************************************************** */ /// Clock Selection of Core System enum sys_clk_sel { SYS_CLK_16M = 0, // XO16M SYS_CLK_32M = 1, // DPLL64M/2 SYS_CLK_48M = 2, // DPLL48M SYS_CLK_64M = 3, // DPLL64 SYS_CLK_HSI = 4, // RC16M SYS_CLK_LSI = 5, // RC32K }; /// Clock Frequency of SYS_CLK enum sys_clk_freq { SYS_FREQ_32K = 32000, SYS_FREQ_16M = 16000000, SYS_FREQ_32M = 32000000, SYS_FREQ_48M = 48000000, SYS_FREQ_64M = 64000000, }; /// Clock Selection of Flash Controlor enum fsh_clk_sel { FSH_CLK_HSI16 = 1, // RC16M FSH_CLK_HSE16 = 2, // XO16M FSH_CLK_DPLL = 4, // DPLL FSH_CLK_DPLL128 = 8, // DPLL128M // prescale from DPLL128M FSH_CLK_DPSC64 = FSH_CLK_DPLL128 + 1, // psc2 FSH_CLK_DPSC42 = FSH_CLK_DPLL128 + 2, // psc3 FSH_CLK_DPSC32 = FSH_CLK_DPLL128 + 3, // psc4 FSH_CLK_DPSC25 = FSH_CLK_DPLL128 + 4, // psc5 }; /// Clock Frequency of fSH_CLK, unit in MHz enum fsh_clk_freq { FSH_FREQ_16MHz = 16, // RC16M or XO16M FSH_FREQ_48MHz = 48, // DPLL FSH_FREQ_64MHz = 64, // DPLL FSH_FREQ_PSC64 = 64, // DPLL128 / psc2 FSH_FREQ_PSC42 = 42, // DPLL128 / psc3 FSH_FREQ_PSC32 = 32, // DPLL128 / psc4 FSH_FREQ_PSC25 = 25, // DPLL128 / psc5 }; /// BUS Operation Index enum rcc_bus_idx { AHB_RST_CTRL, APB_RST_CTRL, AHB_CLK_RUN, APB_CLK_RUN, AHB_CLK_SLEEP, APB_CLK_SLEEP, AHB_CLK_DEEPSL, APB_CLK_DEEPSL, }; /// Bits Field of AHB-BUS enum rcc_ahb_bfs { AHB_RCC_BIT = (1UL << 0), // CLK AHB_SYSCFG_BIT = (1UL << 1), // CLK RST AHB_CSC_RST_BIT = (1UL << 2), // RST AHB_SPIM_BIT = (1UL << 4), // CLK RST AHB_SPIS_BIT = (1UL << 5), // CLK RST AHB_FSHC_BIT = (1UL << 6), // CLK RST AHB_ADC_BIT = (1UL << 7), // CLK RST AHB_GPIOA_RST_BIT = (1UL << 8), // RST AHB_AHB2P1_BIT = (1UL << 9), // CLK RST AHB_AHB2P2_BIT = (1UL << 10), // CLK RST AHB_CACHE_BIT = (1UL << 11), // CLK RST AHB_USB_BIT = (1UL << 12), // CLK RST }; /// Bits Field of APB-BUS enum rcc_apb_bfs { APB_BTMR_BIT = (1UL << 0), // CLK RST APB_CTMR_BIT = (1UL << 1), // CLK RST APB_ATMR_BIT = (1UL << 2), // CLK RST APB_UART1_BIT = (1UL << 3), // CLK RST APB_UART2_BIT = (1UL << 4), // CLK RST APB_DMAC_BIT = (1UL << 6), // CLK RST APB_EXTI_BIT = (1UL << 8), // CLK RST APB_I2C_BIT = (1UL << 9), // CLK RST APB_IWDT_BIT = (1UL << 10), // CLK APB_MDM_BIT = (1UL << 11), // CLK RST APB_RF_BIT = (1UL << 12), // CLK RST APB_AON_BIT = (1UL << 16), // CLK APB_APBMISC_BIT = (1UL << 17), // CLK APB_PLLCAL_RST_BIT = (1UL << 13), // RST APB_RCCALIB_RST_BIT = (1UL << 14), // RST APB_RC16MCNT_RST_BIT = (1UL << 15), // RST APB_BLELTMR_RST_BIT = (1UL << 16), // RST APB_RTCSOFT_RST_BIT = (1UL << 17), // RST }; /* * MACROS DECLARATION **************************************************************************************** */ #include "reg_rcc.h" #define RCC_AHBCLK_EN(bfs) dowl( RCC->AHBCLK_EN_RUN.Word |= (bfs); ) #define RCC_APBCLK_EN(bfs) dowl( RCC->APBCLK_EN_RUN.Word |= (bfs); ) #define RCC_AHBCLK_DIS(bfs) dowl( RCC->AHBCLK_EN_RUN.Word &= ~(bfs); ) #define RCC_APBCLK_DIS(bfs) dowl( RCC->APBCLK_EN_RUN.Word &= ~(bfs); ) #define RCC_AHBRST_REQ(bfs) dowl( RCC->AHBRST_CTRL.Word |= (bfs);RCC->AHBRST_CTRL.Word &= ~(bfs); ) #define RCC_APBRST_REQ(bfs) dowl( RCC->APBRST_CTRL.Word |= (bfs);RCC->APBRST_CTRL.Word &= ~(bfs); ) /* * FUNCTION DECLARATION **************************************************************************************** */ /** **************************************************************************************** * @brief Get BUS Register's value * * @param[in] idx Index of register @see enum rcc_bus_idx * * @return value **************************************************************************************** */ uint32_t rcc_bus_get(uint8_t idx); /** **************************************************************************************** * @brief Enable Bits Field of BUS Register * * @param[in] idx Index of register @see enum rcc_bus_idx * @param[in] bfs Bits field of value @see enum rcc_ahb_bfs OR rcc_apb_bfs * **************************************************************************************** */ void rcc_bus_enb(uint8_t idx, uint32_t bfs); /** **************************************************************************************** * @brief Disable Bits Field of BUS Register * * @param[in] idx Index of register @see enum rcc_bus_idx * @param[in] bfs Bits field of value @see enum rcc_ahb_bfs OR rcc_apb_bfs * **************************************************************************************** */ void rcc_bus_dis(uint8_t idx, uint32_t bfs); /** **************************************************************************************** * @brief Reset Bits Field of BUS Register (Combine rcc_bus_enb & rcc_bus_dis) * * @param[in] idx Index of register @see enum rcc_bus_idx * @param[in] bfs Bits field of value @see enum rcc_ahb_bfs OR rcc_apb_bfs * **************************************************************************************** */ void rcc_bus_rst(uint8_t idx, uint32_t bfs); /** **************************************************************************************** * @brief Enable ADC Clock Configure * **************************************************************************************** */ void rcc_adc_en(void); /** **************************************************************************************** * @brief Enable BLE Clock Configure * **************************************************************************************** */ void rcc_ble_en(void); /** **************************************************************************************** * @brief Enable USB Clock/Pad Configure * **************************************************************************************** */ void rcc_usb_en(void); /** **************************************************************************************** * @brief Set system clock selection * * @param[in] sys_clk Index of Clock Selected @see enum sys_clk_sel * **************************************************************************************** */ void rcc_sysclk_set(uint8_t sys_clk); /** **************************************************************************************** * @brief Get system clock selection * * @return Clock Selected @see enum sys_clk_sel **************************************************************************************** */ uint8_t rcc_sysclk_get(void); /** **************************************************************************************** * @brief Get clock frequency of core system, unit in Hz * * @return frequency @see enum sys_clk_freq **************************************************************************************** */ uint32_t rcc_sysclk_freq(void); /** **************************************************************************************** * @brief Get flash controlor clock selection * * @return Clock Selected @see enum fsh_clk_sel **************************************************************************************** */ uint8_t rcc_fshclk_get(void); /** **************************************************************************************** * @brief Get clock frequency of flash controlor, unit in MHz. * * @return freq in MHz @see enum fsh_clk_freq **************************************************************************************** */ uint8_t rcc_fshclk_mhz(void); #if (ROM_UNUSED) /** **************************************************************************************** * @brief Set flash controlor clock selection * * @param[in] fclk_sel Index of Clock Selected @see enum fsh_clk_sel * **************************************************************************************** */ void rcc_fshclk_set(uint8_t fsh_clk); #endif // Macro for Deprecated Functions { #define rccGetSysClk() rcc_sysclk_freq() // } #endif // _RCC_H_