aboutsummaryrefslogtreecommitdiff
path: root/src/platforms/esp32s3/gdma_lcd_parallel16.cpp
diff options
context:
space:
mode:
authormrcodetastic <12006953+mrcodetastic@users.noreply.github.com>2024-07-17 23:15:56 +0100
committermrcodetastic <12006953+mrcodetastic@users.noreply.github.com>2024-07-17 23:15:56 +0100
commitcee3dca28c72c4d57f4e741c8d170b2e8a2822c9 (patch)
tree706955af030ad4062c325d19893805d2f45c748b /src/platforms/esp32s3/gdma_lcd_parallel16.cpp
parente8d92c3ff8215eaee872105984620357577ad693 (diff)
clock speed fixes
Diffstat (limited to 'src/platforms/esp32s3/gdma_lcd_parallel16.cpp')
-rw-r--r--src/platforms/esp32s3/gdma_lcd_parallel16.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/platforms/esp32s3/gdma_lcd_parallel16.cpp b/src/platforms/esp32s3/gdma_lcd_parallel16.cpp
index 7bb390d..93969ed 100644
--- a/src/platforms/esp32s3/gdma_lcd_parallel16.cpp
+++ b/src/platforms/esp32s3/gdma_lcd_parallel16.cpp
@@ -58,6 +58,16 @@
return true;
}
+ // LCD end of transaction interrupt
+ static void IRAM_ATTR lcd_isr(void* arg) {
+
+ LCD_CAM.lc_dma_int_clr.lcd_trans_done_int_clr = 1;
+
+ previousBufferFree = true;
+
+ }
+
+
lcd_cam_dev_t* getDev()
{
return &LCD_CAM;
@@ -259,11 +269,21 @@
gdma_set_transfer_ability(dma_chan, &ability);
// Enable DMA transfer callback
+ /*
static gdma_tx_event_callbacks_t tx_cbs = {
// .on_trans_eof is literally the only gdma tx event type available
.on_trans_eof = gdma_on_trans_eof_callback
};
gdma_register_tx_event_callbacks(dma_chan, &tx_cbs, NULL);
+ */
+
+ //
+ // Enable Transaction Done interrupt
+ LCD_CAM.lc_dma_int_ena.lcd_trans_done_int_ena = 1;
+
+ // Allocate a level 1 intterupt: lowest priority, as ISR isn't urgent and may take a long time to complete
+ esp_intr_alloc(ETS_LCD_CAM_INTR_SOURCE, (int)(ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_LEVEL1), lcd_isr, NULL, NULL);
+
// This uses a busy loop to wait for each DMA transfer to complete...