Merge pull request #1217 from kwagyeman/kwabena/use_dma_buffer

Use DMA buffer for FIR Lepton
This commit is contained in:
Ibrahim Abd Elkader 2021-03-10 01:43:19 +02:00 committed by GitHub
commit 6cc75175a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 24 additions and 16 deletions

View File

@ -144,6 +144,7 @@
#define OMV_LINE_BUF_SIZE (3 * 1024) // Image line buffer round(640 * 2BPP * 2 buffers).
#define OMV_MSC_BUF_SIZE (2K) // USB MSC bot data
#define OMV_VFS_BUF_SIZE (1K) // VFS sturct + FATFS file buffer (624 bytes)
#define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes)
#define OMV_JPEG_BUF_SIZE (32 * 1024) // IDE JPEG buffer (header + data).
#define OMV_BOOT_ORIGIN 0x08000000

View File

@ -104,13 +104,14 @@
#define OMV_DMA_MEMORY SRAM2 // Misc DMA buffers
#define OMV_FB_SIZE (150K) // FB memory: header + QVGA/GS image
#define OMV_FB_ALLOC_SIZE (13K) // minimum fb alloc size
#define OMV_FB_ALLOC_SIZE (12K) // minimum fb alloc size
#define OMV_STACK_SIZE (4K)
#define OMV_HEAP_SIZE (51K)
#define OMV_LINE_BUF_SIZE (2 * 1024) // Image line buffer round(320 * 2BPP * 2 buffers).
#define OMV_MSC_BUF_SIZE (2K) // USB MSC bot data
#define OMV_VFS_BUF_SIZE (1K) // VFS sturct + FATFS file buffer (624 bytes)
#define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes)
#define OMV_FFS_BUF_SIZE (16K) // Flash filesystem cache
#define OMV_JPEG_BUF_SIZE (8 * 1024) // IDE JPEG buffer size (header + data).
@ -121,9 +122,9 @@
#define OMV_DTCM_ORIGIN 0x10000000
#define OMV_DTCM_LENGTH 64K
#define OMV_SRAM1_ORIGIN 0x20000000
#define OMV_SRAM1_LENGTH 163K
#define OMV_SRAM2_ORIGIN 0x20028C00
#define OMV_SRAM2_LENGTH 29K
#define OMV_SRAM1_LENGTH 162K
#define OMV_SRAM2_ORIGIN 0x20028800
#define OMV_SRAM2_LENGTH 30K
// Image sensor I2C
#define ISC_I2C (I2C1)

View File

@ -106,11 +106,12 @@
#define OMV_FB_SIZE (300K) // FB memory: header + VGA/GS image
#define OMV_FB_ALLOC_SIZE (84K) // minimum fb alloc size
#define OMV_STACK_SIZE (16K)
#define OMV_HEAP_SIZE (56K)
#define OMV_HEAP_SIZE (55K)
#define OMV_LINE_BUF_SIZE (3 * 1024) // Image line buffer round(640 * 2BPP * 2 buffers).
#define OMV_MSC_BUF_SIZE (2K) // USB MSC bot data
#define OMV_VFS_BUF_SIZE (1K) // VFS sturct + FATFS file buffer (624 bytes)
#define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes)
#define OMV_FFS_BUF_SIZE (32K) // Flash filesystem cache
#define OMV_JPEG_BUF_SIZE (22 * 1024) // IDE JPEG buffer (header + data).

View File

@ -151,6 +151,7 @@
#define OMV_LINE_BUF_SIZE (3 * 1024) // Image line buffer round(640 * 2BPP * 2 buffers).
#define OMV_MSC_BUF_SIZE (2K) // USB MSC bot data
#define OMV_VFS_BUF_SIZE (1K) // VFS sturct + FATFS file buffer (624 bytes)
#define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes)
#define OMV_JPEG_BUF_SIZE (32 * 1024) // IDE JPEG buffer (header + data).
#define OMV_BOOT_ORIGIN 0x08000000

View File

@ -158,6 +158,7 @@
#define OMV_LINE_BUF_SIZE (11 * 1024) // Image line buffer round(2592 * 2BPP * 2 buffers).
#define OMV_MSC_BUF_SIZE (2K) // USB MSC bot data
#define OMV_VFS_BUF_SIZE (1K) // VFS sturct + FATFS file buffer (624 bytes)
#define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes)
#define OMV_JPEG_BUF_SIZE (1024*1024) // IDE JPEG buffer (header + data).
#define OMV_BOOT_ORIGIN 0x08000000

View File

@ -155,6 +155,7 @@
#define OMV_LINE_BUF_SIZE (11 * 1024) // Image line buffer round(2592 * 2BPP * 2 buffers).
#define OMV_MSC_BUF_SIZE (2K) // USB MSC bot data
#define OMV_VFS_BUF_SIZE (1K) // VFS sturct + FATFS file buffer (624 bytes)
#define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes)
#define OMV_JPEG_BUF_SIZE (1024*1024) // IDE JPEG buffer (header + data).
#define OMV_BOOT_ORIGIN 0x08000000

