How to increase speed of updating my display?

This is more of a conceptual question because I’m confused about how some methods I’ve read about work in regards to updating the display. A lot of this question will be less about lvgl itself and more about general bare metal lcd display stuff.

Background info:
Using a SAME54 Xplained Pro (atsame54p20a) and the SSD1963 as the lcd controller.

First question is about dma and the displays. I guess I just don’t understand how dma can work with the driver because I have this bottleneck during the transfers:

	P_LCD_DATA_PORT_GROUP->OUTSET.reg = (P_LCD_DATA_MASK & dword);
	P_LCD_DATA_PORT_GROUP->OUTCLR.reg = (P_LCD_DATA_MASK & ~dword);
	gpio_set_pin_level(P_LCD_WR, 0);
	delay_us(10);
	gpio_set_pin_level(P_LCD_WR, 1);
	delay_us(10);

I have to do this for every 16 bit transfer to the controller from my mcu. If I have to wait 10ns between every transfer, how could I make dma work? Or how would it speed it up?

Second part of this question has to deal with boot up. When I boot, my screen slowly draws from top to bottom and it’s a bit unpleasant to look at. Is there a way to pre-draw the screen and then have the lcd only draw the screen once I know the update is finished being sent to the controller? After the first screen is drawn, the updates are relatively quick.

Edit: I’ve learned that the datasheet actually requires 12ns, not us, of write time so removing those delays worked like a charm. Still not sure on any dma stuff though.

You can use the ssd1963 window command to send the whole buffer in the lgvl callback.

Second question answer is to enable the lcd backlight only after you have completed the first screen drawing.

1 Like

Sorry I didnt respond to this. I made this post as I swapped from the D21 to the E54 and the e54 stopped working so I couldnt test any of this. Will report back after it starts working again to see how it goes