Fewer channel traits, more cfg to make the system work

This commit is contained in:
Dion Dokter 2021-10-26 09:45:29 +02:00 committed by Dario Nieuwenhuis
parent 4d3341dbb9
commit c63d747209
12 changed files with 335 additions and 312 deletions

View File

@ -15,7 +15,7 @@ use embassy_hal_common::{low_power_wait_until, unborrow};
use crate::gpio::sealed::Pin as _;
use crate::gpio::{OptionalPin as GpioOptionalPin, Pin as GpioPin};
use crate::pac;
use crate::ppi::{AnyChannel, Event, OneToOneChannel, OneToTwoChannel, Ppi, Task};
use crate::ppi::{AnyConfigurableChannel, ConfigurableChannel, Event, Ppi, Task};
use crate::timer::Instance as TimerInstance;
use crate::timer::{Frequency, Timer};
use crate::uarte::{Config, Instance as UarteInstance};
@ -45,8 +45,8 @@ impl<'d, U: UarteInstance, T: TimerInstance> State<'d, U, T> {
struct StateInner<'d, U: UarteInstance, T: TimerInstance> {
phantom: PhantomData<&'d mut U>,
timer: Timer<'d, T>,
_ppi_ch1: Ppi<'d, AnyChannel, 1, 2>,
_ppi_ch2: Ppi<'d, AnyChannel, 1, 1>,
_ppi_ch1: Ppi<'d, AnyConfigurableChannel, 1, 2>,
_ppi_ch2: Ppi<'d, AnyConfigurableChannel, 1, 1>,
rx: RingBuffer<'d>,
rx_state: RxState,
@ -70,8 +70,8 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> {
state: &'d mut State<'d, U, T>,
_uarte: impl Unborrow<Target = U> + 'd,
timer: impl Unborrow<Target = T> + 'd,
ppi_ch1: impl Unborrow<Target = impl OneToTwoChannel + 'd> + 'd,
ppi_ch2: impl Unborrow<Target = impl OneToOneChannel + 'd> + 'd,
ppi_ch1: impl Unborrow<Target = impl ConfigurableChannel + 'd> + 'd,
ppi_ch2: impl Unborrow<Target = impl ConfigurableChannel + 'd> + 'd,
irq: impl Unborrow<Target = U::Interrupt> + 'd,
rxd: impl Unborrow<Target = impl GpioPin> + 'd,
txd: impl Unborrow<Target = impl GpioPin> + 'd,
@ -145,20 +145,18 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> {
timer.cc(0).short_compare_stop();
let mut ppi_ch1 = Ppi::new_one_to_two(
ppi_ch1,
ppi_ch1.degrade(),
Event::from_reg(&r.events_rxdrdy),
timer.task_clear(),
timer.task_start(),
)
.degrade();
);
ppi_ch1.enable();
let mut ppi_ch2 = Ppi::new_one_to_one(
ppi_ch2,
ppi_ch2.degrade(),
timer.cc(0).event_compare(),
Task::from_reg(&r.tasks_stoprx),
)
.degrade();
);
ppi_ch2.enable();
Self {

View File

@ -167,28 +167,28 @@ impl_pin!(P0_29, 0, 29);
impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31);
impl_ppi_channel!(PPI_CH0, 0, true, 1, 2);
impl_ppi_channel!(PPI_CH1, 1, true, 1, 2);
impl_ppi_channel!(PPI_CH2, 2, true, 1, 2);
impl_ppi_channel!(PPI_CH3, 3, true, 1, 2);
impl_ppi_channel!(PPI_CH4, 4, true, 1, 2);
impl_ppi_channel!(PPI_CH5, 5, true, 1, 2);
impl_ppi_channel!(PPI_CH6, 6, true, 1, 2);
impl_ppi_channel!(PPI_CH7, 7, true, 1, 2);
impl_ppi_channel!(PPI_CH8, 8, true, 1, 2);
impl_ppi_channel!(PPI_CH9, 9, true, 1, 2);
impl_ppi_channel!(PPI_CH20, 20, false, 0, 1);
impl_ppi_channel!(PPI_CH21, 21, false, 0, 1);
impl_ppi_channel!(PPI_CH22, 22, false, 0, 1);
impl_ppi_channel!(PPI_CH23, 23, false, 0, 1);
impl_ppi_channel!(PPI_CH24, 24, false, 0, 1);
impl_ppi_channel!(PPI_CH25, 25, false, 0, 1);
impl_ppi_channel!(PPI_CH26, 26, false, 0, 1);
impl_ppi_channel!(PPI_CH27, 27, false, 0, 1);
impl_ppi_channel!(PPI_CH28, 28, false, 0, 1);
impl_ppi_channel!(PPI_CH29, 29, false, 0, 1);
impl_ppi_channel!(PPI_CH30, 30, false, 0, 1);
impl_ppi_channel!(PPI_CH31, 31, false, 0, 1);
impl_ppi_channel!(PPI_CH0, 0 => configurable);
impl_ppi_channel!(PPI_CH1, 1 => configurable);
impl_ppi_channel!(PPI_CH2, 2 => configurable);
impl_ppi_channel!(PPI_CH3, 3 => configurable);
impl_ppi_channel!(PPI_CH4, 4 => configurable);
impl_ppi_channel!(PPI_CH5, 5 => configurable);
impl_ppi_channel!(PPI_CH6, 6 => configurable);
impl_ppi_channel!(PPI_CH7, 7 => configurable);
impl_ppi_channel!(PPI_CH8, 8 => configurable);
impl_ppi_channel!(PPI_CH9, 9 => configurable);
impl_ppi_channel!(PPI_CH20, 20 => static);
impl_ppi_channel!(PPI_CH21, 21 => static);
impl_ppi_channel!(PPI_CH22, 22 => static);
impl_ppi_channel!(PPI_CH23, 23 => static);
impl_ppi_channel!(PPI_CH24, 24 => static);
impl_ppi_channel!(PPI_CH25, 25 => static);
impl_ppi_channel!(PPI_CH26, 26 => static);
impl_ppi_channel!(PPI_CH27, 27 => static);
impl_ppi_channel!(PPI_CH28, 28 => static);
impl_ppi_channel!(PPI_CH29, 29 => static);
impl_ppi_channel!(PPI_CH30, 30 => static);
impl_ppi_channel!(PPI_CH31, 31 => static);
impl_saadc_input!(P0_04, ANALOGINPUT2);
impl_saadc_input!(P0_05, ANALOGINPUT3);

View File

@ -172,38 +172,38 @@ impl_pin!(P0_29, 0, 29);
impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31);
impl_ppi_channel!(PPI_CH0, 0, true, 1, 2);
impl_ppi_channel!(PPI_CH1, 1, true, 1, 2);
impl_ppi_channel!(PPI_CH2, 2, true, 1, 2);
impl_ppi_channel!(PPI_CH3, 3, true, 1, 2);
impl_ppi_channel!(PPI_CH4, 4, true, 1, 2);
impl_ppi_channel!(PPI_CH5, 5, true, 1, 2);
impl_ppi_channel!(PPI_CH6, 6, true, 1, 2);
impl_ppi_channel!(PPI_CH7, 7, true, 1, 2);
impl_ppi_channel!(PPI_CH8, 8, true, 1, 2);
impl_ppi_channel!(PPI_CH9, 9, true, 1, 2);
impl_ppi_channel!(PPI_CH10, 10, true, 1, 2);
impl_ppi_channel!(PPI_CH11, 11, true, 1, 2);
impl_ppi_channel!(PPI_CH12, 12, true, 1, 2);
impl_ppi_channel!(PPI_CH13, 13, true, 1, 2);
impl_ppi_channel!(PPI_CH14, 14, true, 1, 2);
impl_ppi_channel!(PPI_CH15, 15, true, 1, 2);
impl_ppi_channel!(PPI_CH16, 16, true, 1, 2);
impl_ppi_channel!(PPI_CH17, 17, true, 1, 2);
impl_ppi_channel!(PPI_CH18, 18, true, 1, 2);
impl_ppi_channel!(PPI_CH19, 19, true, 1, 2);
impl_ppi_channel!(PPI_CH20, 20, false, 0, 1);
impl_ppi_channel!(PPI_CH21, 21, false, 0, 1);
impl_ppi_channel!(PPI_CH22, 22, false, 0, 1);
impl_ppi_channel!(PPI_CH23, 23, false, 0, 1);
impl_ppi_channel!(PPI_CH24, 24, false, 0, 1);
impl_ppi_channel!(PPI_CH25, 25, false, 0, 1);
impl_ppi_channel!(PPI_CH26, 26, false, 0, 1);
impl_ppi_channel!(PPI_CH27, 27, false, 0, 1);
impl_ppi_channel!(PPI_CH28, 28, false, 0, 1);
impl_ppi_channel!(PPI_CH29, 29, false, 0, 1);
impl_ppi_channel!(PPI_CH30, 30, false, 0, 1);
impl_ppi_channel!(PPI_CH31, 31, false, 0, 1);
impl_ppi_channel!(PPI_CH0, 0 => configurable);
impl_ppi_channel!(PPI_CH1, 1 => configurable);
impl_ppi_channel!(PPI_CH2, 2 => configurable);
impl_ppi_channel!(PPI_CH3, 3 => configurable);
impl_ppi_channel!(PPI_CH4, 4 => configurable);
impl_ppi_channel!(PPI_CH5, 5 => configurable);
impl_ppi_channel!(PPI_CH6, 6 => configurable);
impl_ppi_channel!(PPI_CH7, 7 => configurable);
impl_ppi_channel!(PPI_CH8, 8 => configurable);
impl_ppi_channel!(PPI_CH9, 9 => configurable);
impl_ppi_channel!(PPI_CH10, 10 => configurable);
impl_ppi_channel!(PPI_CH11, 11 => configurable);
impl_ppi_channel!(PPI_CH12, 12 => configurable);
impl_ppi_channel!(PPI_CH13, 13 => configurable);
impl_ppi_channel!(PPI_CH14, 14 => configurable);
impl_ppi_channel!(PPI_CH15, 15 => configurable);
impl_ppi_channel!(PPI_CH16, 16 => configurable);
impl_ppi_channel!(PPI_CH17, 17 => configurable);
impl_ppi_channel!(PPI_CH18, 18 => configurable);
impl_ppi_channel!(PPI_CH19, 19 => configurable);
impl_ppi_channel!(PPI_CH20, 20 => static);
impl_ppi_channel!(PPI_CH21, 21 => static);
impl_ppi_channel!(PPI_CH22, 22 => static);
impl_ppi_channel!(PPI_CH23, 23 => static);
impl_ppi_channel!(PPI_CH24, 24 => static);
impl_ppi_channel!(PPI_CH25, 25 => static);
impl_ppi_channel!(PPI_CH26, 26 => static);
impl_ppi_channel!(PPI_CH27, 27 => static);
impl_ppi_channel!(PPI_CH28, 28 => static);
impl_ppi_channel!(PPI_CH29, 29 => static);
impl_ppi_channel!(PPI_CH30, 30 => static);
impl_ppi_channel!(PPI_CH31, 31 => static);
impl_saadc_input!(P0_02, ANALOGINPUT0);
impl_saadc_input!(P0_03, ANALOGINPUT1);

