diff options
| author | Marti Bolivar <mbolivar@leaflabs.com> | 2012-01-27 21:31:30 -0500 | 
|---|---|---|
| committer | Marti Bolivar <mbolivar@leaflabs.com> | 2012-04-11 16:56:54 -0400 | 
| commit | 4dc4d99fdddffdeb3e14e722e935c76c74ff9a15 (patch) | |
| tree | 639198c2e597d44f03739134f71e2fb59c9a0c29 /libmaple/stm32f1/include | |
| parent | b5a8e0386d5134839bf23e82110d2f1926201202 (diff) | |
| download | librambutan-4dc4d99fdddffdeb3e14e722e935c76c74ff9a15.tar.gz librambutan-4dc4d99fdddffdeb3e14e722e935c76c74ff9a15.zip  | |
RCC: Clean up and sanitize interfaces across F1, F2 series.
Additions:
- rcc_switch_sysclk():
  For changing the clock used as SYSCLK's source.
- enum rcc_clk:
  One for each system and secondary clock source (e.g. HSE,
  LSE). These are defined on a per-series basis in each of the
  <series/rcc.h>.
- rcc_turn_on_clk(),
  rcc_turn_off_clk(),
  rcc_is_clk_ready():
  For turning on system and secondary clock sources, and checking
  whether or not they're ready. Uses enum rcc_clk.
Removals:
- rcc_clk_init(): There's no way to port this to F2. Move it to the F1
  header. This also means we can remove the empty implementation and
  enum rcc_pll_multiplier from the F2 RCC header, where it doesn't
  make any sense.
Also fix up some includes, and rewrite rcc_clk_init() in terms of the
new clock source management functions.
Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Diffstat (limited to 'libmaple/stm32f1/include')
| -rw-r--r-- | libmaple/stm32f1/include/series/rcc.h | 31 | 
1 files changed, 30 insertions, 1 deletions
diff --git a/libmaple/stm32f1/include/series/rcc.h b/libmaple/stm32f1/include/series/rcc.h index 261dc5d..474aaf7 100644 --- a/libmaple/stm32f1/include/series/rcc.h +++ b/libmaple/stm32f1/include/series/rcc.h @@ -37,6 +37,8 @@  extern "C"{  #endif +#include <libmaple/libmaple.h> +  /*   * Register map   */ @@ -383,7 +385,7 @@ typedef struct rcc_reg_map {  #define RCC_CSR_LSION                   BIT(RCC_CSR_LSION_BIT)  /* - * Other types + * libmaple-mandated enumeration types.   */  /** @@ -546,6 +548,33 @@ typedef enum rcc_ahb_divider {      RCC_AHB_SYSCLK_DIV_512 = 0xF << 4,  } rcc_ahb_divider; +/** + * @brief Available clock sources. + */ +typedef enum rcc_clk { +    RCC_CLK_PLL    = (uint16)((offsetof(struct rcc_reg_map, CR) << 8) | +                              RCC_CR_PLLON_BIT), /**< Main PLL, clocked by +                                                    HSI or HSE. */ +    RCC_CLK_HSE    = (uint16)((offsetof(struct rcc_reg_map, CR) << 8) | +                              RCC_CR_HSEON_BIT), /**< High speed external. */ +    RCC_CLK_HSI    = (uint16)((offsetof(struct rcc_reg_map, CR) << 8) | +                              RCC_CR_HSION_BIT), /**< High speed internal. */ +    RCC_CLK_LSE    = (uint16)((offsetof(struct rcc_reg_map, BDCR) << 8) | +                              RCC_BDCR_LSEON_BIT), /**< Low-speed external +                                                    * (32.768 KHz). */ +    RCC_CLK_LSI    = (uint16)((offsetof(struct rcc_reg_map, CSR) << 8) | +                              RCC_CSR_LSION_BIT), /**< Low-speed internal +                                                   * (approximately 32 KHz). */ +} rcc_clk; + +/* + * Series-specific functionality. + */ + +void rcc_clk_init(rcc_sysclk_src sysclk_src, +                  rcc_pllsrc pll_src, +                  rcc_pll_multiplier pll_mul); +  #ifdef __cplusplus  }  #endif  | 
