rename to SimplePwm and SequencePwm

This commit is contained in:
Jacob Rosenthal 2021-11-03 18:25:44 -07:00
parent 9a6c2de4ea
commit d961fd1015
6 changed files with 20 additions and 25 deletions

View file

@ -50,15 +50,15 @@ pub enum CounterMode {
}
/// Interface to the PWM peripheral
pub struct Pwm<'d, T: Instance> {
pub struct SimplePwm<'d, T: Instance> {
phantom: PhantomData<&'d mut T>,
}
pub struct PwmSeq<'d, T: Instance> {
pub struct SequencePwm<'d, T: Instance> {
phantom: PhantomData<&'d mut T>,
}
impl<'d, T: Instance> PwmSeq<'d, T> {
impl<'d, T: Instance> SequencePwm<'d, T> {
/// Creates the interface to a PWM Sequence interface.
///
/// Must be started by calling `start`
@ -67,7 +67,7 @@ impl<'d, T: Instance> PwmSeq<'d, T> {
///
/// The returned API is safe unless you use `mem::forget` (or similar safe
/// mechanisms) on stack allocated buffers which which have been passed to
/// [`new()`](PwmSeq::new).
/// [`new()`](SequencePwm::new).
#[allow(unused_unsafe)]
pub fn new(
_pwm: impl Unborrow<Target = T> + 'd,
@ -226,7 +226,7 @@ impl<'d, T: Instance> PwmSeq<'d, T> {
}
}
impl<'a, T: Instance> Drop for PwmSeq<'a, T> {
impl<'a, T: Instance> Drop for SequencePwm<'a, T> {
fn drop(&mut self) {
self.stop();
self.disable();
@ -275,7 +275,7 @@ pub enum Error {
DMABufferNotInDataMemory,
}
impl<'d, T: Instance> Pwm<'d, T> {
impl<'d, T: Instance> SimplePwm<'d, T> {
/// Creates the interface to a PWM instance.
///
/// Defaults the freq to 1Mhz, max_duty 32767, duty 0, and channels low.
@ -285,7 +285,7 @@ impl<'d, T: Instance> Pwm<'d, T> {
///
/// The returned API is safe unless you use `mem::forget` (or similar safe
/// mechanisms) on stack allocated buffers which which have been passed to
/// [`new()`](Pwm::new).
/// [`new()`](SimplePwm::new).
#[allow(unused_unsafe)]
pub fn new(
_pwm: impl Unborrow<Target = T> + 'd,
@ -422,12 +422,6 @@ impl<'d, T: Instance> Pwm<'d, T> {
.write(|w| unsafe { w.countertop().bits(duty.min(32767u16)) });
}
/// Additional number of PWM periods spent on each duty cycle value.
#[inline(always)]
pub fn set_time_stretch(&self, refresh: u32) {
T::regs().seq0.refresh.write(|w| unsafe { w.bits(refresh) });
}
/// Returns the maximum duty cycle value.
#[inline(always)]
pub fn max_duty(&self) -> u16 {
@ -451,7 +445,7 @@ impl<'d, T: Instance> Pwm<'d, T> {
}
}
impl<'a, T: Instance> Drop for Pwm<'a, T> {
impl<'a, T: Instance> Drop for SimplePwm<'a, T> {
fn drop(&mut self) {
self.stop();
self.disable();

View file

@ -7,7 +7,7 @@ mod example_common;
use defmt::*;
use embassy::executor::Spawner;
use embassy::time::{Duration, Timer};
use embassy_nrf::pwm::{Prescaler, Pwm};
use embassy_nrf::pwm::{Prescaler, SimplePwm};
use embassy_nrf::Peripherals;
// for i in range(1024): print(int((math.sin(i/512*math.pi)*0.4+0.5)**2*32767), ', ', end='')
@ -85,10 +85,9 @@ static DUTY: [u16; 1024] = [
#[embassy::main]
async fn main(_spawner: Spawner, p: Peripherals) {
let pwm = Pwm::new(p.PWM0, p.P0_13, p.P0_14, p.P0_16, p.P0_15);
let pwm = SimplePwm::new(p.PWM0, p.P0_13, p.P0_14, p.P0_16, p.P0_15);
pwm.set_prescaler(Prescaler::Div1);
pwm.set_max_duty(32767);
pwm.set_time_stretch(32);
info!("pwm initialized!");
let mut i = 0;

View file

@ -8,12 +8,12 @@ use defmt::*;
use embassy::executor::Spawner;
use embassy::time::{Duration, Timer};
use embassy_nrf::gpio::NoPin;
use embassy_nrf::pwm::{Prescaler, Pwm};
use embassy_nrf::pwm::{Prescaler, SimplePwm};
use embassy_nrf::Peripherals;
#[embassy::main]
async fn main(_spawner: Spawner, p: Peripherals) {
let pwm = Pwm::new(p.PWM0, p.P0_13, NoPin, NoPin, NoPin);
let pwm = SimplePwm::new(p.PWM0, p.P0_13, NoPin, NoPin, NoPin);
// set_period doesnt actually set what you give it, because it only has a
// few options from the hardhware so be explicit instead
// Div128 is slowest, 125khz still crazy fast for our eyes

View file

@ -8,7 +8,7 @@ use defmt::*;
use embassy::executor::Spawner;
use embassy::time::{Duration, Timer};
use embassy_nrf::pwm::{
CounterMode, Prescaler, PwmSeq, SequenceConfig, SequenceLoad, SequenceMode,
CounterMode, Prescaler, SequenceConfig, SequenceLoad, SequenceMode, SequencePwm,
};
use embassy_nrf::Peripherals;
@ -28,7 +28,7 @@ async fn main(_spawner: Spawner, p: Peripherals) {
end_delay: 0,
};
let pwm = unwrap!(PwmSeq::new(
let pwm = unwrap!(SequencePwm::new(
p.PWM0, p.P0_13, p.P0_15, p.P0_16, p.P0_14, config
));
let _ = pwm.start(SequenceMode::Times(5));

View file

@ -8,12 +8,12 @@ use defmt::*;
use embassy::executor::Spawner;
use embassy::time::{Duration, Timer};
use embassy_nrf::gpio::NoPin;
use embassy_nrf::pwm::{Prescaler, Pwm};
use embassy_nrf::pwm::{Prescaler, SimplePwm};
use embassy_nrf::Peripherals;
#[embassy::main]
async fn main(_spawner: Spawner, p: Peripherals) {
let pwm = Pwm::new(p.PWM0, p.P0_05, NoPin, NoPin, NoPin);
let pwm = SimplePwm::new(p.PWM0, p.P0_05, NoPin, NoPin, NoPin);
// sg90 microervo requires 50hz or 20ms period
// set_period can only set down to 125khz so we cant use it directly
// Div128 is 125khz or 0.000008s or 0.008ms, 20/0.008 is 2500 is top

View file

@ -10,7 +10,7 @@ use embassy::executor::Spawner;
use embassy::time::{Duration, Timer};
use embassy_nrf::gpio::NoPin;
use embassy_nrf::pwm::{
CounterMode, Prescaler, PwmSeq, SequenceConfig, SequenceLoad, SequenceMode,
CounterMode, Prescaler, SequenceConfig, SequenceLoad, SequenceMode, SequencePwm,
};
use embassy_nrf::Peripherals;
use micromath::F32Ext;
@ -32,7 +32,9 @@ async fn main(_spawner: Spawner, p: Peripherals) {
end_delay: 0,
};
let pwm = unwrap!(PwmSeq::new(p.PWM0, p.P0_13, NoPin, NoPin, NoPin, config));
let pwm = unwrap!(SequencePwm::new(
p.PWM0, p.P0_13, NoPin, NoPin, NoPin, config
));
let _ = pwm.start(SequenceMode::Infinite);
info!("pwm started!");