View File

@ -173,38 +173,38 @@ impl_pin!(P0_29, 0, 29);
impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31);
impl_ppi_channel!(PPI_CH0, 0, true, 1, 2);
impl_ppi_channel!(PPI_CH1, 1, true, 1, 2);
impl_ppi_channel!(PPI_CH2, 2, true, 1, 2);
impl_ppi_channel!(PPI_CH3, 3, true, 1, 2);
impl_ppi_channel!(PPI_CH4, 4, true, 1, 2);
impl_ppi_channel!(PPI_CH5, 5, true, 1, 2);
impl_ppi_channel!(PPI_CH6, 6, true, 1, 2);
impl_ppi_channel!(PPI_CH7, 7, true, 1, 2);
impl_ppi_channel!(PPI_CH8, 8, true, 1, 2);
impl_ppi_channel!(PPI_CH9, 9, true, 1, 2);
impl_ppi_channel!(PPI_CH10, 10, true, 1, 2);
impl_ppi_channel!(PPI_CH11, 11, true, 1, 2);
impl_ppi_channel!(PPI_CH12, 12, true, 1, 2);
impl_ppi_channel!(PPI_CH13, 13, true, 1, 2);
impl_ppi_channel!(PPI_CH14, 14, true, 1, 2);
impl_ppi_channel!(PPI_CH15, 15, true, 1, 2);
impl_ppi_channel!(PPI_CH16, 16, true, 1, 2);
impl_ppi_channel!(PPI_CH17, 17, true, 1, 2);
impl_ppi_channel!(PPI_CH18, 18, true, 1, 2);
impl_ppi_channel!(PPI_CH19, 19, true, 1, 2);
impl_ppi_channel!(PPI_CH20, 20, false, 0, 1);
impl_ppi_channel!(PPI_CH21, 21, false, 0, 1);
impl_ppi_channel!(PPI_CH22, 22, false, 0, 1);
impl_ppi_channel!(PPI_CH23, 23, false, 0, 1);
impl_ppi_channel!(PPI_CH24, 24, false, 0, 1);
impl_ppi_channel!(PPI_CH25, 25, false, 0, 1);
impl_ppi_channel!(PPI_CH26, 26, false, 0, 1);
impl_ppi_channel!(PPI_CH27, 27, false, 0, 1);
impl_ppi_channel!(PPI_CH28, 28, false, 0, 1);
impl_ppi_channel!(PPI_CH29, 29, false, 0, 1);
impl_ppi_channel!(PPI_CH30, 30, false, 0, 1);
impl_ppi_channel!(PPI_CH31, 31, false, 0, 1);
impl_ppi_channel!(PPI_CH0, 0 => configurable);
impl_ppi_channel!(PPI_CH1, 1 => configurable);
impl_ppi_channel!(PPI_CH2, 2 => configurable);
impl_ppi_channel!(PPI_CH3, 3 => configurable);
impl_ppi_channel!(PPI_CH4, 4 => configurable);
impl_ppi_channel!(PPI_CH5, 5 => configurable);
impl_ppi_channel!(PPI_CH6, 6 => configurable);
impl_ppi_channel!(PPI_CH7, 7 => configurable);
impl_ppi_channel!(PPI_CH8, 8 => configurable);
impl_ppi_channel!(PPI_CH9, 9 => configurable);
impl_ppi_channel!(PPI_CH10, 10 => configurable);
impl_ppi_channel!(PPI_CH11, 11 => configurable);
impl_ppi_channel!(PPI_CH12, 12 => configurable);
impl_ppi_channel!(PPI_CH13, 13 => configurable);
impl_ppi_channel!(PPI_CH14, 14 => configurable);
impl_ppi_channel!(PPI_CH15, 15 => configurable);
impl_ppi_channel!(PPI_CH16, 16 => configurable);
impl_ppi_channel!(PPI_CH17, 17 => configurable);
impl_ppi_channel!(PPI_CH18, 18 => configurable);
impl_ppi_channel!(PPI_CH19, 19 => configurable);
impl_ppi_channel!(PPI_CH20, 20 => static);
impl_ppi_channel!(PPI_CH21, 21 => static);
impl_ppi_channel!(PPI_CH22, 22 => static);
impl_ppi_channel!(PPI_CH23, 23 => static);
impl_ppi_channel!(PPI_CH24, 24 => static);
impl_ppi_channel!(PPI_CH25, 25 => static);
impl_ppi_channel!(PPI_CH26, 26 => static);
impl_ppi_channel!(PPI_CH27, 27 => static);
impl_ppi_channel!(PPI_CH28, 28 => static);
impl_ppi_channel!(PPI_CH29, 29 => static);
impl_ppi_channel!(PPI_CH30, 30 => static);
impl_ppi_channel!(PPI_CH31, 31 => static);
impl_saadc_input!(P0_02, ANALOGINPUT0);
impl_saadc_input!(P0_03, ANALOGINPUT1);

