From 5555294dc9f877a561eaaddc6bd8733a00c422e1 Mon Sep 17 00:00:00 2001 From: Per <Per Lindgren> Date: Mon, 4 Feb 2019 10:12:47 +0100 Subject: [PATCH] bare 6 assignment --- examples/bare6.rs | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/examples/bare6.rs b/examples/bare6.rs index 7ea0b3d..f00bc50 100644 --- a/examples/bare6.rs +++ b/examples/bare6.rs @@ -38,7 +38,7 @@ fn main() -> ! { loop {} } -// // user application +// user application fn idle(stim: &mut Stim, rcc: RCC, gpioa: GPIOA) { iprintln!(stim, "idle"); @@ -83,9 +83,8 @@ fn clock_out(rcc: &RCC, gpioc: &GPIOC) { // mco2 : SYSCLK = 0b00 // mcopre : divide by 4 = 0b110 rcc.cfgr - //.modify(|_, w| unsafe { w.mco2().bits(0b00).mco2pre().bits(0b110) }); - .modify(|_, w| w.mco2().sysclk().mco2pre().div4()); - + .modify(|_, w| unsafe { w.mco2().bits(0b00).mco2pre().bits(0b110) }); + // power on GPIOC, RM0368 6.3.11 rcc.ahb1enr.modify(|_, w| w.gpiocen().set_bit()); @@ -94,15 +93,12 @@ fn clock_out(rcc: &RCC, gpioc: &GPIOC) { // AF0, gpioc reset value = AF0 // configure PC9 as alternate function 0b10, RM0368 6.2.10 - gpioc.moder.modify(|_, w| w.moder9().alternate()); - // gpioc.moder.modify(|_, w| w.moder9().bits(0b10)); - + gpioc.moder.modify(|_, w| w.moder9().bits(0b10)); + // otyper reset state push/pull, in reset state (don't need to change) // ospeedr 0b11 = very high speed - - // gpioc.ospeedr.modify(|_, w| w.ospeedr9().bits(0b11)); - gpioc.ospeedr.modify(|_, w| w.ospeedr9().very_high_speed()) + gpioc.ospeedr.modify(|_, w| w.ospeedr9().bits(0b11)); } // 0. Compile and run the example, in 16Mhz @@ -175,3 +171,25 @@ fn clock_out(rcc: &RCC, gpioc: &GPIOC) { // // commit your answers (bare6_4) // +// 5. In the `clock_out` function, the setup of registers is done through +// setting bitpattens manually, e.g. +// rcc.cfgr +// .modify(|_, w| unsafe { w.mco2().bits(0b00).mco2pre().bits(0b110) }); +// +// However based on the vendor SVD file the svd2rust API provides +// a better abstraction, based on pattern enums and functions. +// +// To view the API you can generate documentation for your crate: +// +// > cargo doc --features "hal rtfm" --open +// +// By searching for `mco2` you find the enumerations and functions. +// So here +// `w.mco2().bits{0b00}` is equivalent to +// `w.mco2().sysclk()` and improves readabiity. +// +// Replace the bitpatterns used by the function name equivalents. +// +// Test that the application still runs as before. +// +// Commit your code (bare6_4) \ No newline at end of file -- GitLab