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

tmp

parent 33bbe8dc
No related branches found
No related tags found
No related merge requests found
...@@ -119,17 +119,20 @@ fn wait(i: u32) { ...@@ -119,17 +119,20 @@ fn wait(i: u32) {
} }
} }
// system startup, can be hidden from the user
fn main() { fn main() {
// power on GPIOA, RM0368 6.3.11 let rcc = unsafe { &mut *RCC::get() }; // get the reference to RCC in memory
let rcc = RCC::get(); // get the reference to RCC in memory let gpioa = unsafe { &mut *GPIOA::get() }; // get the reference to GPIOA in memory
unsafe { idle(rcc, gpioa);
}
// user application
fn idle(rcc: &mut RCC, gpioa: &mut GPIOA) {
// power on GPIOA
let r = (*rcc).AHB1ENR.read(); // read let r = (*rcc).AHB1ENR.read(); // read
(*rcc).AHB1ENR.write(r | 1 << (0)); // set enable (*rcc).AHB1ENR.write(r | 1 << (0)); // set enable
}
// configure PA5 as output, RM0368 8.4.1 // configure PA5 as output
let gpioa = GPIOA::get(); // get the reference to GPIOA in memory
unsafe {
let r = (*gpioa).MODER.read() & !(0b11 << (5 * 2)); // read and mask let r = (*gpioa).MODER.read() & !(0b11 << (5 * 2)); // read and mask
(*gpioa).MODER.write(r | 0b01 << (5 * 2)); // set output mode (*gpioa).MODER.write(r | 0b01 << (5 * 2)); // set output mode
...@@ -137,16 +140,25 @@ fn main() { ...@@ -137,16 +140,25 @@ fn main() {
// this is more efficient as the read register is not needed. // this is more efficient as the read register is not needed.
loop { loop {
// set PA5 high, RM0368 8.4.7 // 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); wait(10_000);
// set PA5 low, RM0368 8.4.7 // 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); 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 // As we are not using interrupts, we just register a dummy catch all handler
#[link_section = ".vector_table.interrupts"] #[link_section = ".vector_table.interrupts"]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment