aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorBrian Cully <bjc@kublai.com>2022-08-06 13:06:59 -0400
committerBrian Cully <bjc@kublai.com>2022-08-06 13:06:59 -0400
commit340eb6eb0d3fb47f5d968c323c92943662457fda (patch)
tree3421390df55457fdfe1d3bbe7f97e325162f7f4b /src/main.rs
parent35248b205cd56633e52b9e634a942e7fd987db0b (diff)
downloadluchie-340eb6eb0d3fb47f5d968c323c92943662457fda.tar.gz
luchie-340eb6eb0d3fb47f5d968c323c92943662457fda.zip
Put blink in separate ‘Task’ struct.
Diffstat (limited to 'src/main.rs')
-rwxr-xr-xsrc/main.rs60
1 files changed, 11 insertions, 49 deletions
diff --git a/src/main.rs b/src/main.rs
index 2944500..2740d25 100755
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,60 +1,27 @@
#![no_std]
#![no_main]
+mod blink;
mod led;
-//use core::arch::global_asm;
-//use gd32vf103_pac::{self as pac, Interrupt, Peripherals};
use gd32vf103xx_hal::{
eclic::{self, EclicExt},
- pac::{self, Interrupt, Peripherals},
+ pac::{self, Peripherals},
rcu::RcuExt,
time::Hertz,
timer,
};
use riscv::asm::wfi;
use riscv_rt::entry;
-use gd32vf103xx_hal::prelude::_embedded_hal_timer_CountDown;
use led::LED;
// global_asm!(include_str!("boot.S"));
-enum State {
- WaitForTime(timer::Timer<pac::TIMER6>, Hertz, LED),
- ToggleLED(timer::Timer<pac::TIMER6>, Hertz, LED),
-}
-
-static mut DEBUG: usize = 1;
-
-impl State {
- fn next(self) -> Self {
- match self {
- Self::WaitForTime(mut timer, duration, led) => {
- match timer.wait() {
- Ok(_) => {
- unsafe {
- DEBUG += 1
- };
-
- led.toggle();
- timer.start(duration);
- Self::WaitForTime(timer, duration, led)
- },
- Err(_) => Self::WaitForTime(timer, duration, led),
- }
- },
-
- Self::ToggleLED(mut timer, duration, led) => {
- unsafe {
- DEBUG += 1
- };
- led.toggle();
- timer.start(duration);
- Self::WaitForTime(timer, duration, led)
- },
- }
- }
+#[derive(PartialEq)]
+pub enum PollResult {
+ Ok,
+ WouldBlock,
}
#[entry]
@@ -66,19 +33,14 @@ fn main(_hartid: usize) -> ! {
let t6 = p.TIMER6;
let mut rcu = p.RCU.configure().freeze();
- let mut timer = timer::Timer::<pac::TIMER6>::timer6(t6, Hertz(10), &mut rcu);
- pac::ECLIC::setup(Interrupt::TIMER6, eclic::TriggerType::RisingEdge, eclic::Level::L0, eclic::Priority::P3);
- unsafe { pac::ECLIC::unmask(Interrupt::TIMER6); }
- if !pac::ECLIC::is_enabled(Interrupt::TIMER6) {
- panic!("timer6 interrupt not enabled");
- }
- timer.listen(timer::Event::Update);
+ let timer = timer::Timer::<pac::TIMER6>::timer6(t6, Hertz(1), &mut rcu);
let led = LED::new();
- let mut state = State::ToggleLED(timer, Hertz(2), led);
+ let mut blink = blink::Task::new(timer, Hertz(5), led);
loop {
- state = state.next();
- unsafe { wfi() };
+ if blink.poll() == PollResult::WouldBlock {
+ unsafe { wfi() };
+ }
}
}