View File

@ -168,38 +168,38 @@ impl_pin!(P0_29, 0, 29);
impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31);
impl_ppi_channel!(PPI_CH0, 0, true, 1, 2);
impl_ppi_channel!(PPI_CH1, 1, true, 1, 2);
impl_ppi_channel!(PPI_CH2, 2, true, 1, 2);
impl_ppi_channel!(PPI_CH3, 3, true, 1, 2);
impl_ppi_channel!(PPI_CH4, 4, true, 1, 2);
impl_ppi_channel!(PPI_CH5, 5, true, 1, 2);
impl_ppi_channel!(PPI_CH6, 6, true, 1, 2);
impl_ppi_channel!(PPI_CH7, 7, true, 1, 2);
impl_ppi_channel!(PPI_CH8, 8, true, 1, 2);
impl_ppi_channel!(PPI_CH9, 9, true, 1, 2);
impl_ppi_channel!(PPI_CH10, 10, true, 1, 2);
impl_ppi_channel!(PPI_CH11, 11, true, 1, 2);
impl_ppi_channel!(PPI_CH12, 12, true, 1, 2);
impl_ppi_channel!(PPI_CH13, 13, true, 1, 2);
impl_ppi_channel!(PPI_CH14, 14, true, 1, 2);
impl_ppi_channel!(PPI_CH15, 15, true, 1, 2);
impl_ppi_channel!(PPI_CH16, 16, true, 1, 2);
impl_ppi_channel!(PPI_CH17, 17, true, 1, 2);
impl_ppi_channel!(PPI_CH18, 18, true, 1, 2);
impl_ppi_channel!(PPI_CH19, 19, true, 1, 2);
impl_ppi_channel!(PPI_CH20, 20, false, 0, 1);
impl_ppi_channel!(PPI_CH21, 21, false, 0, 1);
impl_ppi_channel!(PPI_CH22, 22, false, 0, 1);
impl_ppi_channel!(PPI_CH23, 23, false, 0, 1);
impl_ppi_channel!(PPI_CH24, 24, false, 0, 1);
impl_ppi_channel!(PPI_CH25, 25, false, 0, 1);
impl_ppi_channel!(PPI_CH26, 26, false, 0, 1);
impl_ppi_channel!(PPI_CH27, 27, false, 0, 1);
impl_ppi_channel!(PPI_CH28, 28, false, 0, 1);
impl_ppi_channel!(PPI_CH29, 29, false, 0, 1);
impl_ppi_channel!(PPI_CH30, 30, false, 0, 1);
impl_ppi_channel!(PPI_CH31, 31, false, 0, 1);
impl_ppi_channel!(PPI_CH0, 0 => configurable);
impl_ppi_channel!(PPI_CH1, 1 => configurable);
impl_ppi_channel!(PPI_CH2, 2 => configurable);
impl_ppi_channel!(PPI_CH3, 3 => configurable);
impl_ppi_channel!(PPI_CH4, 4 => configurable);
impl_ppi_channel!(PPI_CH5, 5 => configurable);
impl_ppi_channel!(PPI_CH6, 6 => configurable);
impl_ppi_channel!(PPI_CH7, 7 => configurable);
impl_ppi_channel!(PPI_CH8, 8 => configurable);
impl_ppi_channel!(PPI_CH9, 9 => configurable);
impl_ppi_channel!(PPI_CH10, 10 => configurable);
impl_ppi_channel!(PPI_CH11, 11 => configurable);
impl_ppi_channel!(PPI_CH12, 12 => configurable);
impl_ppi_channel!(PPI_CH13, 13 => configurable);
impl_ppi_channel!(PPI_CH14, 14 => configurable);
impl_ppi_channel!(PPI_CH15, 15 => configurable);
impl_ppi_channel!(PPI_CH16, 16 => configurable);
impl_ppi_channel!(PPI_CH17, 17 => configurable);
impl_ppi_channel!(PPI_CH18, 18 => configurable);
impl_ppi_channel!(PPI_CH19, 19 => configurable);
impl_ppi_channel!(PPI_CH20, 20 => static);
impl_ppi_channel!(PPI_CH21, 21 => static);
impl_ppi_channel!(PPI_CH22, 22 => static);
impl_ppi_channel!(PPI_CH23, 23 => static);
impl_ppi_channel!(PPI_CH24, 24 => static);
impl_ppi_channel!(PPI_CH25, 25 => static);
impl_ppi_channel!(PPI_CH26, 26 => static);
impl_ppi_channel!(PPI_CH27, 27 => static);
impl_ppi_channel!(PPI_CH28, 28 => static);
impl_ppi_channel!(PPI_CH29, 29 => static);
impl_ppi_channel!(PPI_CH30, 30 => static);
impl_ppi_channel!(PPI_CH31, 31 => static);
pub mod irqs {
use crate::pac::Interrupt as InterruptEnum;

View File

@ -190,38 +190,38 @@ impl_pin!(P0_29, 0, 29);
impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31);
impl_ppi_channel!(PPI_CH0, 0, true, 1, 2);
impl_ppi_channel!(PPI_CH1, 1, true, 1, 2);
impl_ppi_channel!(PPI_CH2, 2, true, 1, 2);
impl_ppi_channel!(PPI_CH3, 3, true, 1, 2);
impl_ppi_channel!(PPI_CH4, 4, true, 1, 2);
impl_ppi_channel!(PPI_CH5, 5, true, 1, 2);
impl_ppi_channel!(PPI_CH6, 6, true, 1, 2);
impl_ppi_channel!(PPI_CH7, 7, true, 1, 2);
impl_ppi_channel!(PPI_CH8, 8, true, 1, 2);
impl_ppi_channel!(PPI_CH9, 9, true, 1, 2);
impl_ppi_channel!(PPI_CH10, 10, true, 1, 2);
impl_ppi_channel!(PPI_CH11, 11, true, 1, 2);
impl_ppi_channel!(PPI_CH12, 12, true, 1, 2);
impl_ppi_channel!(PPI_CH13, 13, true, 1, 2);
impl_ppi_channel!(PPI_CH14, 14, true, 1, 2);
impl_ppi_channel!(PPI_CH15, 15, true, 1, 2);
impl_ppi_channel!(PPI_CH16, 16, true, 1, 2);
impl_ppi_channel!(PPI_CH17, 17, true, 1, 2);
impl_ppi_channel!(PPI_CH18, 18, true, 1, 2);
impl_ppi_channel!(PPI_CH19, 19, true, 1, 2);
impl_ppi_channel!(PPI_CH20, 20, false, 0, 1);
impl_ppi_channel!(PPI_CH21, 21, false, 0, 1);
impl_ppi_channel!(PPI_CH22, 22, false, 0, 1);
impl_ppi_channel!(PPI_CH23, 23, false, 0, 1);
impl_ppi_channel!(PPI_CH24, 24, false, 0, 1);
impl_ppi_channel!(PPI_CH25, 25, false, 0, 1);
impl_ppi_channel!(PPI_CH26, 26, false, 0, 1);
impl_ppi_channel!(PPI_CH27, 27, false, 0, 1);
impl_ppi_channel!(PPI_CH28, 28, false, 0, 1);
impl_ppi_channel!(PPI_CH29, 29, false, 0, 1);
impl_ppi_channel!(PPI_CH30, 30, false, 0, 1);
impl_ppi_channel!(PPI_CH31, 31, false, 0, 1);
impl_ppi_channel!(PPI_CH0, 0 => configurable);
impl_ppi_channel!(PPI_CH1, 1 => configurable);
impl_ppi_channel!(PPI_CH2, 2 => configurable);
impl_ppi_channel!(PPI_CH3, 3 => configurable);
impl_ppi_channel!(PPI_CH4, 4 => configurable);
impl_ppi_channel!(PPI_CH5, 5 => configurable);
impl_ppi_channel!(PPI_CH6, 6 => configurable);
impl_ppi_channel!(PPI_CH7, 7 => configurable);
impl_ppi_channel!(PPI_CH8, 8 => configurable);
impl_ppi_channel!(PPI_CH9, 9 => configurable);
impl_ppi_channel!(PPI_CH10, 10 => configurable);
impl_ppi_channel!(PPI_CH11, 11 => configurable);
impl_ppi_channel!(PPI_CH12, 12 => configurable);
impl_ppi_channel!(PPI_CH13, 13 => configurable);
impl_ppi_channel!(PPI_CH14, 14 => configurable);
impl_ppi_channel!(PPI_CH15, 15 => configurable);
impl_ppi_channel!(PPI_CH16, 16 => configurable);
impl_ppi_channel!(PPI_CH17, 17 => configurable);
impl_ppi_channel!(PPI_CH18, 18 => configurable);
impl_ppi_channel!(PPI_CH19, 19 => configurable);
impl_ppi_channel!(PPI_CH20, 20 => static);
impl_ppi_channel!(PPI_CH21, 21 => static);
impl_ppi_channel!(PPI_CH22, 22 => static);
impl_ppi_channel!(PPI_CH23, 23 => static);
impl_ppi_channel!(PPI_CH24, 24 => static);
impl_ppi_channel!(PPI_CH25, 25 => static);
impl_ppi_channel!(PPI_CH26, 26 => static);
impl_ppi_channel!(PPI_CH27, 27 => static);
impl_ppi_channel!(PPI_CH28, 28 => static);
impl_ppi_channel!(PPI_CH29, 29 => static);
impl_ppi_channel!(PPI_CH30, 30 => static);
impl_ppi_channel!(PPI_CH31, 31 => static);
impl_saadc_input!(P0_02, ANALOGINPUT0);
impl_saadc_input!(P0_03, ANALOGINPUT1);

