Added pll settings to nvstate
This commit is contained in:
parent
6a29ab91da
commit
ec2f3608c4
|
@ -41,7 +41,7 @@ mod app {
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
use postcard::{from_bytes_cobs, to_vec_cobs};
|
use postcard::{from_bytes_cobs, to_vec_cobs};
|
||||||
|
|
||||||
use cheapsdo_protocol::{DeviceMessage, HostMessage, StatusMessage};
|
use cheapsdo_protocol::{DeviceMessage, HostMessage, PLLSettings, StatusMessage};
|
||||||
|
|
||||||
use crate::nvstate::{self, NVState};
|
use crate::nvstate::{self, NVState};
|
||||||
use crate::si5153;
|
use crate::si5153;
|
||||||
|
@ -54,8 +54,6 @@ mod app {
|
||||||
tim2: TIM2,
|
tim2: TIM2,
|
||||||
tim3: TIM3,
|
tim3: TIM3,
|
||||||
pwm: PwmHz<TIM4, Tim4NoRemap, timer::Ch<0>, gpio::Pin<'B', 6, Alternate>>,
|
pwm: PwmHz<TIM4, Tim4NoRemap, timer::Ch<0>, gpio::Pin<'B', 6, Alternate>>,
|
||||||
nvstate: NVState,
|
|
||||||
flash: flash::Parts,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[shared]
|
#[shared]
|
||||||
|
@ -64,6 +62,8 @@ mod app {
|
||||||
serial: usbd_serial::SerialPort<'static, UsbBusType>,
|
serial: usbd_serial::SerialPort<'static, UsbBusType>,
|
||||||
device_status: StatusMessage,
|
device_status: StatusMessage,
|
||||||
buffer: Vec<u8, USB_BUFFER_SIZE>,
|
buffer: Vec<u8, USB_BUFFER_SIZE>,
|
||||||
|
nvstate: NVState,
|
||||||
|
flash: flash::Parts,
|
||||||
}
|
}
|
||||||
|
|
||||||
const TARGET_FREQ: u64 = 10_000_000_000; // in millihertz
|
const TARGET_FREQ: u64 = 10_000_000_000; // in millihertz
|
||||||
|
@ -246,21 +246,21 @@ mod app {
|
||||||
usb_dev,
|
usb_dev,
|
||||||
device_status: StatusMessage::default(),
|
device_status: StatusMessage::default(),
|
||||||
buffer: Vec::new(),
|
buffer: Vec::new(),
|
||||||
|
nvstate,
|
||||||
|
flash,
|
||||||
},
|
},
|
||||||
Local {
|
Local {
|
||||||
board_led,
|
board_led,
|
||||||
tim2,
|
tim2,
|
||||||
tim3,
|
tim3,
|
||||||
pwm,
|
pwm,
|
||||||
nvstate,
|
|
||||||
flash,
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const WINDOW_LEN: usize = 100;
|
const WINDOW_LEN: usize = 100;
|
||||||
|
|
||||||
#[task(local=[tim2, tim3, pwm, board_led, nvstate, flash], shared=[device_status])]
|
#[task(local=[tim2, tim3, pwm, board_led], shared=[device_status, nvstate, flash])]
|
||||||
async fn update_pwm(mut cx: update_pwm::Context) {
|
async fn update_pwm(mut cx: update_pwm::Context) {
|
||||||
defmt::info!("Update Task started");
|
defmt::info!("Update Task started");
|
||||||
|
|
||||||
|
@ -268,11 +268,14 @@ mod app {
|
||||||
let tim3 = cx.local.tim3;
|
let tim3 = cx.local.tim3;
|
||||||
let pwm = cx.local.pwm;
|
let pwm = cx.local.pwm;
|
||||||
let board_led = cx.local.board_led;
|
let board_led = cx.local.board_led;
|
||||||
let mut nvstate = cx.local.nvstate;
|
|
||||||
let mut flash = cx.local.flash;
|
|
||||||
|
|
||||||
let max_pwm = pwm.get_max_duty() as i32;
|
let max_pwm = pwm.get_max_duty() as i32;
|
||||||
let mut cur_pwm = nvstate.pwm as i32;
|
|
||||||
|
let mut cur_pwm = 0i32;
|
||||||
|
cx.shared.nvstate.lock(|nvstate| {
|
||||||
|
cur_pwm = nvstate.pwm as i32;
|
||||||
|
});
|
||||||
|
|
||||||
cur_pwm = if cur_pwm < 0 { 0 } else { cur_pwm };
|
cur_pwm = if cur_pwm < 0 { 0 } else { cur_pwm };
|
||||||
cur_pwm = if cur_pwm > max_pwm { max_pwm } else { cur_pwm };
|
cur_pwm = if cur_pwm > max_pwm { max_pwm } else { cur_pwm };
|
||||||
|
|
||||||
|
@ -362,39 +365,59 @@ mod app {
|
||||||
pwm.set_duty(Channel::C1, cur_pwm as u16);
|
pwm.set_duty(Channel::C1, cur_pwm as u16);
|
||||||
defmt::info!("pwm:\t{}", cur_pwm);
|
defmt::info!("pwm:\t{}", cur_pwm);
|
||||||
|
|
||||||
nvstate.pwm = cur_pwm as u16;
|
{
|
||||||
nvstate.save(&mut flash);
|
(&mut cx.shared.nvstate, &mut cx.shared.flash).lock(|nvstate, flash| {
|
||||||
|
nvstate.pwm = cur_pwm as u16;
|
||||||
|
nvstate.save(flash);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Systick::delay(500.millis()).await;
|
Systick::delay(500.millis()).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[task(binds = USB_HP_CAN_TX, shared = [usb_dev, serial, buffer, device_status])]
|
#[task(binds = USB_HP_CAN_TX, shared = [usb_dev, serial, buffer, device_status, nvstate, flash])]
|
||||||
fn usb_tx(cx: usb_tx::Context) {
|
fn usb_tx(cx: usb_tx::Context) {
|
||||||
let mut usb_dev = cx.shared.usb_dev;
|
let mut usb_dev = cx.shared.usb_dev;
|
||||||
let mut serial = cx.shared.serial;
|
let mut serial = cx.shared.serial;
|
||||||
let mut buffer = cx.shared.buffer;
|
let mut buffer = cx.shared.buffer;
|
||||||
let mut device_status = cx.shared.device_status;
|
let mut device_status = cx.shared.device_status;
|
||||||
|
let mut nvstate = cx.shared.nvstate;
|
||||||
|
let mut flash = cx.shared.flash;
|
||||||
|
|
||||||
(&mut usb_dev, &mut serial, &mut buffer, &mut device_status).lock(
|
(
|
||||||
|usb_dev, serial, buffer, device_status| {
|
&mut usb_dev,
|
||||||
usb_poll(usb_dev, serial, buffer, device_status);
|
&mut serial,
|
||||||
},
|
&mut buffer,
|
||||||
);
|
&mut device_status,
|
||||||
|
&mut nvstate,
|
||||||
|
&mut flash,
|
||||||
|
)
|
||||||
|
.lock(|usb_dev, serial, buffer, device_status, nvstate, flash| {
|
||||||
|
usb_poll(usb_dev, serial, buffer, device_status, nvstate, flash);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[task(binds = USB_LP_CAN_RX0, shared = [usb_dev, serial, buffer, device_status])]
|
#[task(binds = USB_LP_CAN_RX0, shared = [usb_dev, serial, buffer, device_status, nvstate, flash])]
|
||||||
fn usb_rx0(cx: usb_rx0::Context) {
|
fn usb_rx0(cx: usb_rx0::Context) {
|
||||||
let mut usb_dev = cx.shared.usb_dev;
|
let mut usb_dev = cx.shared.usb_dev;
|
||||||
let mut serial = cx.shared.serial;
|
let mut serial = cx.shared.serial;
|
||||||
let mut buffer = cx.shared.buffer;
|
let mut buffer = cx.shared.buffer;
|
||||||
let mut device_status = cx.shared.device_status;
|
let mut device_status = cx.shared.device_status;
|
||||||
|
let mut nvstate = cx.shared.nvstate;
|
||||||
|
let mut flash = cx.shared.flash;
|
||||||
|
|
||||||
(&mut usb_dev, &mut serial, &mut buffer, &mut device_status).lock(
|
(
|
||||||
|usb_dev, serial, buffer, device_status| {
|
&mut usb_dev,
|
||||||
usb_poll(usb_dev, serial, buffer, device_status);
|
&mut serial,
|
||||||
},
|
&mut buffer,
|
||||||
);
|
&mut device_status,
|
||||||
|
&mut nvstate,
|
||||||
|
&mut flash,
|
||||||
|
)
|
||||||
|
.lock(|usb_dev, serial, buffer, device_status, nvstate, flash| {
|
||||||
|
usb_poll(usb_dev, serial, buffer, device_status, nvstate, flash);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn usb_poll<B: usb_device::bus::UsbBus>(
|
fn usb_poll<B: usb_device::bus::UsbBus>(
|
||||||
|
@ -402,6 +425,8 @@ mod app {
|
||||||
serial: &mut usbd_serial::SerialPort<'static, B>,
|
serial: &mut usbd_serial::SerialPort<'static, B>,
|
||||||
buffer: &mut Vec<u8, USB_BUFFER_SIZE>,
|
buffer: &mut Vec<u8, USB_BUFFER_SIZE>,
|
||||||
device_status: &StatusMessage,
|
device_status: &StatusMessage,
|
||||||
|
nvstate: &mut NVState,
|
||||||
|
flash: &mut flash::Parts,
|
||||||
) {
|
) {
|
||||||
if !usb_dev.poll(&mut [serial]) {
|
if !usb_dev.poll(&mut [serial]) {
|
||||||
return;
|
return;
|
||||||
|
@ -434,8 +459,9 @@ mod app {
|
||||||
to_vec_cobs::<DeviceMessage, USB_BUFFER_SIZE>(&device_msg).unwrap();
|
to_vec_cobs::<DeviceMessage, USB_BUFFER_SIZE>(&device_msg).unwrap();
|
||||||
serial.write(bytes.as_slice()).unwrap();
|
serial.write(bytes.as_slice()).unwrap();
|
||||||
}
|
}
|
||||||
HostMessage::SetPLLSettings(_) => {
|
HostMessage::SetPLLSettings(settings) => {
|
||||||
defmt::error!("PLL output is not implemented yet")
|
nvstate.pll_settings = settings;
|
||||||
|
nvstate.save(flash);
|
||||||
}
|
}
|
||||||
HostMessage::GetPllSettings => {
|
HostMessage::GetPllSettings => {
|
||||||
defmt::error!("PLL output is not implemented yet")
|
defmt::error!("PLL output is not implemented yet")
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use cheapsdo_protocol::PLLSettings;
|
||||||
use postcard::{from_bytes_cobs, to_slice_cobs};
|
use postcard::{from_bytes_cobs, to_slice_cobs};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use stm32f1xx_hal::flash::{self, FlashSize, FlashWriter, SectorSize};
|
use stm32f1xx_hal::flash::{self, FlashSize, FlashWriter, SectorSize};
|
||||||
|
@ -5,11 +6,15 @@ use stm32f1xx_hal::flash::{self, FlashSize, FlashWriter, SectorSize};
|
||||||
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
||||||
pub struct NVState {
|
pub struct NVState {
|
||||||
pub pwm: u16,
|
pub pwm: u16,
|
||||||
|
pub pll_settings: PLLSettings,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for NVState {
|
impl Default for NVState {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self { pwm: 1500u16 }
|
Self {
|
||||||
|
pwm: 1500u16,
|
||||||
|
pll_settings: PLLSettings::default(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue