Merge pull request #1974 from kwagyeman/kwabena/fix_fsync

ports/mimxrt: Add support for fsync pin to snapshot.
This commit is contained in:
Ibrahim Abdelkader 2023-10-13 21:14:42 +03:00 committed by GitHub
commit a5c52bb75b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 3 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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;