View File

@ -226,38 +226,38 @@ impl_pin!(P1_13, 1, 13);
impl_pin!(P1_14, 1, 14);
impl_pin!(P1_15, 1, 15);
impl_ppi_channel!(PPI_CH0, 0, true, 1, 2);
impl_ppi_channel!(PPI_CH1, 1, true, 1, 2);
impl_ppi_channel!(PPI_CH2, 2, true, 1, 2);
impl_ppi_channel!(PPI_CH3, 3, true, 1, 2);
impl_ppi_channel!(PPI_CH4, 4, true, 1, 2);
impl_ppi_channel!(PPI_CH5, 5, true, 1, 2);
impl_ppi_channel!(PPI_CH6, 6, true, 1, 2);
impl_ppi_channel!(PPI_CH7, 7, true, 1, 2);
impl_ppi_channel!(PPI_CH8, 8, true, 1, 2);
impl_ppi_channel!(PPI_CH9, 9, true, 1, 2);
impl_ppi_channel!(PPI_CH10, 10, true, 1, 2);
impl_ppi_channel!(PPI_CH11, 11, true, 1, 2);
impl_ppi_channel!(PPI_CH12, 12, true, 1, 2);
impl_ppi_channel!(PPI_CH13, 13, true, 1, 2);
impl_ppi_channel!(PPI_CH14, 14, true, 1, 2);
impl_ppi_channel!(PPI_CH15, 15, true, 1, 2);
impl_ppi_channel!(PPI_CH16, 16, true, 1, 2);
impl_ppi_channel!(PPI_CH17, 17, true, 1, 2);
impl_ppi_channel!(PPI_CH18, 18, true, 1, 2);
impl_ppi_channel!(PPI_CH19, 19, true, 1, 2);
impl_ppi_channel!(PPI_CH20, 20, false, 0, 1);
impl_ppi_channel!(PPI_CH21, 21, false, 0, 1);
impl_ppi_channel!(PPI_CH22, 22, false, 0, 1);
impl_ppi_channel!(PPI_CH23, 23, false, 0, 1);
impl_ppi_channel!(PPI_CH24, 24, false, 0, 1);
impl_ppi_channel!(PPI_CH25, 25, false, 0, 1);
impl_ppi_channel!(PPI_CH26, 26, false, 0, 1);
impl_ppi_channel!(PPI_CH27, 27, false, 0, 1);
impl_ppi_channel!(PPI_CH28, 28, false, 0, 1);
impl_ppi_channel!(PPI_CH29, 29, false, 0, 1);
impl_ppi_channel!(PPI_CH30, 30, false, 0, 1);
impl_ppi_channel!(PPI_CH31, 31, false, 0, 1);
impl_ppi_channel!(PPI_CH0, 0 => configurable);
impl_ppi_channel!(PPI_CH1, 1 => configurable);
impl_ppi_channel!(PPI_CH2, 2 => configurable);
impl_ppi_channel!(PPI_CH3, 3 => configurable);
impl_ppi_channel!(PPI_CH4, 4 => configurable);
impl_ppi_channel!(PPI_CH5, 5 => configurable);
impl_ppi_channel!(PPI_CH6, 6 => configurable);
impl_ppi_channel!(PPI_CH7, 7 => configurable);
impl_ppi_channel!(PPI_CH8, 8 => configurable);
impl_ppi_channel!(PPI_CH9, 9 => configurable);
impl_ppi_channel!(PPI_CH10, 10 => configurable);
impl_ppi_channel!(PPI_CH11, 11 => configurable);
impl_ppi_channel!(PPI_CH12, 12 => configurable);
impl_ppi_channel!(PPI_CH13, 13 => configurable);
impl_ppi_channel!(PPI_CH14, 14 => configurable);
impl_ppi_channel!(PPI_CH15, 15 => configurable);
impl_ppi_channel!(PPI_CH16, 16 => configurable);
impl_ppi_channel!(PPI_CH17, 17 => configurable);
impl_ppi_channel!(PPI_CH18, 18 => configurable);
impl_ppi_channel!(PPI_CH19, 19 => configurable);
impl_ppi_channel!(PPI_CH20, 20 => static);
impl_ppi_channel!(PPI_CH21, 21 => static);
impl_ppi_channel!(PPI_CH22, 22 => static);
impl_ppi_channel!(PPI_CH23, 23 => static);
impl_ppi_channel!(PPI_CH24, 24 => static);
impl_ppi_channel!(PPI_CH25, 25 => static);
impl_ppi_channel!(PPI_CH26, 26 => static);
impl_ppi_channel!(PPI_CH27, 27 => static);
impl_ppi_channel!(PPI_CH28, 28 => static);
impl_ppi_channel!(PPI_CH29, 29 => static);
impl_ppi_channel!(PPI_CH30, 30 => static);
impl_ppi_channel!(PPI_CH31, 31 => static);
impl_saadc_input!(P0_02, ANALOGINPUT0);
impl_saadc_input!(P0_03, ANALOGINPUT1);

