static void gpuInitLate(void) { /* Do a power cycle for safer side */ Ft_Gpu_Hal_Powercycle(&Gpu, FT_TRUE); //Ft_Gpu_Hal_Rd16(&Gpu, RAM_G); /* Access address 0 to wake up the FT800 */ Ft_Gpu_HostCommand(&Gpu, FT_GPU_ACTIVE_M); Ft_Gpu_Hal_Sleep(40); /* Set the clk to external clock */ Ft_Gpu_HostCommand(&Gpu, FT_GPU_EXTERNAL_OSC); Ft_Gpu_Hal_Sleep(20); /* Switch PLL output to 48MHz */ Ft_Gpu_HostCommand(&Gpu, FT_GPU_PLL_48M); Ft_Gpu_Hal_Sleep(20); /* Do a core reset for safer side */ Ft_Gpu_HostCommand(&Gpu, FT_GPU_CORE_RESET); Ft_Gpu_Hal_Sleep(40); Ft_Gpu_Hal_Wr16(&Gpu, REG_HCYCLE, DISP_H_CYCLE); Ft_Gpu_Hal_Wr16(&Gpu, REG_HOFFSET, DISP_H_OFFSET); Ft_Gpu_Hal_Wr16(&Gpu, REG_HSYNC0, DISP_H_SYNC0); Ft_Gpu_Hal_Wr16(&Gpu, REG_HSYNC1, DISP_H_SYNC1); Ft_Gpu_Hal_Wr16(&Gpu, REG_VCYCLE, DISP_V_CYCLE); Ft_Gpu_Hal_Wr16(&Gpu, REG_VOFFSET, DISP_V_OFFSET); Ft_Gpu_Hal_Wr16(&Gpu, REG_VSYNC0, DISP_V_SYNC0); Ft_Gpu_Hal_Wr16(&Gpu, REG_VSYNC1, DISP_V_SYNC1); Ft_Gpu_Hal_Wr8(&Gpu, REG_SWIZZLE, DISP_SWIZZLE); Ft_Gpu_Hal_Wr8(&Gpu, REG_PCLK_POL, DISP_PCLK_POL); Ft_Gpu_Hal_Wr16(&Gpu, REG_HSIZE, DISP_WIDTH); Ft_Gpu_Hal_Wr16(&Gpu, REG_VSIZE, DISP_HEIGHT); Ft_Gpu_Hal_Wr8(&Gpu, REG_GPIO_DIR, 0x83 | Ft_Gpu_Hal_Rd8(&Gpu, REG_GPIO_DIR)); Ft_Gpu_Hal_Wr8(&Gpu, REG_GPIO, 0x83 | Ft_Gpu_Hal_Rd8(&Gpu, REG_GPIO)); /* Touch configuration - configure the resistance value to 1200 - this value is specific to customer requirement and derived by experiment */ Ft_Gpu_Hal_Wr16(&Gpu, REG_TOUCH_RZTHRESH,1200); Ft_Gpu_Hal_Wr32(&Gpu, RAM_DL + 0, CLEAR_COLOR_RGB(0, 0, 0));//set the background to black Ft_Gpu_Hal_Wr32(&Gpu, RAM_DL + 4, CLEAR(1,1,1)); Ft_Gpu_Hal_Wr32(&Gpu, RAM_DL + 8, DISPLAY()); Ft_Gpu_Hal_Wr8(&Gpu, REG_DLSWAP, DLSWAP_FRAME); Ft_Gpu_Hal_Wr8(&Gpu, REG_PCLK, DISP_PCLK); /* After this display is visible on the LCD */ }
ft_void_t Ft_BootupConfig() { /* Do a power cycle for safer side */ Ft_Gpu_Hal_Powercycle(phost,FT_TRUE); Ft_Gpu_Hal_Rd16(phost,RAM_G); /* Set the clk to external clock */ Ft_Gpu_HostCommand(phost,FT_GPU_EXTERNAL_OSC); Ft_Gpu_Hal_Sleep(10); /* Switch PLL output to 48MHz */ Ft_Gpu_HostCommand(phost,FT_GPU_PLL_48M); Ft_Gpu_Hal_Sleep(10); /* Do a core reset for safer side */ Ft_Gpu_HostCommand(phost,FT_GPU_CORE_RESET); /* Access address 0 to wake up the FT800 */ Ft_Gpu_HostCommand(phost,FT_GPU_ACTIVE_M); Ft_Gpu_Hal_Wr8(phost, REG_GPIO_DIR,0x80 | Ft_Gpu_Hal_Rd8(phost,REG_GPIO_DIR)); Ft_Gpu_Hal_Wr8(phost, REG_GPIO,0x080 | Ft_Gpu_Hal_Rd8(phost,REG_GPIO)); { ft_uint8_t chipid; //Read Register ID to check if FT800 is ready. chipid = Ft_Gpu_Hal_Rd8(phost, REG_ID); while(chipid != 0x7C) chipid = Ft_Gpu_Hal_Rd8(phost, REG_ID); #ifdef MSVC_PLATFORM printf("VC1 register ID after wake up %x\n",chipid); #endif } /* Configuration of LCD display */ #ifdef SAMAPP_DISPLAY_QVGA /* Values specific to QVGA LCD display */ FT_DispWidth = 320; FT_DispHeight = 240; FT_DispHCycle = 408; FT_DispHOffset = 70; FT_DispHSync0 = 0; FT_DispHSync1 = 10; FT_DispVCycle = 263; FT_DispVOffset = 13; FT_DispVSync0 = 0; FT_DispVSync1 = 2; FT_DispPCLK = 8; FT_DispSwizzle = 2; FT_DispPCLKPol = 0; #endif Ft_Gpu_Hal_Wr16(phost, REG_HCYCLE, FT_DispHCycle); Ft_Gpu_Hal_Wr16(phost, REG_HOFFSET, FT_DispHOffset); Ft_Gpu_Hal_Wr16(phost, REG_HSYNC0, FT_DispHSync0); Ft_Gpu_Hal_Wr16(phost, REG_HSYNC1, FT_DispHSync1); Ft_Gpu_Hal_Wr16(phost, REG_VCYCLE, FT_DispVCycle); Ft_Gpu_Hal_Wr16(phost, REG_VOFFSET, FT_DispVOffset); Ft_Gpu_Hal_Wr16(phost, REG_VSYNC0, FT_DispVSync0); Ft_Gpu_Hal_Wr16(phost, REG_VSYNC1, FT_DispVSync1); Ft_Gpu_Hal_Wr8(phost, REG_SWIZZLE, FT_DispSwizzle); Ft_Gpu_Hal_Wr8(phost, REG_PCLK_POL, FT_DispPCLKPol); Ft_Gpu_Hal_Wr8(phost, REG_PCLK,FT_DispPCLK);//after this display is visible on the LCD Ft_Gpu_Hal_Wr16(phost, REG_HSIZE, FT_DispWidth); Ft_Gpu_Hal_Wr16(phost, REG_VSIZE, FT_DispHeight); /* Touch configuration - configure the resistance value to 1200 - this value is specific to customer requirement and derived by experiment */ Ft_Gpu_Hal_Wr16(phost, REG_TOUCH_RZTHRESH,1200); Ft_Gpu_Hal_Wr8(phost, REG_GPIO_DIR,0xff); Ft_Gpu_Hal_Wr8(phost, REG_GPIO,0x0ff); }