Hello Farid,
The code below should help when storing the static list.
Note that after sending commands, you should update the REG_CMD_WRITE and then wait for completion of the commands.
In general,
- Await the buffer empty (WaitCmdFifoEmpty)
- Send commands beginning at current REG_CMD_WRITE pointer value (keeping track of offset with each command)
- Update REG_CMD_WRITE to make the co-pro execute them
- Await the buffer empty (WaitCmdFifoEmpty) i.e.. when REG_CMD_READ catches up with your updated REG_CMD_WRITE value
void initMainStaticBackground(void)
{
// try without this first
//WaitCmdFifoEmpty(); //wait for FIFO read/write
//cmd_memset(0, 0, 300*1024);
//ft813memWrite16(REG_CMD_WRITE, (cmdOffset));
//WaitCmdFifoEmpty();
//########### Await FIFO Empty ###########
WaitCmdFifoEmpty(); //wait for FIFO read/write
//########### Create the static list in CMD FIFO ###########
ft813memWrite32(RAM_CMD + cmdOffset, (CMD_DLSTART)); // Start the display list
cmdOffset = incCMDOffset(cmdOffset, 4);
//ft813memWrite32(RAM_CMD + cmdOffset, DL_CLEAR_RGB); // same as CLEAR_COLOR_RGB(0, 0, 0) Start the display list
//cmdOffset = incCMDOffset(cmdOffset, 4);
//ft813memWrite32(RAM_CMD + cmdOffset, (DL_CLEAR_RGB | BLUE)); // same as CLEAR_COLOR_RGB(0, 0, 0) Start the display list
//cmdOffset = incCMDOffset(cmdOffset, 4);
//ft813memWrite32(RAM_CMD + cmdOffset, CLEAR(1,1,1)) ;
//cmdOffset = incCMDOffset(cmdOffset, 4);
ft813memWrite32(RAM_CMD + cmdOffset, TAG_MASK(1));
cmdOffset = incCMDOffset(cmdOffset, 4);
ft813memWrite32(RAM_CMD + cmdOffset, TAG(10));
cmdOffset = incCMDOffset(cmdOffset, 4);
DisplayButton(10,10, 180, 60, 24, OPT_FLAT, &Button1String[0],GREY,BLACK);
ft813memWrite32(RAM_CMD + cmdOffset, TAG(20));
cmdOffset = incCMDOffset(cmdOffset, 4);
DisplayButton(10,110, 180, 60, 24, OPT_FLAT, &Button2String[0],GREY,BLACK);
ft813memWrite32(RAM_CMD + cmdOffset, TAG(30));
cmdOffset = incCMDOffset(cmdOffset, 4);
DisplayButton(10,210, 180, 60, 24, OPT_FLAT, &Button3String[0],GREY,BLACK);
ft813memWrite32(RAM_CMD + cmdOffset, TAG(40));
cmdOffset = incCMDOffset(cmdOffset, 4);
DisplayButton(10,310, 180, 60, 24, OPT_FLAT, &Button4String[0],GREY,BLACK);
ft813memWrite32(RAM_CMD + cmdOffset, TAG(50));
cmdOffset = incCMDOffset(cmdOffset, 4);
DisplayButton(10,410, 180, 60, 24, OPT_FLAT, &Button5String[0],GREY,BLACK);
ft813memWrite32(RAM_CMD + cmdOffset, TAG_MASK(0));
cmdOffset = incCMDOffset(cmdOffset, 4);
DisplayRECT(220,20,300,60,WHITE,10);
//########### Execute the commands to make the display list in RAM_DL ###########
ft813memWrite16(REG_CMD_WRITE, (cmdOffset)); // Update the ring buffer pointer so the graphics processor starts executing
//########### Await completion ###########
WaitCmdFifoEmpty();
//########### Find the end of the new DL ###########
dloffset = ft813memRead16(REG_CMD_DL);
//########### Copy the created DL into RAM_G @ address 4000 in this case ###########
// Could use your command
// ft813memWrite32(RAM_CMD + cmdOffset, CMD_MEMCPY(4000L, RAM_DL, dloffset));
// instead of this code below
ft813memWrite32(RAM_CMD + cmdOffset, CMD_MEMCPY);
cmdOffset = incCMDOffset(cmdOffset, 4);
ft813memWrite32(RAM_CMD + cmdOffset, 4000L);
cmdOffset = incCMDOffset(cmdOffset, 4);
ft813memWrite32(RAM_CMD + cmdOffset, RAM_DL);
cmdOffset = incCMDOffset(cmdOffset, 4);
ft813memWrite32(RAM_CMD + cmdOffset, dloffset);
cmdOffset = incCMDOffset(cmdOffset, 4);
ft813memWrite16(REG_CMD_WRITE, (cmdOffset));
WaitCmdFifoEmpty();
//########### Your static part of the list will now be available ###########
Regards, FTDI Community