Skip to content

Commit c689eb6

Browse files
committed
Add event check / reset on PwmSeq
1 parent 03c0a98 commit c689eb6

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

examples/pwm-demo/src/main.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,11 @@ const APP: () = {
103103

104104
#[task(binds = PWM0, resources = [pwm])]
105105
fn on_pwm(ctx: on_pwm::Context) {
106-
let (buf0, buf1, pwm) = ctx.resources.pwm.take().unwrap().split();
107-
if pwm.is_event_triggered(PwmEvent::Stopped) {
108-
pwm.reset_event(PwmEvent::Stopped);
106+
let pwm_seq = ctx.resources.pwm.as_ref().unwrap();
107+
if pwm_seq.is_event_triggered(PwmEvent::Stopped) {
108+
pwm_seq.reset_event(PwmEvent::Stopped);
109109
rprintln!("PWM generation was stopped");
110110
}
111-
ctx.resources.pwm.replace(pwm.wrap(buf0, buf1));
112111
}
113112

114113
#[task(binds = GPIOTE, resources = [gpiote], schedule = [debounce])]

nrf-hal-common/src/pwm.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ where
800800
inner.pwm.stop();
801801
}
802802

803-
// Starts playing the given sequence.
803+
/// Starts playing the given sequence.
804804
#[inline(always)]
805805
pub fn start_seq(&self, seq: Seq) {
806806
let inner = self
@@ -809,6 +809,26 @@ where
809809
.unwrap_or_else(|| unsafe { core::hint::unreachable_unchecked() });
810810
inner.pwm.start_seq(seq);
811811
}
812+
813+
/// Checks if the given event has been triggered.
814+
#[inline(always)]
815+
pub fn is_event_triggered(&self, event: PwmEvent) -> bool {
816+
let inner = self
817+
.inner
818+
.as_ref()
819+
.unwrap_or_else(|| unsafe { core::hint::unreachable_unchecked() });
820+
inner.pwm.is_event_triggered(event)
821+
}
822+
823+
/// Marks the given event as handled.
824+
#[inline(always)]
825+
pub fn reset_event(&self, event: PwmEvent) {
826+
let inner = self
827+
.inner
828+
.as_ref()
829+
.unwrap_or_else(|| unsafe { core::hint::unreachable_unchecked() });
830+
inner.pwm.reset_event(event)
831+
}
812832
}
813833

814834
impl<T: Instance> embedded_hal::Pwm for Pwm<T> {

0 commit comments

Comments
 (0)