working!!
This commit is contained in:
parent
0ba0e0360f
commit
46b2b13589
38
src/main.rs
38
src/main.rs
@ -37,11 +37,18 @@ 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::DIV1); // clock. which use PA8 as clock output
|
|
||||||
let cam_down = gpio::PD13;
|
let cam_down = gpio::PD13;
|
||||||
cam_down.setup();
|
cam_down.setup();
|
||||||
|
let rst = gpio::PD12;
|
||||||
|
rst.setup();
|
||||||
cam_down.set_high();
|
cam_down.set_high();
|
||||||
|
rst.set_low();
|
||||||
|
clock::set_mco(gpio::GPIO_MCO_PA8, clock::Mcosel::HSI48, clock::Mcopre::DIV2); // clock. which use PA8 as clock output
|
||||||
|
// cam_down.set_high();
|
||||||
|
delay_ms(5);
|
||||||
cam_down.set_low();
|
cam_down.set_low();
|
||||||
|
delay_ms(5);
|
||||||
|
rst.set_high();
|
||||||
// wait for short time
|
// wait for short time
|
||||||
delay_ms(50);
|
delay_ms(50);
|
||||||
let mut i2c = i2c::I2c::new(i2c::I2cConfig::new(
|
let mut i2c = i2c::I2c::new(i2c::I2cConfig::new(
|
||||||
@ -51,8 +58,10 @@ fn setup_camera() -> (gpio::GpioPort, i2c::I2c) {
|
|||||||
gpio::I2C2_SCL_PF1,
|
gpio::I2C2_SCL_PF1,
|
||||||
))
|
))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
// delay_ms(1);
|
delay_ms(1);
|
||||||
|
|
||||||
camera::setup_camera(&mut i2c);
|
camera::setup_camera(&mut i2c);
|
||||||
|
// cam_down.set_high();
|
||||||
(cam_down, i2c)
|
(cam_down, i2c)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,8 +103,6 @@ async fn async_main(spawner: Spawner) {
|
|||||||
clock::init_clock(false, true, true, clock::ClockFreqs::KernelFreq160Mhz);
|
clock::init_clock(false, true, true, clock::ClockFreqs::KernelFreq160Mhz);
|
||||||
// cam_down.set_high();
|
// cam_down.set_high();
|
||||||
delay_ms(200);
|
delay_ms(200);
|
||||||
defmt::info!("camera init finished!");
|
|
||||||
defmt::info!("sd init finished!");
|
|
||||||
let green = setup_led();
|
let green = setup_led();
|
||||||
spawner.spawn(btn()).unwrap();
|
spawner.spawn(btn()).unwrap();
|
||||||
spawner.spawn(pwr::vddusb_monitor_up()).unwrap();
|
spawner.spawn(pwr::vddusb_monitor_up()).unwrap();
|
||||||
@ -104,14 +111,30 @@ async fn async_main(spawner: Spawner) {
|
|||||||
|
|
||||||
let (cam_down, mut i2c, sd, dcmi) =
|
let (cam_down, mut i2c, sd, dcmi) =
|
||||||
clock::hclk_request(clock::ClockFreqs::KernelFreq160Mhz, || {
|
clock::hclk_request(clock::ClockFreqs::KernelFreq160Mhz, || {
|
||||||
let (cam_down, i2c) = setup_camera();
|
|
||||||
let sd = setup_sd();
|
let sd = setup_sd();
|
||||||
|
defmt::info!("sd init finished!");
|
||||||
|
let (cam_down, i2c) = setup_camera();
|
||||||
|
defmt::info!("camera init finished!");
|
||||||
let dcmi = set_dcmi();
|
let dcmi = set_dcmi();
|
||||||
(cam_down, i2c, sd, dcmi)
|
(cam_down, i2c, sd, dcmi)
|
||||||
});
|
});
|
||||||
|
|
||||||
defmt::info!("usb init finished!");
|
defmt::info!("usb init finished!");
|
||||||
let mut power_on = false;
|
let mut power_on = false;
|
||||||
|
// let mut green = gpio::PD10;
|
||||||
|
gpio::PD10.setup();
|
||||||
|
gpio::PD14.setup();
|
||||||
|
gpio::PD15.setup();
|
||||||
|
// set high
|
||||||
|
gpio::PD10.set_high();
|
||||||
|
gpio::PD14.set_high();
|
||||||
|
gpio::PD15.set_high();
|
||||||
|
delay_ms(500);
|
||||||
|
gpio::PD10.set_low();
|
||||||
|
gpio::PD14.set_low();
|
||||||
|
gpio::PD15.set_low();
|
||||||
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
if !power_on {
|
if !power_on {
|
||||||
let val = POWER_SIGNAL.wait().await;
|
let val = POWER_SIGNAL.wait().await;
|
||||||
@ -131,15 +154,16 @@ async fn async_main(spawner: Spawner) {
|
|||||||
|
|
||||||
// exti::EXTI2_PB2.wait_for_raising().await;
|
// exti::EXTI2_PB2.wait_for_raising().await;
|
||||||
// clock::init_clock(false, true, clock::ClockFreqs::KernelFreq160Mhz);
|
// clock::init_clock(false, true, clock::ClockFreqs::KernelFreq160Mhz);
|
||||||
// clock::set_mco(gpio::GPIO_MCO_PA8, clock::Mcosel::HSI, clock::Mcopre::DIV1); // clock. which use PA8 as clock output
|
|
||||||
// delay_ms(1);
|
// delay_ms(1);
|
||||||
// rtc::rtc_interrupt().await;
|
// rtc::rtc_interrupt().await;
|
||||||
green.toggle();
|
green.toggle();
|
||||||
let mut pic_buf = [0u8; 700_000];
|
let mut pic_buf = [0u8; 1_600_000];
|
||||||
// deep sleep is not allowed
|
// deep sleep is not allowed
|
||||||
clock::hclk_request_async(clock::ClockFreqs::KernelFreq160Mhz, || async {
|
clock::hclk_request_async(clock::ClockFreqs::KernelFreq160Mhz, || async {
|
||||||
low_power::run_no_deep_sleep_async(|| async {
|
low_power::run_no_deep_sleep_async(|| async {
|
||||||
|
defmt::info!("start capture, ########################");
|
||||||
camera::capture(&cam_down, &mut i2c, &dcmi, &mut pic_buf).await;
|
camera::capture(&cam_down, &mut i2c, &dcmi, &mut pic_buf).await;
|
||||||
|
defmt::info!("finish capture, ########################");
|
||||||
camera::save_picture(&mut pic_buf, &sd).await;
|
camera::save_picture(&mut pic_buf, &sd).await;
|
||||||
defmt::info!("finish save picture, ########################");
|
defmt::info!("finish save picture, ########################");
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user