stm32l/stm32f: name space standardization [BREAKING]

As done by esden for the F4, remove typedefs and add prefixes to clock enums
This extends this to all stm32 families.

    Let's not hide the fact that these variables are structs/enums.

    We are filling up the namespace badly enough, we should be prefixing as
    much as we can with the module names at least. As users we already run
    often enough in namespace colisions we don't have to make it worse.

    * CLOCK_3V3_xxx enums renamed to RCC_CLOCK_3V3_xxx
    * clock enums (PLL, HSI, HSE ...) prefixed with RCC_
    * scale enum of pwr module prefixed with PWR_
This commit is contained in:
Karl Palsson
2015-11-08 15:53:31 +00:00
committed by Piotr Esden-Tempski
parent d680be81b5
commit 3a7cbec776
14 changed files with 580 additions and 580 deletions

View File

@@ -77,15 +77,15 @@
/* --- Function prototypes ------------------------------------------------- */ /* --- Function prototypes ------------------------------------------------- */
typedef enum { enum pwr_vos_scale {
RANGE1, PWR_SCALE1,
RANGE2, PWR_SCALE2,
RANGE3, PWR_SCALE3,
} vos_scale_t; } vos_scale_t;
BEGIN_DECLS BEGIN_DECLS
void pwr_set_vos_scale(vos_scale_t scale); void pwr_set_vos_scale(enum pwr_vos_scale scale);
END_DECLS END_DECLS

View File

@@ -383,7 +383,7 @@ extern uint32_t rcc_ahb_frequency;
extern uint32_t rcc_apb1_frequency; extern uint32_t rcc_apb1_frequency;
enum rcc_osc { enum rcc_osc {
HSI14, HSI, HSE, PLL, LSI, LSE, HSI48 RCC_HSI14, RCC_HSI, RCC_HSE, RCC_PLL, RCC_LSI, RCC_LSE, RCC_HSI48
}; };
#define _REG_BIT(base, bit) (((base) << 5) + (bit)) #define _REG_BIT(base, bit) (((base) << 5) + (bit))

View File

@@ -540,7 +540,7 @@ extern uint32_t rcc_apb2_frequency;
/* --- Function prototypes ------------------------------------------------- */ /* --- Function prototypes ------------------------------------------------- */
enum rcc_osc { enum rcc_osc {
PLL, PLL2, PLL3, HSE, HSI, LSE, LSI RCC_PLL, RCC_PLL2, RCC_PLL3, RCC_HSE, RCC_HSI, RCC_LSE, RCC_LSI
}; };
#define _REG_BIT(base, bit) (((base) << 5) + (bit)) #define _REG_BIT(base, bit) (((base) << 5) + (bit))

View File