View File

@ -231,38 +231,38 @@ impl_pin!(P1_13, 1, 13);
impl_pin!(P1_14, 1, 14);
impl_pin!(P1_15, 1, 15);
impl_ppi_channel!(PPI_CH0, 0, true, 1, 2);
impl_ppi_channel!(PPI_CH1, 1, true, 1, 2);
impl_ppi_channel!(PPI_CH2, 2, true, 1, 2);
impl_ppi_channel!(PPI_CH3, 3, true, 1, 2);
impl_ppi_channel!(PPI_CH4, 4, true, 1, 2);
impl_ppi_channel!(PPI_CH5, 5, true, 1, 2);
impl_ppi_channel!(PPI_CH6, 6, true, 1, 2);
impl_ppi_channel!(PPI_CH7, 7, true, 1, 2);
impl_ppi_channel!(PPI_CH8, 8, true, 1, 2);
impl_ppi_channel!(PPI_CH9, 9, true, 1, 2);
impl_ppi_channel!(PPI_CH10, 10, true, 1, 2);
impl_ppi_channel!(PPI_CH11, 11, true, 1, 2);
impl_ppi_channel!(PPI_CH12, 12, true, 1, 2);
impl_ppi_channel!(PPI_CH13, 13, true, 1, 2);
impl_ppi_channel!(PPI_CH14, 14, true, 1, 2);
impl_ppi_channel!(PPI_CH15, 15, true, 1, 2);
impl_ppi_channel!(PPI_CH16, 16, true, 1, 2);
impl_ppi_channel!(PPI_CH17, 17, true, 1, 2);
impl_ppi_channel!(PPI_CH18, 18, true, 1, 2);
impl_ppi_channel!(PPI_CH19, 19, true, 1, 2);
impl_ppi_channel!(PPI_CH20, 20, false, 0, 1);
impl_ppi_channel!(PPI_CH21, 21, false, 0, 1);
impl_ppi_channel!(PPI_CH22, 22, false, 0, 1);
impl_ppi_channel!(PPI_CH23, 23, false, 0, 1);
impl_ppi_channel!(PPI_CH24, 24, false, 0, 1);
impl_ppi_channel!(PPI_CH25, 25, false, 0, 1);
impl_ppi_channel!(PPI_CH26, 26, false, 0, 1);
impl_ppi_channel!(PPI_CH27, 27, false, 0, 1);
impl_ppi_channel!(PPI_CH28, 28, false, 0, 1);
impl_ppi_channel!(PPI_CH29, 29, false, 0, 1);
impl_ppi_channel!(PPI_CH30, 30, false, 0, 1);
impl_ppi_channel!(PPI_CH31, 31, false, 0, 1);
impl_ppi_channel!(PPI_CH0, 0 => configurable);
impl_ppi_channel!(PPI_CH1, 1 => configurable);
impl_ppi_channel!(PPI_CH2, 2 => configurable);
impl_ppi_channel!(PPI_CH3, 3 => configurable);
impl_ppi_channel!(PPI_CH4, 4 => configurable);
impl_ppi_channel!(PPI_CH5, 5 => configurable);
impl_ppi_channel!(PPI_CH6, 6 => configurable);
impl_ppi_channel!(PPI_CH7, 7 => configurable);
impl_ppi_channel!(PPI_CH8, 8 => configurable);
impl_ppi_channel!(PPI_CH9, 9 => configurable);
impl_ppi_channel!(PPI_CH10, 10 => configurable);
impl_ppi_channel!(PPI_CH11, 11 => configurable);
impl_ppi_channel!(PPI_CH12, 12 => configurable);
impl_ppi_channel!(PPI_CH13, 13 => configurable);
impl_ppi_channel!(PPI_CH14, 14 => configurable);
impl_ppi_channel!(PPI_CH15, 15 => configurable);
impl_ppi_channel!(PPI_CH16, 16 => configurable);
impl_ppi_channel!(PPI_CH17, 17 => configurable);
impl_ppi_channel!(PPI_CH18, 18 => configurable);
impl_ppi_channel!(PPI_CH19, 19 => configurable);
impl_ppi_channel!(PPI_CH20, 20 => static);
impl_ppi_channel!(PPI_CH21, 21 => static);
impl_ppi_channel!(PPI_CH22, 22 => static);
impl_ppi_channel!(PPI_CH23, 23 => static);
impl_ppi_channel!(PPI_CH24, 24 => static);
impl_ppi_channel!(PPI_CH25, 25 => static);
impl_ppi_channel!(PPI_CH26, 26 => static);
impl_ppi_channel!(PPI_CH27, 27 => static);
impl_ppi_channel!(PPI_CH28, 28 => static);
impl_ppi_channel!(PPI_CH29, 29 => static);
impl_ppi_channel!(PPI_CH30, 30 => static);
impl_ppi_channel!(PPI_CH31, 31 => static);
impl_saadc_input!(P0_02, ANALOGINPUT0);
impl_saadc_input!(P0_03, ANALOGINPUT1);

