bleSDK_expansion_board/drivers/api/rcc.h

281 lines
8.8 KiB
C
Raw Permalink Normal View History

/**
****************************************************************************************
*
* @file rcc.h
*
* @brief Header file - Reset and clock control(RCC) Driver
*
****************************************************************************************
*/
#ifndef _RCC_H_
#define _RCC_H_
#include <stdint.h>
/*
* 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_