@@ -478,12 +478,12 @@ extern uint32_t rcc_apb2_frequency;
/* --- Function prototypes ------------------------------------------------- */ /* --- Function prototypes ------------------------------------------------- */
typedef enum { enum rcc_clock_3v3 {
CLOCK_3V3_120MHZ, RCC_CLOCK_3V3_120MHZ,
CLOCK_3V3_END RCC_CLOCK_3V3_END
} clock_3v3_t; };
typedef struct { struct rcc_clock_scale {
uint8_t pllm; uint8_t pllm;
uint16_t plln; uint16_t plln;
uint8_t pllp; uint8_t pllp;
@@ -494,12 +494,12 @@ typedef struct {
uint8_t ppre2; uint8_t ppre2;
uint32_t apb1_frequency; uint32_t apb1_frequency;
uint32_t apb2_frequency; uint32_t apb2_frequency;
} clock_scale_t; };
extern const clock_scale_t hse_8mhz_3v3[CLOCK_3V3_END]; extern const struct rcc_clock_scale rcc_hse_8mhz_3v3[RCC_CLOCK_3V3_END];
typedef enum { typedef enum {
PLL, HSE, HSI, LSE, LSI RCC_PLL, RCC_HSE, RCC_HSI, RCC_LSE, RCC_LSI
} osc_t; } osc_t;
#define _REG_BIT(base, bit) (((base) << 5) + (bit)) #define _REG_BIT(base, bit) (((base) << 5) + (bit))
@@ -751,7 +751,7 @@ void rcc_set_main_pll_hsi(uint32_t pllm, uint32_t plln, uint32_t pllp,
void rcc_set_main_pll_hse(uint32_t pllm, uint32_t plln, uint32_t pllp, void rcc_set_main_pll_hse(uint32_t pllm, uint32_t plln, uint32_t pllp,
uint32_t pllq); uint32_t pllq);
uint32_t rcc_system_clock_source(void); uint32_t rcc_system_clock_source(void);
void rcc_clock_setup_hse_3v3(const clock_scale_t *clock); void rcc_clock_setup_hse_3v3(const struct rcc_clock_scale *clock);
void rcc_backupdomain_reset(void); void rcc_backupdomain_reset(void);
END_DECLS END_DECLS

View File

@@ -411,13 +411,13 @@ extern uint32_t rcc_apb2_frequency;
/* --- Function prototypes ------------------------------------------------- */ /* --- Function prototypes ------------------------------------------------- */
enum rcc_clock { enum rcc_clock {
CLOCK_44MHZ, RCC_CLOCK_44MHZ,
CLOCK_48MHZ, RCC_CLOCK_48MHZ,
CLOCK_64MHZ, RCC_CLOCK_64MHZ,
CLOCK_END RCC_CLOCK_END
}; };
typedef struct { struct rcc_clock_scale {
uint8_t pll; uint8_t pll;
uint8_t pllsrc; uint8_t pllsrc;
uint32_t flash_config; uint32_t flash_config;
@@ -427,12 +427,12 @@ typedef struct {
uint8_t power_save; uint8_t power_save;
uint32_t apb1_frequency; uint32_t apb1_frequency;
uint32_t apb2_frequency; uint32_t apb2_frequency;
} clock_scale_t; };
extern const clock_scale_t hsi_8mhz[CLOCK_END]; extern const struct rcc_clock_scale hsi_8mhz[RCC_CLOCK_END];
enum osc { enum rcc_osc {
PLL, HSE, HSI, LSE, LSI RCC_PLL, RCC_HSE, RCC_HSI, RCC_LSE, RCC_LSI
}; };
#define _REG_BIT(base, bit) (((base) << 5) + (bit)) #define _REG_BIT(base, bit) (((base) << 5) + (bit))
@@ -580,21 +580,21 @@ enum rcc_periph_rst {
BEGIN_DECLS BEGIN_DECLS
void rcc_osc_ready_int_clear(enum osc osc); void rcc_osc_ready_int_clear(enum rcc_osc osc);
void rcc_osc_ready_int_enable(enum osc osc); void rcc_osc_ready_int_enable(enum rcc_osc osc);
void rcc_osc_ready_int_disable(enum osc osc); void rcc_osc_ready_int_disable(enum rcc_osc osc);
int rcc_osc_ready_int_flag(enum osc osc); int rcc_osc_ready_int_flag(enum rcc_osc osc);
void rcc_css_int_clear(void); void rcc_css_int_clear(void);
int rcc_css_int_flag(void); int rcc_css_int_flag(void);
void rcc_wait_for_osc_ready(enum osc osc); void rcc_wait_for_osc_ready(enum rcc_osc osc);
void rcc_wait_for_osc_not_ready(enum osc osc); void rcc_wait_for_osc_not_ready(enum rcc_osc osc);
void rcc_wait_for_sysclk_status(enum osc osc); void rcc_wait_for_sysclk_status(enum rcc_osc osc);
void rcc_osc_on(enum osc osc); void rcc_osc_on(enum rcc_osc osc);
void rcc_osc_off(enum osc osc); void rcc_osc_off(enum rcc_osc osc);
void rcc_css_enable(void); void rcc_css_enable(void);
void rcc_css_disable(void); void rcc_css_disable(void);
void rcc_osc_bypass_enable(enum osc osc); void rcc_osc_bypass_enable(enum rcc_osc osc);
void rcc_osc_bypass_disable(enum osc osc); void rcc_osc_bypass_disable(enum rcc_osc osc);
void rcc_set_sysclk_source(uint32_t clk); void rcc_set_sysclk_source(uint32_t clk);
void rcc_set_pll_source(uint32_t pllsrc); void rcc_set_pll_source(uint32_t pllsrc);
void rcc_set_ppre2(uint32_t ppre2); void rcc_set_ppre2(uint32_t ppre2);
@@ -604,7 +604,7 @@ void rcc_set_prediv(uint32_t prediv);
void rcc_set_pll_multiplier(uint32_t pll); void rcc_set_pll_multiplier(uint32_t pll);
uint32_t rcc_get_system_clock_source(void); uint32_t rcc_get_system_clock_source(void);
void rcc_backupdomain_reset(void); void rcc_backupdomain_reset(void);
void rcc_clock_setup_hsi(const clock_scale_t *clock); void rcc_clock_setup_hsi(const struct rcc_clock_scale *clock);
void rcc_set_i2c_clock_hsi(uint32_t i2c); void rcc_set_i2c_clock_hsi(uint32_t i2c);
void rcc_set_i2c_clock_sysclk(uint32_t i2c); void rcc_set_i2c_clock_sysclk(uint32_t i2c);
uint32_t rcc_get_i2c_clocks(void); uint32_t rcc_get_i2c_clocks(void);

View File

@@ -478,7 +478,7 @@ extern uint32_t rcc_apb2_frequency;
/* --- Function prototypes ------------------------------------------------- */ /* --- Function prototypes ------------------------------------------------- */
enum rcc_osc { enum rcc_osc {
PLL, HSE, HSI48, HSI16, MSI, LSE, LSI RCC_PLL, RCC_HSE, RCC_HSI48, RCC_HSI16, RCC_MSI, RCC_LSE, RCC_LSI
}; };

View File

@@ -388,7 +388,7 @@
#define RCC_CSR_LSIRDY (1 << 1) #define RCC_CSR_LSIRDY (1 << 1)
#define RCC_CSR_LSION (1 << 0) #define RCC_CSR_LSION (1 << 0)
typedef struct { struct rcc_clock_scale {
uint8_t pll_mul; uint8_t pll_mul;
uint16_t pll_div; uint16_t pll_div;
uint8_t pll_source; uint8_t pll_source;
@@ -396,23 +396,23 @@ typedef struct {
uint8_t hpre; uint8_t hpre;
uint8_t ppre1; uint8_t ppre1;
uint8_t ppre2; uint8_t ppre2;
vos_scale_t voltage_scale; enum pwr_vos_scale voltage_scale;
uint32_t apb1_frequency; uint32_t apb1_frequency;
uint32_t apb2_frequency; uint32_t apb2_frequency;
uint8_t msi_range; uint8_t msi_range;
} clock_scale_t; };
typedef enum { enum rcc_clock_config_entry {
CLOCK_VRANGE1_HSI_PLL_24MHZ, RCC_CLOCK_VRANGE1_HSI_PLL_24MHZ,
CLOCK_VRANGE1_HSI_PLL_32MHZ, RCC_CLOCK_VRANGE1_HSI_PLL_32MHZ,
CLOCK_VRANGE1_HSI_RAW_16MHZ, RCC_CLOCK_VRANGE1_HSI_RAW_16MHZ,
CLOCK_VRANGE1_HSI_RAW_4MHZ, RCC_CLOCK_VRANGE1_HSI_RAW_4MHZ,
CLOCK_VRANGE1_MSI_RAW_4MHZ, RCC_CLOCK_VRANGE1_MSI_RAW_4MHZ,
CLOCK_VRANGE1_MSI_RAW_2MHZ, RCC_CLOCK_VRANGE1_MSI_RAW_2MHZ,
CLOCK_CONFIG_END RCC_CLOCK_CONFIG_END
} clock_config_entry_t; };
extern const clock_scale_t clock_config[CLOCK_CONFIG_END]; extern const struct rcc_clock_scale rcc_clock_config[RCC_CLOCK_CONFIG_END];
/* --- Variable definitions ------------------------------------------------ */ /* --- Variable definitions ------------------------------------------------ */
@@ -422,9 +422,9 @@ extern uint32_t rcc_apb2_frequency;
/* --- Function prototypes ------------------------------------------------- */ /* --- Function prototypes ------------------------------------------------- */
typedef enum { enum rcc_osc {
PLL, HSE, HSI, MSI, LSE, LSI RCC_PLL, RCC_HSE, RCC_HSI, RCC_MSI, RCC_LSE, RCC_LSI
} osc_t; };
#define _REG_BIT(base, bit) (((base) << 5) + (bit)) #define _REG_BIT(base, bit) (((base) << 5) + (bit))
@@ -580,20 +580,20 @@ enum rcc_periph_rst {
BEGIN_DECLS BEGIN_DECLS
void rcc_osc_ready_int_clear(osc_t osc); void rcc_osc_ready_int_clear(enum rcc_osc osc);
void rcc_osc_ready_int_enable(osc_t osc); void rcc_osc_ready_int_enable(enum rcc_osc osc);
void rcc_osc_ready_int_disable(osc_t osc); void rcc_osc_ready_int_disable(enum rcc_osc osc);
int rcc_osc_ready_int_flag(osc_t osc); int rcc_osc_ready_int_flag(enum rcc_osc osc);
void rcc_css_int_clear(void); void rcc_css_int_clear(void);
int rcc_css_int_flag(void); int rcc_css_int_flag(void);
void rcc_wait_for_osc_ready(osc_t osc); void rcc_wait_for_osc_ready(enum rcc_osc osc);
void rcc_wait_for_sysclk_status(osc_t osc); void rcc_wait_for_sysclk_status(enum rcc_osc osc);
void rcc_osc_on(osc_t osc); void rcc_osc_on(enum rcc_osc osc);
void rcc_osc_off(osc_t osc); void rcc_osc_off(enum rcc_osc osc);
void rcc_css_enable(void); void rcc_css_enable(void);
void rcc_css_disable(void); void rcc_css_disable(void);
void rcc_osc_bypass_enable(osc_t osc); void rcc_osc_bypass_enable(enum rcc_osc osc);
void rcc_osc_bypass_disable(osc_t osc); void rcc_osc_bypass_disable(enum rcc_osc osc);
void rcc_set_sysclk_source(uint32_t clk); void rcc_set_sysclk_source(uint32_t clk);
void rcc_set_pll_configuration(uint32_t source, uint32_t multiplier, void rcc_set_pll_configuration(uint32_t source, uint32_t multiplier,
uint32_t divisor); uint32_t divisor);
@@ -606,9 +606,9 @@ void rcc_set_usbpre(uint32_t usbpre);
void rcc_set_rtcpre(uint32_t rtcpre); void rcc_set_rtcpre(uint32_t rtcpre);
uint32_t rcc_system_clock_source(void); uint32_t rcc_system_clock_source(void);
void rcc_rtc_select_clock(uint32_t clock); void rcc_rtc_select_clock(uint32_t clock);
void rcc_clock_setup_msi(const clock_scale_t *clock); void rcc_clock_setup_msi(const struct rcc_clock_scale *clock);
void rcc_clock_setup_hsi(const clock_scale_t *clock); void rcc_clock_setup_hsi(const struct rcc_clock_scale *clock);
void rcc_clock_setup_pll(const clock_scale_t *clock); void rcc_clock_setup_pll(const struct rcc_clock_scale *clock);
void rcc_backupdomain_reset(void); void rcc_backupdomain_reset(void);
END_DECLS END_DECLS

View File

@@ -24,19 +24,19 @@
#include <libopencm3/stm32/pwr.h> #include <libopencm3/stm32/pwr.h>
#include <libopencm3/stm32/rcc.h> #include <libopencm3/stm32/rcc.h>
void pwr_set_vos_scale(vos_scale_t scale) void pwr_set_vos_scale(enum pwr_vos_scale scale)
{ {
/* You are not allowed to write zeros here, don't try and optimize! */ /* You are not allowed to write zeros here, don't try and optimize! */
uint32_t reg = PWR_CR; uint32_t reg = PWR_CR;
reg &= ~(PWR_CR_VOS_MASK); reg &= ~(PWR_CR_VOS_MASK);
switch (scale) { switch (scale) {
case RANGE1: case PWR_SCALE1:
reg |= PWR_CR_VOS_RANGE1; reg |= PWR_CR_VOS_RANGE1;
break; break;
case RANGE2: case PWR_SCALE2:
reg |= PWR_CR_VOS_RANGE2; reg |= PWR_CR_VOS_RANGE2;
break; break;
case RANGE3: case PWR_SCALE3:
reg |= PWR_CR_VOS_RANGE3; reg |= PWR_CR_VOS_RANGE3;
break; break;
} }

View File

@@ -56,25 +56,25 @@ uint32_t rcc_apb1_frequency = 8000000; /* 8MHz after reset */
void rcc_osc_ready_int_clear(enum rcc_osc osc) void rcc_osc_ready_int_clear(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSI48: case RCC_HSI48:
RCC_CIR |= RCC_CIR_HSI48RDYC; RCC_CIR |= RCC_CIR_HSI48RDYC;
break; break;
case HSI14: case RCC_HSI14:
RCC_CIR |= RCC_CIR_HSI14RDYC; RCC_CIR |= RCC_CIR_HSI14RDYC;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYC; RCC_CIR |= RCC_CIR_HSIRDYC;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYC; RCC_CIR |= RCC_CIR_HSERDYC;
break; break;
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYC; RCC_CIR |= RCC_CIR_PLLRDYC;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYC; RCC_CIR |= RCC_CIR_LSERDYC;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYC; RCC_CIR |= RCC_CIR_LSIRDYC;
break; break;
} }
@@ -89,25 +89,25 @@ void rcc_osc_ready_int_clear(enum rcc_osc osc)
void rcc_osc_ready_int_enable(enum rcc_osc osc) void rcc_osc_ready_int_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSI48: case RCC_HSI48:
RCC_CIR |= RCC_CIR_HSI48RDYIE; RCC_CIR |= RCC_CIR_HSI48RDYIE;
break; break;
case HSI14: case RCC_HSI14:
RCC_CIR |= RCC_CIR_HSI14RDYIE; RCC_CIR |= RCC_CIR_HSI14RDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYIE; RCC_CIR |= RCC_CIR_HSIRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYIE; RCC_CIR |= RCC_CIR_HSERDYIE;
break; break;
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYIE; RCC_CIR |= RCC_CIR_PLLRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYIE; RCC_CIR |= RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYIE; RCC_CIR |= RCC_CIR_LSIRDYIE;
break; break;
} }
@@ -122,25 +122,25 @@ void rcc_osc_ready_int_enable(enum rcc_osc osc)
void rcc_osc_ready_int_disable(enum rcc_osc osc) void rcc_osc_ready_int_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSI48: case RCC_HSI48:
RCC_CIR &= ~RCC_CIR_HSI48RDYC; RCC_CIR &= ~RCC_CIR_HSI48RDYC;
break; break;
case HSI14: case RCC_HSI14:
RCC_CIR &= ~RCC_CIR_HSI14RDYC; RCC_CIR &= ~RCC_CIR_HSI14RDYC;
break; break;
case HSI: case RCC_HSI:
RCC_CIR &= ~RCC_CIR_HSIRDYC; RCC_CIR &= ~RCC_CIR_HSIRDYC;
break; break;
case HSE: case RCC_HSE:
RCC_CIR &= ~RCC_CIR_HSERDYC; RCC_CIR &= ~RCC_CIR_HSERDYC;
break; break;
case PLL: case RCC_PLL:
RCC_CIR &= ~RCC_CIR_PLLRDYC; RCC_CIR &= ~RCC_CIR_PLLRDYC;
break; break;
case LSE: case RCC_LSE:
RCC_CIR &= ~RCC_CIR_LSERDYC; RCC_CIR &= ~RCC_CIR_LSERDYC;
break; break;
case LSI: case RCC_LSI:
RCC_CIR &= ~RCC_CIR_LSIRDYC; RCC_CIR &= ~RCC_CIR_LSIRDYC;
break; break;
} }
@@ -156,25 +156,25 @@ void rcc_osc_ready_int_disable(enum rcc_osc osc)
int rcc_osc_ready_int_flag(enum rcc_osc osc) int rcc_osc_ready_int_flag(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSI48: case RCC_HSI48:
return (RCC_CIR & RCC_CIR_HSI48RDYF) != 0; return (RCC_CIR & RCC_CIR_HSI48RDYF) != 0;
break; break;
case HSI14: case RCC_HSI14:
return (RCC_CIR & RCC_CIR_HSI14RDYF) != 0; return (RCC_CIR & RCC_CIR_HSI14RDYF) != 0;
break; break;
case HSI: case RCC_HSI:
return (RCC_CIR & RCC_CIR_HSIRDYF) != 0; return (RCC_CIR & RCC_CIR_HSIRDYF) != 0;
break; break;
case HSE: case RCC_HSE:
return (RCC_CIR & RCC_CIR_HSERDYF) != 0; return (RCC_CIR & RCC_CIR_HSERDYF) != 0;
break; break;
case PLL: case RCC_PLL:
return (RCC_CIR & RCC_CIR_PLLRDYF) != 0; return (RCC_CIR & RCC_CIR_PLLRDYF) != 0;
break; break;
case LSE: case RCC_LSE:
return (RCC_CIR & RCC_CIR_LSERDYF) != 0; return (RCC_CIR & RCC_CIR_LSERDYF) != 0;
break; break;
case LSI: case RCC_LSI:
return (RCC_CIR & RCC_CIR_LSIRDYF) != 0; return (RCC_CIR & RCC_CIR_LSIRDYF) != 0;
break; break;
} }
@@ -211,25 +211,25 @@ int rcc_css_int_flag(void)
void rcc_wait_for_osc_ready(enum rcc_osc osc) void rcc_wait_for_osc_ready(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSI48: case RCC_HSI48:
while ((RCC_CR2 & RCC_CR2_HSI48RDY) == 0); while ((RCC_CR2 & RCC_CR2_HSI48RDY) == 0);
break; break;
case HSI14: case RCC_HSI14:
while ((RCC_CR2 & RCC_CR2_HSI14RDY) == 0); while ((RCC_CR2 & RCC_CR2_HSI14RDY) == 0);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CR & RCC_CR_HSIRDY) == 0); while ((RCC_CR & RCC_CR_HSIRDY) == 0);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CR & RCC_CR_HSERDY) == 0); while ((RCC_CR & RCC_CR_HSERDY) == 0);
break; break;
case PLL: case RCC_PLL:
while ((RCC_CR & RCC_CR_PLLRDY) == 0); while ((RCC_CR & RCC_CR_PLLRDY) == 0);
break; break;
case LSE: case RCC_LSE:
while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0); while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0);
break; break;
case LSI: case RCC_LSI:
while ((RCC_CSR & RCC_CSR_LSIRDY) == 0); while ((RCC_CSR & RCC_CSR_LSIRDY) == 0);
break; break;
} }
@@ -250,25 +250,25 @@ void rcc_wait_for_osc_ready(enum rcc_osc osc)
void rcc_osc_on(enum rcc_osc osc) void rcc_osc_on(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSI48: case RCC_HSI48:
RCC_CR2 |= RCC_CR2_HSI48ON; RCC_CR2 |= RCC_CR2_HSI48ON;
break; break;
case HSI14: case RCC_HSI14:
RCC_CR2 |= RCC_CR2_HSI14ON; RCC_CR2 |= RCC_CR2_HSI14ON;
break; break;
case HSI: case RCC_HSI:
RCC_CR |= RCC_CR_HSION; RCC_CR |= RCC_CR_HSION;
break; break;
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEON; RCC_CR |= RCC_CR_HSEON;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR |= RCC_BDCR_LSEON; RCC_BDCR |= RCC_BDCR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR |= RCC_CSR_LSION; RCC_CSR |= RCC_CSR_LSION;
break; break;
case PLL: case RCC_PLL:
RCC_CR |= RCC_CR_PLLON; RCC_CR |= RCC_CR_PLLON;
break; break;
} }
@@ -288,25 +288,25 @@ void rcc_osc_on(enum rcc_osc osc)
void rcc_osc_off(enum rcc_osc osc) void rcc_osc_off(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSI48: case RCC_HSI48:
RCC_CR2 &= ~RCC_CR2_HSI48ON; RCC_CR2 &= ~RCC_CR2_HSI48ON;
break; break;
case HSI14: case RCC_HSI14:
RCC_CR2 &= ~RCC_CR2_HSI14ON; RCC_CR2 &= ~RCC_CR2_HSI14ON;
break; break;
case HSI: case RCC_HSI:
RCC_CR &= ~RCC_CR_HSION; RCC_CR &= ~RCC_CR_HSION;
break; break;
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEON; RCC_CR &= ~RCC_CR_HSEON;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR &= ~RCC_BDCR_LSEON; RCC_BDCR &= ~RCC_BDCR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR &= ~RCC_CSR_LSION; RCC_CSR &= ~RCC_CSR_LSION;
break; break;
case PLL: case RCC_PLL:
/* don't do anything */ /* don't do anything */
break; break;
} }
@@ -344,17 +344,17 @@ void rcc_css_disable(void)
void rcc_osc_bypass_enable(enum rcc_osc osc) void rcc_osc_bypass_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEBYP; RCC_CR |= RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR |= RCC_BDCR_LSEBYP; RCC_BDCR |= RCC_BDCR_LSEBYP;
break; break;
case HSI48: case RCC_HSI48:
case HSI14: case RCC_HSI14:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
case PLL: case RCC_PLL:
/* Do nothing */ /* Do nothing */
break; break;
} }
@@ -374,17 +374,17 @@ void rcc_osc_bypass_enable(enum rcc_osc osc)
void rcc_osc_bypass_disable(enum rcc_osc osc) void rcc_osc_bypass_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEBYP; RCC_CR &= ~RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR &= ~RCC_BDCR_LSEBYP; RCC_BDCR &= ~RCC_BDCR_LSEBYP;
break; break;
case HSI48: case RCC_HSI48:
case HSI14: case RCC_HSI14:
case PLL: case RCC_PLL:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
/* Do nothing */ /* Do nothing */
break; break;
} }
@@ -400,21 +400,21 @@ void rcc_osc_bypass_disable(enum rcc_osc osc)
void rcc_set_sysclk_source(enum rcc_osc clk) void rcc_set_sysclk_source(enum rcc_osc clk)
{ {
switch (clk) { switch (clk) {
case HSI: case RCC_HSI:
RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_HSI; RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_HSI;
break; break;
case HSE: case RCC_HSE:
RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_HSE; RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_HSE;
break; break;
case PLL: case RCC_PLL:
RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_PLL; RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_PLL;
break; break;
case HSI48: case RCC_HSI48:
RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_HSI48; RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_HSI48;
break; break;
case LSI: case RCC_LSI:
case LSE: case RCC_LSE:
case HSI14: case RCC_HSI14:
/* do nothing */ /* do nothing */
break; break;
} }
@@ -429,17 +429,17 @@ void rcc_set_sysclk_source(enum rcc_osc clk)
void rcc_set_usbclk_source(enum rcc_osc clk) void rcc_set_usbclk_source(enum rcc_osc clk)
{ {
switch (clk) { switch (clk) {
case PLL: case RCC_PLL:
RCC_CFGR3 |= RCC_CFGR3_USBSW; RCC_CFGR3 |= RCC_CFGR3_USBSW;
break; break;
case HSI48: case RCC_HSI48:
RCC_CFGR3 &= ~RCC_CFGR3_USBSW; RCC_CFGR3 &= ~RCC_CFGR3_USBSW;
break; break;
case HSI: case RCC_HSI:
case HSE: case RCC_HSE:
case LSI: case RCC_LSI:
case LSE: case RCC_LSE:
case HSI14: case RCC_HSI14:
/* do nothing */ /* do nothing */
break; break;
} }
@@ -506,13 +506,13 @@ enum rcc_osc rcc_system_clock_source(void)
/* Return the clock source which is used as system clock. */ /* Return the clock source which is used as system clock. */
switch (RCC_CFGR & RCC_CFGR_SWS) { switch (RCC_CFGR & RCC_CFGR_SWS) {
case RCC_CFGR_SWS_HSI: case RCC_CFGR_SWS_HSI:
return HSI; return RCC_HSI;
case RCC_CFGR_SWS_HSE: case RCC_CFGR_SWS_HSE:
return HSE; return RCC_HSE;
case RCC_CFGR_SWS_PLL: case RCC_CFGR_SWS_PLL:
return PLL; return RCC_PLL;
case RCC_CFGR_SWS_HSI48: case RCC_CFGR_SWS_HSI48:
return HSI48; return RCC_HSI48;
} }
cm3_assert_not_reached(); cm3_assert_not_reached();
@@ -526,14 +526,14 @@ enum rcc_osc rcc_system_clock_source(void)
enum rcc_osc rcc_usb_clock_source(void) enum rcc_osc rcc_usb_clock_source(void)
{ {
return (RCC_CFGR3 & RCC_CFGR3_USBSW) ? PLL : HSI48; return (RCC_CFGR3 & RCC_CFGR3_USBSW) ? RCC_PLL : RCC_HSI48;
} }
void rcc_clock_setup_in_hsi_out_8mhz(void) void rcc_clock_setup_in_hsi_out_8mhz(void)
{ {
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
rcc_set_sysclk_source(HSI); rcc_set_sysclk_source(RCC_HSI);
rcc_set_hpre(RCC_CFGR_HPRE_NODIV); rcc_set_hpre(RCC_CFGR_HPRE_NODIV);
rcc_set_ppre(RCC_CFGR_PPRE_NODIV); rcc_set_ppre(RCC_CFGR_PPRE_NODIV);
@@ -546,9 +546,9 @@ void rcc_clock_setup_in_hsi_out_8mhz(void)
void rcc_clock_setup_in_hsi_out_16mhz(void) void rcc_clock_setup_in_hsi_out_16mhz(void)
{ {
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
rcc_set_sysclk_source(HSI); rcc_set_sysclk_source(RCC_HSI);
rcc_set_hpre(RCC_CFGR_HPRE_NODIV); rcc_set_hpre(RCC_CFGR_HPRE_NODIV);
rcc_set_ppre(RCC_CFGR_PPRE_NODIV); rcc_set_ppre(RCC_CFGR_PPRE_NODIV);
@@ -560,9 +560,9 @@ void rcc_clock_setup_in_hsi_out_16mhz(void)
RCC_CFGR &= ~RCC_CFGR_PLLSRC; RCC_CFGR &= ~RCC_CFGR_PLLSRC;
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
rcc_set_sysclk_source(PLL); rcc_set_sysclk_source(RCC_PLL);
rcc_apb1_frequency = 16000000; rcc_apb1_frequency = 16000000;
rcc_ahb_frequency = 16000000; rcc_ahb_frequency = 16000000;
@@ -571,9 +571,9 @@ void rcc_clock_setup_in_hsi_out_16mhz(void)
void rcc_clock_setup_in_hsi_out_24mhz(void) void rcc_clock_setup_in_hsi_out_24mhz(void)
{ {
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
rcc_set_sysclk_source(HSI); rcc_set_sysclk_source(RCC_HSI);
rcc_set_hpre(RCC_CFGR_HPRE_NODIV); rcc_set_hpre(RCC_CFGR_HPRE_NODIV);
rcc_set_ppre(RCC_CFGR_PPRE_NODIV); rcc_set_ppre(RCC_CFGR_PPRE_NODIV);
@@ -585,9 +585,9 @@ void rcc_clock_setup_in_hsi_out_24mhz(void)
RCC_CFGR &= ~RCC_CFGR_PLLSRC; RCC_CFGR &= ~RCC_CFGR_PLLSRC;
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
rcc_set_sysclk_source(PLL); rcc_set_sysclk_source(RCC_PLL);
rcc_apb1_frequency = 24000000; rcc_apb1_frequency = 24000000;
rcc_ahb_frequency = 24000000; rcc_ahb_frequency = 24000000;
@@ -595,9 +595,9 @@ void rcc_clock_setup_in_hsi_out_24mhz(void)
void rcc_clock_setup_in_hsi_out_32mhz(void) void rcc_clock_setup_in_hsi_out_32mhz(void)
{ {
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
rcc_set_sysclk_source(HSI); rcc_set_sysclk_source(RCC_HSI);
rcc_set_hpre(RCC_CFGR_HPRE_NODIV); rcc_set_hpre(RCC_CFGR_HPRE_NODIV);
rcc_set_ppre(RCC_CFGR_PPRE_NODIV); rcc_set_ppre(RCC_CFGR_PPRE_NODIV);
@@ -609,9 +609,9 @@ void rcc_clock_setup_in_hsi_out_32mhz(void)
RCC_CFGR &= ~RCC_CFGR_PLLSRC; RCC_CFGR &= ~RCC_CFGR_PLLSRC;
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
rcc_set_sysclk_source(PLL); rcc_set_sysclk_source(RCC_PLL);
rcc_apb1_frequency = 32000000; rcc_apb1_frequency = 32000000;
rcc_ahb_frequency = 32000000; rcc_ahb_frequency = 32000000;
@@ -619,9 +619,9 @@ void rcc_clock_setup_in_hsi_out_32mhz(void)
void rcc_clock_setup_in_hsi_out_40mhz(void) void rcc_clock_setup_in_hsi_out_40mhz(void)
{ {
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
rcc_set_sysclk_source(HSI); rcc_set_sysclk_source(RCC_HSI);
rcc_set_hpre(RCC_CFGR_HPRE_NODIV); rcc_set_hpre(RCC_CFGR_HPRE_NODIV);
rcc_set_ppre(RCC_CFGR_PPRE_NODIV); rcc_set_ppre(RCC_CFGR_PPRE_NODIV);
@@ -633,9 +633,9 @@ void rcc_clock_setup_in_hsi_out_40mhz(void)
RCC_CFGR &= ~RCC_CFGR_PLLSRC; RCC_CFGR &= ~RCC_CFGR_PLLSRC;
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
rcc_set_sysclk_source(PLL); rcc_set_sysclk_source(RCC_PLL);
rcc_apb1_frequency = 40000000; rcc_apb1_frequency = 40000000;
rcc_ahb_frequency = 40000000; rcc_ahb_frequency = 40000000;
@@ -643,9 +643,9 @@ void rcc_clock_setup_in_hsi_out_40mhz(void)
void rcc_clock_setup_in_hsi_out_48mhz(void) void rcc_clock_setup_in_hsi_out_48mhz(void)
{ {
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
rcc_set_sysclk_source(HSI); rcc_set_sysclk_source(RCC_HSI);
rcc_set_hpre(RCC_CFGR_HPRE_NODIV); rcc_set_hpre(RCC_CFGR_HPRE_NODIV);
rcc_set_ppre(RCC_CFGR_PPRE_NODIV); rcc_set_ppre(RCC_CFGR_PPRE_NODIV);
@@ -657,9 +657,9 @@ void rcc_clock_setup_in_hsi_out_48mhz(void)
RCC_CFGR &= ~RCC_CFGR_PLLSRC; RCC_CFGR &= ~RCC_CFGR_PLLSRC;
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
rcc_set_sysclk_source(PLL); rcc_set_sysclk_source(RCC_PLL);
rcc_apb1_frequency = 48000000; rcc_apb1_frequency = 48000000;
rcc_ahb_frequency = 48000000; rcc_ahb_frequency = 48000000;
@@ -667,15 +667,15 @@ void rcc_clock_setup_in_hsi_out_48mhz(void)
void rcc_clock_setup_in_hsi48_out_48mhz(void) void rcc_clock_setup_in_hsi48_out_48mhz(void)
{ {
rcc_osc_on(HSI48); rcc_osc_on(RCC_HSI48);
rcc_wait_for_osc_ready(HSI48); rcc_wait_for_osc_ready(RCC_HSI48);
rcc_set_hpre(RCC_CFGR_HPRE_NODIV); rcc_set_hpre(RCC_CFGR_HPRE_NODIV);
rcc_set_ppre(RCC_CFGR_PPRE_NODIV); rcc_set_ppre(RCC_CFGR_PPRE_NODIV);
flash_set_ws(FLASH_ACR_LATENCY_024_048MHZ); flash_set_ws(FLASH_ACR_LATENCY_024_048MHZ);
rcc_set_sysclk_source(HSI48); rcc_set_sysclk_source(RCC_HSI48);
rcc_apb1_frequency = 48000000; rcc_apb1_frequency = 48000000;
rcc_ahb_frequency = 48000000; rcc_ahb_frequency = 48000000;

View File

@@ -70,25 +70,25 @@ use.
void rcc_osc_ready_int_clear(enum rcc_osc osc) void rcc_osc_ready_int_clear(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYC; RCC_CIR |= RCC_CIR_PLLRDYC;
break; break;
case PLL2: case RCC_PLL2:
RCC_CIR |= RCC_CIR_PLL2RDYC; RCC_CIR |= RCC_CIR_PLL2RDYC;
break; break;
case PLL3: case RCC_PLL3:
RCC_CIR |= RCC_CIR_PLL3RDYC; RCC_CIR |= RCC_CIR_PLL3RDYC;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYC; RCC_CIR |= RCC_CIR_HSERDYC;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYC; RCC_CIR |= RCC_CIR_HSIRDYC;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYC; RCC_CIR |= RCC_CIR_LSERDYC;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYC; RCC_CIR |= RCC_CIR_LSIRDYC;
break; break;
} }
@@ -103,25 +103,25 @@ void rcc_osc_ready_int_clear(enum rcc_osc osc)
void rcc_osc_ready_int_enable(enum rcc_osc osc) void rcc_osc_ready_int_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYIE; RCC_CIR |= RCC_CIR_PLLRDYIE;
break; break;
case PLL2: case RCC_PLL2:
RCC_CIR |= RCC_CIR_PLL2RDYIE; RCC_CIR |= RCC_CIR_PLL2RDYIE;
break; break;
case PLL3: case RCC_PLL3:
RCC_CIR |= RCC_CIR_PLL3RDYIE; RCC_CIR |= RCC_CIR_PLL3RDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYIE; RCC_CIR |= RCC_CIR_HSERDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYIE; RCC_CIR |= RCC_CIR_HSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYIE; RCC_CIR |= RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYIE; RCC_CIR |= RCC_CIR_LSIRDYIE;
break; break;
} }
@@ -136,25 +136,25 @@ void rcc_osc_ready_int_enable(enum rcc_osc osc)
void rcc_osc_ready_int_disable(enum rcc_osc osc) void rcc_osc_ready_int_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR &= ~RCC_CIR_PLLRDYIE; RCC_CIR &= ~RCC_CIR_PLLRDYIE;
break; break;
case PLL2: case RCC_PLL2:
RCC_CIR &= ~RCC_CIR_PLL2RDYIE; RCC_CIR &= ~RCC_CIR_PLL2RDYIE;
break; break;
case PLL3: case RCC_PLL3:
RCC_CIR &= ~RCC_CIR_PLL3RDYIE; RCC_CIR &= ~RCC_CIR_PLL3RDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR &= ~RCC_CIR_HSERDYIE; RCC_CIR &= ~RCC_CIR_HSERDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR &= ~RCC_CIR_HSIRDYIE; RCC_CIR &= ~RCC_CIR_HSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR &= ~RCC_CIR_LSERDYIE; RCC_CIR &= ~RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR &= ~RCC_CIR_LSIRDYIE; RCC_CIR &= ~RCC_CIR_LSIRDYIE;
break; break;
} }
@@ -170,25 +170,25 @@ void rcc_osc_ready_int_disable(enum rcc_osc osc)
int rcc_osc_ready_int_flag(enum rcc_osc osc) int rcc_osc_ready_int_flag(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
return ((RCC_CIR & RCC_CIR_PLLRDYF) != 0); return ((RCC_CIR & RCC_CIR_PLLRDYF) != 0);
break; break;
case PLL2: case RCC_PLL2:
return ((RCC_CIR & RCC_CIR_PLL2RDYF) != 0); return ((RCC_CIR & RCC_CIR_PLL2RDYF) != 0);
break; break;
case PLL3: case RCC_PLL3:
return ((RCC_CIR & RCC_CIR_PLL3RDYF) != 0); return ((RCC_CIR & RCC_CIR_PLL3RDYF) != 0);
break; break;
case HSE: case RCC_HSE:
return ((RCC_CIR & RCC_CIR_HSERDYF) != 0); return ((RCC_CIR & RCC_CIR_HSERDYF) != 0);
break; break;
case HSI: case RCC_HSI:
return ((RCC_CIR & RCC_CIR_HSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_HSIRDYF) != 0);
break; break;
case LSE: case RCC_LSE:
return ((RCC_CIR & RCC_CIR_LSERDYF) != 0); return ((RCC_CIR & RCC_CIR_LSERDYF) != 0);
break; break;
case LSI: case RCC_LSI:
return ((RCC_CIR & RCC_CIR_LSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_LSIRDYF) != 0);
break; break;
} }
@@ -226,25 +226,25 @@ int rcc_css_int_flag(void)
void rcc_wait_for_osc_ready(enum rcc_osc osc) void rcc_wait_for_osc_ready(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CR & RCC_CR_PLLRDY) == 0); while ((RCC_CR & RCC_CR_PLLRDY) == 0);
break; break;
case PLL2: case RCC_PLL2:
while ((RCC_CR & RCC_CR_PLL2RDY) == 0); while ((RCC_CR & RCC_CR_PLL2RDY) == 0);
break; break;
case PLL3: case RCC_PLL3:
while ((RCC_CR & RCC_CR_PLL3RDY) == 0); while ((RCC_CR & RCC_CR_PLL3RDY) == 0);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CR & RCC_CR_HSERDY) == 0); while ((RCC_CR & RCC_CR_HSERDY) == 0);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CR & RCC_CR_HSIRDY) == 0); while ((RCC_CR & RCC_CR_HSIRDY) == 0);
break; break;
case LSE: case RCC_LSE:
while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0); while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0);
break; break;
case LSI: case RCC_LSI:
while ((RCC_CSR & RCC_CSR_LSIRDY) == 0); while ((RCC_CSR & RCC_CSR_LSIRDY) == 0);
break; break;
} }
@@ -268,25 +268,25 @@ pwr_disable_backup_domain_write_protect).
void rcc_osc_on(enum rcc_osc osc) void rcc_osc_on(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR |= RCC_CR_PLLON; RCC_CR |= RCC_CR_PLLON;
break; break;
case PLL2: case RCC_PLL2:
RCC_CR |= RCC_CR_PLL2ON; RCC_CR |= RCC_CR_PLL2ON;
break; break;
case PLL3: case RCC_PLL3:
RCC_CR |= RCC_CR_PLL3ON; RCC_CR |= RCC_CR_PLL3ON;
break; break;
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEON; RCC_CR |= RCC_CR_HSEON;
break; break;
case HSI: case RCC_HSI:
RCC_CR |= RCC_CR_HSION; RCC_CR |= RCC_CR_HSION;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR |= RCC_BDCR_LSEON; RCC_BDCR |= RCC_BDCR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR |= RCC_CSR_LSION; RCC_CSR |= RCC_CSR_LSION;
break; break;
} }
@@ -309,25 +309,25 @@ backup domain write protection has been removed (see
void rcc_osc_off(enum rcc_osc osc) void rcc_osc_off(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR &= ~RCC_CR_PLLON; RCC_CR &= ~RCC_CR_PLLON;
break; break;
case PLL2: case RCC_PLL2:
RCC_CR &= ~RCC_CR_PLL2ON; RCC_CR &= ~RCC_CR_PLL2ON;
break; break;
case PLL3: case RCC_PLL3:
RCC_CR &= ~RCC_CR_PLL3ON; RCC_CR &= ~RCC_CR_PLL3ON;
break; break;
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEON; RCC_CR &= ~RCC_CR_HSEON;
break; break;
case HSI: case RCC_HSI:
RCC_CR &= ~RCC_CR_HSION; RCC_CR &= ~RCC_CR_HSION;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR &= ~RCC_BDCR_LSEON; RCC_BDCR &= ~RCC_BDCR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR &= ~RCC_CSR_LSION; RCC_CSR &= ~RCC_CSR_LSION;
break; break;
} }
@@ -370,17 +370,17 @@ pwr_disable_backup_domain_write_protect).
void rcc_osc_bypass_enable(enum rcc_osc osc) void rcc_osc_bypass_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEBYP; RCC_CR |= RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR |= RCC_BDCR_LSEBYP; RCC_BDCR |= RCC_BDCR_LSEBYP;
break; break;
case PLL: case RCC_PLL:
case PLL2: case RCC_PLL2:
case PLL3: case RCC_PLL3:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
/* Do nothing, only HSE/LSE allowed here. */ /* Do nothing, only HSE/LSE allowed here. */
break; break;
} }
@@ -403,17 +403,17 @@ pwr_disable_backup_domain_write_protect) or the backup domain has been reset
void rcc_osc_bypass_disable(enum rcc_osc osc) void rcc_osc_bypass_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEBYP; RCC_CR &= ~RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR &= ~RCC_BDCR_LSEBYP; RCC_BDCR &= ~RCC_BDCR_LSEBYP;
break; break;
case PLL: case RCC_PLL:
case PLL2: case RCC_PLL2:
case PLL3: case RCC_PLL3:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
/* Do nothing, only HSE/LSE allowed here. */ /* Do nothing, only HSE/LSE allowed here. */
break; break;
} }
@@ -533,7 +533,7 @@ void rcc_set_rtc_clock_source(enum rcc_osc clock_source)
uint32_t reg32; uint32_t reg32;
switch (clock_source) { switch (clock_source) {
case LSE: case RCC_LSE:
/* Turn the LSE on and wait while it stabilises. */ /* Turn the LSE on and wait while it stabilises. */
RCC_BDCR |= RCC_BDCR_LSEON; RCC_BDCR |= RCC_BDCR_LSEON;
while ((reg32 = (RCC_BDCR & RCC_BDCR_LSERDY)) == 0); while ((reg32 = (RCC_BDCR & RCC_BDCR_LSERDY)) == 0);
@@ -542,7 +542,7 @@ void rcc_set_rtc_clock_source(enum rcc_osc clock_source)
RCC_BDCR &= ~((1 << 8) | (1 << 9)); RCC_BDCR &= ~((1 << 8) | (1 << 9));
RCC_BDCR |= (1 << 8); RCC_BDCR |= (1 << 8);
break; break;
case LSI: case RCC_LSI:
/* Turn the LSI on and wait while it stabilises. */ /* Turn the LSI on and wait while it stabilises. */
RCC_CSR |= RCC_CSR_LSION; RCC_CSR |= RCC_CSR_LSION;
while ((reg32 = (RCC_CSR & RCC_CSR_LSIRDY)) == 0); while ((reg32 = (RCC_CSR & RCC_CSR_LSIRDY)) == 0);
@@ -551,7 +551,7 @@ void rcc_set_rtc_clock_source(enum rcc_osc clock_source)
RCC_BDCR &= ~((1 << 8) | (1 << 9)); RCC_BDCR &= ~((1 << 8) | (1 << 9));
RCC_BDCR |= (1 << 9); RCC_BDCR |= (1 << 9);
break; break;
case HSE: case RCC_HSE:
/* Turn the HSE on and wait while it stabilises. */ /* Turn the HSE on and wait while it stabilises. */
RCC_CR |= RCC_CR_HSEON; RCC_CR |= RCC_CR_HSEON;
while ((reg32 = (RCC_CR & RCC_CR_HSERDY)) == 0); while ((reg32 = (RCC_CR & RCC_CR_HSERDY)) == 0);
@@ -560,10 +560,10 @@ void rcc_set_rtc_clock_source(enum rcc_osc clock_source)
RCC_BDCR &= ~((1 << 8) | (1 << 9)); RCC_BDCR &= ~((1 << 8) | (1 << 9));
RCC_BDCR |= (1 << 9) | (1 << 8); RCC_BDCR |= (1 << 9) | (1 << 8);
break; break;
case PLL: case RCC_PLL:
case PLL2: case RCC_PLL2:
case PLL3: case RCC_PLL3:
case HSI: case RCC_HSI:
/* Unusable clock source, here to prevent warnings. */ /* Unusable clock source, here to prevent warnings. */
/* Turn off clock sources to RTC. */ /* Turn off clock sources to RTC. */
RCC_BDCR &= ~((1 << 8) | (1 << 9)); RCC_BDCR &= ~((1 << 8) | (1 << 9));
@@ -694,8 +694,8 @@ uint32_t rcc_system_clock_source(void)
void rcc_clock_setup_in_hsi_out_64mhz(void) void rcc_clock_setup_in_hsi_out_64mhz(void)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
@@ -727,8 +727,8 @@ void rcc_clock_setup_in_hsi_out_64mhz(void)
rcc_set_pll_source(RCC_CFGR_PLLSRC_HSI_CLK_DIV2); rcc_set_pll_source(RCC_CFGR_PLLSRC_HSI_CLK_DIV2);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);
@@ -747,8 +747,8 @@ void rcc_clock_setup_in_hsi_out_64mhz(void)
void rcc_clock_setup_in_hsi_out_48mhz(void) void rcc_clock_setup_in_hsi_out_48mhz(void)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
@@ -781,8 +781,8 @@ void rcc_clock_setup_in_hsi_out_48mhz(void)
rcc_set_pll_source(RCC_CFGR_PLLSRC_HSI_CLK_DIV2); rcc_set_pll_source(RCC_CFGR_PLLSRC_HSI_CLK_DIV2);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);
@@ -801,8 +801,8 @@ void rcc_clock_setup_in_hsi_out_48mhz(void)
void rcc_clock_setup_in_hsi_out_24mhz(void) void rcc_clock_setup_in_hsi_out_24mhz(void)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
@@ -834,8 +834,8 @@ void rcc_clock_setup_in_hsi_out_24mhz(void)
rcc_set_pll_source(RCC_CFGR_PLLSRC_HSI_CLK_DIV2); rcc_set_pll_source(RCC_CFGR_PLLSRC_HSI_CLK_DIV2);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);
@@ -854,15 +854,15 @@ void rcc_clock_setup_in_hsi_out_24mhz(void)
void rcc_clock_setup_in_hse_8mhz_out_24mhz(void) void rcc_clock_setup_in_hse_8mhz_out_24mhz(void)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
/* Enable external high-speed oscillator 8MHz. */ /* Enable external high-speed oscillator 8MHz. */
rcc_osc_on(HSE); rcc_osc_on(RCC_HSE);
rcc_wait_for_osc_ready(HSE); rcc_wait_for_osc_ready(RCC_HSE);
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK);
/* /*
@@ -898,8 +898,8 @@ void rcc_clock_setup_in_hse_8mhz_out_24mhz(void)
rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK); rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);
@@ -918,15 +918,15 @@ void rcc_clock_setup_in_hse_8mhz_out_24mhz(void)
void rcc_clock_setup_in_hse_8mhz_out_72mhz(void) void rcc_clock_setup_in_hse_8mhz_out_72mhz(void)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
/* Enable external high-speed oscillator 8MHz. */ /* Enable external high-speed oscillator 8MHz. */
rcc_osc_on(HSE); rcc_osc_on(RCC_HSE);
rcc_wait_for_osc_ready(HSE); rcc_wait_for_osc_ready(RCC_HSE);
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK);
/* /*
@@ -962,8 +962,8 @@ void rcc_clock_setup_in_hse_8mhz_out_72mhz(void)
rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK); rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);
@@ -982,15 +982,15 @@ void rcc_clock_setup_in_hse_8mhz_out_72mhz(void)
void rcc_clock_setup_in_hse_12mhz_out_72mhz(void) void rcc_clock_setup_in_hse_12mhz_out_72mhz(void)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
/* Enable external high-speed oscillator 16MHz. */ /* Enable external high-speed oscillator 16MHz. */
rcc_osc_on(HSE); rcc_osc_on(RCC_HSE);
rcc_wait_for_osc_ready(HSE); rcc_wait_for_osc_ready(RCC_HSE);
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK);
/* /*
@@ -1026,8 +1026,8 @@ void rcc_clock_setup_in_hse_12mhz_out_72mhz(void)
rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK); rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);
@@ -1046,15 +1046,15 @@ void rcc_clock_setup_in_hse_12mhz_out_72mhz(void)
void rcc_clock_setup_in_hse_16mhz_out_72mhz(void) void rcc_clock_setup_in_hse_16mhz_out_72mhz(void)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
/* Enable external high-speed oscillator 16MHz. */ /* Enable external high-speed oscillator 16MHz. */
rcc_osc_on(HSE); rcc_osc_on(RCC_HSE);
rcc_wait_for_osc_ready(HSE); rcc_wait_for_osc_ready(RCC_HSE);
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK);
/* /*
@@ -1090,8 +1090,8 @@ void rcc_clock_setup_in_hse_16mhz_out_72mhz(void)
rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK_DIV2); rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK_DIV2);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);
@@ -1110,8 +1110,8 @@ void rcc_clock_setup_in_hse_16mhz_out_72mhz(void)
void rcc_clock_setup_in_hse_25mhz_out_72mhz(void) void rcc_clock_setup_in_hse_25mhz_out_72mhz(void)
{ {
/* Enable external high-speed oscillator 25MHz. */ /* Enable external high-speed oscillator 25MHz. */
rcc_osc_on(HSE); rcc_osc_on(RCC_HSE);
rcc_wait_for_osc_ready(HSE); rcc_wait_for_osc_ready(RCC_HSE);
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK);
/* /*
@@ -1136,8 +1136,8 @@ void rcc_clock_setup_in_hse_25mhz_out_72mhz(void)
rcc_set_pll2_multiplication_factor(RCC_CFGR2_PLL2MUL_PLL2_CLK_MUL8); rcc_set_pll2_multiplication_factor(RCC_CFGR2_PLL2MUL_PLL2_CLK_MUL8);
/* Enable PLL2 oscillator and wait for it to stabilize */ /* Enable PLL2 oscillator and wait for it to stabilize */
rcc_osc_on(PLL2); rcc_osc_on(RCC_PLL2);
rcc_wait_for_osc_ready(PLL2); rcc_wait_for_osc_ready(RCC_PLL2);
/* Set pll1 prediv/multiplier, prediv1 src, and usb predivider */ /* Set pll1 prediv/multiplier, prediv1 src, and usb predivider */
rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK); rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK);
@@ -1148,8 +1148,8 @@ void rcc_clock_setup_in_hse_25mhz_out_72mhz(void)
rcc_set_usbpre(RCC_CFGR_USBPRE_PLL_VCO_CLK_DIV3); rcc_set_usbpre(RCC_CFGR_USBPRE_PLL_VCO_CLK_DIV3);
/* enable PLL1 and wait for it to stabilize */ /* enable PLL1 and wait for it to stabilize */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);

