Hi,
I am drawing lots of lines via command VERTEX2F on screen. I am trying to figure out how much I can fit inside BT817 before it crashes.
I have STM32 F4, running Rudolph Riedel’s library, which is running Riverdi’s 10’’ display RVT101HVBNWC00-B.
To achieve that, I am writing commands to REG_CMDB_WRITE register.
At some point screen starts flickering. Now I am puzzled which limit I managed to hit.
That is more than likely the pixel engine, at some point the display list grows so complex that generating a line takes more time
than displaying a line.
I have a torture test somewhere in which I did an animated line-strip with several segments, I am not sure right now if I ran this on the RVT101H,
looks like I only use the RVT70H.
Anyways, the pixel engine needs a bit more time.
Add this after the init:
EVE_memWrite32(REG_AH_HCYCLE_MAX, EVE_HCYCLE + 500);
This should allow the pixel engine to spend more time on a line at the cost of course of reducing the framerate.
After each new line, which is add, I am reading registers REG_CMD_DL, REG_CMD_WRITE, REG_CMD_READ, REG_CMDB_SPACE.
What I noticed so far:
1) REG_CMDB_SPACE is always equal to 4092, no matter at which point I try to read it. From that I can conclude that every dword that is written in REG_CMDB_WRITE register, coprocessor command gets read, meaning it is not possible to overflow FIFO buffer. It will always be empty for new commands, because they are momentarily processed.
Is this correct?
For display-list commands issued separately, this is what I observed as well.
Commands like CMD_LOADIMAGE actually need some time to process, simpler commands not really.
2) Flickering starts happening at rather strange moment. Writing new commands to REG_CMDB_WRITE eventually leads to large number of commands, even larger than 4096 bytes, which should overflow FIFO, but still flickering does not start.
There should be an issue if you send all commands in one go, aka burst-mode, so not raising CS in between the commands and only sending the address once.
But separately, yes, the commands are processed and the FIFO never gets filled.
From what I saw in the sources my torture test does at least 960 line segments.
But then there also is some other stuff on the screen.
3) Flickering starts happening at 1200 line segments, but is dependent on line width (??!?!?), how long are lines, etc. Why?
?
More pixels to put out.
4) When flickering starts, REG_CMD_DL is at approx. 6000 bytes full, so it is not overflowing.
Yes, I made it give up as well before I had the display list full. :-)
Edit: I was about to put your source code in my project, I missed this when briefly looking at your code:
while(1)
{
EVE_cmd_dl(CMD_COLDSTART);
Like this I would expect it to flicker with less line segments since there is a high potential that you are trying to update faster than frame rate.
What is probably saving you there are all the printf() lines.
60Hz = 16.667ms -> do not try to update the screen faster than that