lcd: delay 1us between DMA start and LCD start

Closes https://github.com/espressif/esp-idf/issues/8212
This commit is contained in:
morris
2022-03-10 18:48:09 +08:00
parent 7112009473
commit a019db6880
2 changed files with 7 additions and 0 deletions

View File

@@ -565,6 +565,9 @@ static void lcd_start_transaction(esp_lcd_i80_bus_t *bus, lcd_i80_trans_descript
lcd_ll_set_command(bus->hal.dev, bus->bus_width, trans_desc->cmd_value); lcd_ll_set_command(bus->hal.dev, bus->bus_width, trans_desc->cmd_value);
if (trans_desc->data) { // some specific LCD commands can have no parameters if (trans_desc->data) { // some specific LCD commands can have no parameters
gdma_start(bus->dma_chan, (intptr_t)(bus->dma_nodes)); gdma_start(bus->dma_chan, (intptr_t)(bus->dma_nodes));
// delay 1us is sufficient for DMA to pass data to LCD FIFO
// in fact, this is only needed when LCD pixel clock is set too high
esp_rom_delay_us(1);
} }
lcd_ll_start(bus->hal.dev); lcd_ll_start(bus->hal.dev);
} }

View File

@@ -190,6 +190,8 @@ static inline uint32_t gdma_ll_rx_get_fifo_bytes(gdma_dev_t *dev, uint32_t chann
return dev->channel[channel].in.infifo_status.infifo_cnt_l2; return dev->channel[channel].in.infifo_status.infifo_cnt_l2;
case 3: case 3:
return dev->channel[channel].in.infifo_status.infifo_cnt_l3; return dev->channel[channel].in.infifo_status.infifo_cnt_l3;
default:
return 0;
} }
} }
@@ -434,6 +436,8 @@ static inline uint32_t gdma_ll_tx_get_fifo_bytes(gdma_dev_t *dev, uint32_t chann
return dev->channel[channel].out.outfifo_status.outfifo_cnt_l2; return dev->channel[channel].out.outfifo_status.outfifo_cnt_l2;
case 3: case 3:
return dev->channel[channel].out.outfifo_status.outfifo_cnt_l3; return dev->channel[channel].out.outfifo_status.outfifo_cnt_l3;
default:
return 0;
} }
} }