View File

@@ -48,7 +48,7 @@ uint32_t rcc_ahb_frequency = 16000000;
uint32_t rcc_apb1_frequency = 16000000; uint32_t rcc_apb1_frequency = 16000000;
uint32_t rcc_apb2_frequency = 16000000; uint32_t rcc_apb2_frequency = 16000000;
const clock_scale_t hse_8mhz_3v3[CLOCK_3V3_END] = { const struct rcc_clock_scale rcc_hse_8mhz_3v3[RCC_CLOCK_3V3_END] = {
{ /* 120MHz */ { /* 120MHz */
.pllm = 8, .pllm = 8,
.plln = 240, .plln = 240,
@@ -67,19 +67,19 @@ const clock_scale_t hse_8mhz_3v3[CLOCK_3V3_END] = {
void rcc_osc_ready_int_clear(osc_t osc) void rcc_osc_ready_int_clear(osc_t osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYC; RCC_CIR |= RCC_CIR_PLLRDYC;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYC; RCC_CIR |= RCC_CIR_HSERDYC;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYC; RCC_CIR |= RCC_CIR_HSIRDYC;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYC; RCC_CIR |= RCC_CIR_LSERDYC;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYC; RCC_CIR |= RCC_CIR_LSIRDYC;
break; break;
} }
@@ -88,19 +88,19 @@ void rcc_osc_ready_int_clear(osc_t osc)
void rcc_osc_ready_int_enable(osc_t osc) void rcc_osc_ready_int_enable(osc_t osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYIE; RCC_CIR |= RCC_CIR_PLLRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYIE; RCC_CIR |= RCC_CIR_HSERDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYIE; RCC_CIR |= RCC_CIR_HSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYIE; RCC_CIR |= RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYIE; RCC_CIR |= RCC_CIR_LSIRDYIE;
break; break;
} }
@@ -109,19 +109,19 @@ void rcc_osc_ready_int_enable(osc_t osc)
void rcc_osc_ready_int_disable(osc_t osc) void rcc_osc_ready_int_disable(osc_t osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR &= ~RCC_CIR_PLLRDYIE; RCC_CIR &= ~RCC_CIR_PLLRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR &= ~RCC_CIR_HSERDYIE; RCC_CIR &= ~RCC_CIR_HSERDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR &= ~RCC_CIR_HSIRDYIE; RCC_CIR &= ~RCC_CIR_HSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR &= ~RCC_CIR_LSERDYIE; RCC_CIR &= ~RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR &= ~RCC_CIR_LSIRDYIE; RCC_CIR &= ~RCC_CIR_LSIRDYIE;
break; break;
} }
@@ -130,19 +130,19 @@ void rcc_osc_ready_int_disable(osc_t osc)
int rcc_osc_ready_int_flag(osc_t osc) int rcc_osc_ready_int_flag(osc_t osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
return ((RCC_CIR & RCC_CIR_PLLRDYF) != 0); return ((RCC_CIR & RCC_CIR_PLLRDYF) != 0);
break; break;
case HSE: case RCC_HSE:
return ((RCC_CIR & RCC_CIR_HSERDYF) != 0); return ((RCC_CIR & RCC_CIR_HSERDYF) != 0);
break; break;
case HSI: case RCC_HSI:
return ((RCC_CIR & RCC_CIR_HSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_HSIRDYF) != 0);
break; break;
case LSE: case RCC_LSE:
return ((RCC_CIR & RCC_CIR_LSERDYF) != 0); return ((RCC_CIR & RCC_CIR_LSERDYF) != 0);
break; break;
case LSI: case RCC_LSI:
return ((RCC_CIR & RCC_CIR_LSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_LSIRDYF) != 0);
break; break;
} }
@@ -163,19 +163,19 @@ int rcc_css_int_flag(void)
void rcc_wait_for_osc_ready(osc_t osc) void rcc_wait_for_osc_ready(osc_t osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CR & RCC_CR_PLLRDY) == 0); while ((RCC_CR & RCC_CR_PLLRDY) == 0);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CR & RCC_CR_HSERDY) == 0); while ((RCC_CR & RCC_CR_HSERDY) == 0);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CR & RCC_CR_HSIRDY) == 0); while ((RCC_CR & RCC_CR_HSIRDY) == 0);
break; break;
case LSE: case RCC_LSE:
while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0); while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0);
break; break;
case LSI: case RCC_LSI:
while ((RCC_CSR & RCC_CSR_LSIRDY) == 0); while ((RCC_CSR & RCC_CSR_LSIRDY) == 0);
break; break;
} }
@@ -184,13 +184,13 @@ void rcc_wait_for_osc_ready(osc_t osc)
void rcc_wait_for_sysclk_status(osc_t osc) void rcc_wait_for_sysclk_status(osc_t osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_PLL); while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_PLL);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSE); while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSE);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSI); while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSI);
break; break;
default: default:
@@ -202,19 +202,19 @@ void rcc_wait_for_sysclk_status(osc_t osc)
void rcc_osc_on(osc_t osc) void rcc_osc_on(osc_t osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR |= RCC_CR_PLLON; RCC_CR |= RCC_CR_PLLON;
break; break;
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEON; RCC_CR |= RCC_CR_HSEON;
break; break;
case HSI: case RCC_HSI:
RCC_CR |= RCC_CR_HSION; RCC_CR |= RCC_CR_HSION;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR |= RCC_BDCR_LSEON; RCC_BDCR |= RCC_BDCR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR |= RCC_CSR_LSION; RCC_CSR |= RCC_CSR_LSION;
break; break;
} }
@@ -223,19 +223,19 @@ void rcc_osc_on(osc_t osc)
void rcc_osc_off(osc_t osc) void rcc_osc_off(osc_t osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR &= ~RCC_CR_PLLON; RCC_CR &= ~RCC_CR_PLLON;
break; break;
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEON; RCC_CR &= ~RCC_CR_HSEON;
break; break;
case HSI: case RCC_HSI:
RCC_CR &= ~RCC_CR_HSION; RCC_CR &= ~RCC_CR_HSION;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR &= ~RCC_BDCR_LSEON; RCC_BDCR &= ~RCC_BDCR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR &= ~RCC_CSR_LSION; RCC_CSR &= ~RCC_CSR_LSION;
break; break;
} }
@@ -254,15 +254,15 @@ void rcc_css_disable(void)
void rcc_osc_bypass_enable(osc_t osc) void rcc_osc_bypass_enable(osc_t osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEBYP; RCC_CR |= RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR |= RCC_BDCR_LSEBYP; RCC_BDCR |= RCC_BDCR_LSEBYP;
break; break;
case PLL: case RCC_PLL:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
/* Do nothing, only HSE/LSE allowed here. */ /* Do nothing, only HSE/LSE allowed here. */
break; break;
} }
@@ -271,15 +271,15 @@ void rcc_osc_bypass_enable(osc_t osc)
void rcc_osc_bypass_disable(osc_t osc) void rcc_osc_bypass_disable(osc_t osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEBYP; RCC_CR &= ~RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR &= ~RCC_BDCR_LSEBYP; RCC_BDCR &= ~RCC_BDCR_LSEBYP;
break; break;
case PLL: case RCC_PLL:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
/* Do nothing, only HSE/LSE allowed here. */ /* Do nothing, only HSE/LSE allowed here. */
break; break;
} }
@@ -364,18 +364,18 @@ uint32_t rcc_system_clock_source(void)
return (RCC_CFGR & 0x000c) >> 2; return (RCC_CFGR & 0x000c) >> 2;
} }
void rcc_clock_setup_hse_3v3(const clock_scale_t *clock) void rcc_clock_setup_hse_3v3(const struct rcc_clock_scale *clock)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_HSI); rcc_set_sysclk_source(RCC_CFGR_SW_HSI);
/* Enable external high-speed oscillator 8MHz. */ /* Enable external high-speed oscillator 8MHz. */
rcc_osc_on(HSE); rcc_osc_on(RCC_HSE);
rcc_wait_for_osc_ready(HSE); rcc_wait_for_osc_ready(RCC_HSE);
/* /*
* Set prescalers for AHB, ADC, ABP1, ABP2. * Set prescalers for AHB, ADC, ABP1, ABP2.
@@ -389,8 +389,8 @@ void rcc_clock_setup_hse_3v3(const clock_scale_t *clock)
clock->pllp, clock->pllq); clock->pllp, clock->pllq);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Configure flash settings. */ /* Configure flash settings. */
flash_set_ws(clock->flash_config); flash_set_ws(clock->flash_config);
@@ -399,7 +399,7 @@ void rcc_clock_setup_hse_3v3(const clock_scale_t *clock)
rcc_set_sysclk_source(RCC_CFGR_SW_PLL); rcc_set_sysclk_source(RCC_CFGR_SW_PLL);
/* Wait for PLL clock to be selected. */ /* Wait for PLL clock to be selected. */
rcc_wait_for_sysclk_status(PLL); rcc_wait_for_sysclk_status(RCC_PLL);
/* Set the peripheral clock frequencies used. */ /* Set the peripheral clock frequencies used. */
rcc_apb1_frequency = clock->apb1_frequency; rcc_apb1_frequency = clock->apb1_frequency;

