Commit e954f30e authored by Per Lindgren's avatar Per Lindgren

bare 5

parent 090c36bc
......@@ -128,24 +128,25 @@ fn main() {
// user application
fn idle(rcc: &mut RCC, gpioa: &mut GPIOA) {
let rcc_copy = &rcc;
// 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
// 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
// and alter the data output through the BSRR register
// this is more efficient as the read register is not needed.
loop {
// set PA5 high
(*gpioa).BSRRH.write(1 << 5); // set bit, output hight (turn on led)
gpioa.BSRRH.write(1 << 5); // set bit, output hight (turn on led)
wait(10_000);
// set PA5 low
(*gpioa).BSRRL.write(1 << 5); // clear bit, output low (turn off led)
gpioa.BSRRL.write(1 << 5); // clear bit, output low (turn off led)
wait(10_000);
}
}
......@@ -157,8 +158,22 @@ fn idle(rcc: &mut RCC, gpioa: &mut GPIOA) {
// provided by ST (and other companies). Actually, the file presesnted here is mostly a
// cut/paste/replace of the stm32f40x.h, just Rustified.
//
// Here all peripheral access is unsafe, (as we are dereferencing raw pointers). In the code
// we have fairly large unsafe blocks. Your task here is to
// I this case we pass mutable pointer to the `idle`.
//
// Rewrite the accesses in the loop to use the data registerf directly (and make a read/modify/write).
//
// Run and see that the program behaves the same.
//
// commit your answers (bare5_1)
//
// 2.
// Extend the read/write API with a modify, taking the address, field offsbet, field width, and value.
//
// Change the code into using your new API.
//
// Run and see that the program behaves the same.
//
// commit your answers (bare5_2)
// As we are not using interrupts, we just register a dummy catch all handler
#[link_section = ".vector_table.interrupts"]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment