diff --git a/include/libopencm3/stm32/f2/rcc.h b/include/libopencm3/stm32/f2/rcc.h index 61693884..e73fc390 100644 --- a/include/libopencm3/stm32/f2/rcc.h +++ b/include/libopencm3/stm32/f2/rcc.h @@ -165,6 +165,7 @@ /* SWS: System clock switch status */ #define RCC_CFGR_SWS_SHIFT 2 +#define RCC_CFGR_SWS_MASK 0x3 #define RCC_CFGR_SWS_HSI 0x0 #define RCC_CFGR_SWS_HSE 0x1 #define RCC_CFGR_SWS_PLL 0x2 diff --git a/include/libopencm3/stm32/f3/rcc.h b/include/libopencm3/stm32/f3/rcc.h index 7c8ebf85..2de35b21 100644 --- a/include/libopencm3/stm32/f3/rcc.h +++ b/include/libopencm3/stm32/f3/rcc.h @@ -159,6 +159,7 @@ /* SWS: System clock switch status */ #define RCC_CFGR_SWS_SHIFT 2 +#define RCC_CFGR_SWS_MASK 0x3 #define RCC_CFGR_SWS_HSI 0x0 #define RCC_CFGR_SWS_HSE 0x1 #define RCC_CFGR_SWS_PLL 0x2 diff --git a/include/libopencm3/stm32/f4/rcc.h b/include/libopencm3/stm32/f4/rcc.h index 79299eff..7f90816e 100644 --- a/include/libopencm3/stm32/f4/rcc.h +++ b/include/libopencm3/stm32/f4/rcc.h @@ -174,6 +174,7 @@ /* SWS: System clock switch status */ #define RCC_CFGR_SWS_SHIFT 2 +#define RCC_CFGR_SWS_MASK 0x3 #define RCC_CFGR_SWS_HSI 0x0 #define RCC_CFGR_SWS_HSE 0x1 #define RCC_CFGR_SWS_PLL 0x2 diff --git a/include/libopencm3/stm32/l1/rcc.h b/include/libopencm3/stm32/l1/rcc.h index cf55c485..78160414 100644 --- a/include/libopencm3/stm32/l1/rcc.h +++ b/include/libopencm3/stm32/l1/rcc.h @@ -188,6 +188,8 @@ #define RCC_CFGR_SWS_SYSCLKSEL_HSICLK 0x1 #define RCC_CFGR_SWS_SYSCLKSEL_HSECLK 0x2 #define RCC_CFGR_SWS_SYSCLKSEL_PLLCLK 0x3 +#define RCC_CFGR_SWS_MASK 0x3 +#define RCC_CFGR_SWS_SHIFT 2 /* SW: System clock switch */ #define RCC_CFGR_SW_SYSCLKSEL_MSICLK 0x0 diff --git a/lib/stm32/f2/rcc.c b/lib/stm32/f2/rcc.c index 69550341..2230e6f9 100644 --- a/lib/stm32/f2/rcc.c +++ b/lib/stm32/f2/rcc.c @@ -185,13 +185,16 @@ void rcc_wait_for_sysclk_status(osc_t osc) { switch (osc) { case RCC_PLL: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_PLL); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_PLL); break; case RCC_HSE: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSE); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_HSE); break; case RCC_HSI: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSI); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_HSI); break; default: /* Shouldn't be reached. */ diff --git a/lib/stm32/f3/rcc.c b/lib/stm32/f3/rcc.c index f915772d..5ff6ad37 100644 --- a/lib/stm32/f3/rcc.c +++ b/lib/stm32/f3/rcc.c @@ -223,13 +223,16 @@ void rcc_wait_for_sysclk_status(enum rcc_osc osc) { switch (osc) { case RCC_PLL: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_PLL); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_PLL); break; case RCC_HSE: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSE); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_HSE); break; case RCC_HSI: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSI); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_HSI); break; default: /* Shouldn't be reached. */ diff --git a/lib/stm32/f4/rcc.c b/lib/stm32/f4/rcc.c index a9441e85..bfc5cd9b 100644 --- a/lib/stm32/f4/rcc.c +++ b/lib/stm32/f4/rcc.c @@ -414,13 +414,16 @@ void rcc_wait_for_sysclk_status(enum rcc_osc osc) { switch (osc) { case RCC_PLL: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_PLL); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_PLL); break; case RCC_HSE: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSE); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_HSE); break; case RCC_HSI: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != RCC_CFGR_SWS_HSI); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_HSI); break; default: /* Shouldn't be reached. */ diff --git a/lib/stm32/l1/rcc.c b/lib/stm32/l1/rcc.c index 67a3d416..307d7440 100644 --- a/lib/stm32/l1/rcc.c +++ b/lib/stm32/l1/rcc.c @@ -256,20 +256,20 @@ void rcc_wait_for_sysclk_status(enum rcc_osc osc) { switch (osc) { case RCC_PLL: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != - RCC_CFGR_SWS_SYSCLKSEL_PLLCLK); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_SYSCLKSEL_PLLCLK); break; case RCC_HSE: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != - RCC_CFGR_SWS_SYSCLKSEL_HSECLK); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_SYSCLKSEL_HSECLK); break; case RCC_HSI: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != - RCC_CFGR_SWS_SYSCLKSEL_HSICLK); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_SYSCLKSEL_HSICLK); break; case RCC_MSI: - while ((RCC_CFGR & ((1 << 1) | (1 << 0))) != - RCC_CFGR_SWS_SYSCLKSEL_MSICLK); + while (((RCC_CFGR >> RCC_CFGR_SWS_SHIFT) & RCC_CFGR_SWS_MASK) != + RCC_CFGR_SWS_SYSCLKSEL_MSICLK); break; default: /* Shouldn't be reached. */