Hi,
I am using an FT813 chip to drive an 8 inch LCD. Every thing seems to be working fine except for REG_DLSWAP command. I am using the following code which is fairly straightforward:
reset_ft813();
ft800cmdWrite(EVE_CLKEXT,0x00);
//activate module
ft800cmdWrite(EVE_ACTIVE, 0x00);
do
{
ddd = ft800memRead8(REG_ID);
}while(ddd != 0x7c);
//turn on display
select_spi_mode(SPI_MODE_QUAD);
delay_ms(2);
do
{
ddd = ft800memRead8(REG_ID);
}while(ddd != 0x7c);
do
{
ddd = ft800memRead8(REG_CPURESET);
}while(ddd != 0x00);
ft800memWrite16(REG_HCYCLE, 1266); /* total number of clocks per line, incl front/back porch */
ft800memWrite16(REG_HOFFSET, 23); //TVB /* start of active line */
ft800memWrite16(REG_VCYCLE, 526); /* total number of lines per screen, including pre/post */
ft800memWrite16(REG_VOFFSET, 46); //THB /* start of active screen */
ft800memWrite8(REG_SWIZZLE, 0); /* FT8xx output to LCD - pin order */
ft800memWrite8(REG_PCLK_POL, EVE_PCLKPOL); /* LCD data is clocked in on this PCLK edge */
ft800memWrite8(REG_CSPREAD, 0); /* helps with noise, when set to 1 fewer signals are changed simultaneously, reset-default: 1 */
ft800memWrite16(REG_HSIZE, LCD_HORIZONTAL); /* active display height */
ft800memWrite16(REG_VSIZE, LCD_VERTICAL); /* active display height */
//***************************************
// Write Initial Display List & Enable Display
ramDisplayList = RAM_DL;
ft800memWrite32(ramDisplayList, DL_CLEAR_RGB|FT813_COLOR_GREEN);
ramDisplayList += 4;
ft800memWrite32(ramDisplayList, (DL_CLEAR | CLR_COL | CLR_STN | CLR_TAG));
// Clear 00100110 -------- -------- -----CST (C/S/T define which parameters to clear)
ramDisplayList += 4;
ft800memWrite32(ramDisplayList, DL_DISPLAY);
ft800memWrite32(REG_DLSWAP, DLSWAP_FRAME);
// Nothing is being displayed yet... the pixel clock is still 0x00
ramDisplayList = RAM_DL;
ft800memWrite8(REG_GPIO,0x80); //enable display
ft800memWrite8(REG_PCLK, 2);
When code reaches this point LCD screen turns green as expected.
I then immediately try to display the FTDI logo using this code:
ft800memWrite32(RAM_DL + 0, CLEAR(1, 1, 1)); // clear screen
ft800memWrite32(RAM_DL + 4, BEGIN(BITMAPS)); // start drawing bitmaps
ft800memWrite32(RAM_DL + 8, VERTEX2II(220, 110, 31, 'F')); // ascii F in font 31
ft800memWrite32(RAM_DL + 12, VERTEX2II(244, 110, 31, 'T')); // ascii T
ft800memWrite32(RAM_DL + 16, VERTEX2II(270, 110, 31, 'D')); // ascii D
ft800memWrite32(RAM_DL + 20, VERTEX2II(299, 110, 31, 'I')); // ascii I
ft800memWrite32(RAM_DL + 24, END());
ft800memWrite32(RAM_DL + 28, COLOR_RGB(160, 22, 22)); // change colour to red
ft800memWrite32(RAM_DL + 32, POINT_SIZE(320)); // set point size to 20 pixels in radius
ft800memWrite32(RAM_DL + 36, BEGIN(POINTS)); // start drawing points
ft800memWrite32(RAM_DL + 40, VERTEX2II(192, 133, 0, 0)); // red point
ft800memWrite32(RAM_DL + 44, END());
ft800memWrite32(RAM_DL + 48, DISPLAY()); // display the image
ft800memWrite8(REG_DLSWAP, DLSWAP_FRAME);
Unfortunately nothing happens unless I change the last line of code to:
ft800memWrite8(REG_DLSWAP, DLSWAP_LINE);
What am I doing wrong?