aboutsummaryrefslogtreecommitdiff
path: root/03-refactor/src/clock.c
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2018-01-24 00:12:03 -0700
committerJosh Rahm <joshuarahm@gmail.com>2018-01-24 00:12:03 -0700
commit80360c4b8361320b726897c86ee13f9b4caf004a (patch)
tree9a590055e440025d7d36701a540d9e7e39c082d4 /03-refactor/src/clock.c
parent2545ae2d57e5b70975e3fd3b3e570da13dbf62f0 (diff)
downloadstm32l4-80360c4b8361320b726897c86ee13f9b4caf004a.tar.gz
stm32l4-80360c4b8361320b726897c86ee13f9b4caf004a.tar.bz2
stm32l4-80360c4b8361320b726897c86ee13f9b4caf004a.zip
More fields in USART and RCC set to use bitfields.
Diffstat (limited to '03-refactor/src/clock.c')
-rw-r--r--03-refactor/src/clock.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/03-refactor/src/clock.c b/03-refactor/src/clock.c
index c4dcbac..7256500 100644
--- a/03-refactor/src/clock.c
+++ b/03-refactor/src/clock.c
@@ -61,8 +61,21 @@ int configure_pll(
return E_BADPLLN;
}
- RCC.pllcfg_r = (pllp_div_factor << 27) | (pllr << 24) | (pllq << 20) |
- (pllp << 16) | (plln << 8) | (pllm << 4) | (pllsrc << 0);
+ union RCC_PLLCFGR tmp;
+
+ tmp.pllpdiv = pllp_div_factor;
+ tmp.pllr = pllr >> 1;
+ tmp.pllren = pllr & 1;
+ tmp.pllp = pllp >> 1;
+ tmp.pllpen = pllp & 1;
+ tmp.pllq = pllq >> 1;
+ tmp.pllqen = pllq & 1;
+ tmp.plln = plln;
+ tmp.pllm = pllm;
+
+ tmp.pllsrc = pllsrc;
+
+ RCC.pllcfg = tmp;
return 0;
}
@@ -79,13 +92,13 @@ int set_system_clock_MHz(uint8_t mhz)
pll_off();
configure_pll(
- 0 /* pllp_div_factor */, PLL_DIVISOR_4 /* pllr: VCO / 4 = mhz MHz. */,
- PLL_DIVISOR_4 /* pllq: VCO / 4 = mhz MHz */, PLLP_DIVISOR_7 /* pllp */,
-
- /* The following set the frequency of VCO to (mhz*4)MHz: mhz * 1 * 4MHz.
- */
- mhz /* plln | mhz */, PLLM_DIVISOR_1 /* pllm | 01 */,
- PLL_SRC_MSI /* pll src | 04 Mhz */);
+ 0,
+ PLL_DIVISOR_4,
+ PLL_DIVISOR_4,
+ PLLP_DIVISOR_7,
+ mhz,
+ PLLM_DIVISOR_1,
+ PLL_SRC_MSI);
pll_on();
@@ -101,8 +114,8 @@ int set_system_clock_MHz(uint8_t mhz)
int set_system_clock_src(system_clock_src_t src)
{
- uint8_t value = RCC.cfg_r & ~0x03;
- RCC.cfg_r = value | src;
+ uint8_t value = RCC.cfg.r & ~0x03;
+ RCC.cfg.r = value | src;
}
int enable_hsi(__IO rcc_t* rcc, bool enable)