This commit is contained in:
guangzong 2024-03-30 23:31:01 -04:00
parent 14e39b0e2e
commit c9ae314f71
Signed by: guangzong
GPG Key ID: 095389BACAE97D19
2 changed files with 43 additions and 20 deletions

View File

@ -41,3 +41,8 @@ rev = "35f284e"
# [dependencies.stm32-metapac] # [dependencies.stm32-metapac]
# path = "../stm32-data/build/stm32-metapac" # path = "../stm32-data/build/stm32-metapac"
# features = [ "memory-x", "rt"] # features = [ "memory-x", "rt"]
# disable all optimizations
[profile.dev]
opt-level = 0
debug = true

View File

@ -16,7 +16,7 @@ use embassy_usb::{
}; };
use futures::future::{join}; use futures::future::{join};
use u5_lib::{*}; use u5_lib::{gpio::{SDMMC2_CMD_PD7, SDMMC2_D0_PB14}, *};
use u5_lib::clock::delay_ms; use u5_lib::clock::delay_ms;
use u5_lib::com_interface::ComInterface; use u5_lib::com_interface::ComInterface;
@ -34,49 +34,67 @@ fn panic(_info: &PanicInfo) -> ! {
fn setup_camera() -> (gpio::GpioPort, i2c::I2c) { fn setup_camera() -> (gpio::GpioPort, i2c::I2c) {
clock::set_mco(gpio::GPIO_MCO_PA8, clock::Mcosel::HSI, clock::Mcopre::DIV2); // clock. which use PA8 as clock output clock::set_mco(gpio::GPIO_MCO_PA8, clock::Mcosel::HSI, clock::Mcopre::DIV1); // clock. which use PA8 as clock output
let cam_down = gpio::PB0; let cam_down = gpio::PD13;
cam_down.setup(); cam_down.setup();
cam_down.set_high(); cam_down.set_high();
cam_down.set_low(); cam_down.set_low();
// wait for short time // wait for short time
delay_ms(1); delay_ms(50);
let mut i2c = i2c::I2c::new(i2c::I2cConfig::new(2, 100_000, gpio::I2C2_SDA_PF0, gpio::I2C2_SCL_PF1)).unwrap(); let mut i2c = i2c::I2c::new(i2c::I2cConfig::new(2, 100_000, gpio::I2C2_SDA_PF0, gpio::I2C2_SCL_PF1)).unwrap();
delay_ms(1); // delay_ms(1);
camera::setup_camera(&mut i2c); camera::setup_camera(&mut i2c);
(cam_down, i2c) (cam_down, i2c)
} }
fn setup_led() -> gpio::GpioPort { fn setup_led() -> gpio::GpioPort {
let green: gpio::GpioPort = gpio::PD14; let green: gpio::GpioPort = gpio::PD15;
green.setup(); green.setup();
green green
} }
fn setup_sd() -> sdmmc::SdInstance {
let mut sd = sdmmc::SdInstance::new( sdmmc::SDMMC2);
sd.init(gpio::SDMMC2_CK_PD6, SDMMC2_CMD_PD7, SDMMC2_D0_PB14);
sd
}
#[embassy_executor::main] // #[embassy_executor::main]
async fn main(spawner: Spawner) { #[task]
async fn async_main(spawner: Spawner) {
// clock::init_clock(true, false, clock::ClockFreqs::KernelFreq4Mhz); // clock::init_clock(true, false, clock::ClockFreqs::KernelFreq4Mhz);
clock::init_clock(true, false, clock::ClockFreqs::KernelFreq160Mhz); clock::init_clock(false, true, clock::ClockFreqs::KernelFreq160Mhz);
let (cam_down, i2c) = setup_camera(); // let (cam_down, i2c) = setup_camera();
// cam_down.set_high();
delay_ms(200);
defmt::info!("camera init finished!"); defmt::info!("camera init finished!");
let sd = setup_sd();
defmt::info!("sd init finished!");
let green = setup_led(); let green = setup_led();
loop { spawner.spawn(btn()).unwrap();
delay_ms(500); spawner.spawn(pwr::vddusb_monitor_up()).unwrap();
green.toggle(); spawner.spawn(usb_task()).unwrap();
} // start emmc
// spawner.spawn(btn()).unwrap();
// spawner.spawn(pwr::vddusb_monitor_up()).unwrap();
// spawner.spawn(usb_task()).unwrap();
defmt::info!("usb init finished!"); defmt::info!("usb init finished!");
loop { loop {
exti::EXTI13_PC13.wait_for_raising().await; exti::EXTI2_PB2.wait_for_raising().await;
green.toggle(); green.toggle();
defmt::info!("exti2 triggered");
unsafe {defmt::info!("deep sleep flag: {}", low_power::REF_COUNT_DEEP);}
} }
} }
use low_power::Executor;
#[cortex_m_rt::entry]
fn main() -> ! {
Executor::take().run(|spawner| {
// unwrap!(spawner.spawn(async_main(spawner)));
spawner.spawn(async_main(spawner)).unwrap();
});
}
#[embassy_executor::task] #[embassy_executor::task]
async fn btn() { async fn btn() {