diff --git a/examples/rtic_bare5.txt b/examples/rtic_bare5.txt new file mode 100644 index 0000000000000000000000000000000000000000..65fbc9a2d89a9054d9cb6d5f58df6e4ba1331507 --- /dev/null +++ b/examples/rtic_bare5.txt @@ -0,0 +1,24 @@ + + +fn test_modify() { + let t: VolatileCell<u32> = VolatileCell { + value: core::cell::UnsafeCell::new(0), + }; + t.write(0); + assert!(t.read() == 0); + t.modify(3, 3, 0b10101); + // 10101 + // ..0111000 + // --------- + // 000101000 + assert!(t.read() == 0b101 << 3); + t.modify(4, 3, 0b10001); + // 000101000 + // 111 + // 001 + // 000011000 + assert!(t.read() == 0b011 << 3); + // + // add more tests here if you like +} + diff --git a/src/main.rs b/src/main.rs index d8c4fd34502bbaa306dcb68fcb900b4b0c468106..c46f9c26c31285922aa7453ed19025e3687c4ec9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,6 +20,7 @@ use stm32f4xx_hal::stm32; use rtic::cyccnt::{Instant, U32Ext as _}; +<<<<<<< HEAD #[rtic::app(device = stm32f4xx_hal::stm32, monotonic = rtic::cyccnt::CYCCNT, peripherals = true)] const APP: () = { @@ -73,6 +74,61 @@ const APP: () = { } } +======= + +#[rtic::app(device = stm32f4xx_hal::stm32, monotonic = rtic::cyccnt::CYCCNT, peripherals = true)] +const APP: () = { + struct Resources { + // late resources + GPIOA: stm32::GPIOA, + GPIOC: stm32::GPIOC, + //button: <stm32::GPIOC as int>::PC13, + } + + #[init(schedule = [toggle])] + fn init(cx: init::Context) -> init::LateResources { + rtt_init_print!(); + rprintln!("init"); + + for i in 0..11 { + rprintln!("RTIC Says Hello, world {}!!", i); + } + + let mut core = cx.core; + let device = cx.device; + + + // Initialize (enable) the monotonic timer (CYCCNT) + core.DCB.enable_trace(); + // required on Cortex-M7 devices that software lock the DWT (e.g. STM32F7) + DWT::unlock(); + core.DWT.enable_cycle_counter(); + + // semantically, the monotonic timer is frozen at time "zero" during `init` + // NOTE do *not* call `Instant::now` in this context; it will return a nonsense value + let now = cx.start; // the start time of the system + + // Schedule `toggle` to run 8e6 cycles (clock cycles) in the future + cx.schedule.toggle(now + 8_000_000.cycles()).unwrap(); + + // power on GPIOA, RM0368 6.3.11 + device.RCC.ahb1enr.modify(|_, w| w.gpioaen().set_bit()); + // configure PA5 as output, RM0368 8.4.1 + device.GPIOA.moder.modify(|_, w| w.moder5().bits(1)); + + // Test button thingy. Think I put PC13 to input + device.GPIOC.moder.modify(|_, w| w.moder13().bits(0)); + // device.GPIOC.pupdr.modify(|_, w| w.pupdr13().bits(0)); + + // pass on late resources + init::LateResources { + GPIOA: device.GPIOA, + GPIOC: device.GPIOC, + //button: device.button, + } + } + +>>>>>>> 3104a68743e72194c1e8649cdee76a82240fc05e #[idle] fn idle(_cx: idle::Context) -> ! { @@ -95,10 +151,19 @@ const APP: () = { cx.resources.GPIOA.bsrr.write(|w| w.br5().set_bit()); } +<<<<<<< HEAD +======= + //cx.resources.GPIOC.PullDown; + +>>>>>>> 3104a68743e72194c1e8649cdee76a82240fc05e *TOGGLE = !*TOGGLE; cx.schedule .toggle(cx.scheduled + 16_000_000.cycles()) .unwrap(); +<<<<<<< HEAD +======= + +>>>>>>> 3104a68743e72194c1e8649cdee76a82240fc05e } extern "C" {