View File

@ -184,22 +184,22 @@ impl_pin!(P0_29, 0, 29);
impl_pin!(P0_30, 0, 30);
impl_pin!(P0_31, 0, 31);
impl_ppi_channel!(PPI_CH0, 0, true, many, many);
impl_ppi_channel!(PPI_CH1, 1, true, many, many);
impl_ppi_channel!(PPI_CH2, 2, true, many, many);
impl_ppi_channel!(PPI_CH3, 3, true, many, many);
impl_ppi_channel!(PPI_CH4, 4, true, many, many);
impl_ppi_channel!(PPI_CH5, 5, true, many, many);
impl_ppi_channel!(PPI_CH6, 6, true, many, many);
impl_ppi_channel!(PPI_CH7, 7, true, many, many);
impl_ppi_channel!(PPI_CH8, 8, true, many, many);
impl_ppi_channel!(PPI_CH9, 9, true, many, many);
impl_ppi_channel!(PPI_CH10, 10, true, many, many);
impl_ppi_channel!(PPI_CH11, 11, true, many, many);
impl_ppi_channel!(PPI_CH12, 12, true, many, many);
impl_ppi_channel!(PPI_CH13, 13, true, many, many);
impl_ppi_channel!(PPI_CH14, 14, true, many, many);
impl_ppi_channel!(PPI_CH15, 15, true, many, many);
impl_ppi_channel!(PPI_CH0, 0 => configurable);
impl_ppi_channel!(PPI_CH1, 1 => configurable);
impl_ppi_channel!(PPI_CH2, 2 => configurable);
impl_ppi_channel!(PPI_CH3, 3 => configurable);
impl_ppi_channel!(PPI_CH4, 4 => configurable);
impl_ppi_channel!(PPI_CH5, 5 => configurable);
impl_ppi_channel!(PPI_CH6, 6 => configurable);
impl_ppi_channel!(PPI_CH7, 7 => configurable);
impl_ppi_channel!(PPI_CH8, 8 => configurable);
impl_ppi_channel!(PPI_CH9, 9 => configurable);
impl_ppi_channel!(PPI_CH10, 10 => configurable);
impl_ppi_channel!(PPI_CH11, 11 => configurable);
impl_ppi_channel!(PPI_CH12, 12 => configurable);
impl_ppi_channel!(PPI_CH13, 13 => configurable);
impl_ppi_channel!(PPI_CH14, 14 => configurable);
impl_ppi_channel!(PPI_CH15, 15 => configurable);
impl_saadc_input!(P0_13, ANALOGINPUT0);
impl_saadc_input!(P0_14, ANALOGINPUT1);

