diff --git a/src/omv/boards/OPENMV_RT1060/omv_boardconfig.h b/src/omv/boards/OPENMV_RT1060/omv_boardconfig.h index 75ee5d9a6..a61ef7d27 100644 --- a/src/omv/boards/OPENMV_RT1060/omv_boardconfig.h +++ b/src/omv/boards/OPENMV_RT1060/omv_boardconfig.h @@ -234,7 +234,7 @@ #define DCMI_RESET_PIN (&omv_pin_DCMI_RESET) #define DCMI_POWER_PIN (&omv_pin_DCMI_POWER) -//#define DCMI_FSYNC_PIN (&omv_pin_DCMI_FSYNC) +#define DCMI_FSYNC_PIN (&omv_pin_DCMI_FSYNC) #define DCMI_D0_PIN (&omv_pin_DCMI_D0) #define DCMI_D1_PIN (&omv_pin_DCMI_D1) diff --git a/src/omv/boards/OPENMV_RT1060/omv_pins.h b/src/omv/boards/OPENMV_RT1060/omv_pins.h index 26f5d34cc..ba90e42e7 100644 --- a/src/omv/boards/OPENMV_RT1060/omv_pins.h +++ b/src/omv/boards/OPENMV_RT1060/omv_pins.h @@ -14,8 +14,8 @@ OMV_GPIO_DEFINE(LPSPI3_SSEL, AD_B0_03, LPSPI3, 0) OMV_GPIO_DEFINE(LPSPI3_GPIO, AD_B0_03, GPIO, 0) OMV_GPIO_DEFINE(LPSPI4_SCLK, B0_03, LPSPI4, 0) -OMV_GPIO_DEFINE(LPSPI4_MISO, B0_02, LPSPI4, 0) -OMV_GPIO_DEFINE(LPSPI4_MOSI, B0_01, LPSPI4, 0) +OMV_GPIO_DEFINE(LPSPI4_MISO, B0_01, LPSPI4, 0) +OMV_GPIO_DEFINE(LPSPI4_MOSI, B0_02, LPSPI4, 0) OMV_GPIO_DEFINE(LPSPI4_SSEL, B0_00, LPSPI4, 0) OMV_GPIO_DEFINE(LPSPI4_GPIO, B0_00, GPIO, 0) @@ -37,3 +37,4 @@ OMV_GPIO_DEFINE(DCMI_VSYNC, B1_13, CSI, 0) OMV_GPIO_DEFINE(DCMI_PXCLK, B1_12, CSI, 0) OMV_GPIO_DEFINE(DCMI_RESET, B1_01, GPIO, 0) OMV_GPIO_DEFINE(DCMI_POWER, B1_02, GPIO, 0) +OMV_GPIO_DEFINE(DCMI_FSYNC, B0_01, GPIO, 0) diff --git a/src/omv/ports/mimxrt/sensor.c b/src/omv/ports/mimxrt/sensor.c index 22d85550b..7657c5082 100644 --- a/src/omv/ports/mimxrt/sensor.c +++ b/src/omv/ports/mimxrt/sensor.c @@ -325,16 +325,37 @@ int sensor_snapshot(sensor_t *sensor, image_t *image, uint32_t flags) { CSI_REG_CR18(CSI) |= CSI_CR18_CSI_ENABLE_MASK; } + // Let the camera know we want to trigger it now. + #if defined(DCMI_FSYNC_PIN) + if (sensor->hw_flags.fsync) { + omv_gpio_write(DCMI_FSYNC_PIN, 1); + } + #endif + vbuffer_t *buffer = framebuffer_get_head(FB_NO_FLAGS); // Wait for the DMA to finish the transfer. for (mp_uint_t ticks = mp_hal_ticks_ms(); buffer == NULL;) { buffer = framebuffer_get_head(FB_NO_FLAGS); if ((mp_hal_ticks_ms() - ticks) > 3000) { sensor_abort(); + + #if defined(DCMI_FSYNC_PIN) + if (sensor->hw_flags.fsync) { + omv_gpio_write(DCMI_FSYNC_PIN, 0); + } + #endif + return SENSOR_ERROR_CAPTURE_TIMEOUT; } } + // We're done receiving data. + #if defined(DCMI_FSYNC_PIN) + if (sensor->hw_flags.fsync) { + omv_gpio_write(DCMI_FSYNC_PIN, 0); + } + #endif + if (!sensor->transpose) { MAIN_FB()->w = w; MAIN_FB()->h = h;