Fox timer in Pedestal Box firmware
Signed-off-by: fly <merspieler@alwaysdata.net>
This commit is contained in:
parent
deaeebcebb
commit
4a301af6ae
1 changed files with 20 additions and 25 deletions
|
@ -11,6 +11,8 @@ mod device;
|
||||||
|
|
||||||
use panic_halt as _;
|
use panic_halt as _;
|
||||||
|
|
||||||
|
use nb::block;
|
||||||
|
|
||||||
use cortex_m::asm::delay;
|
use cortex_m::asm::delay;
|
||||||
use cortex_m_rt::entry;
|
use cortex_m_rt::entry;
|
||||||
use stm32f1xx_hal::{
|
use stm32f1xx_hal::{
|
||||||
|
@ -18,7 +20,7 @@ use stm32f1xx_hal::{
|
||||||
gpio::{Pin, Input, Analog, PullDown, Output, PushPull},
|
gpio::{Pin, Input, Analog, PullDown, Output, PushPull},
|
||||||
pac,
|
pac,
|
||||||
prelude::*,
|
prelude::*,
|
||||||
timer::{Tim2FullRemap},
|
timer::{Tim2FullRemap, Timer},
|
||||||
flash::{FlashWriter, FlashSize, SectorSize},
|
flash::{FlashWriter, FlashSize, SectorSize},
|
||||||
usb::{Peripheral, UsbBus},
|
usb::{Peripheral, UsbBus},
|
||||||
};
|
};
|
||||||
|
@ -176,6 +178,7 @@ impl Calibration {
|
||||||
fn main() -> ! {
|
fn main() -> ! {
|
||||||
// ====================== general setup =================
|
// ====================== general setup =================
|
||||||
// Acquire peripherals
|
// Acquire peripherals
|
||||||
|
let cp = cortex_m::Peripherals::take().unwrap();
|
||||||
let p = pac::Peripherals::take().unwrap();
|
let p = pac::Peripherals::take().unwrap();
|
||||||
let mut flash = p.FLASH.constrain();
|
let mut flash = p.FLASH.constrain();
|
||||||
let rcc = p.RCC.constrain();
|
let rcc = p.RCC.constrain();
|
||||||
|
@ -294,8 +297,6 @@ fn main() -> ! {
|
||||||
pe13: gpioe.pe13.into_push_pull_output(&mut gpioe.crh),
|
pe13: gpioe.pe13.into_push_pull_output(&mut gpioe.crh),
|
||||||
};
|
};
|
||||||
|
|
||||||
// let mut last = get_report(&mut io_pins, &mut adc1, &cal);
|
|
||||||
|
|
||||||
// ====================== PWM setup =================
|
// ====================== PWM setup =================
|
||||||
let c1 = pa15.into_alternate_push_pull(&mut gpioa.crh);
|
let c1 = pa15.into_alternate_push_pull(&mut gpioa.crh);
|
||||||
let c3 = gpiob.pb10.into_alternate_push_pull(&mut gpiob.crh);
|
let c3 = gpiob.pb10.into_alternate_push_pull(&mut gpiob.crh);
|
||||||
|
@ -303,37 +304,31 @@ fn main() -> ! {
|
||||||
.TIM2
|
.TIM2
|
||||||
.pwm_hz::<Tim2FullRemap, _, _>((c1, c3), &mut afio.mapr, 1.kHz(), &clocks).split();
|
.pwm_hz::<Tim2FullRemap, _, _>((c1, c3), &mut afio.mapr, 1.kHz(), &clocks).split();
|
||||||
integ_lt_pwm.enable();
|
integ_lt_pwm.enable();
|
||||||
// let mut rudder_trim_display_pwm = p
|
|
||||||
// .TIM2
|
|
||||||
// .pwm_hz::<Tim2FullRemap, _, _>(c3, &mut afio.mapr, 1.kHz(), &clocks);
|
|
||||||
rudder_trim_display_pwm.enable();
|
rudder_trim_display_pwm.enable();
|
||||||
let pwm_max = integ_lt_pwm.get_max_duty(); //48000 in our case
|
let pwm_max = integ_lt_pwm.get_max_duty(); //48000 in our case
|
||||||
|
|
||||||
// ====================== Timer setup ===============
|
// ====================== Timer setup ===============
|
||||||
// let timer = Instant;
|
let mut timer = Timer::syst(cp.SYST, &clocks).counter_hz();
|
||||||
// let mut last_report_sent = timer.elapsed();
|
timer.start(1.kHz()).unwrap();
|
||||||
|
|
||||||
// ====================== Main loop =================
|
// ====================== Main loop =================
|
||||||
loop {
|
loop {
|
||||||
|
block!(timer.wait()).unwrap();
|
||||||
let report = get_report(&mut io_pins, &mut adc1, &cal);
|
let report = get_report(&mut io_pins, &mut adc1, &cal);
|
||||||
// TODO figure out timer and only send in like 1ms intervals or on change
|
match consumer.device().write_report(&report) {
|
||||||
// if report != last {
|
Err(UsbHidError::WouldBlock) => {}
|
||||||
match consumer.device().write_report(&report) {
|
Err(UsbHidError::UsbError(usb_device::UsbError::BufferOverflow)) => {
|
||||||
Err(UsbHidError::WouldBlock) => {}
|
core::panic!("Failed to write consumer report, report is too big")
|
||||||
Err(UsbHidError::UsbError(usb_device::UsbError::BufferOverflow)) => {
|
|
||||||
core::panic!("Failed to write consumer report, report is too big")
|
|
||||||
}
|
|
||||||
Ok(_) => {
|
|
||||||
// last = report;
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
// set as indicator that this has happened
|
|
||||||
// io_pins.pe1.set_high();
|
|
||||||
// io_pins.pe4.set_high();
|
|
||||||
core::panic!("Failed to write consumer report: {:?}", e)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// }
|
Ok(_) => {
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
// set as indicator that this has happened
|
||||||
|
io_pins.pe1.set_high();
|
||||||
|
io_pins.pe4.set_high();
|
||||||
|
core::panic!("Failed to write consumer report: {:?}", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if usb_dev.poll(&mut [&mut consumer]) {
|
if usb_dev.poll(&mut [&mut consumer]) {
|
||||||
match consumer.device().read_report() {
|
match consumer.device().read_report() {
|
||||||
|
|
Loading…
Reference in a new issue