Skip to content
Snippets Groups Projects
Commit 090c36bc authored by Per Lindgren's avatar Per Lindgren
Browse files

tmp

parent 33bbe8dc
Branches
No related tags found
No related merge requests found
......@@ -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]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment