Good Morning @mjs513 and ... As for this display:
As I mentioned earlier I have a version of that library
https://github.com/KurtE/ILI9488/tree/Teensy_4_beta that runs on T4...
Not much of a change, just needed to change the size of hardware registers to 32 bit instead of 8...
As for the usage of DMA, again not sure how much that would help here, assuming that one can keep the FIFO queue non-empty, except when you need to change DC (and lesser extent) CS...
But assuming similar SPI speed, best case is that it will take 3 times as long to update this display as ILI9341 display as you have to transfer 3 times as much data. And I don't believe there is any way to do DMA operations directly from a 16 bit frame buffer to the display (i.e. need to translate into 3 bytes of data...
My guess is that this current library is slower than we can do... That is it is using
Code:
void ILI9488::write16BitColor(uint16_t color){
// #if (__STM32F1__)
// uint8_t buff[4] = {
// (((color & 0xF800) >> 11)* 255) / 31,
// (((color & 0x07E0) >> 5) * 255) / 63,
// ((color & 0x001F)* 255) / 31
// };
// SPI.dmaSend(buff, 3);
// #else
uint8_t r = (color & 0xF800) >> 11;
uint8_t g = (color & 0x07E0) >> 5;
uint8_t b = color & 0x001F;
r = (r * 255) / 31;
g = (g * 255) / 63;
b = (b * 255) / 31;
spiwrite(r);
spiwrite(g);
spiwrite(b);
// #endif
}
To output each pixel... Where spiwrite translates to SPI.transfer
So no queue of data...
So could make a version of library like ili9341_t3 to support it using the FIFO. could start from _t3 or _t3n... But with _t3n not sure yet on best way to do frame buffer...
However where the ili9341_t3
and ili9488_t3
would/could have some interesting changes in functions are in pushing colors.
That is with both libraries, they use mainly writedata16_cont and writedata16_last to output the colors. Problem is that these helper functions are not only used to output the colors, they also are used to output other things. Like the X, Y coordinates... SO may need to change a lot of these to something like writecolor_cont... which for t3.x would probably translate into 3 push 8 bit values...
For T4, we could instead have it directly output 24 bits, by setting the framesize to this in the TCR register...
Again not sure what all would have to do for DMA...