<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic LPC1788 emWin Crash in GUI_Init() in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-emWin-Crash-in-GUI-Init/m-p/519587#M3241</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by rmoss on Thu Jan 31 07:36:07 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have an external Static RAM chip connected to the LPC1788 and when I move the GUI RAM from GUIConf.c to external static RAM, emWin crashes in GUI_Init().&amp;nbsp; Here is my linker file and GUIConf / LCDConf settings.&amp;nbsp; The same behavior occurs whether I use Muliple Buffering or single buffering.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Linker icf&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*###ICF### Section handled by ICF editor, don't touch! ****/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*-Editor annotation file-*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*-Specials-*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_intvec_start__ = 0x00000000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*-Memory Regions-*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_region_ROM_end__&amp;nbsp;&amp;nbsp; = 0x0007FFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_region_RAM_start__ = 0x10000000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_region_RAM_end__&amp;nbsp;&amp;nbsp; = 0x1000FFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*-Sizes-*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_size_cstack__ = 0x800;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_size_heap__&amp;nbsp;&amp;nbsp; = 0x200;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/**** End of ICF editor section. ###ICF###*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define memory mem with size = 4G;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define region ROM_region&amp;nbsp;&amp;nbsp; = mem:[from __ICFEDIT_region_ROM_start__&amp;nbsp;&amp;nbsp; to __ICFEDIT_region_ROM_end__];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define region RAM_region&amp;nbsp;&amp;nbsp; = mem:[from __ICFEDIT_region_RAM_start__&amp;nbsp;&amp;nbsp; to __ICFEDIT_region_RAM_end__];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol _AHB_RAM_start__&amp;nbsp; = 0x20080000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol _AHB_RAM_end__&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x200BFFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define region AHB_RAM_region = mem:[from _AHB_RAM_start__ to _AHB_RAM_end__];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol _EXT_RAM_start__&amp;nbsp; = 0x90000000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol _EXT_RAM_end__&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x903FFFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define region EXT_RAM_region = mem:[from _EXT_RAM_start__ to _EXT_RAM_end__];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define block CSTACK&amp;nbsp;&amp;nbsp;&amp;nbsp; with alignment = 8, size = __ICFEDIT_size_cstack__&amp;nbsp;&amp;nbsp; { };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define block HEAP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with alignment = 8, size = __ICFEDIT_size_heap__&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { };&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;initialize by copy with packing = zeros { readwrite };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do not initialize&amp;nbsp; { section .noinit };&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;place at address mem:__ICFEDIT_intvec_start__ { section .intvec };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;place at address mem:0x2FC { section CRPKEY };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;place in ROM_region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { readonly };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;place in RAM_region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { readwrite,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; block CSTACK, block HEAP };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;place in EXT_RAM_region { section VRAM, section GUI_RAM };&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;GUIConf.c&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Define the available number of bytes available for the GUI&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define GUI_NUMBYTES&amp;nbsp; (1024 * 1024) * 32&amp;nbsp; // x MByte&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Define the average block size&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define GUI_BLOCKSIZE 0x80&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// 32 bit aligned memory area&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef __ICCARM__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #pragma location="GUI_RAM"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; static __no_init U32 _aMemory[GUI_NUMBYTES / 4];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef __CC_ARM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; U32 static _aMemory[GUI_NUMBYTES / 4] __attribute__ ((section ("GUI_RAM"), zero_init));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef __GNUC__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; U32 static _aMemory[GUI_NUMBYTES / 4] __attribute__ ((section(".GUI_RAM"))) = { 0 };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef _WINDOWS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; static U32 _aMemory[GUI_NUMBYTES / 4];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GUI_X_Config&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Called during the initialization process in order to set up the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; available memory for the GUI.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void GUI_X_Config(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; // Assign memory to emWin&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; GUI_ALLOC_AssignMemory(_aMemory, GUI_NUMBYTES);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LCDConf.c&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEGGER Microcontroller GmbH &amp;amp; Co. KG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Solutions for real time microcontroller applications&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c) 1996 - 2012&amp;nbsp; SEGGER Microcontroller GmbH &amp;amp; Co. KG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Internet: &lt;A href="www.segger.com&amp;nbsp;&amp;nbsp;&amp;nbsp;" target="test_blank"&gt;www.segger.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/A&gt; Support:&amp;nbsp; &lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:support@segger.com"&gt;support@segger.com&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;** emWin V5.16 - Graphical user interface for embedded applications **&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;All&amp;nbsp; Intellectual Property rights&amp;nbsp; in the Software belongs to&amp;nbsp; SEGGER.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;emWin is protected by&amp;nbsp; international copyright laws.&amp;nbsp; Knowledge of the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;source code may not be used to write a similar product.&amp;nbsp; This file may&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;only be used in accordance with the following terms:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The software has been licensed to Energy Micro AS whose registered office&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;is situated at&amp;nbsp; Sandakerveien 118, N-0484 Oslo, NORWAY solely&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for&amp;nbsp; the&amp;nbsp; purposes&amp;nbsp; of&amp;nbsp; creating&amp;nbsp; libraries&amp;nbsp; for Energy Micros ARM Cortex-M3, M4F&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;processor-based&amp;nbsp; devices,&amp;nbsp; sublicensed&amp;nbsp; and distributed&amp;nbsp; under the terms and&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;conditions&amp;nbsp; of&amp;nbsp; the&amp;nbsp;&amp;nbsp; End&amp;nbsp; User&amp;nbsp; License Agreement supplied by Energy Micro AS.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Full source code is available at: &lt;A href="https://community.nxp.com/www.segger.com" target="test_blank"&gt;www.segger.com&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;We appreciate your understanding and fairness.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;----------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;File&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : LCDConf.c&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Purpose&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Display controller configuration (single layer)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---------------------------END-OF-HEADER------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "GUI.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include &amp;lt;string.h&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "GUIDRV_Lin.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "LPC177x_8x.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "system_LPC177x_8x.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "HWConf.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "bsp.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "lcdconf.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Layer configuration (to be modified)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Physical display size&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define XSIZE_PHYS 320&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define YSIZE_PHYS 240&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define FRAME_BUFFER_SIZE (XSIZE_PHYS * YSIZE_PHYS * 2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BITSPERPIXEL&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Color conversion&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define COLOR_CONVERSION GUICC_565&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Display driver&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define DISPLAY_DRIVER GUIDRV_LIN_16&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; USE_MULTIBUF&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #define USE_MULTIBUF&amp;nbsp; 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Buffers / VScreens&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define NUM_BUFFERS&amp;nbsp; 2 // Number of multiple buffers to be used&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&amp;nbsp; VSYNC Interrupt Register Mask&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define VCompIC_MASK (1&amp;lt;&amp;lt;3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Configuration checking&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#pragma data_alignment=8&amp;nbsp; // 8 byte align frame buffer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#pragma location="VRAM"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static __no_init U32 _aVRAM[FB_XSIZE * FB_YSIZE / (4 / PIXEL_WIDTH)];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#define VRAM_ADDR&amp;nbsp; (U32)&amp;amp;_aVRAM[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; VRAM_ADDR&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #define VRAM_ADDR 0x90000000&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; XSIZE_PHYS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #error Physical X size of display is not defined!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; YSIZE_PHYS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #error Physical Y size of display is not defined!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; COLOR_CONVERSION&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #error Color conversion not defined!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; DISPLAY_DRIVER&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #error No display driver defined!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _SetVRAMAddr(void * pVRAM);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _SetOrg(int xPos, int yPos) ;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t VRAM_pointer = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static int orgx, orgy;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int pendingFrameIndex = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LCD_X_SHOWBUFFER_INFO * pBufferData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _InitController&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Should initialize the display controller&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _InitController(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; orgx = orgy = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetVRAMAddr((void *)(VRAM_ADDR));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetOrg(orgx, orgy);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LPC_LCD-&amp;gt;UPBASE = (uint32_t)VRAM_ADDR; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SetVRAMAddr&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Should set the frame buffer base address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _SetVRAMAddr(void * pVRAM) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_LCD-&amp;gt;UPBASE = (uint32_t)pVRAM;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SetOrg&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Should set the origin of the display typically by modifying the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; frame buffer base address register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _SetOrg(int xPos, int yPos) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; orgx = xPos;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; orgy = yPos;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //LPC_LCD-&amp;gt;UPBASE = (uint32_t)(VRAM_ADDR);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_LCD-&amp;gt;UPBASE = (uint32_t)(VRAM_ADDR + (y * YSIZE_PHYS * PIXEL_WIDTH));&amp;nbsp; // Needs to be set, before LCDC is enabled&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Initialize LCD in Direct mode and touch panel */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void LCD_InitializeLCD(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{ &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetVRAMAddr((void *)(VRAM_ADDR));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetOrg(orgx, orgy);&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_InitializeDriver&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Set Vram address and org&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void LCD_InitializeDriver(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{ &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetVRAMAddr((void *)(VRAM_ADDR));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetOrg(orgx, orgy);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_IRQHandler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; VSYNC Interrupt Service Routine&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void LCD_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; uint32_t flags;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; uint32_t Addr, BufferSize;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; flags = LPC_LCD-&amp;gt;INTSTAT;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LPC_LCD-&amp;gt;INTCLR |= VCompIC_MASK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; if ( flags &amp;amp; VCompIC_MASK ) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pendingFrameIndex &amp;gt;= 0) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Calculate address of the given buffer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferSize = (XSIZE_PHYS * YSIZE_PHYS * BITSPERPIXEL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr = VRAM_ADDR + BufferSize * pBufferData-&amp;gt;Index;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Make the given buffer visible&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_LCD-&amp;gt;UPBASE = Addr;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send a confirmation that the buffer is visible now&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GUI_MULTIBUF_Confirm(pendingFrameIndex);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pendingFrameIndex = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableVsyncInterrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Setup VSYNC Interrupt &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void EnableVsyncInterrupt(void) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; /* Clear interrupts */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LPC_LCD-&amp;gt;INTCLR |= VCompIC_MASK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; /* Enable VSYNC interrupt */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LPC_LCD-&amp;gt;INTMSK = VCompIC_MASK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; /* Enable EBI interrupts in core */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; NVIC_ClearPendingIRQ(LCD_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; NVIC_EnableIRQ(LCD_IRQn);&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_X_Config&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Called during the initialization process in order to set up the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; display driver configuration.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void LCD_X_Config(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#if MULTIBUFF&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; GUI_MULTIBUF_Config(NUM_BUFFERS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; // Set display driver and color conversion for 1st layer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; // Display driver configuration, required for Lin-driver&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; if (LCD_GetSwapXY()) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //LCD_SetVSizeEx(0, YSIZE_PHYS, XSIZE_PHYS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_X_DisplayDriver&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; This function is called by the display driver for several purposes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; To support the according task the routine needs to be adapted to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; the display controller. Please note that the commands marked with&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; 'optional' are not cogently required and should only be adapted if&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; the display controller supports these features.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Parameter:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; LayerIndex - Index of layer to be configured&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Cmd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Please refer to the details in the switch statement below&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; pData&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Pointer to a LCD_X_DATA structure&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Return Value:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; &amp;lt; -1 - Error&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1 - Command not handled&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 - Ok&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; int r;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; (void)LayerIndex;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Unused parameter */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; switch (Cmd) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; // Required&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_INITCONTROLLER: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Called during the initialization process in order to set up the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // display controller and put it into operation. If the display&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // controller is not initialized by any external routine this needs&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to be adapted by the customer...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _InitController();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableVsyncInterrupt();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_SETVRAMADDR: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Required for setting the address of the video RAM for drivers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // with memory mapped video RAM which is passed in the 'pVRAM' element of p&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_X_SETVRAMADDR_INFO * p;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = (LCD_X_SETVRAMADDR_INFO *)pData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SetVRAMAddr(p-&amp;gt;pVRAM);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_SETORG: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Required for setting the display origin which is passed in the 'xPos' and 'yPos' element of p&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_X_SETORG_INFO * p;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = (LCD_X_SETORG_INFO *)pData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SetOrg(p-&amp;gt;xPos, p-&amp;gt;yPos);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_ON: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Required if the display controller should support switching on and off&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_OFF: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Required if the display controller should support switching on and off&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_SHOWBUFFER: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBufferData = (LCD_X_SHOWBUFFER_INFO *)pData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Remember buffer index to be used by ISR&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pendingFrameIndex = pBufferData-&amp;gt;Index;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; default:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; return r;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************** End of file ****************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;RMoss&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:38:59 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:38:59Z</dc:date>
    <item>
      <title>LPC1788 emWin Crash in GUI_Init()</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-emWin-Crash-in-GUI-Init/m-p/519587#M3241</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by rmoss on Thu Jan 31 07:36:07 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have an external Static RAM chip connected to the LPC1788 and when I move the GUI RAM from GUIConf.c to external static RAM, emWin crashes in GUI_Init().&amp;nbsp; Here is my linker file and GUIConf / LCDConf settings.&amp;nbsp; The same behavior occurs whether I use Muliple Buffering or single buffering.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Linker icf&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*###ICF### Section handled by ICF editor, don't touch! ****/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*-Editor annotation file-*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*-Specials-*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_intvec_start__ = 0x00000000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*-Memory Regions-*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_region_ROM_end__&amp;nbsp;&amp;nbsp; = 0x0007FFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_region_RAM_start__ = 0x10000000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_region_RAM_end__&amp;nbsp;&amp;nbsp; = 0x1000FFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*-Sizes-*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_size_cstack__ = 0x800;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol __ICFEDIT_size_heap__&amp;nbsp;&amp;nbsp; = 0x200;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/**** End of ICF editor section. ###ICF###*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define memory mem with size = 4G;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define region ROM_region&amp;nbsp;&amp;nbsp; = mem:[from __ICFEDIT_region_ROM_start__&amp;nbsp;&amp;nbsp; to __ICFEDIT_region_ROM_end__];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define region RAM_region&amp;nbsp;&amp;nbsp; = mem:[from __ICFEDIT_region_RAM_start__&amp;nbsp;&amp;nbsp; to __ICFEDIT_region_RAM_end__];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol _AHB_RAM_start__&amp;nbsp; = 0x20080000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol _AHB_RAM_end__&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x200BFFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define region AHB_RAM_region = mem:[from _AHB_RAM_start__ to _AHB_RAM_end__];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol _EXT_RAM_start__&amp;nbsp; = 0x90000000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define symbol _EXT_RAM_end__&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x903FFFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define region EXT_RAM_region = mem:[from _EXT_RAM_start__ to _EXT_RAM_end__];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;define block CSTACK&amp;nbsp;&amp;nbsp;&amp;nbsp; with alignment = 8, size = __ICFEDIT_size_cstack__&amp;nbsp;&amp;nbsp; { };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;define block HEAP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with alignment = 8, size = __ICFEDIT_size_heap__&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { };&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;initialize by copy with packing = zeros { readwrite };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do not initialize&amp;nbsp; { section .noinit };&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;place at address mem:__ICFEDIT_intvec_start__ { section .intvec };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;place at address mem:0x2FC { section CRPKEY };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;place in ROM_region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { readonly };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;place in RAM_region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { readwrite,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; block CSTACK, block HEAP };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;place in EXT_RAM_region { section VRAM, section GUI_RAM };&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;GUIConf.c&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Define the available number of bytes available for the GUI&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define GUI_NUMBYTES&amp;nbsp; (1024 * 1024) * 32&amp;nbsp; // x MByte&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Define the average block size&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define GUI_BLOCKSIZE 0x80&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// 32 bit aligned memory area&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef __ICCARM__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #pragma location="GUI_RAM"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; static __no_init U32 _aMemory[GUI_NUMBYTES / 4];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef __CC_ARM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; U32 static _aMemory[GUI_NUMBYTES / 4] __attribute__ ((section ("GUI_RAM"), zero_init));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef __GNUC__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; U32 static _aMemory[GUI_NUMBYTES / 4] __attribute__ ((section(".GUI_RAM"))) = { 0 };&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef _WINDOWS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; static U32 _aMemory[GUI_NUMBYTES / 4];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GUI_X_Config&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Called during the initialization process in order to set up the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; available memory for the GUI.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void GUI_X_Config(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; // Assign memory to emWin&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; GUI_ALLOC_AssignMemory(_aMemory, GUI_NUMBYTES);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LCDConf.c&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEGGER Microcontroller GmbH &amp;amp; Co. KG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Solutions for real time microcontroller applications&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c) 1996 - 2012&amp;nbsp; SEGGER Microcontroller GmbH &amp;amp; Co. KG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Internet: &lt;A href="www.segger.com&amp;nbsp;&amp;nbsp;&amp;nbsp;" target="test_blank"&gt;www.segger.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/A&gt; Support:&amp;nbsp; &lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:support@segger.com"&gt;support@segger.com&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;** emWin V5.16 - Graphical user interface for embedded applications **&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;All&amp;nbsp; Intellectual Property rights&amp;nbsp; in the Software belongs to&amp;nbsp; SEGGER.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;emWin is protected by&amp;nbsp; international copyright laws.&amp;nbsp; Knowledge of the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;source code may not be used to write a similar product.&amp;nbsp; This file may&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;only be used in accordance with the following terms:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The software has been licensed to Energy Micro AS whose registered office&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;is situated at&amp;nbsp; Sandakerveien 118, N-0484 Oslo, NORWAY solely&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for&amp;nbsp; the&amp;nbsp; purposes&amp;nbsp; of&amp;nbsp; creating&amp;nbsp; libraries&amp;nbsp; for Energy Micros ARM Cortex-M3, M4F&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;processor-based&amp;nbsp; devices,&amp;nbsp; sublicensed&amp;nbsp; and distributed&amp;nbsp; under the terms and&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;conditions&amp;nbsp; of&amp;nbsp; the&amp;nbsp;&amp;nbsp; End&amp;nbsp; User&amp;nbsp; License Agreement supplied by Energy Micro AS.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Full source code is available at: &lt;A href="https://community.nxp.com/www.segger.com" target="test_blank"&gt;www.segger.com&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;We appreciate your understanding and fairness.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;----------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;File&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : LCDConf.c&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Purpose&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Display controller configuration (single layer)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---------------------------END-OF-HEADER------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "GUI.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include &amp;lt;string.h&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "GUIDRV_Lin.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "LPC177x_8x.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "system_LPC177x_8x.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "HWConf.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "bsp.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "lcdconf.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Layer configuration (to be modified)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Physical display size&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define XSIZE_PHYS 320&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define YSIZE_PHYS 240&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define FRAME_BUFFER_SIZE (XSIZE_PHYS * YSIZE_PHYS * 2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BITSPERPIXEL&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Color conversion&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define COLOR_CONVERSION GUICC_565&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Display driver&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define DISPLAY_DRIVER GUIDRV_LIN_16&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; USE_MULTIBUF&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #define USE_MULTIBUF&amp;nbsp; 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Buffers / VScreens&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define NUM_BUFFERS&amp;nbsp; 2 // Number of multiple buffers to be used&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&amp;nbsp; VSYNC Interrupt Register Mask&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define VCompIC_MASK (1&amp;lt;&amp;lt;3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Configuration checking&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#pragma data_alignment=8&amp;nbsp; // 8 byte align frame buffer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#pragma location="VRAM"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static __no_init U32 _aVRAM[FB_XSIZE * FB_YSIZE / (4 / PIXEL_WIDTH)];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#define VRAM_ADDR&amp;nbsp; (U32)&amp;amp;_aVRAM[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; VRAM_ADDR&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #define VRAM_ADDR 0x90000000&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; XSIZE_PHYS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #error Physical X size of display is not defined!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; YSIZE_PHYS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #error Physical Y size of display is not defined!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; COLOR_CONVERSION&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #error Color conversion not defined!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifndef&amp;nbsp;&amp;nbsp; DISPLAY_DRIVER&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; #error No display driver defined!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _SetVRAMAddr(void * pVRAM);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _SetOrg(int xPos, int yPos) ;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t VRAM_pointer = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static int orgx, orgy;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int pendingFrameIndex = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LCD_X_SHOWBUFFER_INFO * pBufferData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _InitController&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Should initialize the display controller&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _InitController(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; orgx = orgy = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetVRAMAddr((void *)(VRAM_ADDR));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetOrg(orgx, orgy);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LPC_LCD-&amp;gt;UPBASE = (uint32_t)VRAM_ADDR; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SetVRAMAddr&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Should set the frame buffer base address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _SetVRAMAddr(void * pVRAM) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_LCD-&amp;gt;UPBASE = (uint32_t)pVRAM;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SetOrg&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Should set the origin of the display typically by modifying the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; frame buffer base address register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void _SetOrg(int xPos, int yPos) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; orgx = xPos;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; orgy = yPos;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //LPC_LCD-&amp;gt;UPBASE = (uint32_t)(VRAM_ADDR);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_LCD-&amp;gt;UPBASE = (uint32_t)(VRAM_ADDR + (y * YSIZE_PHYS * PIXEL_WIDTH));&amp;nbsp; // Needs to be set, before LCDC is enabled&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Initialize LCD in Direct mode and touch panel */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void LCD_InitializeLCD(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{ &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetVRAMAddr((void *)(VRAM_ADDR));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetOrg(orgx, orgy);&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_InitializeDriver&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Set Vram address and org&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void LCD_InitializeDriver(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{ &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetVRAMAddr((void *)(VRAM_ADDR));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; _SetOrg(orgx, orgy);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_IRQHandler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; VSYNC Interrupt Service Routine&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void LCD_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; uint32_t flags;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; uint32_t Addr, BufferSize;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; flags = LPC_LCD-&amp;gt;INTSTAT;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LPC_LCD-&amp;gt;INTCLR |= VCompIC_MASK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; if ( flags &amp;amp; VCompIC_MASK ) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pendingFrameIndex &amp;gt;= 0) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Calculate address of the given buffer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferSize = (XSIZE_PHYS * YSIZE_PHYS * BITSPERPIXEL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr = VRAM_ADDR + BufferSize * pBufferData-&amp;gt;Index;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Make the given buffer visible&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_LCD-&amp;gt;UPBASE = Addr;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send a confirmation that the buffer is visible now&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GUI_MULTIBUF_Confirm(pendingFrameIndex);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pendingFrameIndex = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableVsyncInterrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Setup VSYNC Interrupt &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void EnableVsyncInterrupt(void) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; /* Clear interrupts */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LPC_LCD-&amp;gt;INTCLR |= VCompIC_MASK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; /* Enable VSYNC interrupt */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LPC_LCD-&amp;gt;INTMSK = VCompIC_MASK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; /* Enable EBI interrupts in core */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; NVIC_ClearPendingIRQ(LCD_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; NVIC_EnableIRQ(LCD_IRQn);&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_X_Config&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Called during the initialization process in order to set up the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; display driver configuration.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void LCD_X_Config(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#if MULTIBUFF&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; GUI_MULTIBUF_Config(NUM_BUFFERS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; // Set display driver and color conversion for 1st layer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; // Display driver configuration, required for Lin-driver&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; if (LCD_GetSwapXY()) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //LCD_SetVSizeEx(0, YSIZE_PHYS, XSIZE_PHYS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_X_DisplayDriver&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Purpose:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; This function is called by the display driver for several purposes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; To support the according task the routine needs to be adapted to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; the display controller. Please note that the commands marked with&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; 'optional' are not cogently required and should only be adapted if&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; the display controller supports these features.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Parameter:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; LayerIndex - Index of layer to be configured&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; Cmd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Please refer to the details in the switch statement below&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; pData&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Pointer to a LCD_X_DATA structure&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;* Return Value:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp; &amp;lt; -1 - Error&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1 - Command not handled&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 - Ok&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; int r;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; (void)LayerIndex;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Unused parameter */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; switch (Cmd) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; // Required&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_INITCONTROLLER: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Called during the initialization process in order to set up the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // display controller and put it into operation. If the display&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // controller is not initialized by any external routine this needs&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to be adapted by the customer...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _InitController();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableVsyncInterrupt();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_SETVRAMADDR: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Required for setting the address of the video RAM for drivers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // with memory mapped video RAM which is passed in the 'pVRAM' element of p&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_X_SETVRAMADDR_INFO * p;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = (LCD_X_SETVRAMADDR_INFO *)pData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SetVRAMAddr(p-&amp;gt;pVRAM);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_SETORG: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Required for setting the display origin which is passed in the 'xPos' and 'yPos' element of p&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LCD_X_SETORG_INFO * p;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = (LCD_X_SETORG_INFO *)pData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SetOrg(p-&amp;gt;xPos, p-&amp;gt;yPos);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_ON: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Required if the display controller should support switching on and off&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_OFF: {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Required if the display controller should support switching on and off&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; case LCD_X_SHOWBUFFER: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBufferData = (LCD_X_SHOWBUFFER_INFO *)pData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Remember buffer index to be used by ISR&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pendingFrameIndex = pBufferData-&amp;gt;Index;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; default:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; return r;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************** End of file ****************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;RMoss&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:38:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-emWin-Crash-in-GUI-Init/m-p/519587#M3241</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:38:59Z</dc:date>
    </item>
  </channel>
</rss>

