Further API simplification for the single seq scenario

This commit is contained in:
huntc 2022-02-05 08:05:23 +11:00
parent 81d31e43eb
commit df5ba727f2
4 changed files with 8 additions and 11 deletions

View file

@ -323,9 +323,9 @@ pub struct SingleSequencer<'d, 's, T: Instance> {
impl<'d, 's, T: Instance> SingleSequencer<'d, 's, T> { impl<'d, 's, T: Instance> SingleSequencer<'d, 's, T> {
/// Create a new sequencer /// Create a new sequencer
pub fn new(pwm: &'s mut SequencePwm<'d, T>, sequence: Sequence<'s>) -> Self { pub fn new(pwm: &'s mut SequencePwm<'d, T>, words: &'s [u16], config: SequenceConfig) -> Self {
Self { Self {
sequencer: Sequencer::new(pwm, sequence, None), sequencer: Sequencer::new(pwm, Sequence::new(words, config), None),
} }
} }

View file

@ -9,7 +9,7 @@ use embassy::executor::Spawner;
use embassy::time::{Duration, Timer}; use embassy::time::{Duration, Timer};
use embassy_nrf::gpio::NoPin; use embassy_nrf::gpio::NoPin;
use embassy_nrf::pwm::{ use embassy_nrf::pwm::{
Config, Prescaler, Sequence, SequenceConfig, SequencePwm, SingleSequenceMode, SingleSequencer, Config, Prescaler, SequenceConfig, SequencePwm, SingleSequenceMode, SingleSequencer,
}; };
use embassy_nrf::Peripherals; use embassy_nrf::Peripherals;
@ -31,8 +31,7 @@ async fn main(_spawner: Spawner, p: Peripherals) {
p.PWM0, p.P0_13, NoPin, NoPin, NoPin, config, p.PWM0, p.P0_13, NoPin, NoPin, NoPin, config,
)); ));
let sequence = Sequence::new(&seq_words, seq_config); let sequencer = SingleSequencer::new(&mut pwm, &seq_words, seq_config);
let sequencer = SingleSequencer::new(&mut pwm, sequence);
unwrap!(sequencer.start(SingleSequenceMode::Times(1))); unwrap!(sequencer.start(SingleSequenceMode::Times(1)));
// we can abort a sequence if we need to before its complete with pwm.stop() // we can abort a sequence if we need to before its complete with pwm.stop()

View file

@ -12,7 +12,7 @@ use embassy_nrf::gpio::{Input, NoPin, Pull};
use embassy_nrf::gpiote::{InputChannel, InputChannelPolarity}; use embassy_nrf::gpiote::{InputChannel, InputChannelPolarity};
use embassy_nrf::ppi::Ppi; use embassy_nrf::ppi::Ppi;
use embassy_nrf::pwm::{ use embassy_nrf::pwm::{
Config, Prescaler, Sequence, SequenceConfig, SequencePwm, SingleSequenceMode, SingleSequencer, Config, Prescaler, SequenceConfig, SequencePwm, SingleSequenceMode, SingleSequencer,
}; };
use embassy_nrf::Peripherals; use embassy_nrf::Peripherals;
@ -53,8 +53,7 @@ async fn main(_spawner: Spawner, p: Peripherals) {
let start = unsafe { pwm.task_start_seq0() }; let start = unsafe { pwm.task_start_seq0() };
let stop = unsafe { pwm.task_stop() }; let stop = unsafe { pwm.task_stop() };
let sequence = Sequence::new(&seq_words, seq_config); let sequencer = SingleSequencer::new(&mut pwm, &seq_words, seq_config);
let sequencer = SingleSequencer::new(&mut pwm, sequence);
unwrap!(sequencer.start(SingleSequenceMode::Infinite)); unwrap!(sequencer.start(SingleSequenceMode::Infinite));
let mut ppi = Ppi::new_one_to_one(p.PPI_CH1, button1.event_in(), start); let mut ppi = Ppi::new_one_to_one(p.PPI_CH1, button1.event_in(), start);

View file

@ -9,7 +9,7 @@ use embassy::executor::Spawner;
use embassy::time::{Duration, Timer}; use embassy::time::{Duration, Timer};
use embassy_nrf::gpio::NoPin; use embassy_nrf::gpio::NoPin;
use embassy_nrf::pwm::{ use embassy_nrf::pwm::{
Config, Prescaler, Sequence, SequenceConfig, SequenceLoad, SequencePwm, SingleSequenceMode, Config, Prescaler, SequenceConfig, SequenceLoad, SequencePwm, SingleSequenceMode,
SingleSequencer, SingleSequencer,
}; };
use embassy_nrf::Peripherals; use embassy_nrf::Peripherals;
@ -54,8 +54,7 @@ async fn main(_spawner: Spawner, p: Peripherals) {
let mut bit_value = T0H; let mut bit_value = T0H;
loop { loop {
let sequence0 = Sequence::new(&seq_words, seq_config.clone()); let sequences = SingleSequencer::new(&mut pwm, &seq_words, seq_config.clone());
let sequences = SingleSequencer::new(&mut pwm, sequence0);
unwrap!(sequences.start(SingleSequenceMode::Times(1))); unwrap!(sequences.start(SingleSequenceMode::Times(1)));
Timer::after(Duration::from_millis(50)).await; Timer::after(Duration::from_millis(50)).await;