Commit 090c36bc authored by Per Lindgren's avatar Per Lindgren

tmp

parent 33bbe8dc
......@@ -119,35 +119,47 @@ fn wait(i: u32) {
}
}
// system startup, can be hidden from the user
fn main() {
// power on GPIOA, RM0368 6.3.11
let rcc = RCC::get(); // get the reference to RCC in memory
unsafe {
let r = (*rcc).AHB1ENR.read(); // read
(*rcc).AHB1ENR.write(r | 1 << (0)); // set enable
}
let rcc = unsafe { &mut *RCC::get() }; // get the reference to RCC in memory
let gpioa = unsafe { &mut *GPIOA::get() }; // get the reference to GPIOA in memory
idle(rcc, gpioa);
}
// configure PA5 as output, RM0368 8.4.1
let gpioa = GPIOA::get(); // get the reference to GPIOA in memory
unsafe {
let r = (*gpioa).MODER.read() & !(0b11 << (5 * 2)); // read and mask
(*gpioa).MODER.write(r | 0b01 << (5 * 2)); // set output mode
// user application
fn idle(rcc: &mut RCC, gpioa: &mut GPIOA) {
// power on GPIOA
let r = (*rcc).AHB1ENR.read(); // read
(*rcc).AHB1ENR.write(r | 1 << (0)); // set enable
// and alter the data output through the BSRR register
// this is more efficient as the read register is not needed.
// 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
loop {
// set PA5 high, RM0368 8.4.7
(*gpioa).BSRRH.write(1 << 5); // set bit, output hight (turn on led)
wait(10_000);
// and alter the data output through the BSRR register
// this is more efficient as the read register is not needed.
// set PA5 low, RM0368 8.4.7
(*gpioa).BSRRL.write(1 << 5); // clear bit, output low (turn off led)
wait(10_000);
}
loop {
// set PA5 high
(*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)
wait(10_000);
}
}
// 1. C like API
// In C the .h files are used for defining interfaces, like function signatures (prototypes),
// structs and macros (but usually not the functions themselves)
// here is a peripheral abstraction quite similar to what you would find in the .h files
// 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
// As we are not using interrupts, we just register a dummy catch all handler
#[link_section = ".vector_table.interrupts"]
#[used]
......
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