diff --git a/examples/rtic_bare5.rs b/examples/rtic_bare5.rs index 5686e1b7a24c32db2f45dd120b87c33605af10ee..ce321696bb4376d82c20c370237539c99f061ca4 100644 --- a/examples/rtic_bare5.rs +++ b/examples/rtic_bare5.rs @@ -59,6 +59,16 @@ mod stm32f40x { #[inline(always)] pub fn modify(&self, offset: u8, width: u8, value: u32) { // your code here + let current = self.read(); + let mut mask = 0; + for _ in 0..width { + mask = (mask << 1 | 1); + } + //mask = mask << offset; + let test = (current & !(mask << offset)); + let test2 = ((value & (mask))<<offset); + let modified = (current & !(mask << offset)) | ((value & (mask))<<offset); + self.write(modified); } } @@ -170,14 +180,18 @@ const APP: () = { let gpioa = unsafe { &mut *GPIOA::get() }; // get the reference to GPIOA in memory // power on GPIOA - let r = rcc.AHB1ENR.read(); // read - rcc.AHB1ENR.write(r | 1 << (0)); // set enable + // let r = rcc.AHB1ENR.read(); // read + // rcc.AHB1ENR.write(r | 1 << (0)); // set enable + + rcc.AHB1ENR.modify(0, 1, 1); // configure PA5 as output - let r = gpioa.MODER.read() & !(0b11 << (5 * 2)); // read and mask - gpioa.MODER.write(r | 0b01 << (5 * 2)); // set output mode + // let r = gpioa.MODER.read() & !(0b11 << (5 * 2)); // read and mask + // gpioa.MODER.write(r | 0b01 << (5 * 2)); // set output mode + + gpioa.MODER.modify(5*2, 2, 0b01); - // test_modify(); + //test_modify(); loop { // set PA5 high @@ -241,6 +255,6 @@ const APP: () = { // What if we could automatically generate that from Vendors specifications (SVD files)? // Wouldn't that be great? // -// ** your answer here ** +// Yes. // // Commit your answers (bare5_2)