View File

@ -38,21 +38,6 @@ pub struct Ppi<'d, C: Channel, const EVENT_COUNT: usize, const TASK_COUNT: usize
impl<'d, C: Channel + 'd, const EVENT_COUNT: usize, const TASK_COUNT: usize>
Ppi<'d, C, EVENT_COUNT, TASK_COUNT>
{
pub fn degrade(self) -> Ppi<'d, AnyChannel, EVENT_COUNT, TASK_COUNT> {
Ppi {
ch: AnyChannel {
number: self.ch.number() as u8,
#[cfg(feature = "_ppi")]
has_configurable_task: self.ch.is_task_configurable(),
},
#[cfg(feature = "_dppi")]
events: self.events,
#[cfg(feature = "_dppi")]
tasks: self.tasks,
phantom: PhantomData,
}
}
/// Enables the channel.
pub fn enable(&mut self) {
let r = unsafe { &*pac::PPI::ptr() };
@ -77,7 +62,8 @@ impl<'d, C: Channel, const EVENT_COUNT: usize, const TASK_COUNT: usize> Drop
}
}
impl<'d, C: ZeroToOneChannel> Ppi<'d, C, 0, 1> {
#[cfg(not(feature = "nrf51"))] // Not for nrf51 because of the fork task
impl<'d, C: StaticChannel> Ppi<'d, C, 0, 1> {
pub fn new_zero_to_one(ch: impl Unborrow<Target = C> + 'd, task: Task) -> Self {
unborrow!(ch);
@ -97,7 +83,7 @@ impl<'d, C: ZeroToOneChannel> Ppi<'d, C, 0, 1> {
}
}
impl<'d, C: OneToOneChannel> Ppi<'d, C, 1, 1> {
impl<'d, C: ConfigurableChannel> Ppi<'d, C, 1, 1> {
pub fn new_one_to_one(ch: impl Unborrow<Target = C> + 'd, event: Event, task: Task) -> Self {
unborrow!(ch);
@ -117,7 +103,8 @@ impl<'d, C: OneToOneChannel> Ppi<'d, C, 1, 1> {
}
}
impl<'d, C: OneToTwoChannel> Ppi<'d, C, 1, 2> {
#[cfg(not(feature = "nrf51"))] // Not for nrf51 because of the fork task
impl<'d, C: ConfigurableChannel> Ppi<'d, C, 1, 2> {
pub fn new_one_to_two(
ch: impl Unborrow<Target = C> + 'd,
event: Event,
@ -142,7 +129,8 @@ impl<'d, C: OneToTwoChannel> Ppi<'d, C, 1, 2> {
}
}
impl<'d, C: ManyToManyChannel, const EVENT_COUNT: usize, const TASK_COUNT: usize>
#[cfg(feature = "_dppi")]
impl<'d, C: ConfigurableChannel, const EVENT_COUNT: usize, const TASK_COUNT: usize>
Ppi<'d, C, EVENT_COUNT, TASK_COUNT>
{
pub fn new_many_to_many(
@ -221,72 +209,107 @@ pub(crate) mod sealed {
pub trait Channel: sealed::Channel + Unborrow<Target = Self> + Sized {
/// Returns the number of the channel
fn number(&self) -> usize;
#[cfg(feature = "_ppi")]
fn is_task_configurable(&self) -> bool;
fn configurable() -> bool;
}
pub trait ZeroToOneChannel: Channel {}
pub trait OneToOneChannel: ZeroToOneChannel {}
pub trait OneToTwoChannel: OneToOneChannel {}
pub trait ManyToManyChannel: OneToTwoChannel {}
pub trait ConfigurableChannel: Channel {
fn degrade(self) -> AnyConfigurableChannel;
}
pub trait StaticChannel: Channel {
fn degrade(self) -> AnyStaticChannel;
}
pub trait Group: sealed::Group + Sized {
fn number(&self) -> usize;
fn degrade(self) -> AnyGroup {
AnyGroup {
number: self.number() as u8,
}
}
}
// ======================
// channels
pub struct AnyChannel {
number: u8,
#[cfg(feature = "_ppi")]
has_configurable_task: bool,
/// The any channel can represent any static channel at runtime.
/// This can be used to have fewer generic parameters in some places.
pub struct AnyStaticChannel {
pub(crate) number: u8,
}
unsafe_impl_unborrow!(AnyChannel);
impl sealed::Channel for AnyChannel {}
impl Channel for AnyChannel {
unsafe_impl_unborrow!(AnyStaticChannel);
impl sealed::Channel for AnyStaticChannel {}
impl Channel for AnyStaticChannel {
fn number(&self) -> usize {
self.number as usize
}
#[cfg(feature = "_ppi")]
fn is_task_configurable(&self) -> bool {
self.has_configurable_task
fn configurable() -> bool {
false
}
}
impl StaticChannel for AnyStaticChannel {
fn degrade(self) -> AnyStaticChannel {
self
}
}
/// The any configurable channel can represent any configurable channel at runtime.
/// This can be used to have fewer generic parameters in some places.
pub struct AnyConfigurableChannel {
pub(crate) number: u8,
}
unsafe_impl_unborrow!(AnyConfigurableChannel);
impl sealed::Channel for AnyConfigurableChannel {}
impl Channel for AnyConfigurableChannel {
fn number(&self) -> usize {
self.number as usize
}
fn configurable() -> bool {
true
}
}
impl ConfigurableChannel for AnyConfigurableChannel {
fn degrade(self) -> AnyConfigurableChannel {
self
}
}
macro_rules! impl_ppi_channel {
($type:ident, $number:expr, $has_configurable_task:expr) => {
($type:ident, $number:expr, $configurability:expr) => {
impl crate::ppi::sealed::Channel for peripherals::$type {}
impl crate::ppi::Channel for peripherals::$type {
fn number(&self) -> usize {
$number
}
#[cfg(feature = "_ppi")]
fn is_task_configurable(&self) -> bool {
$has_configurable_task
fn configurable() -> bool {
$configurability
}
}
};
($type:ident, $number:expr, $has_configurable_task:expr, 0, 0) => {
impl_ppi_channel!($type, $number, $has_configurable_task);
($type:ident, $number:expr => static) => {
impl_ppi_channel!($type, $number, false);
impl crate::ppi::StaticChannel for peripherals::$type {
fn degrade(self) -> crate::ppi::AnyStaticChannel {
use crate::ppi::Channel;
crate::ppi::AnyStaticChannel {
number: self.number() as u8,
}
}
}
};
($type:ident, $number:expr, $has_configurable_task:expr, 0, 1) => {
impl_ppi_channel!($type, $number, $has_configurable_task, 0, 0);
impl crate::ppi::ZeroToOneChannel for peripherals::$type {}
};
($type:ident, $number:expr, $has_configurable_task:expr, 1, 1) => {
impl_ppi_channel!($type, $number, $has_configurable_task, 0, 1);
impl crate::ppi::OneToOneChannel for peripherals::$type {}
};
($type:ident, $number:expr, $has_configurable_task:expr, 1, 2) => {
impl_ppi_channel!($type, $number, $has_configurable_task, 1, 1);
impl crate::ppi::OneToTwoChannel for peripherals::$type {}
};
($type:ident, $number:expr, $has_configurable_task:expr, many, many) => {
impl_ppi_channel!($type, $number, $has_configurable_task, 1, 2);
impl crate::ppi::ManyToManyChannel for peripherals::$type {}
($type:ident, $number:expr => configurable) => {
impl_ppi_channel!($type, $number, true);
impl crate::ppi::ConfigurableChannel for peripherals::$type {
fn degrade(self) -> crate::ppi::AnyConfigurableChannel {
use crate::ppi::Channel;
crate::ppi::AnyConfigurableChannel {
number: self.number() as u8,
}
}
}
};
}

View File

@ -15,6 +15,7 @@ impl<'d, C: Channel + 'd, const EVENT_COUNT: usize, const TASK_COUNT: usize>
}
}
#[cfg(not(feature = "nrf51"))]
fn set_fork_task(task: Option<&Task>, channel: usize) {
let r = unsafe { &*pac::PPI::ptr() };
if let Some(task) = task {
@ -40,16 +41,18 @@ impl<'d, C: Channel + 'd, const EVENT_COUNT: usize, const TASK_COUNT: usize>
/// Enables all tasks and events
pub(super) fn enable_all(tasks: &[Task], events: &[Event], channel: &C) {
// One configurable task, no fork
if channel.is_task_configurable() && TASK_COUNT == 1 {
if C::configurable() && TASK_COUNT == 1 {
Self::set_main_task(Some(&tasks[0]), channel.number());
}
// One configurable task, as fork
if !channel.is_task_configurable() && TASK_COUNT == 1 {
#[cfg(not(feature = "nrf51"))]
if !C::configurable() && TASK_COUNT == 1 {
Self::set_fork_task(Some(&tasks[0]), channel.number());
}
// Two configurable tasks (main + fork)
#[cfg(not(feature = "nrf51"))]
if TASK_COUNT == 2 {
Self::set_main_task(Some(&tasks[0]), channel.number());
Self::set_fork_task(Some(&tasks[1]), channel.number());
@ -62,11 +65,12 @@ impl<'d, C: Channel + 'd, const EVENT_COUNT: usize, const TASK_COUNT: usize>
/// Disable all tasks and events
pub(super) fn disable_all(&self) {
if self.ch.is_task_configurable() {
if C::configurable() {
Self::set_main_task(None, self.ch.number());
}
if TASK_COUNT == 1 && !self.ch.is_task_configurable() || TASK_COUNT == 2 {
#[cfg(not(feature = "nrf51"))]
if TASK_COUNT == 1 && !C::configurable() || TASK_COUNT == 2 {
Self::set_fork_task(None, self.ch.number());
}

View File

@ -18,7 +18,7 @@ use crate::gpio::sealed::Pin as _;
use crate::gpio::{self, OptionalPin as GpioOptionalPin, Pin as GpioPin};
use crate::interrupt::Interrupt;
use crate::pac;
use crate::ppi::{AnyChannel, Event, OneToOneChannel, OneToTwoChannel, Ppi, Task};
use crate::ppi::{AnyConfigurableChannel, ConfigurableChannel, Event, Ppi, Task};
use crate::timer::Instance as TimerInstance;
use crate::timer::{Frequency, Timer};
@ -331,8 +331,8 @@ impl<'d, T: Instance> Write for Uarte<'d, T> {
pub struct UarteWithIdle<'d, U: Instance, T: TimerInstance> {
uarte: Uarte<'d, U>,
timer: Timer<'d, T>,
ppi_ch1: Ppi<'d, AnyChannel, 1, 2>,
_ppi_ch2: Ppi<'d, AnyChannel, 1, 1>,
ppi_ch1: Ppi<'d, AnyConfigurableChannel, 1, 2>,
_ppi_ch2: Ppi<'d, AnyConfigurableChannel, 1, 1>,
}
impl<'d, U: Instance, T: TimerInstance> UarteWithIdle<'d, U, T> {
@ -348,8 +348,8 @@ impl<'d, U: Instance, T: TimerInstance> UarteWithIdle<'d, U, T> {
pub unsafe fn new(
uarte: impl Unborrow<Target = U> + 'd,
timer: impl Unborrow<Target = T> + 'd,
ppi_ch1: impl Unborrow<Target = impl OneToTwoChannel + 'd> + 'd,
ppi_ch2: impl Unborrow<Target = impl OneToOneChannel + 'd> + 'd,
ppi_ch1: impl Unborrow<Target = impl ConfigurableChannel + 'd> + 'd,
ppi_ch2: impl Unborrow<Target = impl ConfigurableChannel + 'd> + 'd,
irq: impl Unborrow<Target = U::Interrupt> + 'd,
rxd: impl Unborrow<Target = impl GpioPin> + 'd,
txd: impl Unborrow<Target = impl GpioPin> + 'd,
@ -379,20 +379,18 @@ impl<'d, U: Instance, T: TimerInstance> UarteWithIdle<'d, U, T> {
timer.cc(0).short_compare_stop();
let mut ppi_ch1 = Ppi::new_one_to_two(
ppi_ch1,
ppi_ch1.degrade(),
Event::from_reg(&r.events_rxdrdy),
timer.task_clear(),
timer.task_start(),
)
.degrade();
);
ppi_ch1.enable();
let mut ppi_ch2 = Ppi::new_one_to_one(
ppi_ch2,
ppi_ch2.degrade(),
timer.cc(0).event_compare(),
Task::from_reg(&r.tasks_stoprx),
)
.degrade();
);
ppi_ch2.enable();
Self {