View File

@ -158,6 +158,7 @@
#define OMV_LINE_BUF_SIZE (11 * 1024) // Image line buffer round(2592 * 2BPP * 2 buffers).
#define OMV_MSC_BUF_SIZE (2K) // USB MSC bot data
#define OMV_VFS_BUF_SIZE (1K) // VFS sturct + FATFS file buffer (624 bytes)
#define OMV_FIR_LEPTON_BUF_SIZE (1K) // FIR Lepton Packet Double Buffer (328 bytes)
#define OMV_JPEG_BUF_SIZE (1024*1024) // IDE JPEG buffer (header + data).
#define OMV_BOOT_ORIGIN 0x08000000

View File

@ -62,7 +62,7 @@ static soft_timer_entry_t flir_lepton_spi_rx_timer = {};
static int fir_lepton_spi_rx_cb_head = 0;
static int fir_lepton_spi_rx_cb_expected_pid = 0;
static int fir_lepton_spi_rx_cb_expected_seg = 0;
static uint16_t *fir_lepton_spi_rx_cb_dma_buffer = NULL;
extern int _fir_lepton_buf;
STATIC mp_obj_t fir_lepton_spi_resync_callback(mp_obj_t unused)
{
@ -75,7 +75,7 @@ STATIC mp_obj_t fir_lepton_spi_resync_callback(mp_obj_t unused)
OMV_FIR_LEPTON_CS_LOW();
HAL_SPI_Receive_DMA(OMV_FIR_LEPTON_CONTROLLER->spi,
(uint8_t *) fir_lepton_spi_rx_cb_dma_buffer,
(uint8_t *) &_fir_lepton_buf,
VOSPI_BUFFER_SIZE);
return mp_const_none;
@ -115,10 +115,6 @@ static mp_obj_t fir_lepton_frame_cb = mp_const_none;
void fir_lepton_spi_callback(const uint16_t *base)
{
#if defined(MCU_SERIES_F7) || defined(MCU_SERIES_H7)
SCB_InvalidateDCache_by_Addr((uint32_t *) base, VOSPI_PACKET_SIZE * sizeof(uint16_t));
#endif
int id = base[0];
// Ignore don't care packets.
@ -198,12 +194,12 @@ void fir_lepton_spi_callback(const uint16_t *base)
static void fir_lepton_spi_callback_half(SPI_HandleTypeDef *hspi)
{
fir_lepton_spi_callback(fir_lepton_spi_rx_cb_dma_buffer);
fir_lepton_spi_callback((uint16_t *) &_fir_lepton_buf);
}
static void fir_lepton_spi_callback_full(SPI_HandleTypeDef *hspi)
{
fir_lepton_spi_callback(fir_lepton_spi_rx_cb_dma_buffer + VOSPI_PACKET_SIZE);
fir_lepton_spi_callback(((uint16_t *) &_fir_lepton_buf) + VOSPI_PACKET_SIZE);
}
#if defined(OMV_FIR_LEPTON_VSYNC_PRESENT)
@ -451,9 +447,6 @@ int fir_lepton_init(cambus_t *bus, int *w, int *h, int *refresh, int *resolution
FB_ALLOC_NO_HINT);
}
fir_lepton_spi_rx_cb_dma_buffer = (uint16_t *) fb_alloc(VOSPI_BUFFER_SIZE * sizeof(uint16_t),
FB_ALLOC_PREFER_SPEED | FB_ALLOC_CACHE_ALIGN);
dma_init(&fir_lepton_spi_rx_dma,
OMV_FIR_LEPTON_CONTROLLER->rx_dma_descr,
DMA_PERIPH_TO_MEMORY,

View File

@ -145,6 +145,10 @@ SECTIONS
_vfs_buf = .; // VFS sturct + FATFS file buffer (around 624 bytes)
. = . + OMV_VFS_BUF_SIZE;
. = ALIGN(16);
_fir_lepton_buf = .; // FIR Lepton Packet Double Buffer (328 bytes)
. = . + OMV_FIR_LEPTON_BUF_SIZE;
#if !defined(OMV_FFS_MEMORY) && defined(OMV_FFS_BUF_SIZE)
. = ALIGN(16);
_ffs_cache = .; // Flash filesystem cache

View File

@ -126,6 +126,10 @@ SECTIONS
_vfs_buf = .; // VFS sturct + FATFS file buffer (around 624 bytes)
. = . + OMV_VFS_BUF_SIZE;
. = ALIGN(16);
_fir_lepton_buf = .; // FIR Lepton Packet Double Buffer (328 bytes)
. = . + OMV_FIR_LEPTON_BUF_SIZE;
#if !defined(OMV_FFS_MEMORY) && defined(OMV_FFS_BUF_SIZE)
. = ALIGN(16);
_ffs_cache = .; // Flash filesystem cache