View File

@@ -44,7 +44,7 @@ uint32_t rcc_ahb_frequency = 8000000;
uint32_t rcc_apb1_frequency = 8000000; uint32_t rcc_apb1_frequency = 8000000;
uint32_t rcc_apb2_frequency = 8000000; uint32_t rcc_apb2_frequency = 8000000;
const clock_scale_t hsi_8mhz[CLOCK_END] = { const struct rcc_clock_scale rcc_hsi_8mhz[RCC_CLOCK_END] = {
{ /* 44MHz */ { /* 44MHz */
.pll = RCC_CFGR_PLLMUL_PLL_IN_CLK_X11, .pll = RCC_CFGR_PLLMUL_PLL_IN_CLK_X11,
.pllsrc = RCC_CFGR_PLLSRC_HSI_DIV2, .pllsrc = RCC_CFGR_PLLSRC_HSI_DIV2,
@@ -77,85 +77,85 @@ const clock_scale_t hsi_8mhz[CLOCK_END] = {
} }
}; };
void rcc_osc_ready_int_clear(enum osc osc) void rcc_osc_ready_int_clear(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYC; RCC_CIR |= RCC_CIR_PLLRDYC;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYC; RCC_CIR |= RCC_CIR_HSERDYC;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYC; RCC_CIR |= RCC_CIR_HSIRDYC;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYC; RCC_CIR |= RCC_CIR_LSERDYC;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYC; RCC_CIR |= RCC_CIR_LSIRDYC;
break; break;
} }
} }
void rcc_osc_ready_int_enable(enum osc osc) void rcc_osc_ready_int_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYIE; RCC_CIR |= RCC_CIR_PLLRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYIE; RCC_CIR |= RCC_CIR_HSERDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYIE; RCC_CIR |= RCC_CIR_HSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYIE; RCC_CIR |= RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYIE; RCC_CIR |= RCC_CIR_LSIRDYIE;
break; break;
} }
} }
void rcc_osc_ready_int_disable(enum osc osc) void rcc_osc_ready_int_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR &= ~RCC_CIR_PLLRDYIE; RCC_CIR &= ~RCC_CIR_PLLRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR &= ~RCC_CIR_HSERDYIE; RCC_CIR &= ~RCC_CIR_HSERDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR &= ~RCC_CIR_HSIRDYIE; RCC_CIR &= ~RCC_CIR_HSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR &= ~RCC_CIR_LSERDYIE; RCC_CIR &= ~RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR &= ~RCC_CIR_LSIRDYIE; RCC_CIR &= ~RCC_CIR_LSIRDYIE;
break; break;
} }
} }
int rcc_osc_ready_int_flag(enum osc osc) int rcc_osc_ready_int_flag(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
return ((RCC_CIR & RCC_CIR_PLLRDYF) != 0); return ((RCC_CIR & RCC_CIR_PLLRDYF) != 0);
break; break;
case HSE: case RCC_HSE:
return ((RCC_CIR & RCC_CIR_HSERDYF) != 0); return ((RCC_CIR & RCC_CIR_HSERDYF) != 0);
break; break;
case HSI: case RCC_HSI:
return ((RCC_CIR & RCC_CIR_HSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_HSIRDYF) != 0);
break; break;
case LSE: case RCC_LSE:
return ((RCC_CIR & RCC_CIR_LSERDYF) != 0); return ((RCC_CIR & RCC_CIR_LSERDYF) != 0);
break; break;
case LSI: case RCC_LSI:
return ((RCC_CIR & RCC_CIR_LSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_LSIRDYF) != 0);
break; break;
} }
@@ -173,59 +173,59 @@ int rcc_css_int_flag(void)
return ((RCC_CIR & RCC_CIR_CSSF) != 0); return ((RCC_CIR & RCC_CIR_CSSF) != 0);
} }
void rcc_wait_for_osc_ready(enum osc osc) void rcc_wait_for_osc_ready(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CR & RCC_CR_PLLRDY) == 0); while ((RCC_CR & RCC_CR_PLLRDY) == 0);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CR & RCC_CR_HSERDY) == 0); while ((RCC_CR & RCC_CR_HSERDY) == 0);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CR & RCC_CR_HSIRDY) == 0); while ((RCC_CR & RCC_CR_HSIRDY) == 0);
break; break;
case LSE: case RCC_LSE:
while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0); while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0);
break; break;
case LSI: case RCC_LSI:
while ((RCC_CSR & RCC_CSR_LSIRDY) == 0); while ((RCC_CSR & RCC_CSR_LSIRDY) == 0);
break; break;
} }
} }
void rcc_wait_for_osc_not_ready(enum osc osc) void rcc_wait_for_osc_not_ready(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CR & RCC_CR_PLLRDY) != 0); while ((RCC_CR & RCC_CR_PLLRDY) != 0);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CR & RCC_CR_HSERDY) != 0); while ((RCC_CR & RCC_CR_HSERDY) != 0);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CR & RCC_CR_HSIRDY) != 0); while ((RCC_CR & RCC_CR_HSIRDY) != 0);
break; break;
case LSE: case RCC_LSE:
while ((RCC_BDCR & RCC_BDCR_LSERDY) != 0); while ((RCC_BDCR & RCC_BDCR_LSERDY) != 0);
break; break;
case LSI: case RCC_LSI:
while ((RCC_CSR & RCC_CSR_LSIRDY) != 0); while ((RCC_CSR & RCC_CSR_LSIRDY) != 0);
break; break;
} }
} }
void rcc_wait_for_sysclk_status(enum osc osc) void rcc_wait_for_sysclk_status(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_PLL); while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_PLL);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSE); while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSE);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSI); while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSI);
break; break;
default: default:
@@ -234,43 +234,43 @@ void rcc_wait_for_sysclk_status(enum osc osc)
} }
} }
void rcc_osc_on(enum osc osc) void rcc_osc_on(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR |= RCC_CR_PLLON; RCC_CR |= RCC_CR_PLLON;
break; break;
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEON; RCC_CR |= RCC_CR_HSEON;
break; break;
case HSI: case RCC_HSI:
RCC_CR |= RCC_CR_HSION; RCC_CR |= RCC_CR_HSION;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR |= RCC_BDCR_LSEON; RCC_BDCR |= RCC_BDCR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR |= RCC_CSR_LSION; RCC_CSR |= RCC_CSR_LSION;
break; break;
} }
} }
void rcc_osc_off(enum osc osc) void rcc_osc_off(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR &= ~RCC_CR_PLLON; RCC_CR &= ~RCC_CR_PLLON;
break; break;
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEON; RCC_CR &= ~RCC_CR_HSEON;
break; break;
case HSI: case RCC_HSI:
RCC_CR &= ~RCC_CR_HSION; RCC_CR &= ~RCC_CR_HSION;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR &= ~RCC_BDCR_LSEON; RCC_BDCR &= ~RCC_BDCR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR &= ~RCC_CSR_LSION; RCC_CSR &= ~RCC_CSR_LSION;
break; break;
} }
@@ -286,35 +286,35 @@ void rcc_css_disable(void)
RCC_CR &= ~RCC_CR_CSSON; RCC_CR &= ~RCC_CR_CSSON;
} }
void rcc_osc_bypass_enable(enum osc osc) void rcc_osc_bypass_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEBYP; RCC_CR |= RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR |= RCC_BDCR_LSEBYP; RCC_BDCR |= RCC_BDCR_LSEBYP;
break; break;
case PLL: case RCC_PLL:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
/* Do nothing, only HSE/LSE allowed here. */ /* Do nothing, only HSE/LSE allowed here. */
break; break;
} }
} }
void rcc_osc_bypass_disable(enum osc osc) void rcc_osc_bypass_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEBYP; RCC_CR &= ~RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_BDCR &= ~RCC_BDCR_LSEBYP; RCC_BDCR &= ~RCC_BDCR_LSEBYP;
break; break;
case PLL: case RCC_PLL:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
/* Do nothing, only HSE/LSE allowed here. */ /* Do nothing, only HSE/LSE allowed here. */
break; break;
} }
@@ -393,22 +393,22 @@ uint32_t rcc_get_system_clock_source(void)
} }
void rcc_clock_setup_hsi(const clock_scale_t *clock) void rcc_clock_setup_hsi(const struct rcc_clock_scale *clock)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_HSI); /* XXX: se cayo */ rcc_set_sysclk_source(RCC_CFGR_SW_HSI); /* XXX: se cayo */
rcc_wait_for_sysclk_status(HSI); rcc_wait_for_sysclk_status(RCC_HSI);
rcc_osc_off(PLL); rcc_osc_off(RCC_PLL);
rcc_wait_for_osc_not_ready(PLL); rcc_wait_for_osc_not_ready(RCC_PLL);
rcc_set_pll_source(clock->pllsrc); rcc_set_pll_source(clock->pllsrc);
rcc_set_pll_multiplier(clock->pll); rcc_set_pll_multiplier(clock->pll);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* /*
* Set prescalers for AHB, ADC, ABP1, ABP2. * Set prescalers for AHB, ADC, ABP1, ABP2.
* Do this before touching the PLL (TODO: why?). * Do this before touching the PLL (TODO: why?).
@@ -421,7 +421,7 @@ void rcc_clock_setup_hsi(const clock_scale_t *clock)
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_PLL); /* XXX: se cayo */ rcc_set_sysclk_source(RCC_CFGR_SW_PLL); /* XXX: se cayo */
/* Wait for PLL clock to be selected. */ /* Wait for PLL clock to be selected. */
rcc_wait_for_sysclk_status(PLL); rcc_wait_for_sysclk_status(RCC_PLL);
/* Set the peripheral clock frequencies used. */ /* Set the peripheral clock frequencies used. */
rcc_apb1_frequency = clock->apb1_frequency; rcc_apb1_frequency = clock->apb1_frequency;

