Tweak display DMA buffer size
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
#include "assert.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/ledc.h"
|
||||
#include "driver/spi_common.h"
|
||||
#include "driver/spi_master.h"
|
||||
#include "esp_attr.h"
|
||||
#include "esp_err.h"
|
||||
@@ -47,16 +48,16 @@ static const gpio_num_t kDisplayCs = GPIO_NUM_22;
|
||||
/*
|
||||
* The size of each of our two display buffers. This is fundamentally a balance
|
||||
* between performance and memory usage. LVGL docs recommend a buffer 1/10th the
|
||||
* size of the screen is the best tradeoff.
|
||||
* size of the screen is the best tradeoff, but we instead just use the max DMA
|
||||
* buffer size.
|
||||
* We use two buffers so that one can be flushed to the screen at the same time
|
||||
* as the other is being drawn.
|
||||
*/
|
||||
static const int kDisplayBufferSize = (kDisplayWidth * kDisplayHeight) / 10;
|
||||
static const int kDisplayBufferSize = SPI_MAX_DMA_LEN;
|
||||
|
||||
// Allocate both buffers in static memory to ensure that they're in DRAM, with
|
||||
// minimal fragmentation. We most cases we always need these buffers anyway, so
|
||||
// it's not a memory hit we can avoid.
|
||||
// Note: 128 * 160 / 10 * 2 bpp * 2 buffers = 8 KiB
|
||||
DMA_ATTR static lv_color_t sBuffer1[kDisplayBufferSize];
|
||||
DMA_ATTR static lv_color_t sBuffer2[kDisplayBufferSize];
|
||||
|
||||
|
||||
+2
-4
@@ -35,12 +35,10 @@ esp_err_t init_spi(void) {
|
||||
.data7_io_num = -1,
|
||||
|
||||
// Use the DMA default size. The display requires larger buffers, but it
|
||||
// manages its down use of DMA-capable memory.
|
||||
.max_transfer_sz = 128 * 16 * 2, // TODO: hmm
|
||||
// manages its own use of DMA-capable memory.
|
||||
.max_transfer_sz = 4096,
|
||||
.flags = SPICOMMON_BUSFLAG_MASTER | SPICOMMON_BUSFLAG_IOMUX_PINS,
|
||||
.intr_flags = ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM,
|
||||
//.intr_flags = ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED |
|
||||
// ESP_INTR_FLAG_IRAM,
|
||||
};
|
||||
|
||||
if (esp_err_t err = spi_bus_initialize(kSpiHost, &config, SPI_DMA_CH_AUTO)) {
|
||||
|
||||
Reference in New Issue
Block a user