forked from espressif/esp-idf
lcd: delay 1us between DMA start and LCD start
Closes https://github.com/espressif/esp-idf/issues/8212
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user