View File

@@ -40,25 +40,25 @@
void rcc_osc_on(enum rcc_osc osc) void rcc_osc_on(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR |= RCC_CR_PLLON; RCC_CR |= RCC_CR_PLLON;
break; break;
case MSI: case RCC_MSI:
RCC_CR |= RCC_CR_MSION; RCC_CR |= RCC_CR_MSION;
break; break;
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEON; RCC_CR |= RCC_CR_HSEON;
break; break;
case HSI48: case RCC_HSI48:
RCC_CRRCR |= RCC_CRRCR_HSI48ON; RCC_CRRCR |= RCC_CRRCR_HSI48ON;
break; break;
case HSI16: case RCC_HSI16:
RCC_CR |= RCC_CR_HSI16ON; RCC_CR |= RCC_CR_HSI16ON;
break; break;
case LSE: case RCC_LSE:
RCC_CSR |= RCC_CSR_LSEON; RCC_CSR |= RCC_CSR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR |= RCC_CSR_LSION; RCC_CSR |= RCC_CSR_LSION;
break; break;
} }
@@ -67,25 +67,25 @@ void rcc_osc_on(enum rcc_osc osc)
void rcc_osc_off(enum rcc_osc osc) void rcc_osc_off(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR &= ~RCC_CR_PLLON; RCC_CR &= ~RCC_CR_PLLON;
break; break;
case MSI: case RCC_MSI:
RCC_CR &= ~RCC_CR_MSION; RCC_CR &= ~RCC_CR_MSION;
break; break;
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEON; RCC_CR &= ~RCC_CR_HSEON;
break; break;
case HSI48: case RCC_HSI48:
RCC_CRRCR &= ~RCC_CRRCR_HSI48ON; RCC_CRRCR &= ~RCC_CRRCR_HSI48ON;
break; break;
case HSI16: case RCC_HSI16:
RCC_CR &= ~RCC_CR_HSI16ON; RCC_CR &= ~RCC_CR_HSI16ON;
break; break;
case LSE: case RCC_LSE:
RCC_CSR &= ~RCC_CSR_LSEON; RCC_CSR &= ~RCC_CSR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR &= ~RCC_CSR_LSION; RCC_CSR &= ~RCC_CSR_LSION;
break; break;
} }
@@ -95,10 +95,10 @@ void rcc_osc_off(enum rcc_osc osc)
void rcc_osc_bypass_enable(enum rcc_osc osc) void rcc_osc_bypass_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEBYP; RCC_CR |= RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_CSR |= RCC_CSR_LSEBYP; RCC_CSR |= RCC_CSR_LSEBYP;
break; break;
default: default:
@@ -111,10 +111,10 @@ void rcc_osc_bypass_enable(enum rcc_osc osc)
void rcc_osc_bypass_disable(enum rcc_osc osc) void rcc_osc_bypass_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEBYP; RCC_CR &= ~RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_CSR &= ~RCC_CSR_LSEBYP; RCC_CSR &= ~RCC_CSR_LSEBYP;
break; break;
default: default:
@@ -134,25 +134,25 @@ void rcc_osc_bypass_disable(enum rcc_osc osc)
void rcc_osc_ready_int_clear(enum rcc_osc osc) void rcc_osc_ready_int_clear(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CICR |= RCC_CICR_PLLRDYC; RCC_CICR |= RCC_CICR_PLLRDYC;
break; break;
case HSE: case RCC_HSE:
RCC_CICR |= RCC_CICR_HSERDYC; RCC_CICR |= RCC_CICR_HSERDYC;
break; break;
case HSI48: case RCC_HSI48:
RCC_CICR |= RCC_CICR_HSI48RDYC; RCC_CICR |= RCC_CICR_HSI48RDYC;
break; break;
case HSI16: case RCC_HSI16:
RCC_CICR |= RCC_CICR_HSI16RDYC; RCC_CICR |= RCC_CICR_HSI16RDYC;
break; break;
case MSI: case RCC_MSI:
RCC_CICR |= RCC_CICR_MSIRDYC; RCC_CICR |= RCC_CICR_MSIRDYC;
break; break;
case LSE: case RCC_LSE:
RCC_CICR |= RCC_CICR_LSERDYC; RCC_CICR |= RCC_CICR_LSERDYC;
break; break;
case LSI: case RCC_LSI:
RCC_CICR |= RCC_CICR_LSIRDYC; RCC_CICR |= RCC_CICR_LSIRDYC;
break; break;
} }
@@ -166,25 +166,25 @@ void rcc_osc_ready_int_clear(enum rcc_osc osc)
void rcc_osc_ready_int_enable(enum rcc_osc osc) void rcc_osc_ready_int_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIER |= RCC_CIER_PLLRDYIE; RCC_CIER |= RCC_CIER_PLLRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIER |= RCC_CIER_HSERDYIE; RCC_CIER |= RCC_CIER_HSERDYIE;
break; break;
case HSI48: case RCC_HSI48:
RCC_CIER |= RCC_CIER_HSI48RDYIE; RCC_CIER |= RCC_CIER_HSI48RDYIE;
break; break;
case HSI16: case RCC_HSI16:
RCC_CIER |= RCC_CIER_HSI16RDYIE; RCC_CIER |= RCC_CIER_HSI16RDYIE;
break; break;
case MSI: case RCC_MSI:
RCC_CIER |= RCC_CIER_MSIRDYIE; RCC_CIER |= RCC_CIER_MSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIER |= RCC_CIER_LSERDYIE; RCC_CIER |= RCC_CIER_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIER |= RCC_CIER_LSIRDYIE; RCC_CIER |= RCC_CIER_LSIRDYIE;
break; break;
} }
@@ -198,25 +198,25 @@ void rcc_osc_ready_int_enable(enum rcc_osc osc)
void rcc_osc_ready_int_disable(enum rcc_osc osc) void rcc_osc_ready_int_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIER &= ~RCC_CIER_PLLRDYIE; RCC_CIER &= ~RCC_CIER_PLLRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIER &= ~RCC_CIER_HSERDYIE; RCC_CIER &= ~RCC_CIER_HSERDYIE;
break; break;
case HSI48: case RCC_HSI48:
RCC_CIER &= ~RCC_CIER_HSI48RDYIE; RCC_CIER &= ~RCC_CIER_HSI48RDYIE;
break; break;
case HSI16: case RCC_HSI16:
RCC_CIER &= ~RCC_CIER_HSI16RDYIE; RCC_CIER &= ~RCC_CIER_HSI16RDYIE;
break; break;
case MSI: case RCC_MSI:
RCC_CIER &= ~RCC_CIER_MSIRDYIE; RCC_CIER &= ~RCC_CIER_MSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIER &= ~RCC_CIER_LSERDYIE; RCC_CIER &= ~RCC_CIER_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIER &= ~RCC_CIER_LSIRDYIE; RCC_CIER &= ~RCC_CIER_LSIRDYIE;
break; break;
} }
@@ -231,25 +231,25 @@ void rcc_osc_ready_int_disable(enum rcc_osc osc)
int rcc_osc_ready_int_flag(enum rcc_osc osc) int rcc_osc_ready_int_flag(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
return ((RCC_CIFR & RCC_CIFR_PLLRDYF) != 0); return ((RCC_CIFR & RCC_CIFR_PLLRDYF) != 0);
break; break;
case HSE: case RCC_HSE:
return ((RCC_CIFR & RCC_CIFR_HSERDYF) != 0); return ((RCC_CIFR & RCC_CIFR_HSERDYF) != 0);
break; break;
case HSI48: case RCC_HSI48:
return ((RCC_CIFR & RCC_CIFR_HSI48RDYF) != 0); return ((RCC_CIFR & RCC_CIFR_HSI48RDYF) != 0);
break; break;
case HSI16: case RCC_HSI16:
return ((RCC_CIFR & RCC_CIFR_HSI16RDYF) != 0); return ((RCC_CIFR & RCC_CIFR_HSI16RDYF) != 0);
break; break;
case MSI: case RCC_MSI:
return ((RCC_CIFR & RCC_CIFR_MSIRDYF) != 0); return ((RCC_CIFR & RCC_CIFR_MSIRDYF) != 0);
break; break;
case LSE: case RCC_LSE:
return ((RCC_CIFR & RCC_CIFR_LSERDYF) != 0); return ((RCC_CIFR & RCC_CIFR_LSERDYF) != 0);
break; break;
case LSI: case RCC_LSI:
return ((RCC_CIFR & RCC_CIFR_LSIRDYF) != 0); return ((RCC_CIFR & RCC_CIFR_LSIRDYF) != 0);
break; break;
} }
@@ -266,25 +266,25 @@ int rcc_osc_ready_int_flag(enum rcc_osc osc)
void rcc_wait_for_osc_ready(enum rcc_osc osc) void rcc_wait_for_osc_ready(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CR & RCC_CR_PLLRDY) == 0); while ((RCC_CR & RCC_CR_PLLRDY) == 0);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CR & RCC_CR_HSERDY) == 0); while ((RCC_CR & RCC_CR_HSERDY) == 0);
break; break;
case HSI16: case RCC_HSI16:
while ((RCC_CR & RCC_CR_HSI16RDY) == 0); while ((RCC_CR & RCC_CR_HSI16RDY) == 0);
break; break;
case HSI48: case RCC_HSI48:
while ((RCC_CRRCR & RCC_CRRCR_HSI48RDY) == 0); while ((RCC_CRRCR & RCC_CRRCR_HSI48RDY) == 0);
break; break;
case MSI: case RCC_MSI:
while ((RCC_CR & RCC_CR_MSIRDY) == 0); while ((RCC_CR & RCC_CR_MSIRDY) == 0);
break; break;
case LSE: case RCC_LSE:
while ((RCC_CSR & RCC_CSR_LSERDY) == 0); while ((RCC_CSR & RCC_CSR_LSERDY) == 0);
break; break;
case LSI: case RCC_LSI:
while ((RCC_CSR & RCC_CSR_LSIRDY) == 0); while ((RCC_CSR & RCC_CSR_LSIRDY) == 0);
break; break;
} }
@@ -316,21 +316,21 @@ void rcc_set_hsi48_source_pll(void)
void rcc_set_sysclk_source(enum rcc_osc osc) void rcc_set_sysclk_source(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CFGR |= RCC_CFGR_SW_PLL; RCC_CFGR |= RCC_CFGR_SW_PLL;
break; break;
case HSE: case RCC_HSE:
RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW_HSE; RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW_HSE;
break; break;
case HSI16: case RCC_HSI16:
RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW_HSI16; RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW_HSI16;
break; break;
case MSI: case RCC_MSI:
RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW_MSI; RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW_MSI;
break; break;
case HSI48: case RCC_HSI48:
case LSE: case RCC_LSE:
case LSI: case RCC_LSI:
break; break;
} }
} }

