From 3d2216c715dc0fe787b0ad56412790541a2dd266 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Thu, 8 Sep 2022 19:57:25 +0200 Subject: [PATCH] sensors/LEPTON: Use dma_alloc for packet buffer. * Sharing the VOSPI packet DMA buffer with line buffer does not work for OpenMV 4 PRO, because the packet buffer needs to be in D3. * This will automatically allocate a DMA buffer for VOSPI packet in the same domain as the DMA peripheral. --- src/omv/sensors/lepton.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/omv/sensors/lepton.c b/src/omv/sensors/lepton.c index b2a198231..44b23cf29 100644 --- a/src/omv/sensors/lepton.c +++ b/src/omv/sensors/lepton.c @@ -18,6 +18,7 @@ #include "py/mphal.h" #include "framebuffer.h" #include "common.h" +#include "dma_alloc.h" #include "crc16.h" #include "LEPTON_SDK.h" @@ -61,11 +62,10 @@ static float max_temp = DEFAULT_MAX_TEMP; extern SPI_HandleTypeDef ISC_SPIHandle; static DMA_HandleTypeDef DMAHandle; LEP_CAMERA_PORT_DESC_T LEPHandle; -extern uint8_t _line_buf[]; extern uint8_t _vospi_buf[]; static bool vospi_resync = true; -static uint8_t *vospi_packet = _line_buf; +static uint8_t *vospi_packet = NULL; static uint8_t *vospi_buffer = _vospi_buf; static volatile uint32_t vospi_pid = 0; static volatile uint32_t vospi_seg = 1; @@ -643,6 +643,12 @@ int lepton_init(sensor_t *sensor) sensor->hw_flags.jpege = 0; sensor->hw_flags.gs_bpp = 1; + // Allocate packet buffer in the same domain as the DMA instance. + vospi_packet = dma_alloc(VOSPI_PACKET_SIZE, ISC_SPI_DMA_STREAM); + if (vospi_packet == NULL) { + return -1; + } + // Configure the DMA handler for Transmission process DMAHandle.Instance = ISC_SPI_DMA_STREAM; DMAHandle.Init.Request = ISC_SPI_DMA_REQUEST; @@ -666,6 +672,10 @@ int lepton_init(sensor_t *sensor) NVIC_SetPriority(ISC_SPI_DMA_IRQn, IRQ_PRI_DMA21); HAL_NVIC_DisableIRQ(ISC_SPI_DMA_IRQn); + #if defined(ISC_SPI_DMA_CLK_ENABLE) + ISC_SPI_DMA_CLK_ENABLE(); + #endif + HAL_DMA_DeInit(&DMAHandle); if (HAL_DMA_Init(&DMAHandle) != HAL_OK) { // Initialization Error