View File

@@ -48,7 +48,7 @@ uint32_t rcc_ahb_frequency = 2097000;
uint32_t rcc_apb1_frequency = 2097000; uint32_t rcc_apb1_frequency = 2097000;
uint32_t rcc_apb2_frequency = 2097000; uint32_t rcc_apb2_frequency = 2097000;
const clock_scale_t clock_config[CLOCK_CONFIG_END] = { const struct rcc_clock_scale rcc_clock_config[RCC_CLOCK_CONFIG_END] = {
{ /* 24MHz PLL from HSI */ { /* 24MHz PLL from HSI */
.pll_source = RCC_CFGR_PLLSRC_HSI_CLK, .pll_source = RCC_CFGR_PLLSRC_HSI_CLK,
.pll_mul = RCC_CFGR_PLLMUL_MUL3, .pll_mul = RCC_CFGR_PLLMUL_MUL3,
@@ -56,7 +56,7 @@ const clock_scale_t clock_config[CLOCK_CONFIG_END] = {
.hpre = RCC_CFGR_HPRE_SYSCLK_NODIV, .hpre = RCC_CFGR_HPRE_SYSCLK_NODIV,
.ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV, .ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
.ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV, .ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
.voltage_scale = RANGE1, .voltage_scale = PWR_SCALE1,
.flash_config = FLASH_ACR_LATENCY_1WS, .flash_config = FLASH_ACR_LATENCY_1WS,
.apb1_frequency = 24000000, .apb1_frequency = 24000000,
.apb2_frequency = 24000000, .apb2_frequency = 24000000,
@@ -68,7 +68,7 @@ const clock_scale_t clock_config[CLOCK_CONFIG_END] = {
.hpre = RCC_CFGR_HPRE_SYSCLK_NODIV, .hpre = RCC_CFGR_HPRE_SYSCLK_NODIV,
.ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV, .ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
.ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV, .ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
.voltage_scale = RANGE1, .voltage_scale = PWR_SCALE1,
.flash_config = FLASH_ACR_LATENCY_1WS, .flash_config = FLASH_ACR_LATENCY_1WS,
.apb1_frequency = 32000000, .apb1_frequency = 32000000,
.apb2_frequency = 32000000, .apb2_frequency = 32000000,
@@ -77,7 +77,7 @@ const clock_scale_t clock_config[CLOCK_CONFIG_END] = {
.hpre = RCC_CFGR_HPRE_SYSCLK_NODIV, .hpre = RCC_CFGR_HPRE_SYSCLK_NODIV,
.ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV, .ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
.ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV, .ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
.voltage_scale = RANGE1, .voltage_scale = PWR_SCALE1,
.flash_config = FLASH_ACR_LATENCY_0WS, .flash_config = FLASH_ACR_LATENCY_0WS,
.apb1_frequency = 16000000, .apb1_frequency = 16000000,
.apb2_frequency = 16000000, .apb2_frequency = 16000000,
@@ -86,7 +86,7 @@ const clock_scale_t clock_config[CLOCK_CONFIG_END] = {
.hpre = RCC_CFGR_HPRE_SYSCLK_DIV4, .hpre = RCC_CFGR_HPRE_SYSCLK_DIV4,
.ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV, .ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
.ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV, .ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
.voltage_scale = RANGE1, .voltage_scale = PWR_SCALE1,
.flash_config = FLASH_ACR_LATENCY_0WS, .flash_config = FLASH_ACR_LATENCY_0WS,
.apb1_frequency = 4000000, .apb1_frequency = 4000000,
.apb2_frequency = 4000000, .apb2_frequency = 4000000,
@@ -95,7 +95,7 @@ const clock_scale_t clock_config[CLOCK_CONFIG_END] = {
.hpre = RCC_CFGR_HPRE_SYSCLK_NODIV, .hpre = RCC_CFGR_HPRE_SYSCLK_NODIV,
.ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV, .ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
.ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV, .ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
.voltage_scale = RANGE1, .voltage_scale = PWR_SCALE1,
.flash_config = FLASH_ACR_LATENCY_0WS, .flash_config = FLASH_ACR_LATENCY_0WS,
.apb1_frequency = 4194000, .apb1_frequency = 4194000,
.apb2_frequency = 4194000, .apb2_frequency = 4194000,
@@ -105,7 +105,7 @@ const clock_scale_t clock_config[CLOCK_CONFIG_END] = {
.hpre = RCC_CFGR_HPRE_SYSCLK_NODIV, .hpre = RCC_CFGR_HPRE_SYSCLK_NODIV,
.ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV, .ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
.ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV, .ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
.voltage_scale = RANGE1, .voltage_scale = PWR_SCALE1,
.flash_config = FLASH_ACR_LATENCY_0WS, .flash_config = FLASH_ACR_LATENCY_0WS,
.apb1_frequency = 2097000, .apb1_frequency = 2097000,
.apb2_frequency = 2097000, .apb2_frequency = 2097000,
@@ -113,97 +113,97 @@ const clock_scale_t clock_config[CLOCK_CONFIG_END] = {
}, },
}; };
void rcc_osc_ready_int_clear(osc_t osc) void rcc_osc_ready_int_clear(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYC; RCC_CIR |= RCC_CIR_PLLRDYC;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYC; RCC_CIR |= RCC_CIR_HSERDYC;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYC; RCC_CIR |= RCC_CIR_HSIRDYC;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYC; RCC_CIR |= RCC_CIR_LSERDYC;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYC; RCC_CIR |= RCC_CIR_LSIRDYC;
break; break;
case MSI: case RCC_MSI:
RCC_CIR |= RCC_CIR_MSIRDYC; RCC_CIR |= RCC_CIR_MSIRDYC;
break; break;
} }
} }
void rcc_osc_ready_int_enable(osc_t osc) void rcc_osc_ready_int_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR |= RCC_CIR_PLLRDYIE; RCC_CIR |= RCC_CIR_PLLRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR |= RCC_CIR_HSERDYIE; RCC_CIR |= RCC_CIR_HSERDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR |= RCC_CIR_HSIRDYIE; RCC_CIR |= RCC_CIR_HSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR |= RCC_CIR_LSERDYIE; RCC_CIR |= RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR |= RCC_CIR_LSIRDYIE; RCC_CIR |= RCC_CIR_LSIRDYIE;
break; break;
case MSI: case RCC_MSI:
RCC_CIR |= RCC_CIR_MSIRDYIE; RCC_CIR |= RCC_CIR_MSIRDYIE;
break; break;
} }
} }
void rcc_osc_ready_int_disable(osc_t osc) void rcc_osc_ready_int_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CIR &= ~RCC_CIR_PLLRDYIE; RCC_CIR &= ~RCC_CIR_PLLRDYIE;
break; break;
case HSE: case RCC_HSE:
RCC_CIR &= ~RCC_CIR_HSERDYIE; RCC_CIR &= ~RCC_CIR_HSERDYIE;
break; break;
case HSI: case RCC_HSI:
RCC_CIR &= ~RCC_CIR_HSIRDYIE; RCC_CIR &= ~RCC_CIR_HSIRDYIE;
break; break;
case LSE: case RCC_LSE:
RCC_CIR &= ~RCC_CIR_LSERDYIE; RCC_CIR &= ~RCC_CIR_LSERDYIE;
break; break;
case LSI: case RCC_LSI:
RCC_CIR &= ~RCC_CIR_LSIRDYIE; RCC_CIR &= ~RCC_CIR_LSIRDYIE;
break; break;
case MSI: case RCC_MSI:
RCC_CIR &= ~RCC_CIR_MSIRDYIE; RCC_CIR &= ~RCC_CIR_MSIRDYIE;
break; break;
} }
} }
int rcc_osc_ready_int_flag(osc_t osc) int rcc_osc_ready_int_flag(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
return ((RCC_CIR & RCC_CIR_PLLRDYF) != 0); return ((RCC_CIR & RCC_CIR_PLLRDYF) != 0);
break; break;
case HSE: case RCC_HSE:
return ((RCC_CIR & RCC_CIR_HSERDYF) != 0); return ((RCC_CIR & RCC_CIR_HSERDYF) != 0);
break; break;
case HSI: case RCC_HSI:
return ((RCC_CIR & RCC_CIR_HSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_HSIRDYF) != 0);
break; break;
case LSE: case RCC_LSE:
return ((RCC_CIR & RCC_CIR_LSERDYF) != 0); return ((RCC_CIR & RCC_CIR_LSERDYF) != 0);
break; break;
case LSI: case RCC_LSI:
return ((RCC_CIR & RCC_CIR_LSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_LSIRDYF) != 0);
break; break;
case MSI: case RCC_MSI:
return ((RCC_CIR & RCC_CIR_MSIRDYF) != 0); return ((RCC_CIR & RCC_CIR_MSIRDYF) != 0);
break; break;
} }
@@ -222,46 +222,46 @@ int rcc_css_int_flag(void)
return ((RCC_CIR & RCC_CIR_CSSF) != 0); return ((RCC_CIR & RCC_CIR_CSSF) != 0);
} }
void rcc_wait_for_osc_ready(osc_t osc) void rcc_wait_for_osc_ready(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CR & RCC_CR_PLLRDY) == 0); while ((RCC_CR & RCC_CR_PLLRDY) == 0);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CR & RCC_CR_HSERDY) == 0); while ((RCC_CR & RCC_CR_HSERDY) == 0);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CR & RCC_CR_HSIRDY) == 0); while ((RCC_CR & RCC_CR_HSIRDY) == 0);
break; break;
case MSI: case RCC_MSI:
while ((RCC_CR & RCC_CR_MSIRDY) == 0); while ((RCC_CR & RCC_CR_MSIRDY) == 0);
break; break;
case LSE: case RCC_LSE:
while ((RCC_CSR & RCC_CSR_LSERDY) == 0); while ((RCC_CSR & RCC_CSR_LSERDY) == 0);
break; break;
case LSI: case RCC_LSI:
while ((RCC_CSR & RCC_CSR_LSIRDY) == 0); while ((RCC_CSR & RCC_CSR_LSIRDY) == 0);
break; break;
} }
} }
void rcc_wait_for_sysclk_status(osc_t osc) void rcc_wait_for_sysclk_status(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != while ((RCC_CFGR & ((1 << 1) | (1 << 0))) !=
RCC_CFGR_SWS_SYSCLKSEL_PLLCLK); RCC_CFGR_SWS_SYSCLKSEL_PLLCLK);
break; break;
case HSE: case RCC_HSE:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != while ((RCC_CFGR & ((1 << 1) | (1 << 0))) !=
RCC_CFGR_SWS_SYSCLKSEL_HSECLK); RCC_CFGR_SWS_SYSCLKSEL_HSECLK);
break; break;
case HSI: case RCC_HSI:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != while ((RCC_CFGR & ((1 << 1) | (1 << 0))) !=
RCC_CFGR_SWS_SYSCLKSEL_HSICLK); RCC_CFGR_SWS_SYSCLKSEL_HSICLK);
break; break;
case MSI: case RCC_MSI:
while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != while ((RCC_CFGR & ((1 << 1) | (1 << 0))) !=
RCC_CFGR_SWS_SYSCLKSEL_MSICLK); RCC_CFGR_SWS_SYSCLKSEL_MSICLK);
break; break;
@@ -271,49 +271,49 @@ void rcc_wait_for_sysclk_status(osc_t osc)
} }
} }
void rcc_osc_on(osc_t osc) void rcc_osc_on(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR |= RCC_CR_PLLON; RCC_CR |= RCC_CR_PLLON;
break; break;
case MSI: case RCC_MSI:
RCC_CR |= RCC_CR_MSION; RCC_CR |= RCC_CR_MSION;
break; break;
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEON; RCC_CR |= RCC_CR_HSEON;
break; break;
case HSI: case RCC_HSI:
RCC_CR |= RCC_CR_HSION; RCC_CR |= RCC_CR_HSION;
break; break;
case LSE: case RCC_LSE:
RCC_CSR |= RCC_CSR_LSEON; RCC_CSR |= RCC_CSR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR |= RCC_CSR_LSION; RCC_CSR |= RCC_CSR_LSION;
break; break;
} }
} }
void rcc_osc_off(osc_t osc) void rcc_osc_off(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case PLL: case RCC_PLL:
RCC_CR &= ~RCC_CR_PLLON; RCC_CR &= ~RCC_CR_PLLON;
break; break;
case MSI: case RCC_MSI:
RCC_CR &= ~RCC_CR_MSION; RCC_CR &= ~RCC_CR_MSION;
break; break;
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEON; RCC_CR &= ~RCC_CR_HSEON;
break; break;
case HSI: case RCC_HSI:
RCC_CR &= ~RCC_CR_HSION; RCC_CR &= ~RCC_CR_HSION;
break; break;
case LSE: case RCC_LSE:
RCC_CSR &= ~RCC_CSR_LSEON; RCC_CSR &= ~RCC_CSR_LSEON;
break; break;
case LSI: case RCC_LSI:
RCC_CSR &= ~RCC_CSR_LSION; RCC_CSR &= ~RCC_CSR_LSION;
break; break;
} }
@@ -329,37 +329,37 @@ void rcc_css_disable(void)
RCC_CR &= ~RCC_CR_CSSON; RCC_CR &= ~RCC_CR_CSSON;
} }
void rcc_osc_bypass_enable(osc_t osc) void rcc_osc_bypass_enable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR |= RCC_CR_HSEBYP; RCC_CR |= RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_CSR |= RCC_CSR_LSEBYP; RCC_CSR |= RCC_CSR_LSEBYP;
break; break;
case PLL: case RCC_PLL:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
case MSI: case RCC_MSI:
/* Do nothing, only HSE/LSE allowed here. */ /* Do nothing, only HSE/LSE allowed here. */
break; break;
} }
} }
void rcc_osc_bypass_disable(osc_t osc) void rcc_osc_bypass_disable(enum rcc_osc osc)
{ {
switch (osc) { switch (osc) {
case HSE: case RCC_HSE:
RCC_CR &= ~RCC_CR_HSEBYP; RCC_CR &= ~RCC_CR_HSEBYP;
break; break;
case LSE: case RCC_LSE:
RCC_CSR &= ~RCC_CSR_LSEBYP; RCC_CSR &= ~RCC_CSR_LSEBYP;
break; break;
case PLL: case RCC_PLL:
case HSI: case RCC_HSI:
case LSI: case RCC_LSI:
case MSI: case RCC_MSI:
/* Do nothing, only HSE/LSE allowed here. */ /* Do nothing, only HSE/LSE allowed here. */
break; break;
} }
@@ -446,7 +446,7 @@ void rcc_rtc_select_clock(uint32_t clock)
RCC_CSR |= (clock << RCC_CSR_RTCSEL_SHIFT); RCC_CSR |= (clock << RCC_CSR_RTCSEL_SHIFT);
} }
void rcc_clock_setup_msi(const clock_scale_t *clock) void rcc_clock_setup_msi(const struct rcc_clock_scale *clock)
{ {
/* Enable internal multi-speed oscillator. */ /* Enable internal multi-speed oscillator. */
@@ -455,8 +455,8 @@ void rcc_clock_setup_msi(const clock_scale_t *clock)
reg |= (clock->msi_range << RCC_ICSCR_MSIRANGE_SHIFT); reg |= (clock->msi_range << RCC_ICSCR_MSIRANGE_SHIFT);
RCC_ICSCR = reg; RCC_ICSCR = reg;
rcc_osc_on(MSI); rcc_osc_on(RCC_MSI);
rcc_wait_for_osc_ready(MSI); rcc_wait_for_osc_ready(RCC_MSI);
/* Select MSI as SYSCLK source. */ /* Select MSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_MSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_MSICLK);
@@ -483,11 +483,11 @@ void rcc_clock_setup_msi(const clock_scale_t *clock)
rcc_apb2_frequency = clock->apb2_frequency; rcc_apb2_frequency = clock->apb2_frequency;
} }
void rcc_clock_setup_hsi(const clock_scale_t *clock) void rcc_clock_setup_hsi(const struct rcc_clock_scale *clock)
{ {
/* Enable internal high-speed oscillator. */ /* Enable internal high-speed oscillator. */
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
/* Select HSI as SYSCLK source. */ /* Select HSI as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
@@ -514,15 +514,15 @@ void rcc_clock_setup_hsi(const clock_scale_t *clock)
rcc_apb2_frequency = clock->apb2_frequency; rcc_apb2_frequency = clock->apb2_frequency;
} }
void rcc_clock_setup_pll(const clock_scale_t *clock) void rcc_clock_setup_pll(const struct rcc_clock_scale *clock)
{ {
/* Turn on the appropriate source for the PLL */ /* Turn on the appropriate source for the PLL */
if (clock->pll_source == RCC_CFGR_PLLSRC_HSE_CLK) { if (clock->pll_source == RCC_CFGR_PLLSRC_HSE_CLK) {
rcc_osc_on(HSE); rcc_osc_on(RCC_HSE);
rcc_wait_for_osc_ready(HSE); rcc_wait_for_osc_ready(RCC_HSE);
} else { } else {
rcc_osc_on(HSI); rcc_osc_on(RCC_HSI);
rcc_wait_for_osc_ready(HSI); rcc_wait_for_osc_ready(RCC_HSI);
} }
/* /*
@@ -546,8 +546,8 @@ void rcc_clock_setup_pll(const clock_scale_t *clock)
clock->pll_div); clock->pll_div);
/* Enable PLL oscillator and wait for it to stabilize. */ /* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL); rcc_osc_on(RCC_PLL);
rcc_wait_for_osc_ready(PLL); rcc_wait_for_osc_ready(RCC_PLL);
/* Select PLL as SYSCLK source. */ /* Select PLL as SYSCLK source. */
rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK); rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);