summaryrefslogtreecommitdiff
path: root/boards/dk-tm4c129x/grlib_driver_test
diff options
context:
space:
mode:
authorYuval Adam <yuv.adm@gmail.com>2014-06-29 12:34:32 +0300
committerYuval Adam <yuv.adm@gmail.com>2014-06-29 12:34:32 +0300
commitc3e4c9a25c2910d2d66d52215b3406b13d5b23d5 (patch)
treeadded370d1e356901f8579f076e3263fb0464db7 /boards/dk-tm4c129x/grlib_driver_test
parent990090a4cc9070837d31e66b58d40f0c3d038741 (diff)
Add more board models
Diffstat (limited to 'boards/dk-tm4c129x/grlib_driver_test')
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/Makefile93
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsimportspec11
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsproject10
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject191
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/.project80
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/.settings/org.eclipse.cdt.codan.core.prefs3
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.binbin0 -> 35328 bytes
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.outbin0 -> 324736 bytes
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/macros.ini_initial1
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ccs/target_config.ccxml13
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/driver_config.h137
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.binbin0 -> 33060 bytes
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.outbin0 -> 329664 bytes
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.axfbin0 -> 107901 bytes
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.binbin0 -> 34084 bytes
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c2544
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewd614
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewp807
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.icf78
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ld57
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.sct47
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvopt387
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvproj459
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd70
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/images.c551
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/images.h41
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/readme.txt117
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.axfbin0 -> 243204 bytes
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.binbin0 -> 33644 bytes
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c275
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/startup_ewarm.c306
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c322
-rw-r--r--boards/dk-tm4c129x/grlib_driver_test/startup_rvmdk.S331
33 files changed, 7545 insertions, 0 deletions
diff --git a/boards/dk-tm4c129x/grlib_driver_test/Makefile b/boards/dk-tm4c129x/grlib_driver_test/Makefile
new file mode 100644
index 0000000..183be2a
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/Makefile
@@ -0,0 +1,93 @@
+#******************************************************************************
+#
+# Makefile - Rules for building the A command-line driven testcase to aid development of GrLib display drivers.
+#
+# Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+# Software License Agreement
+#
+# Texas Instruments (TI) is supplying this software for use solely and
+# exclusively on TI's microcontroller products. The software is owned by
+# TI and/or its suppliers, and is protected under applicable copyright
+# laws. You may not combine this software with "viral" open-source
+# software in order to form a larger program.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+# NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+# NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+# CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+# DAMAGES, FOR ANY REASON WHATSOEVER.
+#
+# This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+#
+#******************************************************************************
+
+#
+# Defines the part type that this project uses.
+#
+PART=TM4C129XNCZAD
+
+#
+# The base directory for TivaWare.
+#
+ROOT=../../../..
+
+#
+# Include the common make definitions.
+#
+include ${ROOT}/makedefs
+
+#
+# Where to find source files that do not live in this directory.
+#
+VPATH=../drivers
+VPATH+=../../../../utils
+
+#
+# Where to find header files that do not live in the source directory.
+#
+IPATH=..
+IPATH+=../../../..
+
+#
+# The default rule, which causes the A command-line driven testcase to aid development of GrLib display drivers to be built.
+#
+all: ${COMPILER}
+all: ${COMPILER}/grlib_driver_test.axf
+
+#
+# The rule to clean out all the build products.
+#
+clean:
+ @rm -rf ${COMPILER} ${wildcard *~}
+
+#
+# The rule to create the target directory.
+#
+${COMPILER}:
+ @mkdir -p ${COMPILER}
+
+#
+# Rules for building the A command-line driven testcase to aid development of GrLib display drivers.
+#
+${COMPILER}/grlib_driver_test.axf: ${COMPILER}/cmdline.o
+${COMPILER}/grlib_driver_test.axf: ${COMPILER}/grlib_driver_test.o
+${COMPILER}/grlib_driver_test.axf: ${COMPILER}/images.o
+${COMPILER}/grlib_driver_test.axf: ${COMPILER}/kentec320x240x16_ssd2119.o
+${COMPILER}/grlib_driver_test.axf: ${COMPILER}/pinout.o
+${COMPILER}/grlib_driver_test.axf: ${COMPILER}/startup_${COMPILER}.o
+${COMPILER}/grlib_driver_test.axf: ${COMPILER}/uartstdio.o
+${COMPILER}/grlib_driver_test.axf: ${COMPILER}/ustdlib.o
+${COMPILER}/grlib_driver_test.axf: ${ROOT}/grlib/${COMPILER}/libgr.a
+${COMPILER}/grlib_driver_test.axf: ${ROOT}/driverlib/${COMPILER}/libdriver.a
+${COMPILER}/grlib_driver_test.axf: grlib_driver_test.ld
+SCATTERgcc_grlib_driver_test=grlib_driver_test.ld
+ENTRY_grlib_driver_test=ResetISR
+CFLAGSgcc=-DTARGET_IS_TM4C129_RA0
+
+#
+# Include the automatically generated dependency files.
+#
+ifneq (${MAKECMDGOALS},clean)
+-include ${wildcard ${COMPILER}/*.d} __dummy__
+endif
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsimportspec b/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsimportspec
new file mode 100644
index 0000000..01de889
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsimportspec
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<importSpec>
+ <source root="..">
+ <file name="driver_config.h"/>
+ <file name="grlib_driver_test.c"/>
+ <file name="images.c"/>
+ <file name="images.h"/>
+ <file regex=".*_ccs\.cmd"/>
+ <file name="startup_ccs.c"/>
+ </source>
+</importSpec>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsproject b/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsproject
new file mode 100644
index 0000000..59a3400
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.ccsproject
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<?ccsproject version="1.0"?>
+<projectOptions>
+ <deviceVariant value="Cortex M.TM4C129XNCZAD"/>
+ <deviceFamily value="TMS470"/>
+ <deviceEndianness value="little"/>
+ <codegenToolVersion value="5.0.4"/>
+ <isElfFormat value="true"/>
+ <rts value="libc.a"/>
+</projectOptions>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject b/boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject
new file mode 100644
index 0000000..a50ef9c
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.cproject
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule configRelations="2" moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.2125264381">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.2125264381" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <macros>
+ <stringMacro name="SW_ROOT" type="VALUE_PATH_DIR" value="${PROJECT_ROOT}/../../../../.."/>
+ </macros>
+ <externalSettings/>
+ <extensions>
+ <extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.2125264381" name="Debug" parent="com.ti.ccstudio.buildDefinitions.TMS470.Debug" postbuildStep="&quot;${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin&quot; &quot;${BuildArtifactFileName}&quot; &quot;${BuildArtifactFileBaseName}.bin&quot; &quot;${CG_TOOL_ROOT}/bin/armofd&quot; &quot;${CG_TOOL_ROOT}/bin/armhex&quot; &quot;${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin&quot;">
+ <folderInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.2125264381." name="/" resourcePath="">
+ <toolChain id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.DebugToolchain.1208874578" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.linkerDebug.396685654">
+ <option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.1544654882" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
+ <listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex M.TM4C129XNCZAD"/>
+ <listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
+ <listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
+ <listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.1.0.01"/>
+ <listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=libc.a"/>
+ <listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.433499335" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="5.0.4" valueType="string"/>
+ <targetPlatform id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.targetPlatformDebug.116381163" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.targetPlatformDebug"/>
+ <builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.builderDebug.971745204" name="GNU Make.Debug" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.builderDebug"/>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.compilerDebug.72967276" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.compilerDebug">
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.SILICON_VERSION.1704165197" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.SILICON_VERSION.7M4" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.CODE_STATE.559483739" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.CODE_STATE" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.CODE_STATE.16" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.ABI.675845680" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.ABI.eabi" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.FLOAT_SUPPORT.1257733049" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.FLOAT_SUPPORT.FPv4SPD16" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DEBUGGING_MODEL.290234775" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DEBUGGING_MODEL" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DEBUGGING_MODEL.SYMDEBUG__DWARF" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WARNING.682328687" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WARNING" valueType="stringList">
+ <listOptionValue builtIn="false" value="225"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DISPLAY_ERROR_NUMBER.777910175" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WRAP.1192995105" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WRAP.off" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.INCLUDE_PATH.1360158073" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.INCLUDE_PATH" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SW_ROOT}/examples/boards/dk-tm4c129x&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SW_ROOT}&quot;"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.LITTLE_ENDIAN.1526754072" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.LITTLE_ENDIAN" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GEN_FUNC_SUBSECTIONS.25976025" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GEN_FUNC_SUBSECTIONS" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GEN_FUNC_SUBSECTIONS.on" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.OPT_LEVEL.977069899" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.OPT_LEVEL.2" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GCC.460865816" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GCC" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.UAL.1280515822" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.UAL" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DEFINE.1911577823" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DEFINE" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="ccs=&quot;ccs&quot;"/>
+ <listOptionValue builtIn="false" value="PART_TM4C129XNCZAD"/>
+ <listOptionValue builtIn="false" value="TARGET_IS_TM4C129_RA0"/>
+ </option>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__C_SRCS.383781932" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__C_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__CPP_SRCS.710299135" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__CPP_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__ASM_SRCS.1764131200" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__ASM_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__ASM2_SRCS.265529732" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__ASM2_SRCS"/>
+ </tool>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.linkerDebug.396685654" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.linkerDebug">
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.MAP_FILE.1701895549" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.MAP_FILE" value="&quot;grlib_driver_test_ccs.map&quot;" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.STACK_SIZE.1884630561" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.STACK_SIZE" value="1024" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.HEAP_SIZE.980232122" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.HEAP_SIZE" value="0" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.OUTPUT_FILE.1443333363" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.OUTPUT_FILE" value="&quot;${ProjName}.out&quot;" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.XML_LINK_INFO.2110704731" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.XML_LINK_INFO" value="&quot;${ProjName}_linkInfo.xml&quot;" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DISPLAY_ERROR_NUMBER.1970435406" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DIAG_WRAP.569974170" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DIAG_WRAP.off" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.SEARCH_PATH.1024497569" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.SEARCH_PATH" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/lib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/include&quot;"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.LIBRARY.2069838960" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.LIBRARY" valueType="libs">
+ <listOptionValue builtIn="false" value="&quot;libc.a&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SW_ROOT}/driverlib/ccs/Debug/driverlib.lib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SW_ROOT}/grlib/ccs/Debug/grlib.lib&quot;"/>
+ </option>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__CMD_SRCS.743451035" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__CMD_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__CMD2_SRCS.636711197" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__CMD2_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__GEN_CMDS.775738710" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__GEN_CMDS"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="com.ti.ccstudio.buildDefinitions.TMS470.Release.1905237520">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.TMS470.Release.1905237520" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <macros>
+ <stringMacro name="SW_ROOT" type="VALUE_PATH_DIR" value="${PROJECT_ROOT}/../../../../.."/>
+ </macros>
+ <externalSettings/>
+ <extensions>
+ <extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" id="com.ti.ccstudio.buildDefinitions.TMS470.Release.1905237520" name="Release" parent="com.ti.ccstudio.buildDefinitions.TMS470.Release" postbuildStep="&quot;${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin&quot; &quot;${BuildArtifactFileName}&quot; &quot;${BuildArtifactFileBaseName}.bin&quot; &quot;${CG_TOOL_ROOT}/bin/armofd&quot; &quot;${CG_TOOL_ROOT}/bin/armhex&quot; &quot;${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin&quot;">
+ <folderInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.1905237520." name="/" resourcePath="">
+ <toolChain id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.ReleaseToolchain.1009168566" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.ReleaseToolchain" targetTool="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.linkerRelease.1247306337">
+ <option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.571143893" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
+ <listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex M.TM4C129XNCZAD"/>
+ <listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
+ <listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
+ <listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.1.0.01"/>
+ <listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=libc.a"/>
+ <listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.711705635" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="5.0.4" valueType="string"/>
+ <targetPlatform id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.targetPlatformRelease.1792451123" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.targetPlatformRelease"/>
+ <builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.builderRelease.258967667" name="GNU Make.Release" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.builderRelease"/>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.compilerRelease.783099138" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.compilerRelease">
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.SILICON_VERSION.1842589120" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.SILICON_VERSION.7M4" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.CODE_STATE.1027805203" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.CODE_STATE" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.CODE_STATE.16" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.ABI.1817259499" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.ABI.eabi" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.FLOAT_SUPPORT.1543037797" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.FLOAT_SUPPORT.FPv4SPD16" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WARNING.1724996501" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WARNING" valueType="stringList">
+ <listOptionValue builtIn="false" value="225"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DISPLAY_ERROR_NUMBER.805689700" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WRAP.308888261" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DIAG_WRAP.off" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.INCLUDE_PATH.177552172" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.INCLUDE_PATH" valueType="includePath">
+ <listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/include&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SW_ROOT}/examples/boards/dk-tm4c129x&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SW_ROOT}&quot;"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.LITTLE_ENDIAN.421087343" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.LITTLE_ENDIAN" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GEN_FUNC_SUBSECTIONS.1853998851" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GEN_FUNC_SUBSECTIONS" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GEN_FUNC_SUBSECTIONS.on" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GCC.2093413988" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.GCC" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.UAL.1539526483" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.UAL" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DEFINE.1682431253" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compilerID.DEFINE" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="ccs=&quot;ccs&quot;"/>
+ <listOptionValue builtIn="false" value="PART_TM4C129XNCZAD"/>
+ <listOptionValue builtIn="false" value="TARGET_IS_TM4C129_RA0"/>
+ </option>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__C_SRCS.1771160367" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__C_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__CPP_SRCS.387219491" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__CPP_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__ASM_SRCS.769232498" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__ASM_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__ASM2_SRCS.1777533377" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.compiler.inputType__ASM2_SRCS"/>
+ </tool>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.linkerRelease.1247306337" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exe.linkerRelease">
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.MAP_FILE.2113319740" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.MAP_FILE" value="&quot;grlib_driver_test_ccs.map&quot;" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.STACK_SIZE.1859450107" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.STACK_SIZE" value="1024" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.HEAP_SIZE.1042701933" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.HEAP_SIZE" value="0" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.OUTPUT_FILE.195308960" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.OUTPUT_FILE" value="&quot;${ProjName}.out&quot;" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.XML_LINK_INFO.1857266466" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.XML_LINK_INFO" value="&quot;${ProjName}_linkInfo.xml&quot;" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DISPLAY_ERROR_NUMBER.1153070098" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DIAG_WRAP.1863340425" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.DIAG_WRAP.off" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.SEARCH_PATH.1610139205" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.SEARCH_PATH" valueType="libPaths">
+ <listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/lib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/include&quot;"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.LIBRARY.1351085960" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.linkerID.LIBRARY" valueType="libs">
+ <listOptionValue builtIn="false" value="&quot;libc.a&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SW_ROOT}/driverlib/ccs/Debug/driverlib.lib&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${SW_ROOT}/grlib/ccs/Debug/grlib.lib&quot;"/>
+ </option>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__CMD_SRCS.184194625" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__CMD_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__CMD2_SRCS.947879778" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__CMD2_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__GEN_CMDS.287081757" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_5.0.exeLinker.inputType__GEN_CMDS"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="grlib_driver_test.com.ti.ccstudio.buildDefinitions.TMS470.ProjectType.950033072" name="ARM" projectType="com.ti.ccstudio.buildDefinitions.TMS470.ProjectType"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration"/>
+ <storageModule moduleId="org.eclipse.cdt.core.language.mapping">
+ <project-mappings>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.asmSource" language="com.ti.ccstudio.core.TIASMLanguage"/>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cHeader" language="com.ti.ccstudio.core.TIGCCLanguage"/>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cSource" language="com.ti.ccstudio.core.TIGCCLanguage"/>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxHeader" language="com.ti.ccstudio.core.TIGPPLanguage"/>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxSource" language="com.ti.ccstudio.core.TIGPPLanguage"/>
+ </project-mappings>
+ </storageModule>
+</cproject>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.project b/boards/dk-tm4c129x/grlib_driver_test/ccs/.project
new file mode 100644
index 0000000..2d8a647
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.project
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>grlib_driver_test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.ti.ccstudio.core.ccsNature</nature>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>grlib_driver_test.c</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/examples/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c</locationURI>
+ </link>
+ <link>
+ <name>grlib_driver_test_ccs.cmd</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/examples/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd</locationURI>
+ </link>
+ <link>
+ <name>images.c</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/examples/boards/dk-tm4c129x/grlib_driver_test/images.c</locationURI>
+ </link>
+ <link>
+ <name>startup_ccs.c</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/examples/boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c</locationURI>
+ </link>
+ <link>
+ <name>drivers/kentec320x240x16_ssd2119.c</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/examples/boards/dk-tm4c129x/drivers/kentec320x240x16_ssd2119.c</locationURI>
+ </link>
+ <link>
+ <name>drivers/pinout.c</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/examples/boards/dk-tm4c129x/drivers/pinout.c</locationURI>
+ </link>
+ <link>
+ <name>utils/cmdline.c</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/utils/cmdline.c</locationURI>
+ </link>
+ <link>
+ <name>utils/uartstdio.c</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/utils/uartstdio.c</locationURI>
+ </link>
+ <link>
+ <name>utils/ustdlib.c</name>
+ <type>1</type>
+ <locationURI>SW_ROOT/utils/ustdlib.c</locationURI>
+ </link>
+ </linkedResources>
+ <variableList>
+ <variable>
+ <name>SW_ROOT</name>
+ <value>$%7BPARENT-5-PROJECT_LOC%7D</value>
+ </variable>
+ </variableList>
+</projectDescription>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/.settings/org.eclipse.cdt.codan.core.prefs b/boards/dk-tm4c129x/grlib_driver_test/ccs/.settings/org.eclipse.cdt.codan.core.prefs
new file mode 100644
index 0000000..98b6350
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/.settings/org.eclipse.cdt.codan.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+inEditor=false
+onBuild=false
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.bin b/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.bin
new file mode 100644
index 0000000..e8beac8
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.bin
Binary files differ
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.out b/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.out
new file mode 100644
index 0000000..93d8cb5
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/Debug/grlib_driver_test.out
Binary files differ
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/macros.ini_initial b/boards/dk-tm4c129x/grlib_driver_test/ccs/macros.ini_initial
new file mode 100644
index 0000000..31214b5
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/macros.ini_initial
@@ -0,0 +1 @@
+SW_ROOT = ../../../../..
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ccs/target_config.ccxml b/boards/dk-tm4c129x/grlib_driver_test/ccs/target_config.ccxml
new file mode 100644
index 0000000..6e5ef45
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ccs/target_config.ccxml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<configurations XML_version="1.2" id="configurations_0">
+ <configuration XML_version="1.2" id="Stellaris In-Circuit Debug Interface_0">
+ <instance XML_version="1.2" desc="Stellaris In-Circuit Debug Interface_0" href="connections/Stellaris_ICDI_Connection.xml" id="Stellaris In-Circuit Debug Interface_0" xml="Stellaris_ICDI_Connection.xml" xmlpath="connections"/>
+ <connection XML_version="1.2" id="Stellaris In-Circuit Debug Interface_0">
+ <instance XML_version="1.2" href="drivers/stellaris_cs_dap.xml" id="drivers" xml="stellaris_cs_dap.xml" xmlpath="drivers"/>
+ <instance XML_version="1.2" href="drivers/stellaris_cortex_m4.xml" id="drivers" xml="stellaris_cortex_m4.xml" xmlpath="drivers"/>
+ <platform XML_version="1.2" id="platform_0">
+ <instance XML_version="1.2" desc="Stellaris TM4C129XNCZAD_0" href="devices/tm4c129xnczad.xml" id="Stellaris TM4C129XNCZAD_0" xml="tm4c129xnczad.xml" xmlpath="devices"/>
+ </platform>
+ </connection>
+ </configuration>
+</configurations>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/driver_config.h b/boards/dk-tm4c129x/grlib_driver_test/driver_config.h
new file mode 100644
index 0000000..10c8ced
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/driver_config.h
@@ -0,0 +1,137 @@
+//*****************************************************************************
+//
+// driver_config.h - Modify this header file to tailor grlib_driver_test for
+// operation with your board and graphics display driver.
+//
+// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+//
+//*****************************************************************************
+
+#ifndef __DRIVER_CONFIG_H__
+#define __DRIVER_CONFIG_H__
+
+//*****************************************************************************
+//
+// TODO: Include the header file for your display driver here. The default
+// driver is for the QVGA display on the DK-TM4C129X board. If your
+// driver is dependent upon any other headers, include them here too.
+// This may be the case if, for example, you are using a raster mode
+// display and you have a header containing the timing parameters for
+// the screen.
+//
+//*****************************************************************************
+#include "drivers/kentec320x240x16_ssd2119.h"
+
+//*****************************************************************************
+//
+// These two headers are required by the default implementation and can likely
+// be removed or reworked when you update the application to run on a custom
+// board.
+//
+//*****************************************************************************
+#include "drivers/frame.h"
+#include "drivers/pinout.h"
+
+//*****************************************************************************
+//
+// TODO: Set DRIVER_NAME to the name of the tDisplay structure exported by
+// your display driver.
+//
+//*****************************************************************************
+#define DRIVER_NAME g_sKentec320x240x16_SSD2119
+
+//*****************************************************************************
+//
+// TODO: Set DRIVER_SYS_CLOCK_CONFIG to the value you require for your system.
+// This is the first parameter that is passed to the SysCtlClockFreqSet
+// function.
+//
+//*****************************************************************************
+#define DRIVER_SYS_CLOCK_CONFIG (SYSCTL_XTAL_25MHZ | \
+ SYSCTL_OSC_MAIN | \
+ SYSCTL_USE_PLL | \
+ SYSCTL_CFG_VCO_480)
+
+//*****************************************************************************
+//
+// TODO: Set DRIVER_SYS_CLOCK_FREQUENCY to the value you require for your
+// system. This is the second parameter that is passed to the
+// SysCtlClockFreqSet function and represents the desired system clock
+// frequency.
+//
+//*****************************************************************************
+#define DRIVER_SYS_CLOCK_FREQUENCY 120000000
+
+//*****************************************************************************
+//
+// TODO: Define the color depth of the display driver's frame buffer. If this
+// value is 16 or greater, any operations involving the driver color
+// palette will be compiled out of the test. If it is 8 or lower, make
+// sure you also define the macro DRIVER_PALETTE_SET to allow the
+// application to set colors in the driver's color lookup table.
+//
+//*****************************************************************************
+#define DRIVER_BPP 16
+
+#if (DRIVER_BPP < 16)
+//*****************************************************************************
+//
+// TODO: This macro must be defined if your display driver uses a palettized
+// pixel format and a global color lookup table. Parameter pui32Color
+// points to an array of 32-bit values each containing and RGB888 color
+// definition. ui32Index is the starting palette index in the driver's
+// color table that will be changed and ui32NumEntries indicates both the
+// number of colors in the array pointed to by pui32Color and the number
+// of driver color palette locations that are to be written.
+//
+//*****************************************************************************
+#define DRIVER_PALETTE_SET(pui32Color, ui32Index, ui32NumEntries) \
+ YourDriverPaletteSet((pui32Color), (ui32Index), (ui32NumEntries));
+
+#endif
+
+//*****************************************************************************
+//
+// TODO: This macro must be defined to perform all necessary hardware and
+// software initialization for your display driver. This will typically
+// involve configuring the LCD controller into the relevant mode for
+// the driver, setting peripheral pin muxing, configuring the EPI and
+// SDRAM if your driver uses raster mode and requires a frame buffer in
+// EPI-connected memory and setting a default color palette if needed.
+//
+// The ui32SysClock parameter provides the configured system clock rate
+// in Hz.
+//
+//*****************************************************************************
+#define DRIVER_INIT(ui32SysClock) \
+{ \
+ PinoutSet(); \
+ Kentec320x240x16_SSD2119Init(ui32SysClock); \
+}
+
+//*****************************************************************************
+//
+// We allow the testcase to be built such that it issues no drawing orders
+// other than those requested via the command line. This can be helpful
+// when bringing up a new display driver.
+//
+//*****************************************************************************
+//#define NO_GRLIB_CALLS_ON_STARTUP
+
+#endif
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.bin b/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.bin
new file mode 100644
index 0000000..8b41d40
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.bin
Binary files differ
diff --git a/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.out b/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.out
new file mode 100644
index 0000000..9fb846a
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/ewarm/Exe/grlib_driver_test.out
Binary files differ
diff --git a/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.axf b/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.axf
new file mode 100644
index 0000000..e218a2f
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.axf
Binary files differ
diff --git a/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.bin b/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.bin
new file mode 100644
index 0000000..239522e
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/gcc/grlib_driver_test.bin
Binary files differ
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c
new file mode 100644
index 0000000..c6ceafe
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.c
@@ -0,0 +1,2544 @@
+//*****************************************************************************
+//
+// grlib_driver_test.c - A test tool intended to aid developers of drivers
+// for the TivaWare Graphics Library
+//
+// Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+//
+//*****************************************************************************
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "inc/hw_sysctl.h"
+#include "inc/hw_types.h"
+#include "inc/hw_memmap.h"
+#include "inc/hw_gpio.h"
+#include "inc/hw_ints.h"
+#include "inc/hw_lcd.h"
+#include "driverlib/sysctl.h"
+#include "driverlib/gpio.h"
+#include "driverlib/lcd.h"
+#include "driverlib/interrupt.h"
+#include "driverlib/systick.h"
+#include "driverlib/rom.h"
+#include "driverlib/rom_map.h"
+#include "grlib/grlib.h"
+#include "utils/cmdline.h"
+#include "utils/uartstdio.h"
+#include "utils/ustdlib.h"
+#include "images.h"
+#include "driver_config.h"
+
+//*****************************************************************************
+//
+//! \addtogroup example_list
+//! <h1>Graphics Driver Test Tool (grlib_driver_test)</h1>
+//!
+//! This application provides a simple, command-line tool to aid in
+//! debugging TivaWare Graphics Library display drivers. As shipped in
+//! TivaWare, it is configured to operate with a DK-TM4C129X board using its
+//! QVGA display. The code is written, however, to allow easy retargeting to
+//! other boards and display drivers via modifications to the driver_config.h
+//! header file.
+//!
+//! The tool is driven via a command line interface provided on UART0. Use a
+//! terminal emulator on your host system and set the serial port to use
+//! 115200bps, 8-N-1. To see a list of supported commands, enter ``help'' on
+//! the command line and to see extended help on a specific command enter
+//! ``help [command]''.
+//!
+//! The commands in the tool fall broadly into three categories:
+//!
+//! - commands allowing a given low level graphics function to be executed with
+//! parameters provided by the user,
+//! - commands providing the ability to read and write arbitrary memory
+//! locations and registers, and
+//! - tests displaying test patterns intended to exercise specific display
+//! driver functions.
+//!
+//! The first group of commands includes ``r'' to read a word from a memory
+//! location or register, ``w'' to write a word to a memory location or
+//! register, ``dump'' to dump a range of memory as words and ``db'' to dump
+//! a range of memory as bytes. Note that no checking is performed to ensure
+//! that addresses passed to these functions are valid. If an invalid address
+//! is passed, the test tool will fault.
+//!
+//! The second group of commands contains ``fill'' which fills the screen with
+//! a given color, ``rect'' which draws a rectangle outline at a given position
+//! on the display, ''hline`` which draws a horizontal line, ``vline'' which
+//! draws a vertical line, ``image'' which draws an image at provided
+//! coordinates, and ``text'' which renders a given text string. The output of
+//! these commands is also modified via several other commands. ``fg'' selects
+//! the foreground color to be used by the drawing commands and ``bg'' selects
+//! the background color. ``setimg'' selects from one of four different test
+//! images that are drawn in response to the ``image'' command and ``clipimg''
+//! allows image clipping to be adjusted to test handling of the \e i32X0
+//! parameter to the driver's PixelDrawMultiple function.
+//!
+//! Additional graphics commands are ``pat'' which redraws the test pattern
+//! displayed when the tool starts, ``colbar'' which fills the display with
+//! a set of color bars and ``perf'' which draws randomly positioned and
+//! colored rectangles for a given number of seconds and determines the drawing
+//! speed in pixels-per-second.
+//!
+//! All driver function test patterns are generated using the ``test'' command
+//! whose first parameter indicates the test to display. Tests are as follow:
+//!
+//! - ``color'' tests the driver's color handling. The test starts by
+//! splitting the screen into two and showing a different primary or
+//! secondary color in each half. Verify that the correct colors are
+//! displayed. After this, red, blue and green color gradients are
+//! displayed. Again, verify that these are correct and that no color other
+//! than the shades of the specific primary are displayed. If any color is
+//! incorrect, this likely indicates an error in the driver's
+//! pfnColorTranslate function or the function used to set the display
+//! palette if the driver provides this feature.
+//!
+//! - ``pixel'' tests basic pixel plotting. A test pattern is drawn with a
+//! single white pixel in each corner of the display, a small cross
+//! comprising 5 white pixels in the center, and small arrows near each
+//! corner. If any of the corner dots are missing or any of the other
+//! pattern elements are incorrect, this points to a problem in the
+//! driver's pfnPixelDraw function or, more generally, a problem with the
+//! display coordinate space handling.
+//!
+//! - ``hline'' tests horizontal line drawing. White horizontal lines are
+//! drawn at the top and bottom and a right-angled triangle is constructed in
+//! the center of the display. If any line is missing or the triangle is
+//! incorrect, this points to a problem in the driver's pfnLineDrawH
+//! function.
+//!
+//! - ``vline'' tests vertical line drawing. White vertical lines are drawn
+//! at the left and right and a right-angled triangle is constructed in
+//! the center of the display. If any line is missing or the triangle is
+//! incorrect, this points to a problem in the driver's pfnLineDrawV
+//! function.
+//!
+//! - ``mult'' tests the driver's pfnPixelDrawMultiple function. This is the
+//! most complex driver function and the one most prone to errors. The tool
+//! fills the display with each of the included test images in turn. These
+//! cover all the pixel formats (1-, 4- and 8-bpp) that the driver is
+//! required to handle and the image clipping and x positions are set to
+//! ensure that all alignment cases are handled for each format. In each
+//! case, the image is drawn inside a single pixel red rectangle. If the
+//! driver is handling each case correctly, the image should look correct
+//! and no part of the red rectangle should be overwritten when the image
+//! is drawn. In the displayed grid of images, the x alignment increases
+//! from 1 to 8 across the display and each line increases the left-side
+//! image clipping by one pixel from 0 in the top row to 7 in the bottom
+//! row. An error in any image indicates that one of the cases handled by
+//! the driver's pfnPixelDrawMultiple function is not handled correctly.
+//!
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// The number of SysTick interrupts to generate per second.
+//
+//*****************************************************************************
+#define SYSTICKS_PER_SECOND 10
+
+//*****************************************************************************
+//
+// Global system tick count.
+//
+//*****************************************************************************
+volatile uint32_t g_ui32SysTickCount;
+
+//*****************************************************************************
+//
+// System clock rate in Hertz.
+//
+//*****************************************************************************
+volatile uint32_t g_ui32SysClk;
+
+//*****************************************************************************
+//
+// Default colors.
+//
+//*****************************************************************************
+uint32_t g_ui32Foreground = ClrWhite;
+uint32_t g_ui32Background = ClrBlack;
+
+//*****************************************************************************
+//
+// Definitions related to the color bar pattern.
+//
+//*****************************************************************************
+const uint32_t g_pui32BarColors[] =
+{
+ ClrBlack,
+ ClrWhite,
+ ClrYellow,
+ ClrCyan,
+ ClrGreen,
+ ClrMagenta,
+ ClrRed,
+ ClrBlue
+};
+
+#define NUM_COLOR_BARS (sizeof(g_pui32BarColors) / sizeof(uint32_t))
+
+//*****************************************************************************
+//
+// Names for each of the colors in the g_pui32BarColors array. These two
+// arrays must be kept in sync!
+//
+//*****************************************************************************
+const char *g_ppcBarColors[] =
+{
+ "Black", "White", "Yellow", "Cyan", "Green", "Magenta", "Red", "Blue"
+};
+
+#if (DRIVER_BPP < 16)
+//*****************************************************************************
+//
+// Set aside space for a color palette if the driver being tested uses a
+// palettized pixel format.
+//
+//*****************************************************************************
+uint32_t g_pui32Palette[1 << DRIVER_BPP];
+#endif
+
+//*****************************************************************************
+//
+// The number of pixels to clip off the left edge of an image drawn using the
+// "image" command.
+//
+//*****************************************************************************
+uint32_t g_ui32Clip = 0;
+
+//*****************************************************************************
+//
+// Graphics context used to show text on the QVGA display.
+//
+//*****************************************************************************
+tContext g_sContext;
+
+//*****************************************************************************
+//
+// Defines the size of the buffer that holds the command line.
+//
+//*****************************************************************************
+#define CMD_BUF_SIZE 64
+
+//*****************************************************************************
+//
+// Simple macros to return the maximum or minimum of two values.
+//
+//*****************************************************************************
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
+//*****************************************************************************
+//
+// The buffer that holds the command line.
+//
+//*****************************************************************************
+static char g_cCmdBuf[CMD_BUF_SIZE];
+
+typedef struct
+{
+ char *pcDesc;
+ const unsigned char *pucImage;
+}
+tTestImage;
+
+tTestImage g_pImages[] =
+{
+ {"TI Logo, 4bpp", g_pucLogo},
+ {"32x32 test image, 1bpp", g_pucTest32x32x1Comp},
+ {"32x32 test image, 4bpp", g_pucTest32x32x4Comp},
+ {"32x32 test image, 8bpp", g_pucTest32x32x8Comp}
+};
+
+#define NUM_IMAGES (sizeof(g_pImages) / sizeof (tTestImage))
+
+//*****************************************************************************
+//
+// The size of the arrows drawn in the PixelDraw test.
+//
+//*****************************************************************************
+#define ARROW_SIZE 10
+
+//*****************************************************************************
+//
+// A pointer to the currently selected image
+//
+//*****************************************************************************
+const unsigned char *g_pucCurrentImage = g_pucLogo;
+
+//*****************************************************************************
+//
+// Command handler function prototypes.
+//
+//*****************************************************************************
+int Cmd_Help(int argc, char *argv[]);
+int Cmd_Foreground(int argc, char *argv[]);
+int Cmd_Background(int argc, char *argv[]);
+int Cmd_Fill(int argc, char *argv[]);
+int Cmd_Rect(int argc, char *argv[]);
+int Cmd_HLine(int argc, char *argv[]);
+int Cmd_VLine(int argc, char *argv[]);
+int Cmd_SetImage(int argc, char *argv[]);
+int Cmd_Image(int argc, char *argv[]);
+int Cmd_ClipImage(int argc, char *argv[]);
+int Cmd_ColorBars(int argc, char *argv[]);
+int Cmd_Text(int argc, char *argv[]);
+int Cmd_Test(int argc, char *argv[]);
+int Cmd_Pal(int argc, char *argv[]);
+int Cmd_Pattern(int argc, char *argv[]);
+int Cmd_Perf(int argc, char *argv[]);
+int Cmd_Read(int argc, char *argv[]);
+int Cmd_Write(int argc, char *argv[]);
+int Cmd_Dump(int argc, char *argv[]);
+int Cmd_DumpBytes(int argc, char *argv[]);
+
+//*****************************************************************************
+//
+// This is the table that holds the command names, implementing functions,
+// and brief description.
+//
+//*****************************************************************************
+tCmdLineEntry g_psCmdTable[] =
+{
+ { "fg", Cmd_Foreground, "[RGB24] Set the foreground color. Default is white." },
+ { "bg", Cmd_Background, "[RGB24] Set the background color. Default is black." },
+ { "fill", Cmd_Fill, "[RGB24] Fill the screen with a color." },
+ { "rect", Cmd_Rect, "[xTL yTL xBR yBR] Draw a rectangle" },
+ { "hline", Cmd_HLine, "<x1> <x2> <y> Draw a horizontal line on the display" },
+ { "vline", Cmd_VLine, "<x> <y1> <y2> Draw a vertical line on the display" },
+ { "setimg", Cmd_SetImage, "<index> Sets the index of the current image." },
+ { "image", Cmd_Image, "[x y] Draw an image at (x,y) or tile whole screen" },
+ { "clipimg",Cmd_ClipImage, "[clip] Sets number of x image clipping pixels. Default 0." },
+ { "colbar", Cmd_ColorBars, "Draw a color bar pattern on the display" },
+ { "text", Cmd_Text, "<text> [x y] Write text string at (x,y). Default center" },
+ { "test", Cmd_Test, "<test name> Run tests for specific driver functions" },
+ { "pal", Cmd_Pal, "<index> <RGB24> Sets a palette entry to a given color" },
+ { "pat", Cmd_Pattern, "Draw the initial test pattern." },
+ { "perf", Cmd_Perf, "<seconds> Run grlib performance test for some period" },
+ { "r", Cmd_Read, "<addr> Read a memory location or register" },
+ { "w", Cmd_Write, "<addr> <val> Write a memory location" },
+ { "dump", Cmd_Dump, "<addr> <wcount> Dump words from a given address" },
+ { "d", Cmd_Dump, " alias for dump" },
+ { "db", Cmd_DumpBytes, "<addr> <bcount> Dump bytes from a given address" },
+ { "help", Cmd_Help, "[command] Display help on a command or a list of commands" },
+ { "h", Cmd_Help, " alias for help" },
+ { "?", Cmd_Help, " alias for help" },
+ { 0, 0, 0 }
+};
+
+//*****************************************************************************
+//
+// Prototypes for specific test functions.
+//
+//*****************************************************************************
+int Test_ColorTranslate(int argc, char *argv[]);
+int Test_PixelDraw(int argc, char *argv[]);
+int Test_LineDrawH(int argc, char *argv[]);
+int Test_LineDrawV(int argc, char *argv[]);
+int Test_PixelDrawMultiple(int argc, char *argv[]);
+
+//*****************************************************************************
+//
+// A table of test functions that are called based on the first command line
+// parameter passed to the "test" command.
+//
+//*****************************************************************************
+tCmdLineEntry g_psTestTable[] =
+{
+ { "color", Test_ColorTranslate, "" },
+ { "pixel", Test_PixelDraw, "" },
+ { "hline", Test_LineDrawH, "" },
+ { "vline", Test_LineDrawV, "" },
+ { "mult", Test_PixelDrawMultiple, "" },
+ { 0, 0, 0 }
+};
+
+//*****************************************************************************
+//
+// A structure used to hold command-based help information.
+//
+//*****************************************************************************
+typedef struct
+{
+ char *pcCommand;
+ char *pcHelp;
+}
+tCommandHelp;
+
+tCommandHelp g_psCommandHelp[] =
+{
+ { "fg",
+ "Sets the foreground color used in future ""rect"", ""hline"", ""vlins"" \n"
+ """image"" and ""text"" commands. The color is provided as a 24-bit RGB\n"
+ "value of the form 0xRRGGBB\n" },
+ { "bg",
+ "Sets the background color used in future ""text"" and ""image"" commands.\n"
+ "The color is provided as a 24-bit RGB value of the form 0xRRGGBB\n" },
+ { "fill",
+ "Fill the entire display with the provided RGB color or, if no parameter is\n"
+ "given, the current background color.\n" },
+ { "rect",
+ "Draw a rectangle in the current foreground color at the given position on\n"
+ "the screen. If no parameters are provided, the rectangle is drawn around the\n"
+ "entire display area. Note that, unlike many other graphics APIs, rectangle\n"
+ "coordinates are bottom-right inclusive.\n" },
+ { "hline",
+ "Draw a single horizontal line on the display using the current foreground\n"
+ "color. The command accepts three parameters, the starting and ending x\n"
+ "coordinates and the y coordinate for the line.\n" },
+ { "vline",
+ "Draw a single vertical line on the display using the current foreground\n"
+ "color. The command accepts three parameters, the starting and ending y\n"
+ "coordinates and the x coordinate for the line.\n" },
+ { "setimg",
+ "Determine which test image will be drawn on future calls to the ""image""\n"
+ "command. The index passed must be between 0 and 3 (inclusive) and identifies\n"
+ "the following images:\n"
+ " 0 - TI logo, 4bpp, 80 x 75, compressed\n"
+ " 1 - 4 square quadrants, 1bpp, 32 x 32, compressed\n"
+ " 2 - 16 color test pattern, 4bpp, 32 x 32, compressed\n"
+ " 3 - 256 color test pattern, 8bpp, 32 x 32, compressed\n" },
+ { "image",
+ "Draw the image selected by the previous ""setimg"" command at position (x,y)\n"
+ "on the display. If a 1bpp image is selected, the current foreground and\n"
+ "background colors are used, otherwise the image's own palette determines the\n"
+ "color. If the ""clipimg"" command has previously been issued, the left edge\n"
+ "of the image will be clipped by the number of pixels indicated in that command.\n"
+ "When clipping is enabled, the (x, y) position is not adjusted to compensate for\n"
+ "the fact that the image is being cropped. For example, if a 32x32 image is \n"
+ "selected and the clip value has been set to 4, drawing the image at (0, 0) will\n"
+ "result in 28 pixels of each image line being drawn at x=4 on the display with\n"
+ "the first displayed pixel coming from the 5th column of the source image.\n" },
+ { "clipimg",
+ "Sets the number of pixels that will be clipped or cropped off the left edge of\n"
+ "future images drawn using the ""image"" command. If no parameter is passed,\n"
+ "image clipping is disabled, otherwise the parameter represents the number of\n"
+ "pixels to clip.\n" },
+ { "colbar",
+ "Draw a series of vertical color bars on the display. From left to right, the\n"
+ "bars are black, white, yellow, cyan, green, magenta, red and blue.\n" },
+ { "text",
+ "Renders text at a given location on the display. The foreground and background\n"
+ "colors are as set using previous ""fg"" and ""bg"" commands. If no parameters\n"
+ "are provided, a short string is drawn in the center of the screen. If\n"
+ "parameters are provided they must be the required string (containing no spaces)\n"
+ "followed by the x coordinate and the y coordinate for the top left corner of\n"
+ "the string.\n" },
+ { "pal",
+ "Sets the given color lookup table location to a particular RGB color. This\n"
+ "command is only available if the display frame buffer uses a format containing\n"
+ "less than 16 bits per pixel. The range of valid indices depends upon the frame\n"
+ "buffer format. For a 1bpp display, indices 0 and 1 are valid. For 4bpp, the\n"
+ "index must be in the range 0 to 15, and for an 8bpp buffer, values 0 to 255\n"
+ "are valid.\n" },
+ { "pat",
+ "Clears the display and redraws the initial test pattern that was shown when the\n"
+ "tool originally started.\n" },
+ { "perf",
+ "Draws random filled rectangles on the display for a given number of seconds and\n"
+ "then calculates the approximate throughput in megapixels per second and\n"
+ "megabytes per second.\n" },
+ { "r",
+ "Reads a word from a given memory address. Note that no checking is performed\n"
+ "on the validity of the supplied address. If an invalid address is supplied, the\n"
+ "command will cause an exception and the test tool will hang.\n" },
+ { "w",
+ "Writes a word to a given memory address. Note that no checking is performed\n"
+ "on the validity of the supplied address. If an invalid address is supplied, the\n"
+ "command will cause an exception and the test tool will hang.\n" },
+ { "dump",
+ "Reads a block of words from a given memory address. Note that no checking\n"
+ "is performed on the validity of the supplied address. If an invalid address\n"
+ "is supplied, the command will cause an exception and the test tool will hang.\n" },
+ { "db",
+ "Reads a block of bytes from a given memory address and displays them in hex\n"
+ "format. Note that no checking is performed on the validity of the supplied\n"
+ "address. If an invalid address is supplied, the command will cause an\n"
+ "exception and the test tool will hang.\n" },
+ { "test",
+ "Run one of a number of tests designed to exercise a specific display driver\n"
+ "function. Valid tests are as follow:\n"
+ " ""color"" - tests pfnColorTranslate and color handling.\n"
+ " ""pixel"" - tests pfnPixelDraw().\n"
+ " ""hline"" - tests pfnLineDrawH().\n"
+ " ""vline"" - tests pfnLineDrawV().\n"
+ " ""mult"" - tests pfnPixelDrawMultiple().\n" },
+ { "help",
+ "Show a list of supported commands or provide additional help on a single command.\n" },
+ { 0, 0 }
+};
+
+//*****************************************************************************
+//
+// The error routine that is called if the driver library encounters an error.
+//
+//*****************************************************************************
+void
+__error__(char *pcFilename, unsigned long ulLine)
+{
+ //
+ // A runtime error was detected so stop here to allow debug.
+ //
+ while(1)
+ {
+ //
+ // Hang.
+ //
+ }
+}
+
+//*****************************************************************************
+//
+// The handler for the SysTick interrupt.
+//
+//*****************************************************************************
+void
+SysTickIntHandler(void)
+{
+ //
+ // Increment the SysTick count.
+ //
+ g_ui32SysTickCount++;
+}
+
+//*****************************************************************************
+//
+// A wrapper around GrImageDraw() that allows us to supply an x pixel clipping
+// value and sets the clip rectangle as required before drawing the image.
+//
+//*****************************************************************************
+void DrawImage(tContext *psContext, const uint32_t ui32Clip,
+ const uint8_t *pui8Image, int32_t i32X, int32_t i32Y)
+{
+ tRectangle sRect;
+
+ sRect.i16XMax = GrContextDpyWidthGet(psContext) - 1;
+ sRect.i16YMax = GrContextDpyHeightGet(psContext) - 1;
+ sRect.i16YMin = 0;
+
+ //
+ // Are we performing clipping?
+ //
+ if(ui32Clip == 0)
+ {
+ //
+ // No - set the clipping rectangle to the whole screen.
+ //
+ sRect.i16XMin = 0;
+ }
+ else
+ {
+ //
+ // Yes - set the clipping rectangle to clip off only the leftmost
+ // ui32Clip pixels from the image to be drawn.
+ //
+ sRect.i16XMin = i32X + ui32Clip;
+ }
+
+ //
+ // Set the required clipping rectangle.
+ //
+ GrContextClipRegionSet(psContext, &sRect);
+
+ //
+ // Draw the image.
+ //
+ GrImageDraw(psContext, pui8Image, i32X, i32Y);
+
+ //
+ // Clear the clipping rectangle again.
+ //
+ sRect.i16XMin = 0;
+ GrContextClipRegionSet(psContext, &sRect);
+}
+
+//*****************************************************************************
+//
+// Draw a test pattern onto the display. This pattern contains a variety of
+// graphics primitives and will call every display driver API (although not all
+// cases that each API must support).
+//
+//*****************************************************************************
+void
+DrawTestPattern(tContext *psContext)
+{
+ int32_t i32Loop, i32XInc, i32YInc, i32Width, i32Height;
+ tRectangle sRect;
+
+ //
+ // Fill the the display with black and draw a white box around it.
+ //
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(psContext) - 1;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(psContext) - 1;
+ GrContextForegroundSet(psContext, ClrBlack);
+ GrRectFill(psContext, &sRect);
+ GrContextForegroundSet(psContext, ClrWhite);
+ GrRectDraw(psContext, &sRect);
+
+ //
+ // Draw a pattern of lines within the main display area.
+ //
+ i32XInc = GrContextDpyWidthGet(psContext) / 20;
+ i32YInc = GrContextDpyHeightGet(psContext) / 20;
+
+ GrContextForegroundSet(psContext, ClrWhite);
+
+ //
+ // Draw a pattern of lines.
+ //
+ for(i32Loop = 0; i32Loop < 20; i32Loop++)
+ {
+ GrLineDraw(psContext, 0, i32YInc * i32Loop, i32XInc * i32Loop,
+ (GrContextDpyHeightGet(psContext) - 1));
+ GrLineDraw(psContext,
+ (GrContextDpyWidthGet(psContext) - 1),
+ (GrContextDpyHeightGet(psContext) -
+ (i32YInc * i32Loop + 1)),
+ (GrContextDpyWidthGet(psContext) -
+ (i32XInc * i32Loop + 1)),
+ 0);
+ }
+
+ //
+ // Fill the top 22 lines of the display with blue.
+ //
+ sRect.i16XMin = 1;
+ sRect.i16XMax = GrContextDpyWidthGet(psContext) - 2;
+ sRect.i16YMin = 1;
+ sRect.i16YMax = 22;
+
+ GrContextForegroundSet(psContext, ClrBlue);
+ GrRectFill(psContext, &sRect);
+
+ //
+ // Draw a white line at the bottom of the blue box.
+ //
+ GrContextForegroundSet(psContext, ClrWhite);
+ GrLineDraw(psContext, sRect.i16XMin, sRect.i16YMax,
+ sRect.i16XMax, sRect.i16YMax);
+
+ //
+ // Write the application name inside the blue box at the top of the screen.
+ //
+ GrContextFontSet(psContext, g_psFontCmss18b);
+ GrStringDrawCentered(psContext, "grlib-driver-test", -1, sRect.i16XMax / 2,
+ 8, false);
+
+ //
+ // Draw a circle around the center of the main display area.
+ //
+ GrContextForegroundSet(psContext, ClrRed);
+ GrCircleDraw(psContext, GrContextDpyWidthGet(psContext) / 2,
+ 23 + ((GrContextDpyHeightGet(psContext) - 23) / 2), 70);
+
+ //
+ // Determine where to draw the logo so that it is centered in the
+ // main section of the display.
+ //
+ i32Width = *(uint16_t *)(g_pImages[0].pucImage + 1);
+ i32Height = *(uint16_t *)(g_pImages[0].pucImage + 3);
+ i32XInc = (GrContextDpyWidthGet(psContext) - i32Width) / 2;
+ i32YInc = ((GrContextDpyHeightGet(psContext) - (23 + i32Height)) / 2) + 23;
+
+ //
+ // Draw the TI logo in the center of the display
+ //
+ GrTransparentImageDraw(psContext, g_pImages[0].pucImage, i32XInc, i32YInc,
+ ClrBlack);
+
+ //
+ // Flush any cached drawing operations.
+ //
+ GrFlush(psContext);
+}
+
+//*****************************************************************************
+//
+// Draw test patterns that exercises the display driver's ColorTranslate
+// function and, if applicable, its palette manipulation function.
+//
+//*****************************************************************************
+int
+Test_ColorTranslate(int argc, char *argv[])
+{
+ int32_t i32Loop, i32NumBars, i32BarWidth, i32BarLoop;
+ uint32_t ui32Color;
+ tRectangle sRect;
+
+ UARTprintf("Running ColorTranslate Test.\n\n");
+
+ UARTprintf("This test shows various color patterns to allow a driver writer "
+ "to ensure that\n"
+ "color mapping and palette functions are operating correctly.\n");
+
+ UARTprintf("\nFirst, some basic primary and secondary colors...\n");
+
+ //
+ // Loop through pairs of colors that we have configured for the color bar
+ // test pattern.
+ //
+ for(i32Loop = 0; i32Loop < NUM_COLOR_BARS; i32Loop += 2)
+ {
+ //
+ // Does this driver require a color lookup table?
+ //
+#if (DRIVER_BPP < 16)
+ //
+ // Set the palette we want to use for this portion of the test.
+ //
+ g_pui32Palette[0] = g_pui32BarColors[i32Loop];
+ g_pui32Palette[1] = g_pui32BarColors[i32Loop + 1];
+ DRIVER_PALETTE_SET(g_pui32Palette, 0, 2);
+#endif
+
+ //
+ // Fill the left half of the display with one color of the pair.
+ //
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) / 2;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+ GrContextForegroundSet(&g_sContext, g_pui32BarColors[i32Loop]);
+ GrRectFill(&g_sContext, &sRect);
+
+ //
+ // Fill the right half of the display with the other color.
+ //
+ sRect.i16XMin = (GrContextDpyWidthGet(&g_sContext) / 2) + 1;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ GrContextForegroundSet(&g_sContext, g_pui32BarColors[i32Loop + 1]);
+ GrRectFill(&g_sContext, &sRect);
+
+ //
+ // Tell the user what they should be seeing.
+ //
+ UARTprintf("Left %s, right %s. Press ""Enter"" to continue.\n", g_ppcBarColors[i32Loop],
+ g_ppcBarColors[i32Loop + 1]);
+
+ //
+ // Wait for the user to press "Enter"
+ //
+ UARTgets(g_cCmdBuf, sizeof(g_cCmdBuf));
+ }
+
+ //
+ // Clear the screen again.
+ //
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+ GrContextForegroundSet(&g_sContext, ClrBlack);
+ GrRectFill(&g_sContext, &sRect);
+
+ //
+ // From the display width and the frame buffer color depth, determine the
+ // number of bars to draw and the width of each.
+ //
+#if (DRIVER_BPP < 16)
+ //
+ // For a palettized frame buffer, the number of bars we draw is the
+ // the number of simultaneous colors that the pixel format can represent.
+ //
+ i32NumBars = (1 << DRIVER_BPP) - 1;
+#else
+ //
+ // For a direct color frame buffer, we show no more than 256 steps because
+ // that's as many independent shades of any primary that you can represent
+ // in RGB24 format.
+ //
+ i32NumBars = 256;
+#endif
+
+ //
+ // If the number of bars we need to draw is more than the number of pixels
+ // across the display, reduce the number of bars.
+ //
+ i32NumBars = MIN(i32NumBars, GrContextDpyWidthGet(&g_sContext));
+
+ //
+ // What's the width of each bar? We store this in 24.8 fixed point
+ // notation.
+ //
+ i32BarWidth = (GrContextDpyWidthGet(&g_sContext) * 256) / i32NumBars;
+
+ //
+ // Now draw a color gradient across the display in each primary color.
+ //
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+
+ for(i32Loop = 0; i32Loop < 3; i32Loop++)
+ {
+#if (DRIVER_BPP < 16)
+ //
+ // For palettized frame buffers, set the desired color palette.
+ //
+ for(i32BarLoop = 0; i32BarLoop < (1 << DRIVER_BPP); i32BarLoop++)
+ {
+ g_pui32Palette[i32BarLoop] = (i32BarLoop * 256) / (1 << DRIVER_BPP);
+ g_pui32Palette[i32BarLoop] <<= (8 * i32Loop);
+ }
+ DRIVER_PALETTE_SET(g_pui32Palette, 0, (1 << DRIVER_BPP));
+#endif
+
+ //
+ // Draw each of the vertical bars making up the gradient pattern.
+ //
+ for(i32BarLoop = 0; i32BarLoop < i32NumBars; i32BarLoop++)
+ {
+ //
+ // Calculate the position of this bar.
+ //
+ sRect.i16XMin = sRect.i16XMax + 1;
+ sRect.i16XMax = ((i32BarLoop * i32BarWidth) / 256) - 1;
+
+ //
+ // Set the color of this bar.
+ //
+ ui32Color = (i32BarLoop == (i32NumBars - 1)) ? 255 :
+ ((i32BarLoop * 256) / i32NumBars);
+ ui32Color <<= (i32Loop * 8);
+ GrContextForegroundSet(&g_sContext, ui32Color);
+
+ //
+ // Draw the bar.
+ //
+ GrRectFill(&g_sContext, &sRect);
+ }
+
+ //
+ // Tell the user what they should be seeing.
+ //
+ UARTprintf("%s gradient with %d steps. Press ""Enter"" to continue\n",
+ (i32Loop == 0) ? "Blue" :
+ ((i32Loop == 1) ? "Green" : "Red"),
+ i32NumBars);
+
+ //
+ // Wait for the user to press "Enter"
+ //
+ UARTgets(g_cCmdBuf, sizeof(g_cCmdBuf));
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// Draw a test pattern that exercises the display driver's PixelDraw function.
+//
+//*****************************************************************************
+int
+Test_PixelDraw(int argc, char *argv[])
+{
+ tRectangle sRect;
+ int32_t i32Loop;
+
+ UARTprintf("Running PixelDraw Test.\n\n");
+
+ UARTprintf("The display should show single white dots in each corner, a "
+ "small cross at\n"
+ "the center of the display, and small arrows pointing to each "
+ "corner.\n");
+
+ //
+ // Set the drawing color to black and clear the screen.
+ //
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+ GrContextForegroundSet(&g_sContext, ClrBlack);
+ GrRectFill(&g_sContext, &sRect);
+
+ //
+ // Set the drawing color to white.
+ //
+ GrContextForegroundSet(&g_sContext, ClrWhite);
+
+ //
+ // Plot points at each corner.
+ //
+ GrPixelDraw(&g_sContext, 0, 0);
+ GrPixelDraw(&g_sContext, sRect.i16XMax, 0);
+ GrPixelDraw(&g_sContext, 0, sRect.i16YMax);
+ GrPixelDraw(&g_sContext, sRect.i16XMax, sRect.i16YMax);
+
+ //
+ // Draw a small cross at the center of the display.
+ //
+ GrPixelDraw(&g_sContext, sRect.i16XMax / 2, sRect.i16YMax / 2);
+ GrPixelDraw(&g_sContext, (sRect.i16XMax / 2) + 1, (sRect.i16YMax / 2));
+ GrPixelDraw(&g_sContext, (sRect.i16XMax / 2) - 1, (sRect.i16YMax / 2));
+ GrPixelDraw(&g_sContext, (sRect.i16XMax / 2), (sRect.i16YMax / 2) + 1);
+ GrPixelDraw(&g_sContext, (sRect.i16XMax / 2), (sRect.i16YMax / 2) - 1);
+
+ //
+ // Draw the arrows one pixel at a time.
+ //
+ for(i32Loop = 1; i32Loop < ARROW_SIZE; i32Loop++)
+ {
+ //
+ // Top left arrow.
+ //
+ GrPixelDraw(&g_sContext, ARROW_SIZE + i32Loop, ARROW_SIZE + i32Loop);
+ GrPixelDraw(&g_sContext, ARROW_SIZE, ARROW_SIZE + i32Loop);
+ GrPixelDraw(&g_sContext, ARROW_SIZE + i32Loop, ARROW_SIZE);
+
+ //
+ // Top right arrow.
+ //
+ GrPixelDraw(&g_sContext, sRect.i16XMax - (ARROW_SIZE + i32Loop),
+ ARROW_SIZE + i32Loop);
+ GrPixelDraw(&g_sContext, sRect.i16XMax - ARROW_SIZE,
+ ARROW_SIZE + i32Loop);
+ GrPixelDraw(&g_sContext, sRect.i16XMax - (ARROW_SIZE + i32Loop),
+ ARROW_SIZE);
+
+ //
+ // Bottom right arrow.
+ //
+ GrPixelDraw(&g_sContext, sRect.i16XMax - (ARROW_SIZE + i32Loop),
+ sRect.i16YMax - (ARROW_SIZE + i32Loop));
+ GrPixelDraw(&g_sContext, sRect.i16XMax - ARROW_SIZE,
+ sRect.i16YMax - (ARROW_SIZE + i32Loop));
+ GrPixelDraw(&g_sContext, sRect.i16XMax - (ARROW_SIZE + i32Loop),
+ sRect.i16YMax - ARROW_SIZE);
+
+ //
+ // Bottom left arrow.
+ //
+ GrPixelDraw(&g_sContext, ARROW_SIZE + i32Loop,
+ sRect.i16YMax - (ARROW_SIZE + i32Loop));
+ GrPixelDraw(&g_sContext, ARROW_SIZE,
+ sRect.i16YMax - (ARROW_SIZE + i32Loop));
+ GrPixelDraw(&g_sContext, ARROW_SIZE + i32Loop,
+ sRect.i16YMax - ARROW_SIZE);
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// Draw a test pattern that exercises the display driver's LineDrawH function.
+//
+//*****************************************************************************
+int
+Test_LineDrawH(int argc, char *argv[])
+{
+ tRectangle sRect;
+ int32_t i32Loop, i32X, i32Y, i32Size;
+
+ UARTprintf("Running LineDrawH Test.\n\n");
+
+ UARTprintf("The display should show horizontal white lines across the "
+ "complete width of\n"
+ "the screen at top and bottom and a right-angled triangle with "
+ "horizontal\n"
+ "edge at the bottom and vertical edge on the left.\n");
+
+ //
+ // Set the drawing color to black and clear the screen.
+ //
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+ GrContextForegroundSet(&g_sContext, ClrBlack);
+ GrRectFill(&g_sContext, &sRect);
+
+ //
+ // Set the drawing color to white.
+ //
+ GrContextForegroundSet(&g_sContext, ClrWhite);
+
+ //
+ // Draw horizontal lines at the top and bottom of the display.
+ //
+ GrLineDrawH(&g_sContext, 0, sRect.i16XMax, 0);
+ GrLineDrawH(&g_sContext, 0, sRect.i16XMax, sRect.i16YMax);
+
+ //
+ // Determine the size of the triangle we will draw.
+ //
+ i32Size = (MIN(sRect.i16YMax, sRect.i16XMax) * 3) / 4;
+ i32X = (GrContextDpyWidthGet(&g_sContext) - i32Size) / 2;
+ i32Y = (GrContextDpyHeightGet(&g_sContext) - i32Size) / 2;
+
+ //
+ // Draw the rectangle based on the size and position calculated.
+ //
+ for(i32Loop = 1; i32Loop < i32Size; i32Loop++)
+ {
+ GrLineDrawH(&g_sContext, i32X, i32X + i32Loop, i32Y + i32Loop);
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// Draw a test pattern that exercises the display driver's LineDrawV function.
+//
+//*****************************************************************************
+int
+Test_LineDrawV(int argc, char *argv[])
+{
+ tRectangle sRect;
+ int32_t i32Loop, i32X, i32Y, i32Size;
+
+ UARTprintf("Running LineDrawV Test.\n\n");
+
+ UARTprintf("The display should show vertical white lines down the "
+ "complete height of\n"
+ "the screen at left and right and a right-angled triangle with "
+ "horizontal\n"
+ "edge at the top and vertical edge on the right.\n");
+
+ //
+ // Set the drawing color to black and clear the screen.
+ //
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+ GrContextForegroundSet(&g_sContext, ClrBlack);
+ GrRectFill(&g_sContext, &sRect);
+
+ //
+ // Set the drawing color to white.
+ //
+ GrContextForegroundSet(&g_sContext, ClrWhite);
+
+ //
+ // Draw vertical lines on the left and right sides of the display.
+ //
+ GrLineDrawV(&g_sContext, 0, 0, sRect.i16YMax);
+ GrLineDrawV(&g_sContext, sRect.i16XMax, 0, sRect.i16YMax);
+
+ //
+ // Determine the size of the triangle we will draw.
+ //
+ i32Size = (MIN(sRect.i16YMax, sRect.i16XMax) * 3) / 4;
+ i32X = (GrContextDpyWidthGet(&g_sContext) - i32Size) / 2;
+ i32Y = (GrContextDpyHeightGet(&g_sContext) - i32Size) / 2;
+
+ //
+ // Draw the rectangle based on the size and position calculated.
+ //
+ for(i32Loop = 1; i32Loop < i32Size; i32Loop++)
+ {
+ GrLineDrawV(&g_sContext, i32X + i32Loop, i32Y,
+ i32Y + i32Loop);
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// Draw test patterns that exercise the display driver's PixelDrawMultiple
+// function. This function ensures that all supported image pixel formats
+// are used along with all possible drawing alignment and sub-byte clipping
+// settings.
+//
+//*****************************************************************************
+int
+Test_PixelDrawMultiple(int argc, char *argv[])
+{
+ int32_t i32X, i32Y, i32Width, i32Height;
+ int32_t i32ImageLoop, i32PositionLoop, i32ClipLoop;
+ tRectangle sRect;
+
+ UARTprintf("Running PixelDrawMultiple Test.\n\n");
+
+ //
+ // Loop through each of the test images.
+ //
+ for(i32ImageLoop = 0; i32ImageLoop < NUM_IMAGES; i32ImageLoop++)
+ {
+ //
+ // Tell the user what we're doing.
+ //
+ UARTprintf("Image %d: %s\n", i32ImageLoop,
+ g_pImages[i32ImageLoop].pcDesc);
+
+ //
+ // Set the drawing color to black and clear the screen.
+ //
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+ GrContextForegroundSet(&g_sContext, ClrBlack);
+ GrRectFill(&g_sContext, &sRect);
+
+ //
+ // Determine the size of the current test image.
+ //
+ i32Width = (int32_t)g_pImages[i32ImageLoop].pucImage[1] +
+ 256 * (int32_t)g_pImages[i32ImageLoop].pucImage[2];
+ i32Height = (int32_t)g_pImages[i32ImageLoop].pucImage[3] +
+ 256 * (int32_t)g_pImages[i32ImageLoop].pucImage[4];
+ //
+ // Loop through each possible x offset from 0 to 7.
+ //
+ for(i32PositionLoop = 0; i32PositionLoop < 8; i32PositionLoop++)
+ {
+ //
+ // Loop through all clipping values from 0 to 7
+ //
+ for(i32ClipLoop = 0; i32ClipLoop < 8; i32ClipLoop++)
+ {
+ //
+ // Determine the (x, y) position for this image.
+ //
+ i32X = i32PositionLoop * (i32Width + 4) + i32PositionLoop + 1;
+ i32Y = i32ClipLoop * (i32Height + 4) + 1;
+
+ //
+ // Draw the outline rectangle that the image should fit inside.
+ //
+ sRect.i16XMin = i32X + i32ClipLoop - 1;
+ sRect.i16XMax = i32X + i32Width;
+ sRect.i16YMin = i32Y - 1;
+ sRect.i16YMax = i32Y + i32Height;
+ GrContextForegroundSet(&g_sContext, ClrRed);
+ GrRectDraw(&g_sContext, &sRect);
+
+ //
+ // Set drawing colors to blue and yellow in case we're using
+ // a 1bpp source image.
+ //
+ GrContextForegroundSet(&g_sContext, ClrYellow);
+ GrContextBackgroundSet(&g_sContext, ClrBlue);
+
+ //
+ // Draw the test image at the relevant position.
+ //
+ DrawImage(&g_sContext, i32ClipLoop,
+ g_pImages[i32ImageLoop].pucImage, i32X, i32Y);
+ }
+ }
+
+ //
+ // Tell the user what they should be seeing.
+ //
+ UARTprintf("Check pattern. No image should overdraw the red rectangle "
+ "edges.\nPress ""Enter"" to continue.");
+
+ //
+ // Wait for the user to press "Enter"
+ //
+ UARTgets(g_cCmdBuf, sizeof(g_cCmdBuf));
+ }
+
+ //
+ // Reset the foreground and background colors to the user's original
+ // choices.
+ //
+ GrContextForegroundSet(&g_sContext, g_ui32Foreground);
+ GrContextBackgroundSet(&g_sContext, g_ui32Background);
+
+ UARTprintf("PixelDrawMultiple test complete.\n");
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "test" command. It requires a single parameter
+// which identifies the test to run. Any additional command line parameters
+// are passed on to the specific test function.
+//
+//*****************************************************************************
+int
+Cmd_Test(int argc, char *argv[])
+{
+ tCmdLineEntry *pTests;
+
+ //
+ // Make sure we have at least one additional parameter.
+ //
+ if(argc < 2)
+ {
+ UARTprintf("ERROR: This command requires one parameter <test name>.\n");
+ return(0);
+ }
+
+ //
+ // Walk through the list of configured tests and look for a match with
+ // the identifier passed.
+ //
+ pTests = g_psTestTable;
+
+ while(pTests->pcCmd)
+ {
+ //
+ // Does this test match the string passed?
+ //
+ if(ustrcmp(pTests->pcCmd, argv[1]) == 0)
+ {
+ //
+ // Yes - call the test function.
+ //
+ return((pTests->pfnCmd)(argc - 1, &argv[1]));
+ }
+
+ //
+ // Move on to the next test in the list.
+ //
+ pTests++;
+ }
+
+ //
+ // If we get here, the test name provided is not recognized.
+ //
+ UARTprintf("Test ""%s"" cannot be found.\n", argv[1]);
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "help" command. It prints a simple list
+// of the available commands with a brief description.
+//
+//*****************************************************************************
+int
+Cmd_Help(int argc, char *argv[])
+{
+ tCmdLineEntry *psEntry;
+ tCommandHelp *psHelp;
+ bool bFound;
+
+ //
+ // Get pointers to the beginning of the command table and the extended
+ // help table.
+ //
+ psEntry = g_psCmdTable;
+ psHelp = g_psCommandHelp;
+ bFound = false;
+
+ //
+ // Are we being asked to list all the commands?
+ //
+ if(argc == 1)
+ {
+ //
+ // Print some header text.
+ //
+ UARTprintf("\nAvailable commands\n");
+ UARTprintf("------------------\n");
+
+ //
+ // Enter a loop to read each entry from the command table. The
+ // end of the table has been reached when the command name is NULL.
+ //
+ while(psEntry->pcCmd)
+ {
+ //
+ // Print the command name and the brief description.
+ //
+ UARTprintf("%12s : %s\n", psEntry->pcCmd, psEntry->pcHelp);
+
+ //
+ // Advance to the next entry in the table.
+ //
+ psEntry++;
+ }
+ }
+ else
+ {
+ //
+ // We are being asked for help on a specific command.
+ //
+
+ //
+ // Enter a loop find the requested command in the basic command table
+ // and print the summary help for that command.
+ //
+ while(psEntry->pcCmd)
+ {
+ //
+ // Does the provided command match the current table entry?
+ //
+ if(ustrcmp(argv[1], psEntry->pcCmd) == 0)
+ {
+ //
+ // Yes - print the command name and the brief description.
+ //
+ UARTprintf("\n%s : %s\n", psEntry->pcCmd, psEntry->pcHelp);
+
+ bFound = true;
+
+ //
+ // Drop out of the loop.
+ //
+ break;
+ }
+
+ //
+ // Advance to the next entry in the table.
+ //
+ psEntry++;
+ }
+
+ //
+ // If we get here without finding the command, then it's not a valid
+ // command.
+ //
+ if(!bFound)
+ {
+ UARTprintf("Command ""%s"" is not supported.\n", argv[1]);
+ return(0);
+ }
+
+ //
+ // We found the command so now go and look for extended help.
+ //
+ bFound = false;
+
+ //
+ // Walk through the table of detailed help entries until we see a NULL
+ // for the command string pointer.
+ //
+ while(psHelp->pcCommand)
+ {
+ //
+ // Does the command passed match this entry in the detailed help
+ // table?
+ //
+ if(ustrcmp(argv[1], psHelp->pcCommand) == 0)
+ {
+ UARTprintf("\n%s\n", psHelp->pcHelp);
+ bFound = true;
+ break;
+ }
+
+ //
+ // Move to the next entry in the list.
+ //
+ psHelp++;
+ }
+
+ if(!bFound)
+ {
+ UARTprintf("No extended help is available for ""%s"".\n", argv[1]);
+ }
+ }
+
+ //
+ // Return success.
+ //
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "r" command and reads a single word from a
+// given memory location.
+//
+//*****************************************************************************
+int
+Cmd_Read(int argc, char *argv[])
+{
+ uint32_t ulAddr;
+
+ //
+ // Parameter check.
+ //
+ if(argc != 2)
+ {
+ UARTprintf("ERROR: This command requires one parameter <addr>.\n");
+ return(0);
+ }
+
+ //
+ // Get the address to read.
+ //
+ ulAddr = ustrtoul(argv[1], 0, 0);
+
+ UARTprintf("0x%08x: 0x%08x\n", ulAddr, HWREG(ulAddr));
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "w" command and writes a single word to a
+// given memory location.
+//
+//*****************************************************************************
+int
+Cmd_Write(int argc, char *argv[])
+{
+ uint32_t ulAddr, ulVal;
+
+ //
+ // Parameter check.
+ //
+ if(argc != 3)
+ {
+ UARTprintf("ERROR: This command requires 2 parameters <addr> <val>.\n");
+ return(0);
+ }
+
+ //
+ // Get the address and value to write.
+ //
+ ulAddr = ustrtoul(argv[1], 0, 0);
+ ulVal = ustrtoul(argv[2], 0, 0);
+
+ HWREG(ulAddr) = ulVal;
+ UARTprintf("0x%08x: 0x%08x\n", ulAddr, HWREG(ulAddr));
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "d" command and dumps a number of words from a
+// given memory location.
+//
+//*****************************************************************************
+int
+Cmd_Dump(int argc, char *argv[])
+{
+ uint32_t ulAddr, ui32Count, ulLoop;
+
+ //
+ // Parameter check.
+ //
+ if(argc != 3)
+ {
+ UARTprintf("ERROR: This command requires 2 parameters <addr> <wcount>.\n");
+ return(0);
+ }
+
+ //
+ // Get the address and value to write.
+ //
+ ulAddr = ustrtoul(argv[1], 0, 0);
+ ui32Count = ustrtoul(argv[2], 0, 0);
+
+ //
+ // Walk through the memory range making sure that we align the addresses
+ // on 16 byte boundaries (to make the output look good).
+ //
+ for(ulLoop = ulAddr & ~0x0F; ulLoop < ulAddr + (ui32Count * 4); ulLoop += 4)
+ {
+ //
+ // Take a new line and print the address every 16 bytes.
+ //
+ if(!(ulLoop % 16))
+ {
+ UARTprintf("\n0x%08x: ", ulLoop);
+ }
+
+ //
+ // Display the value of a particular word or pad with spaces if we are
+ // still below the requested address.
+ //
+ if(ulLoop >= ulAddr)
+ {
+ UARTprintf("%08x ", HWREG(ulLoop));
+ }
+ else
+ {
+ UARTprintf(" ");
+ }
+ }
+
+ UARTprintf("\n");
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// Dump the contents of ui32Count bytes from address ulAddr.
+//
+//*****************************************************************************
+static void
+DumpBytes(uint32_t ulAddr, uint32_t ui32Count)
+{
+ uint32_t ulLoop;
+
+ //
+ // Walk through the memory range making sure that we align the addresses
+ // on 16 byte boundaries (to make the output look good).
+ //
+ for(ulLoop = ulAddr & ~0x0F; ulLoop < ulAddr + ui32Count; ulLoop++)
+ {
+ //
+ // Take a new line and print the address every 16 bytes.
+ //
+ if(!(ulLoop % 16))
+ {
+ UARTprintf("\n0x%08x: ", ulLoop);
+ }
+
+ //
+ // Display the value of a particular byte or pad with spaces if we are
+ // still below the requested address.
+ //
+ if(ulLoop >= ulAddr)
+ {
+ UARTprintf("%02x ", HWREGB(ulLoop));
+ }
+ else
+ {
+ UARTprintf(" ");
+ }
+ }
+
+ UARTprintf("\n");
+}
+
+//*****************************************************************************
+//
+// This function implements the "db" command and dumps a number of bytes from a
+// given memory location.
+//
+//*****************************************************************************
+int
+Cmd_DumpBytes(int argc, char *argv[])
+{
+ uint32_t ulAddr, ui32Count;
+
+ //
+ // Parameter check.
+ //
+ if(argc != 3)
+ {
+ UARTprintf("ERROR: This command requires 2 parameters <addr> <bcount>.\n");
+ return(0);
+ }
+
+ //
+ // Get the address and value to write.
+ //
+ ulAddr = ustrtoul(argv[1], 0, 0);
+ ui32Count = ustrtoul(argv[2], 0, 0);
+
+ DumpBytes(ulAddr, ui32Count);
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "fill" command and fills the whole screen with
+// a given color value.
+//
+//*****************************************************************************
+int
+Cmd_Fill(int argc, char *argv[])
+{
+ tRectangle sRect;
+ uint32_t ui32Color;
+
+ //
+ // Get the color value to use if one was provided. Default to
+ // the current background if none was specified.
+ //
+ if(argc > 1)
+ {
+ ui32Color = ustrtoul(argv[1], 0, 0);
+ }
+ else
+ {
+ ui32Color = g_ui32Background;
+ }
+
+ UARTprintf("Filling display with RGB 0x%06x.\n", ui32Color);
+
+ //
+ // Fill the frame buffer with the desired color.
+ //
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+ GrContextForegroundSet(&g_sContext, ui32Color);
+ GrRectFill(&g_sContext, &sRect);
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "rect" command and draws a rectangle in the
+// current foreground color. If 4 parameters are supplied, they represent
+// the X and Y coordinates of the top left and bottom right points. If no
+// parameters are supplied, the display edge outline is drawn.
+//
+//*****************************************************************************
+int
+Cmd_Rect(int argc, char *argv[])
+{
+ tRectangle sRect;
+
+ if(argc == 1)
+ {
+ sRect.i16XMin = 0;
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ sRect.i16YMin = 0;
+ sRect.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+ }
+ else
+ {
+ if(argc != 5)
+ {
+ UARTprintf("This command reguires either 0 or 4 arguments!\n");
+ return(0);
+ }
+ else
+ {
+ sRect.i16XMin = ustrtoul(argv[1], 0, 0);
+ sRect.i16XMax = ustrtoul(argv[3], 0, 0);
+ sRect.i16YMin = ustrtoul(argv[2], 0, 0);
+ sRect.i16YMax = ustrtoul(argv[4], 0, 0);;
+ }
+ }
+
+ //
+ // Set the foreground color.
+ //
+ GrContextForegroundSet(&g_sContext, g_ui32Foreground);
+
+ //
+ // Draw the required rectangle.
+ //
+ GrRectDraw(&g_sContext, &sRect);
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "line" command and draws a pattern of angled
+// lines on the display. If 4 parameters are provided, this function draws
+// a single line between the specified points.
+//
+//*****************************************************************************
+int
+Cmd_Line(int argc, char *argv[])
+{
+ int32_t i32Loop, i32XInc, i32YInc;
+ tRectangle sRect;
+
+ //
+ // Set the foreground color.
+ //
+ GrContextForegroundSet(&g_sContext, g_ui32Foreground);
+
+ //
+ // Are we drawing the pattern or just a single line?
+ //
+ if(argc == 1)
+ {
+ i32XInc = GrContextDpyWidthGet(&g_sContext) / 20;
+ i32YInc = GrContextDpyHeightGet(&g_sContext) / 20;
+
+ //
+ // Draw a pattern of lines.
+ //
+ for(i32Loop = 0; i32Loop < 20; i32Loop++)
+ {
+ GrLineDraw(&g_sContext, 0, i32YInc * i32Loop, i32XInc * i32Loop,
+ (GrContextDpyHeightGet(&g_sContext) - 1));
+ GrLineDraw(&g_sContext,
+ (GrContextDpyWidthGet(&g_sContext) - 1),
+ (GrContextDpyHeightGet(&g_sContext) -
+ (i32YInc * i32Loop + 1)),
+ (GrContextDpyWidthGet(&g_sContext) -
+ (i32XInc * i32Loop + 1)),
+ 0);
+ }
+ }
+ else
+ {
+ //
+ // We're drawing a single line. Do we have the correct number of
+ // parameters?
+ //
+ if(argc != 5)
+ {
+ UARTprintf("This command reguires either 0 or 4 arguments!\n");
+ return(0);
+ }
+
+ //
+ // Get the line start and end points.
+ //
+ sRect.i16XMin = ustrtoul(argv[1], 0, 0);
+ sRect.i16XMax = ustrtoul(argv[3], 0, 0);
+ sRect.i16YMin = ustrtoul(argv[2], 0, 0);
+ sRect.i16YMax = ustrtoul(argv[4], 0, 0);;
+
+ //
+ // Draw the line.
+ //
+ GrLineDraw(&g_sContext, sRect.i16XMin, sRect.i16YMin,
+ sRect.i16XMax, sRect.i16YMax);
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "fg" command and saves the given color as the
+// foreground color for future drawing operations.
+//
+//*****************************************************************************
+int
+Cmd_Foreground(int argc, char *argv[])
+{
+ //
+ // Get the color value to use if one was provided. Default to white if
+ // no color was specified.
+ //
+ if(argc > 1)
+ {
+ g_ui32Foreground = ustrtoul(argv[1], 0, 0);
+ }
+ else
+ {
+ g_ui32Foreground = ClrWhite;
+ }
+
+ UARTprintf("Foreground color set to 0x%06x.\n", g_ui32Foreground);
+
+ return(0);
+}
+
+
+//*****************************************************************************
+//
+// This function implements the "bg" command and saves the given color as the
+// background color for future drawing operations.
+//
+//*****************************************************************************
+int
+Cmd_Background(int argc, char *argv[])
+{
+ //
+ // Get the color value to use if one was provided. Default to black if
+ // no color was specified.
+ //
+ if(argc > 1)
+ {
+ g_ui32Background = ustrtoul(argv[1], 0, 0);
+ }
+ else
+ {
+ g_ui32Background = ClrBlack;
+ }
+
+ UARTprintf("Background color set to 0x%06x.\n", g_ui32Background);
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "hlines" command and draws a single horizontal
+// line on the display.
+//
+//*****************************************************************************
+int
+Cmd_HLine(int argc, char *argv[])
+{
+ int32_t i32X1, i32X2, i32Y;
+
+ //
+ // Ensure that we were passed the correct number of parameters.
+ //
+ if(argc != 4)
+ {
+ UARTprintf("This command requires 3 parameters, x1, x2, y.\n");
+ return(0);
+ }
+
+ //
+ // Extract the command line parameters.
+ //
+ i32X1 = ustrtoul(argv[1], 0, 0);
+ i32X2 = ustrtoul(argv[2], 0, 0);
+ i32Y = ustrtoul(argv[3], 0, 0);
+
+ UARTprintf("Drawing a horizontal line on the display in color 0x%06x.\n",
+ g_ui32Foreground);
+ UARTprintf("Line (%d, %d) to (%d, %d).\n", i32X1, i32Y, i32X2, i32Y);
+
+ //
+ // Set the desired color.
+ //
+ GrContextForegroundSet(&g_sContext, g_ui32Foreground);
+
+ //
+ // Draw the line.
+ //
+ GrLineDrawH(&g_sContext, i32X1, i32X2, i32Y);
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "vline" command and draws a pattern of
+// horizontal lines on the display.
+//
+//*****************************************************************************
+int
+Cmd_VLine(int argc, char *argv[])
+{
+ int32_t i32Y1, i32Y2, i32X;
+
+ //
+ // Ensure that we were passed the correct number of parameters.
+ //
+ if(argc != 4)
+ {
+ UARTprintf("This command requires 3 parameters, x, y1, y2.\n");
+ return(0);
+ }
+
+ //
+ // Extract the command line parameters.
+ //
+ i32X = ustrtoul(argv[1], 0, 0);
+ i32Y1 = ustrtoul(argv[2], 0, 0);
+ i32Y2 = ustrtoul(argv[3], 0, 0);
+
+ UARTprintf("Drawing a vertical line on the display in color 0x%06x.\n",
+ g_ui32Foreground);
+ UARTprintf("Line (%d, %d) to (%d, %d).\n", i32X, i32Y1, i32X, i32Y2);
+
+ //
+ // Set the desired color.
+ //
+ GrContextForegroundSet(&g_sContext, g_ui32Foreground);
+
+ //
+ // Draw the line.
+ //
+ GrLineDrawV(&g_sContext, i32X, i32Y1, i32Y2);
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "pal" command and sets a single palette entry
+// to the given color.
+//
+//*****************************************************************************
+int
+Cmd_Pal(int argc, char *argv[])
+{
+#if (DRIVER_BPP == 16)
+ UARTprintf("This command is not supported for 16bpp frame buffers.\n");
+#else
+ uint32_t ui32Color, ui32Index;
+
+ //
+ // Get the palette index and color value to use.
+ //
+ if(argc > 2)
+ {
+ ui32Index = ustrtoul(argv[1], 0, 0);
+ ui32Color = ustrtoul(argv[2], 0, 0);
+ }
+ else
+ {
+ UARTprintf("This command requires 2 parameters - index, color.\n");
+ return(0);
+ }
+
+ if(ui32Index > ((DRIVER_BPP == 8) ? 255 : 15))
+ {
+ UARTprintf("Invalid palette index! Must be less than %d.\n",
+ ((DRIVER_BPP == 8) ? 256 : 16));
+ return(0);
+ }
+
+ UARTprintf("Setting palette entry %d to color 0x%06x.\n", ui32Index,
+ ui32Color);
+
+ //
+ // Set the desired color.
+ //
+ DRIVER_PALETTE_SET(&ui32Color, ui32Index, 1);
+#endif
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "image" command and draws an image at a given
+// (x, y) position on the display. If no parameters are provided, the image
+// is tiled across the whole display.
+//
+//*****************************************************************************
+int
+Cmd_Image(int argc, char *argv[])
+{
+ int32_t i32X, i32Y, i32Width, i32Height;
+
+ //
+ // Set foreground and background colors to black and white.
+ //
+ GrContextBackgroundSet(&g_sContext, g_ui32Foreground);
+ GrContextForegroundSet(&g_sContext, g_ui32Background);
+
+ //
+ // Get the palette index and color value to use.
+ //
+ if(argc == 1)
+ {
+ UARTprintf("Tiling image across the whole display.\n");
+
+ //
+ // Get the image dimensions.
+ //
+ i32Width = (int32_t)g_pucCurrentImage[1] +
+ 256 * (int32_t)g_pucCurrentImage[2];
+ i32Height = (int32_t)g_pucCurrentImage[3] +
+ 256 * (int32_t)g_pucCurrentImage[4];
+
+ //
+ // Step through each row of images.
+ //
+ for(i32Y = 0; i32Y < GrContextDpyHeightGet(&g_sContext);
+ i32Y += i32Height)
+ {
+ //
+ // Step across each row of images.
+ //
+ for(i32X = 0; i32X < GrContextDpyWidthGet(&g_sContext);
+ i32X += i32Width)
+ {
+ //
+ // Draw the next tile on the display.
+ //
+ DrawImage(&g_sContext, g_ui32Clip, g_pucCurrentImage,
+ i32X, i32Y);
+ }
+ }
+ }
+ else
+ {
+ //
+ // The command has at least 1 parameter. Make sure there are 2.
+ if(argc != 3)
+ {
+ UARTprintf("This command requires 2 parameters - x, y.\n");
+ return(0);
+ }
+
+ //
+ // Read the coordinates.
+ //
+ i32X = (int32_t)ustrtoul(argv[1], 0, 0);
+ i32Y = (int32_t)ustrtoul(argv[2], 0, 0);
+
+ //
+ // Draw the image at this position.
+ //
+ DrawImage(&g_sContext, g_ui32Clip, g_pucCurrentImage, i32X, i32Y);
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "setimg" command and sets the image that
+// will be used with all future calls to Cmd_Image.
+//
+//*****************************************************************************
+int
+Cmd_SetImage(int argc, char *argv[])
+{
+ uint32_t ui32Index;
+
+ //
+ // Get the image index to use.
+ //
+ if(argc != 2)
+ {
+ UARTprintf("This command requires 1 parameter, the image index.\n");
+ return(0);
+ }
+
+ //
+ // Get the index.
+ //
+ ui32Index = (uint32_t)ustrtoul(argv[1], 0, 0);
+
+ //
+ // Check that it is valid.
+ //
+ if(ui32Index >= NUM_IMAGES)
+ {
+ UARTprintf("Image index must be less than %d!\n", NUM_IMAGES);
+ }
+ else
+ {
+ g_pucCurrentImage = g_pImages[ui32Index].pucImage;
+ UARTprintf("Current image is %d - %s.\n", ui32Index,
+ g_pImages[ui32Index].pcDesc);
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "clipimg" command and sets the number of
+// pixels to clip off the left of an image when drawing as a result of all
+// future calls to Cmd_Image.
+//
+//*****************************************************************************
+int
+Cmd_ClipImage(int argc, char *argv[])
+{
+ //
+ // Were we passed any parameters?
+ //
+ if(argc == 1)
+ {
+ UARTprintf("Disabling image clipping.\n");
+ g_ui32Clip = 0;
+ }
+ else if(argc == 2)
+ {
+ g_ui32Clip = (uint32_t)ustrtoul(argv[1], 0, 0);
+ UARTprintf("Image clipping set to %d pixels.\n", g_ui32Clip);
+ }
+ else
+ {
+ UARTprintf("This function requires either zero or 1 parameter!\n");
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "circle" command and draws a circle in a given
+// color and with a given radius on the display. If no parameters are
+// provided, filled and unfilled circles are tiled across the whole display.
+//
+//*****************************************************************************
+int
+Cmd_Circle(int argc, char *argv[])
+{
+ int32_t i32X, i32Y, i32R;
+ bool bFill;
+
+ //
+ // Set the foreground and background colors.
+ //
+ GrContextForegroundSet(&g_sContext, g_ui32Foreground);
+ GrContextBackgroundSet(&g_sContext, g_ui32Background);
+
+ //
+ // Have we been provided with any parameters?
+ //
+ if(argc == 1)
+ {
+ UARTprintf("Tiling circles across the whole display.\n");
+
+ //
+ // We fill the first circle.
+ //
+ bFill = true;
+
+ //
+ // Set the foreground color to white.
+ //
+ GrContextForegroundSet(&g_sContext, ClrWhite);
+
+ //
+ // Step through each row of circles.
+ //
+ for(i32Y = 20; i32Y <= GrContextDpyHeightGet(&g_sContext);
+ i32Y += 40)
+ {
+ //
+ // Step across each row of circles.
+ //
+ for(i32X = 20; i32X <= GrContextDpyWidthGet(&g_sContext);
+ i32X += 40)
+ {
+ //
+ // Draw the next circle on the display.
+ //
+ if(bFill)
+ {
+ GrCircleFill(&g_sContext, i32X, i32Y, 20);
+ }
+ else
+ {
+ GrCircleDraw(&g_sContext, i32X, i32Y, 20);
+ }
+
+
+ //
+ // Flip the outline/fill marker.
+ //
+ bFill = !bFill;
+ }
+ }
+ }
+ else
+ {
+ //
+ // The command has at least 1 parameter. Make sure there are 3.
+ if(argc != 4)
+ {
+ UARTprintf("This command requires 3 parameters - x, y, r.\n");
+ return(0);
+ }
+
+ //
+ // Read the coordinates.
+ //
+ i32X = (int32_t)ustrtoul(argv[1], 0, 0);
+ i32Y = (int32_t)ustrtoul(argv[2], 0, 0);
+ i32R = (int32_t)ustrtoul(argv[3], 0, 0);
+
+ //
+ // Fill the circle at this position.
+ //
+ GrCircleFill(&g_sContext, i32X, i32Y, i32R);
+ }
+
+ return(0);
+}
+
+
+//*****************************************************************************
+//
+// This function implements the "text" command and displays a string of text
+// at a given screen position.
+//
+//*****************************************************************************
+int
+Cmd_Text(int argc, char *argv[])
+{
+ uint32_t ui32Color;
+ int32_t i32X, i32Y;
+ bool bCenter;
+ char *pcString;
+
+ //
+ // Set the foreground and background colors.
+ //
+ GrContextForegroundSet(&g_sContext, g_ui32Foreground);
+ GrContextBackgroundSet(&g_sContext, g_ui32Background);
+
+ //
+ // Set the font to be used.
+ //
+ GrContextFontSet(&g_sContext, g_psFontCmss28);
+
+ //
+ // Set default values for the position and color of the string.
+ //
+ i32X = GrContextDpyWidthGet(&g_sContext) / 2;
+ i32Y = GrContextDpyHeightGet(&g_sContext) / 2;
+ ui32Color = ClrBlack;
+ bCenter = true;
+
+ //
+ // Have we been provided with any parameters?
+ //
+ if(argc == 1)
+ {
+ //
+ // No parameters were provided so just show the default string in
+ // the middle of the display.
+ //
+ pcString = "Some Arbitrary Text";
+ }
+ else
+ {
+ //
+ // The command has at least 1 parameter. This is the string so
+ // remember it.
+ //
+ pcString = argv[1];
+
+ //
+ // Has the X parameter been provided?
+ //
+ if(argc > 2)
+ {
+ //
+ // The X position has been provided.
+ //
+ i32X = (int32_t)ustrtoul(argv[2], 0, 0);
+ bCenter = false;
+ }
+
+ //
+ // Has the Y parameter been provided?
+ //
+ if(argc > 3)
+ {
+ //
+ // The Y position has been provided.
+ //
+ i32Y = (int32_t)ustrtoul(argv[3], 0, 0);
+ bCenter = false;
+ }
+ }
+
+ UARTprintf("Displaying %sstring at (%d, %d)\n",
+ bCenter ? "centered " : "", i32X, i32Y, ui32Color);
+
+ //
+ // Draw the text.Fill the circle at this position.
+ //
+ if(bCenter)
+ {
+ GrStringDrawCentered(&g_sContext, pcString, -1, i32X, i32Y, true);
+ }
+ else
+ {
+ GrStringDraw(&g_sContext, pcString, -1, i32X, i32Y, true);
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "colbar" command and fills the screen with a
+// color bar pattern.
+//
+//*****************************************************************************
+int
+Cmd_ColorBars(int argc, char *argv[])
+{
+ uint32_t ui32X, ui32Width, ui32Height;
+ tRectangle sRect;
+
+ //
+ // Determine the size of the color bar.
+ //
+ ui32Width = GrContextDpyWidthGet(&g_sContext) / NUM_COLOR_BARS;
+ ui32Height = GrContextDpyHeightGet(&g_sContext);
+
+ //
+ // The Y coordinates for each color bar don't change.
+ //
+ sRect.i16YMin = 0;
+ sRect.i16YMax = (ui32Height - 1);
+
+ for(ui32X = 0; ui32X < NUM_COLOR_BARS; ui32X++)
+ {
+ sRect.i16XMin = ui32X * ui32Width;
+ if(ui32X < (NUM_COLOR_BARS - 1))
+ {
+ //
+ // For all but the rightmost bar, set the calculated width.
+ //
+ sRect.i16XMax = sRect.i16XMin + ui32Width - 1;
+ }
+ else
+ {
+ //
+ // Ensure the bars reach the right edge. This prevents any
+ // rounding error from leaving undrawn pixels on the right
+ // depending upon the screen size and number of color bars
+ // in use.
+ //
+ sRect.i16XMax = GrContextDpyWidthGet(&g_sContext);
+ }
+
+ GrContextForegroundSet(&g_sContext, g_pui32BarColors[ui32X]);
+ GrRectFill(&g_sContext, &sRect);
+ }
+
+ //
+ // Revert to the expected foreground color.
+ //
+ GrContextForegroundSet(&g_sContext, g_ui32Foreground);
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "pat" command and draws the same test pattern
+// that is displayed when the application starts.
+//
+//*****************************************************************************
+int
+Cmd_Pattern(int argc, char *argv[])
+{
+ UARTprintf("Drawing initial test pattern.\n");
+ DrawTestPattern(&g_sContext);
+ return(0);
+}
+
+//*****************************************************************************
+//
+// This function implements the "perf" command and draws randomly positioned,
+// filled rectangles for some period of time.
+//
+//*****************************************************************************
+int
+Cmd_Perf(int argc, char *argv[])
+{
+ uint32_t ui32NumSeconds, ui32EndTime, ui32NumPixels;
+ tRectangle sRect, sRectScreen, sRectDraw;
+ uint32_t ui32Width, ui32Height, ui32Color, ui32X, ui32Y;
+
+ //
+ // We need 1 parameter. Is it there?
+ //
+ if(argc != 2)
+ {
+ UARTprintf("This command requires one parameter!\n");
+ return(0);
+ }
+
+ //
+ // Get the required timeout.
+ //
+ ui32NumSeconds = ustrtoul(argv[1], 0, 0);
+ ui32NumPixels = 0;
+
+ UARTprintf("Drawing random rectangles for %d seconds...\n", ui32NumSeconds);
+
+ //
+ // When must the test end?
+ //
+ ui32EndTime = g_ui32SysTickCount + (ui32NumSeconds * SYSTICKS_PER_SECOND);
+
+ //
+ // Get a rectangle representing the screen.
+ //
+ sRectScreen.i16XMin = 0;
+ sRectScreen.i16YMin = 0;
+ sRectScreen.i16XMax = GrContextDpyWidthGet(&g_sContext) - 1;
+ sRectScreen.i16YMax = GrContextDpyHeightGet(&g_sContext) - 1;
+
+ //
+ // Loop for the required time.
+ //
+ while(g_ui32SysTickCount < ui32EndTime)
+ {
+ //
+ // Get some randomized parameters.
+ //
+ ui32Color = urand() & 0xFFFFFF;
+ ui32Width = (urand() & 0xFF) + 64;
+ ui32Height = (urand() & 0xFF) + 32;
+ ui32X = urand() & 0x1FF;
+ ui32Y = urand() & 0x1FF;
+
+ sRect.i16XMin = (short)ui32X;
+ sRect.i16YMin = (short)ui32Y;
+ sRect.i16XMax = sRect.i16XMin + ui32Width;
+ sRect.i16YMax = sRect.i16YMin + ui32Height;
+
+ //
+ // Clip the rectangle to the screen.
+ //
+ if(GrRectIntersectGet(&sRectScreen, &sRect, &sRectDraw))
+ {
+ //
+ // Set the color and fill this rectangle.
+ //
+ GrContextForegroundSet(&g_sContext, ui32Color);
+ GrRectFill(&g_sContext, &sRectDraw);
+
+ //
+ // Update our pixel count.
+ //
+ ui32NumPixels += ((sRectDraw.i16XMax - sRectDraw.i16XMin) + 1) *
+ ((sRectDraw.i16YMax - sRectDraw.i16YMin) + 1);
+ }
+ }
+
+ UARTprintf("Performance test completed.\n");
+ if(ui32NumSeconds)
+ {
+ //
+ // Recycle a couple of variables we're finished with to store the
+ // drawing throughput values.
+ //
+ ui32NumPixels /= ui32NumSeconds;
+ ui32Width = ui32NumPixels >> 20;
+ ui32Height = ((ui32NumPixels - (ui32Width << 20)) * 10) / (1024 * 1024);
+
+ //
+ // Tell the user how fast we managed to draw pixels.
+ //
+ UARTprintf("Throughput %d.%01dMpps\n", ui32Width, ui32Height);
+
+ //
+ // Calculate the number of MB per second.
+ //
+ ui32NumPixels = (ui32NumPixels * DRIVER_BPP) / 8;
+ ui32Width = ui32NumPixels >> 20;
+ ui32Height = ((ui32NumPixels - (ui32Width << 20)) * 10) / (1024 * 1024);
+ UARTprintf(" %d.%01dMBps\n", ui32Width, ui32Height);
+ }
+
+ return(0);
+}
+
+//*****************************************************************************
+//
+// A simple testcase allowing various graphics primitives to be tested.
+//
+//*****************************************************************************
+int
+main(void)
+{
+ uint32_t ui32Val;
+ int nStatus;
+
+ //
+ // Set the PLL and system clock to the frequencies needed to allow
+ // generation of the required pixel clock.
+ //
+ g_ui32SysClk = MAP_SysCtlClockFreqSet(DRIVER_SYS_CLOCK_CONFIG,
+ DRIVER_SYS_CLOCK_FREQUENCY);
+
+ //
+ // Enable GPIOA for the UART.
+ //
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
+
+ //
+ // Set GPIO A0 and A1 as UART pins.
+ //
+ ui32Val = HWREG(GPIO_PORTA_BASE + GPIO_O_PCTL);
+ ui32Val &= 0xFFFFFF00;
+ ui32Val |= 0x00000011;
+ HWREG(GPIO_PORTA_BASE + GPIO_O_PCTL) = ui32Val;
+
+ //
+ // Set GPIO A0 and A1 as UART.
+ //
+ GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
+
+ //
+ // Initialize the UART as a console for text I/O.
+ //
+ UARTStdioConfig(0, 115200, g_ui32SysClk);
+
+ //
+ // Set up the system tick to run and interrupt when it times out.
+ //
+ MAP_SysTickIntEnable();
+ MAP_SysTickPeriodSet(g_ui32SysClk / SYSTICKS_PER_SECOND);
+ MAP_SysTickEnable();
+
+ //
+ // Enable interrupts.
+ //
+ IntMasterEnable();
+
+ //
+ // Print hello message to user.
+ //
+ UARTprintf("\n\nGrLib Driver Test Tool\n\n");
+ UARTprintf("Display configured for %dx%d at %dbpp.\n",
+ DRIVER_NAME.ui16Width, DRIVER_NAME.ui16Height, DRIVER_BPP);
+ UARTprintf("System clock is %dMHz\n", g_ui32SysClk / 1000000);
+ UARTprintf("\nEnter ""help"" for a list of supported commands\n\n");
+
+ //
+ // Initialize the display.
+ //
+ DRIVER_INIT(g_ui32SysClk);
+
+ //
+ // Initialize the graphics context.
+ //
+ GrContextInit(&g_sContext, &DRIVER_NAME);
+
+ //
+ // We allow the testcase to be built such that it issues no drawing orders
+ // other than those requested via the command line. This can be helpful
+ // when bringing up a new display driver.
+ //
+#ifndef NO_GRLIB_CALLS_ON_STARTUP
+ //
+ // Draw a test pattern on the display.
+ //
+ DrawTestPattern(&g_sContext);
+#endif
+
+ //
+ // Loop forever.
+ //
+ while(1)
+ {
+ //
+ // Print a prompt to the console. Show the CWD.
+ //
+ UARTprintf("> ");
+
+ //
+ // Get a line of text from the user.
+ //
+ UARTgets(g_cCmdBuf, sizeof(g_cCmdBuf));
+
+ //
+ // Pass the line from the user to the command processor.
+ // It will be parsed and valid commands executed.
+ //
+ nStatus = CmdLineProcess(g_cCmdBuf);
+
+ //
+ // Handle the case of bad command.
+ //
+ if(nStatus == CMDLINE_BAD_CMD)
+ {
+ UARTprintf("Bad command!\n");
+ }
+
+ //
+ // Handle the case of too many arguments.
+ //
+ else if(nStatus == CMDLINE_TOO_MANY_ARGS)
+ {
+ UARTprintf("Too many arguments for command processor!\n");
+ }
+ }
+}
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewd b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewd
new file mode 100644
index 0000000..484e41a
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewd
@@ -0,0 +1,614 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project>
+ <fileVersion>1</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>15</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state>$TOOLKIT_DIR$\CONFIG\debugger\TexasInstruments\tm4c129xnczad</state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>5.11.0.50579</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>LMIFTDI_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state>5.11.0.50579</state>
+ </option>
+ <option>
+ <name>OCDownloadAttachToProgram</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FlashLoaders</name>
+ <state>,,,,(default),</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ANGEL_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCAngelHeartbeat</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommunication</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommBaud</name>
+ <version>0</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CAngelCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ANGELTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoAngelLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AngelLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARROM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CRomLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomLogFileEditB</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CRomCommunication</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomCommBaud</name>
+ <version>0</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>9</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>JLinkSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>0</version>
+ <state>5</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>MACRAIGOR_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>jtag</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuSpeed</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>DoEmuMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuMultiTarget</name>
+ <state>0@ARM7TDMI</state>
+ </option>
+ <option>
+ <name>EmuHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CEmuCommBaud</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>CEmuCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>jtago</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>UnusedAddr</name>
+ <state>0x00800000</state>
+ </option>
+ <option>
+ <name>CCMacraigorHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CRDIDriverDll</name>
+ <state>Browse to your RDI driver</state>
+ </option>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDIUseETM</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>Browse to your third-party driver</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OSE\OseEpsilonPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+</project>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewp b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewp
new file mode 100644
index 0000000..356394e
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ewp
@@ -0,0 +1,807 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project>
+ <fileVersion>1</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>14</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>ExePath</name>
+ <state>ewarm\Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>ewarm\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>ewarm\List</state>
+ </option>
+ <option>
+ <name>Variant</name>
+ <version>19</version>
+ <state>39</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input variant</name>
+ <version>1</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
+ </option>
+ <option>
+ <name>Output variant</name>
+ <version>0</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FPU</name>
+ <version>2</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>RTConfigPath</name>
+ <state>$TOOLKIT_DIR$\INC\DLib_Config_Normal.h</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>5.11.0.50579</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>5.11.0.50579</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>TM4C129XNCZAD TexasInstruments TM4C129XNCZAD</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>19</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCDefines</name>
+ <state>ewarm</state>
+ <state>PART_TM4C129XNCZAD</state>
+ <state>TARGET_IS_TM4C129_RA0</state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state>Pa050</state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>1</version>
+ <state>1111111</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCLangSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraRules</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$\..</state>
+ <state>$PROJ_DIR$\..\..\..\..</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCStdIncludePath</name>
+ <state>$TOOLKIT_DIR$\INC\</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IInterwork2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>3</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>7</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state>ewarm</state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>AMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AStdIncludes</name>
+ <state>$TOOLKIT_DIR$\INC\</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state>$PROJ_DIR$\..</state>
+ <state>$PROJ_DIR$\..\..\..\..</state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>1</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state>grlib_driver_test.bin</state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data/>
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>5</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>grlib_driver_test.out</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>$PROJ_DIR$\grlib_driver_test.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state>__iar_program_start</state>
+ </option>
+ <option>
+ <name>IlinkNXPLPCChecksum</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlgo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data/>
+ </settings>
+ </configuration>
+ <group>
+ <name>Libraries</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\driverlib\ewarm\Exe\driverlib.a</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\grlib\ewarm\Exe\grlib.a</name>
+ </file>
+ </group>
+ <group>
+ <name>Source</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\utils\cmdline.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\grlib_driver_test.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\images.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\drivers\kentec320x240x16_ssd2119.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\drivers\pinout.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\startup_ewarm.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\utils\uartstdio.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\utils\ustdlib.c</name>
+ </file>
+ </group>
+</project>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.icf b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.icf
new file mode 100644
index 0000000..bfef852
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.icf
@@ -0,0 +1,78 @@
+//*****************************************************************************
+//
+// grlib_driver_test.icf - Linker configuration file for grlib_driver_test.
+//
+// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+//
+//*****************************************************************************
+
+//
+// Define a memory region that covers the entire 4 GB addressible space of the
+// processor.
+//
+define memory mem with size = 4G;
+
+//
+// Define a region for the on-chip flash.
+//
+define region FLASH = mem:[from 0x00000000 to 0x000fffff];
+
+//
+// Define a region for the on-chip SRAM.
+//
+define region SRAM = mem:[from 0x20000000 to 0x2003ffff];
+
+//
+// Define a block for the heap. The size should be set to something other
+// than zero if things in the C library that require the heap are used.
+//
+define block HEAP with alignment = 8, size = 0x00000000 { };
+
+//
+// Indicate that the read/write values should be initialized by copying from
+// flash.
+//
+initialize by copy { readwrite };
+
+//
+// Indicate that the noinit values should be left alone. This includes the
+// stack, which if initialized will destroy the return address from the
+// initialization code, causing the processor to branch to zero and fault.
+//
+do not initialize { section .noinit };
+
+//
+// Place the interrupt vectors at the start of flash.
+//
+place at start of FLASH { readonly section .intvec };
+
+//
+// Place the remainder of the read-only items into flash.
+//
+place in FLASH { readonly };
+
+//
+// Place the RAM vector table at the start of SRAM.
+//
+place at start of SRAM { section VTABLE };
+
+//
+// Place all read/write items into SRAM.
+//
+place in SRAM { readwrite, block HEAP };
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ld b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ld
new file mode 100644
index 0000000..1ab660d
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.ld
@@ -0,0 +1,57 @@
+/******************************************************************************
+ *
+ * grlib_driver_test.ld - Linker configuration file for grlib_driver_test.
+ *
+ * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+ * Software License Agreement
+ *
+ * Texas Instruments (TI) is supplying this software for use solely and
+ * exclusively on TI's microcontroller products. The software is owned by
+ * TI and/or its suppliers, and is protected under applicable copyright
+ * laws. You may not combine this software with "viral" open-source
+ * software in order to form a larger program.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+ * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+ * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+ * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+ * DAMAGES, FOR ANY REASON WHATSOEVER.
+ *
+ * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+ *
+ *****************************************************************************/
+
+MEMORY
+{
+ FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000
+ SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000
+}
+
+SECTIONS
+{
+ .text :
+ {
+ _text = .;
+ KEEP(*(.isr_vector))
+ *(.text*)
+ *(.rodata*)
+ _etext = .;
+ } > FLASH
+
+ .data : AT(ADDR(.text) + SIZEOF(.text))
+ {
+ _data = .;
+ *(vtable)
+ *(.data*)
+ _edata = .;
+ } > SRAM
+
+ .bss :
+ {
+ _bss = .;
+ *(.bss*)
+ *(COMMON)
+ _ebss = .;
+ } > SRAM
+}
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.sct b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.sct
new file mode 100644
index 0000000..e10719a
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.sct
@@ -0,0 +1,47 @@
+;******************************************************************************
+;
+; grlib_driver_test.sct - Linker configuration file for grlib_driver_test.
+;
+; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+; Software License Agreement
+;
+; Texas Instruments (TI) is supplying this software for use solely and
+; exclusively on TI's microcontroller products. The software is owned by
+; TI and/or its suppliers, and is protected under applicable copyright
+; laws. You may not combine this software with "viral" open-source
+; software in order to form a larger program.
+;
+; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+; DAMAGES, FOR ANY REASON WHATSOEVER.
+;
+; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+;
+;******************************************************************************
+
+LR_IROM 0x00000000 0x00100000
+{
+ ;
+ ; Specify the Execution Address of the code and the size.
+ ;
+ ER_IROM 0x00000000 0x00100000
+ {
+ *.o (RESET, +First)
+ * (InRoot$$Sections, +RO)
+ }
+
+ ;
+ ; Specify the Execution Address of the data area.
+ ;
+ RW_IRAM 0x20000000 0x00040000
+ {
+ ;
+ ; Uncomment the following line in order to use IntRegister().
+ ;
+ ;* (vtable, +First)
+ * (+RW, +ZI)
+ }
+}
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvopt b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvopt
new file mode 100644
index 0000000..93d0dd9
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvopt
@@ -0,0 +1,387 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
+
+ <SchemaVersion>1.0</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Extensions>
+ <cExt>*.c</cExt>
+ <aExt>*.s*; *.src; *.a*</aExt>
+ <oExt>*.obj</oExt>
+ <lExt>*.lib</lExt>
+ <tExt>*.txt; *.h; *.inc</tExt>
+ <pExt>*.plm</pExt>
+ <CppX>*.cpp</CppX>
+ </Extensions>
+
+ <DaveTm>
+ <dwLowDateTime>0</dwLowDateTime>
+ <dwHighDateTime>0</dwHighDateTime>
+ </DaveTm>
+
+ <Target>
+ <TargetName>grlib_driver_test</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <CLKADS>25000000</CLKADS>
+ <OPTTT>
+ <gFlags>1</gFlags>
+ <BeepAtEnd>1</BeepAtEnd>
+ <RunSim>1</RunSim>
+ <RunTarget>0</RunTarget>
+ </OPTTT>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <FlashByte>65535</FlashByte>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ </OPTHX>
+ <OPTLEX>
+ <PageWidth>79</PageWidth>
+ <PageLength>66</PageLength>
+ <TabStop>8</TabStop>
+ <ListingPath>.\rvmdk\</ListingPath>
+ </OPTLEX>
+ <ListingPage>
+ <CreateCListing>1</CreateCListing>
+ <CreateAListing>1</CreateAListing>
+ <CreateLListing>1</CreateLListing>
+ <CreateIListing>0</CreateIListing>
+ <AsmCond>1</AsmCond>
+ <AsmSymb>1</AsmSymb>
+ <AsmXref>0</AsmXref>
+ <CCond>1</CCond>
+ <CCode>0</CCode>
+ <CListInc>0</CListInc>
+ <CSymb>0</CSymb>
+ <LinkerCodeListing>0</LinkerCodeListing>
+ </ListingPage>
+ <OPTXL>
+ <LMap>1</LMap>
+ <LComments>1</LComments>
+ <LGenerateSymbols>1</LGenerateSymbols>
+ <LLibSym>1</LLibSym>
+ <LLines>1</LLines>
+ <LLocSym>1</LLocSym>
+ <LPubSym>1</LPubSym>
+ <LXref>0</LXref>
+ <LExpSel>0</LExpSel>
+ </OPTXL>
+ <OPTFL>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <IsCurrentTarget>1</IsCurrentTarget>
+ </OPTFL>
+ <CpuCode>255</CpuCode>
+ <Books>
+ <Book>
+ <Number>0</Number>
+ <Title>Data Sheet</Title>
+ <Path>DATASHTS\Luminary\TM4C129XNCZAD.PDF</Path>
+ </Book>
+ </Books>
+ <DllOpt>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments>-MPU</SimDllArguments>
+ <SimDlgDllName>DCM.DLL</SimDlgDllName>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments>-MPU</TargetDllArguments>
+ <TargetDlgDllName>TCM.DLL</TargetDlgDllName>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOpt>
+ <DebugOpt>
+ <uSim>0</uSim>
+ <uTrg>1</uTrg>
+ <sLdApp>1</sLdApp>
+ <sGomain>1</sGomain>
+ <sRbreak>1</sRbreak>
+ <sRwatch>1</sRwatch>
+ <sRmem>1</sRmem>
+ <sRfunc>1</sRfunc>
+ <sRbox>1</sRbox>
+ <tLdApp>1</tLdApp>
+ <tGomain>0</tGomain>
+ <tRbreak>1</tRbreak>
+ <tRwatch>1</tRwatch>
+ <tRmem>1</tRmem>
+ <tRfunc>0</tRfunc>
+ <tRbox>1</tRbox>
+ <sRunDeb>0</sRunDeb>
+ <sLrtime>0</sLrtime>
+ <nTsel>4</nTsel>
+ <sDll></sDll>
+ <sDllPa></sDllPa>
+ <sDlgDll></sDlgDll>
+ <sDlgPa></sDlgPa>
+ <sIfile></sIfile>
+ <tDll></tDll>
+ <tDllPa></tDllPa>
+ <tDlgDll></tDlgDll>
+ <tDlgPa></tDlgPa>
+ <tIfile></tIfile>
+ <pMon>BIN\lmidk-agdi.dll</pMon>
+ </DebugOpt>
+ <TargetDriverDllRegistry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>lmidk-agdi</Key>
+ <Name>-O4614 -S1 -FO29</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>DLGTARM</Key>
+ <Name></Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ARMDBGFLAGS</Key>
+ <Name></Name>
+ </SetRegEntry>
+ </TargetDriverDllRegistry>
+ <DebugFlag>
+ <trace>0</trace>
+ <periodic>1</periodic>
+ <aLwin>0</aLwin>
+ <aCover>0</aCover>
+ <aSer1>0</aSer1>
+ <aSer2>0</aSer2>
+ <aPa>0</aPa>
+ <viewmode>1</viewmode>
+ <vrSel>0</vrSel>
+ <aSym>0</aSym>
+ <aTbox>0</aTbox>
+ <AscS1>0</AscS1>
+ <AscS2>0</AscS2>
+ <AscS3>0</AscS3>
+ <aSer3>0</aSer3>
+ <eProf>0</eProf>
+ <aLa>0</aLa>
+ <aPa1>0</aPa1>
+ <AscS4>0</AscS4>
+ <aSer4>0</aSer4>
+ <StkLoc>0</StkLoc>
+ <TrcWin>0</TrcWin>
+ <newCpu>0</newCpu>
+ <uProt>0</uProt>
+ </DebugFlag>
+ <LintExecutable></LintExecutable>
+ <LintConfigFile></LintConfigFile>
+ </TargetOption>
+ </Target>
+
+ <Group>
+ <GroupName>Source</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>1</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\..\..\..\utils\cmdline.c</PathWithFileName>
+ <FilenameWithoutPath>cmdline.c</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>2</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>.\grlib_driver_test.c</PathWithFileName>
+ <FilenameWithoutPath>grlib_driver_test.c</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>3</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>.\images.c</PathWithFileName>
+ <FilenameWithoutPath>images.c</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>4</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\drivers\kentec320x240x16_ssd2119.c</PathWithFileName>
+ <FilenameWithoutPath>kentec320x240x16_ssd2119.c</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>5</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\drivers\pinout.c</PathWithFileName>
+ <FilenameWithoutPath>pinout.c</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>6</FileNumber>
+ <FileType>2</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>.\startup_rvmdk.S</PathWithFileName>
+ <FilenameWithoutPath>startup_rvmdk.S</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>7</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\..\..\..\utils\uartstdio.c</PathWithFileName>
+ <FilenameWithoutPath>uartstdio.c</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>8</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\..\..\..\utils\ustdlib.c</PathWithFileName>
+ <FilenameWithoutPath>ustdlib.c</FilenameWithoutPath>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Libraries</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>9</FileNumber>
+ <FileType>4</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\..\..\..\driverlib\rvmdk\driverlib.lib</PathWithFileName>
+ <FilenameWithoutPath>driverlib.lib</FilenameWithoutPath>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>10</FileNumber>
+ <FileType>4</FileType>
+ <tvExp>0</tvExp>
+ <Focus>0</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>0</TopLine>
+ <CurrentLine>0</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>..\..\..\..\grlib\rvmdk\grlib.lib</PathWithFileName>
+ <FilenameWithoutPath>grlib.lib</FilenameWithoutPath>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Documentation</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>11</FileNumber>
+ <FileType>5</FileType>
+ <tvExp>0</tvExp>
+ <Focus>1</Focus>
+ <ColumnNumber>0</ColumnNumber>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <TopLine>1</TopLine>
+ <CurrentLine>1</CurrentLine>
+ <bDave2>0</bDave2>
+ <PathWithFileName>.\readme.txt</PathWithFileName>
+ <FilenameWithoutPath>readme.txt</FilenameWithoutPath>
+ <WindowPosition>
+ <length>44</length>
+ <flags>0</flags>
+ <showCmd>1</showCmd>
+ <MinPosition>
+ <xPos>-1</xPos>
+ <yPos>-1</yPos>
+ </MinPosition>
+ <MaxPosition>
+ <xPos>-1</xPos>
+ <yPos>-1</yPos>
+ </MaxPosition>
+ <NormalPosition>
+ <Top>0</Top>
+ <Left>0</Left>
+ <Right>729</Right>
+ <Bottom>300</Bottom>
+ </NormalPosition>
+ </WindowPosition>
+ </File>
+ </Group>
+
+ <MDIGroups>
+ <Orientation>1</Orientation>
+ <ActiveMDIGroup>0</ActiveMDIGroup>
+ <MDIGroup>
+ <Size>100</Size>
+ <ActiveTab>0</ActiveTab>
+ <Documents>
+ <Doc>
+ <Name>.\readme.txt</Name>
+ <ColumnNumber>0</ColumnNumber>
+ <TopLine>1</TopLine>
+ <CurrentLine>1</CurrentLine>
+ </Doc>
+ </Documents>
+ </MDIGroup>
+ </MDIGroups>
+
+</ProjectOpt>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvproj b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvproj
new file mode 100644
index 0000000..d5d739f
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test.uvproj
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
+
+ <SchemaVersion>1.1</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Targets>
+ <Target>
+ <TargetName>grlib_driver_test</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>TM4C129XNCZAD</Device>
+ <Vendor>Texas Instruments</Vendor>
+ <Cpu>IRAM(0x20000000-0x2003FFFF) IROM(0-0xFFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2</Cpu>
+ <FlashUtilSpec></FlashUtilSpec>
+ <StartupFile>"STARTUP\Luminary\Startup.s" ("Luminary Startup Code")</StartupFile>
+ <FlashDriverDll>UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0LM4F_1024 -FS00 -FL0100000)</FlashDriverDll>
+ <DeviceId>5919</DeviceId>
+ <RegisterFile>LM4Fxxxx.H</RegisterFile>
+ <MemoryEnv></MemoryEnv>
+ <Cmp></Cmp>
+ <Asm></Asm>
+ <Linker></Linker>
+ <OHString></OHString>
+ <InfinionOptionDll></InfinionOptionDll>
+ <SLE66CMisc></SLE66CMisc>
+ <SLE66AMisc></SLE66AMisc>
+ <SLE66LinkerMisc></SLE66LinkerMisc>
+ <UseEnv>0</UseEnv>
+ <BinPath></BinPath>
+ <IncludePath></IncludePath>
+ <LibPath></LibPath>
+ <RegisterFilePath>Luminary\</RegisterFilePath>
+ <DBRegisterFilePath>Luminary\</DBRegisterFilePath>
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>.\rvmdk\</OutputDirectory>
+ <OutputName>grlib_driver_test</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath>.\rvmdk\</ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>1</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name>fromelf --bin --output .\rvmdk\grlib_driver_test.bin .\rvmdk\grlib_driver_test.axf</UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ </AfterMake>
+ <SelectedForBatchBuild>0</SelectedForBatchBuild>
+ <SVCSIdString></SVCSIdString>
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument></CustomArgument>
+ <IncludeLibraryModules></IncludeLibraryModules>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments>-MPU</SimDllArguments>
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments>-MPU</TargetDllArguments>
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ <Simulator>
+ <UseSimulator>0</UseSimulator>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>1</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>1</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+ </Simulator>
+ <Target>
+ <UseTarget>1</UseTarget>
+ <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+ <RunToMain>0</RunToMain>
+ <RestoreBreakpoints>1</RestoreBreakpoints>
+ <RestoreWatchpoints>1</RestoreWatchpoints>
+ <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+ <RestoreFunctions>0</RestoreFunctions>
+ <RestoreToolbox>1</RestoreToolbox>
+ </Target>
+ <RunDebugAfterBuild>0</RunDebugAfterBuild>
+ <TargetSelection>4</TargetSelection>
+ <SimDlls>
+ <CpuDll></CpuDll>
+ <CpuDllArguments></CpuDllArguments>
+ <PeripheralDll></PeripheralDll>
+ <PeripheralDllArguments></PeripheralDllArguments>
+ <InitializationFile></InitializationFile>
+ </SimDlls>
+ <TargetDlls>
+ <CpuDll></CpuDll>
+ <CpuDllArguments></CpuDllArguments>
+ <PeripheralDll></PeripheralDll>
+ <PeripheralDllArguments></PeripheralDllArguments>
+ <InitializationFile></InitializationFile>
+ <Driver>BIN\lmidk-agdi.dll</Driver>
+ </TargetDlls>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4099</DriverSelection>
+ </Flash1>
+ <Flash2>BIN\lmidk-agdi.dll</Flash2>
+ <Flash3></Flash3>
+ <Flash4></Flash4>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>0</AdsALst>
+ <AdsACrf>0</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M4"</AdsCpuType>
+ <RvctDeviceName></RvctDeviceName>
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>2</RvdsVP>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>1</useUlib>
+ <EndSel>0</EndSel>
+ <uLtcg>0</uLtcg>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x40000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x100000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x100000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x40000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector></RvctStartVector>
+ </ArmAdsMisc>
+ <Cads>
+ <interw>0</interw>
+ <Optim>3</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>1</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>2</wLevel>
+ <uThumb>0</uThumb>
+ <VariousControls>
+ <MiscControls>--c99</MiscControls>
+ <Define>rvmdk PART_TM4C129XNCZAD TARGET_IS_TM4C129_RA0</Define>
+ <Undefine></Undefine>
+ <IncludePath>..;..\..\..\..;</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define></Define>
+ <Undefine></Undefine>
+ <IncludePath></IncludePath>
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>0</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange>0x00000000</TextAddressRange>
+ <DataAddressRange>0x20000000</DataAddressRange>
+ <ScatterFile>grlib_driver_test.sct</ScatterFile>
+ <IncludeLibs></IncludeLibs>
+ <IncludeLibsPath></IncludeLibsPath>
+ <Misc>--entry Reset_Handler</Misc>
+ <LinkerInputFile></LinkerInputFile>
+ <DisabledWarnings></DisabledWarnings>
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Source</GroupName>
+ <Files>
+ <File>
+ <FileName>cmdline.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\..\..\utils\cmdline.c</FilePath>
+ </File>
+ <File>
+ <FileName>grlib_driver_test.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>.\grlib_driver_test.c</FilePath>
+ </File>
+ <File>
+ <FileName>images.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>.\images.c</FilePath>
+ </File>
+ <File>
+ <FileName>kentec320x240x16_ssd2119.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\drivers\kentec320x240x16_ssd2119.c</FilePath>
+ </File>
+ <File>
+ <FileName>pinout.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\drivers\pinout.c</FilePath>
+ </File>
+ <File>
+ <FileName>startup_rvmdk.S</FileName>
+ <FileType>2</FileType>
+ <FilePath>.\startup_rvmdk.S</FilePath>
+ </File>
+ <File>
+ <FileName>uartstdio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\..\..\utils\uartstdio.c</FilePath>
+ </File>
+ <File>
+ <FileName>ustdlib.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>..\..\..\..\utils\ustdlib.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Libraries</GroupName>
+ <Files>
+ <File>
+ <FileName>driverlib.lib</FileName>
+ <FileType>4</FileType>
+ <FilePath>..\..\..\..\driverlib\rvmdk\driverlib.lib</FilePath>
+ </File>
+ <File>
+ <FileName>grlib.lib</FileName>
+ <FileType>4</FileType>
+ <FilePath>..\..\..\..\grlib\rvmdk\grlib.lib</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Documentation</GroupName>
+ <Files>
+ <File>
+ <FileName>readme.txt</FileName>
+ <FileType>5</FileType>
+ <FilePath>.\readme.txt</FilePath>
+ </File>
+ </Files>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+
+</Project>
diff --git a/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd
new file mode 100644
index 0000000..443e9cd
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/grlib_driver_test_ccs.cmd
@@ -0,0 +1,70 @@
+/******************************************************************************
+ *
+ * grlib_driver_test_ccs.cmd - CCS linker configuration file for grlib_driver_test.
+ *
+ * Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+ * Software License Agreement
+ *
+ * Texas Instruments (TI) is supplying this software for use solely and
+ * exclusively on TI's microcontroller products. The software is owned by
+ * TI and/or its suppliers, and is protected under applicable copyright
+ * laws. You may not combine this software with "viral" open-source
+ * software in order to form a larger program.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+ * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+ * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+ * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+ * DAMAGES, FOR ANY REASON WHATSOEVER.
+ *
+ * This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+ *
+ *****************************************************************************/
+
+--retain=g_pfnVectors
+
+/* The following command line options are set as part of the CCS project. */
+/* If you are building using the command line, or for some reason want to */
+/* define them here, you can uncomment and modify these lines as needed. */
+/* If you are using CCS for building, it is probably better to make any such */
+/* modifications in your CCS project and leave this file alone. */
+/* */
+/* --heap_size=0 */
+/* --stack_size=256 */
+/* --library=rtsv7M3_T_le_eabi.lib */
+
+/* The starting address of the application. Normally the interrupt vectors */
+/* must be located at the beginning of the application. */
+#define APP_BASE 0x00000000
+#define RAM_BASE 0x20000000
+
+/* System memory map */
+
+MEMORY
+{
+ /* Application stored in and executes from internal flash */
+ FLASH (RX) : origin = APP_BASE, length = 0x00100000
+ /* Application uses internal RAM for data */
+ SRAM (RWX) : origin = 0x20000000, length = 0x00040000
+}
+
+/* Section allocation in memory */
+
+SECTIONS
+{
+ .intvecs: > APP_BASE
+ .text : > FLASH
+ .const : > FLASH
+ .cinit : > FLASH
+ .pinit : > FLASH
+ .init_array : > FLASH
+
+ .vtable : > RAM_BASE
+ .data : > SRAM
+ .bss : > SRAM
+ .sysmem : > SRAM
+ .stack : > SRAM
+}
+
+__STACK_TOP = __stack + 1024;
diff --git a/boards/dk-tm4c129x/grlib_driver_test/images.c b/boards/dk-tm4c129x/grlib_driver_test/images.c
new file mode 100644
index 0000000..4a42d7c
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/images.c
@@ -0,0 +1,551 @@
+//*****************************************************************************
+//
+// images.c - Data for the images used by the application.
+//
+// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+//
+//*****************************************************************************
+#include <stdint.h>
+#include <stdbool.h>
+#include "grlib/grlib.h"
+
+//*****************************************************************************
+//
+// The image of the TI logo.
+//
+//*****************************************************************************
+const unsigned char g_pucLogo[] =
+{
+ IMAGE_FMT_4BPP_COMP,
+ 80, 0,
+ 75, 0,
+
+ 15,
+ 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x0f,
+ 0x06, 0x05, 0x27,
+ 0x09, 0x07, 0x3b,
+ 0x0c, 0x09, 0x4c,
+ 0x0d, 0x0a, 0x56,
+ 0x10, 0x0c, 0x68,
+ 0x13, 0x0f, 0x7a,
+ 0x15, 0x10, 0x89,
+ 0x17, 0x11, 0x95,
+ 0x19, 0x14, 0xa5,
+ 0x1c, 0x16, 0xb6,
+ 0x1e, 0x18, 0xc7,
+ 0x22, 0x1a, 0xdc,
+ 0x22, 0x1b, 0xe3,
+ 0x24, 0x1c, 0xed,
+
+ 0xfc, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x04, 0xfe, 0x13, 0xee, 0xee,
+ 0xee, 0xe9, 0xef, 0xd1, 0x07, 0x07, 0xc2, 0x77, 0x29, 0x04, 0xff, 0xff,
+ 0xff, 0xe9, 0xff, 0x3c, 0xff, 0xd1, 0x07, 0x07, 0x77, 0x29, 0x04, 0xff,
+ 0x23, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x07, 0x07, 0xc2, 0x77, 0x29,
+ 0x04, 0xff, 0xff, 0xff, 0xe9, 0xff, 0x2e, 0xff, 0xd1, 0x05, 0x01, 0x07,
+ 0xbf, 0x32, 0x04, 0x11, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x02,
+ 0x0e, 0x6f, 0xdc, 0xdc, 0xf7, 0x07, 0xbf, 0x32, 0x04, 0x11, 0xff, 0xff,
+ 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x02, 0x0e, 0xaf, 0xff, 0xff, 0xf5, 0x07,
+ 0xbf, 0x32, 0x04, 0x11, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x02,
+ 0x0e, 0xdf, 0xff, 0xff, 0xf2, 0x07, 0xbf, 0x32, 0x04, 0x11, 0xff, 0xff,
+ 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x01, 0x73, 0x01, 0xc5, 0x07, 0xa7, 0x00,
+ 0x04, 0x29, 0x11, 0xae, 0x04, 0x03, 0x99, 0xa0, 0x07, 0xbf, 0x72, 0x04,
+ 0xc5, 0x29, 0x11, 0xff, 0xff, 0xd1, 0x01, 0x08, 0x99, 0x76, 0x70, 0x07,
+ 0xbf, 0x72, 0x04, 0x29, 0x11, 0xff, 0x20, 0xff, 0xd1, 0x01, 0x07, 0xcb,
+ 0xbb, 0xbc, 0x40, 0xe1, 0x07, 0xbf, 0x72, 0x04, 0xff, 0xff, 0xff, 0xe9,
+ 0x1e, 0xff, 0xff, 0xd1, 0x07, 0x07, 0x77, 0x29, 0x04, 0x11, 0xff, 0xff,
+ 0xff, 0xe9, 0xff, 0xff, 0xd1, 0x07, 0xe1, 0x07, 0x77, 0x29, 0x04, 0xff,
+ 0xff, 0xff, 0xe9, 0x00, 0xff, 0xff, 0xe6, 0x45, 0x63, 0x00, 0x26, 0x55,
+ 0x2b, 0x55, 0x64, 0xda, 0x55, 0xe9, 0x51, 0x04, 0xd4, 0x03, 0x00, 0x00,
+ 0x04, 0xff, 0xff, 0xff, 0xe9, 0xd2, 0x03, 0xf7, 0x00, 0x6f, 0xff, 0xff,
+ 0xf9, 0xda, 0x62, 0x63, 0xf2, 0x04, 0xd4, 0x00, 0x00, 0x04, 0x54, 0x22,
+ 0x00, 0xf3, 0x00, 0x9f, 0xff, 0xff, 0xf6, 0x00, 0x8f, 0xb1, 0x74, 0xf2,
+ 0x04, 0xd4, 0x00, 0x00, 0x04, 0x54, 0x8e, 0x22, 0xd1, 0x00, 0xcf, 0x0a,
+ 0xd9, 0x62, 0xf2, 0xc6, 0x04, 0xd4, 0x00, 0x00, 0x04, 0x54, 0x22, 0xc0,
+ 0x45, 0x01, 0x01, 0xd1, 0x01, 0xef, 0x74, 0xf2, 0x04, 0x8c, 0xd4, 0x00,
+ 0x00, 0x04, 0x54, 0x22, 0x90, 0x03, 0xb6, 0x01, 0xb0, 0xda, 0x62, 0xf2,
+ 0x04, 0xd4, 0x00, 0x32, 0x00, 0x04, 0x4d, 0x11, 0x60, 0x06, 0x01, 0x90,
+ 0xd8, 0xda, 0x62, 0xf2, 0x04, 0xd4, 0x00, 0x00, 0x04, 0xcb, 0x4d, 0x11,
+ 0x30, 0x09, 0x01, 0x50, 0xda, 0x62, 0x62, 0xf2, 0x04, 0xd4, 0x00, 0x00,
+ 0x04, 0x4d, 0xff, 0x0b, 0xff, 0xfe, 0x10, 0x0c, 0x01, 0x30, 0xda, 0x62,
+ 0x62, 0xf2, 0x04, 0xd4, 0x00, 0x00, 0x04, 0x4d, 0xda, 0x00, 0xaa, 0xb9,
+ 0x00, 0x1e, 0xff, 0xff, 0xfe, 0x10, 0x0b, 0x1a, 0xba, 0xaa, 0xdf, 0x62,
+ 0xf2, 0x04, 0xd4, 0x1a, 0x00, 0x00, 0x04, 0x62, 0x41, 0x80, 0x49, 0x2f,
+ 0x12, 0xff, 0xff, 0xfb, 0x11, 0x01, 0xef, 0x62, 0xf3, 0xc6, 0x04, 0xd4,
+ 0x00, 0x00, 0x04, 0x62, 0x41, 0x60, 0x85, 0x49, 0x6f, 0xff, 0xff, 0xf8,
+ 0x6f, 0xf4, 0x04, 0xc4, 0xd4, 0x5e, 0xff, 0xff, 0x30, 0x49, 0x9f, 0xff,
+ 0x2b, 0xff, 0xf6, 0x11, 0x06, 0x6b, 0xf7, 0x04, 0xd4, 0x11, 0x00, 0x00,
+ 0x04, 0x5b, 0xff, 0xfe, 0x10, 0x49, 0x0a, 0xbf, 0xff, 0xff, 0xf3, 0x11,
+ 0x09, 0x6b, 0xfc, 0x86, 0x02, 0x05, 0x55, 0x55, 0x55, 0xe9, 0xd1, 0x38,
+ 0x90, 0x5b, 0xff, 0xfb, 0x01, 0x01, 0xef, 0xff, 0xff, 0x55, 0xd1, 0x11,
+ 0x0c, 0x6c, 0x40, 0x69, 0x0d, 0x14, 0xd5, 0x7c, 0x4a, 0xf9, 0x01, 0x03,
+ 0x01, 0xb0, 0x19, 0x56, 0x1f, 0x1c, 0xc0, 0x69, 0x09, 0x06, 0xc6, 0xf6,
+ 0xaa, 0x01, 0x06, 0x01, 0x80, 0x19, 0x3f, 0x1c, 0xfa, 0xb0, 0x69, 0x05,
+ 0x06, 0xc6, 0xf4, 0x02, 0x22, 0x00, 0x41, 0x08, 0x01, 0x50, 0x01, 0x22,
+ 0x20, 0x7f, 0x1d, 0x06, 0xb4, 0x00, 0x00, 0x00, 0xcf, 0x05, 0x6d, 0xff,
+ 0x04, 0xfe, 0xff, 0xfe, 0x10, 0x0b, 0x01, 0x20, 0x0c, 0x81, 0x3f, 0xff,
+ 0xf9, 0x00, 0x00, 0x00, 0x5f, 0x8f, 0x80, 0x46, 0xfc, 0x00, 0x1f, 0xff,
+ 0xff, 0xfe, 0x10, 0x40, 0x1e, 0x3f, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x08,
+ 0xc0, 0x8f, 0x46, 0xfa, 0x00, 0x3f, 0xff, 0xff, 0xfb, 0xc0, 0xda, 0x2e,
+ 0xf9, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xc0, 0x87, 0x3d, 0xf6, 0x00, 0x5f,
+ 0xff, 0xff, 0xf8, 0x20, 0x00, 0x6f, 0x47, 0xff, 0xf9, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x08, 0x87, 0x3d, 0xf3, 0x00, 0x9f, 0xff, 0x30, 0xff, 0xf6,
+ 0xda, 0x36, 0xf9, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x6f, 0x7f, 0x34,
+ 0xf1, 0x00, 0xcf, 0x18, 0xff, 0xff, 0xf3, 0xda, 0x3e, 0xf9, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x05, 0x7f, 0x34, 0xc0, 0x01, 0x0c, 0xef, 0xff,
+ 0xff, 0xd0, 0xda, 0x3e, 0xf9, 0x00, 0x2c, 0x00, 0x00, 0xe9, 0x6f, 0x77,
+ 0x2b, 0x90, 0x02, 0x90, 0x01, 0xb0, 0x03, 0x5f, 0xff, 0xff, 0xf9, 0x00,
+ 0x2c, 0x00, 0x00, 0xe9, 0x09, 0x6f, 0x23, 0x60, 0x06, 0xb0, 0x01, 0x80,
+ 0xda, 0x46, 0xf9, 0x00, 0x00, 0x00, 0x99, 0xe9, 0x01, 0xdf, 0x67, 0x1a,
+ 0x30, 0x09, 0x01, 0x61, 0x50, 0xda, 0x4e, 0xf9, 0x00, 0x00, 0x00, 0xe9,
+ 0x31, 0x00, 0x7f, 0x67, 0x19, 0xfe, 0x10, 0x0b, 0x01, 0x61, 0x20, 0xda,
+ 0x4e, 0xf9, 0x00, 0x00, 0x00, 0xe9, 0x30, 0x00, 0x2f, 0x67, 0x19, 0xfc,
+ 0x00, 0x1e, 0xff, 0x08, 0xff, 0xfd, 0x10, 0x0c, 0x67, 0xff, 0xff, 0xf9,
+ 0x13, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x0a, 0x67, 0x5b, 0x00, 0x3f, 0xee,
+ 0xee, 0xfb, 0x00, 0x05, 0xee, 0xed, 0x84, 0x6f, 0xf9, 0x00, 0x00, 0x00,
+ 0xe9, 0x00, 0x05, 0xc0, 0x77, 0x29, 0xf6, 0x00, 0x11, 0x11, 0x11, 0x11,
+ 0x08, 0x00, 0x00, 0x01, 0x04, 0x57, 0xf9, 0x00, 0x00, 0x44, 0x00, 0xe9,
+ 0x00, 0x00, 0xcf, 0x6f, 0xff, 0xff, 0x52, 0xf2, 0x5e, 0x06, 0x5e, 0xc8,
+ 0x42, 0x6e, 0x6f, 0x85, 0x6a, 0xfc, 0x42, 0x25, 0xdf, 0x29, 0xe1, 0x5e,
+ 0x42, 0x0a, 0x5a, 0xff, 0xff, 0xfd, 0x72, 0x7e, 0x00, 0x21, 0x00, 0x0c,
+ 0x6a, 0x90, 0x00, 0x00, 0x1c, 0x29, 0x63, 0xc0, 0x5f, 0x5a, 0xff, 0xfc,
+ 0x40, 0x86, 0x41, 0x50, 0x02, 0x01, 0xf8, 0x01, 0x01, 0xef, 0xff, 0xff,
+ 0x51, 0xc0, 0x46, 0x1e, 0x59, 0xff, 0xfb, 0x20, 0x8e, 0x84, 0x4b, 0x3f,
+ 0xff, 0xff, 0x90, 0x02, 0x5f, 0xff, 0x20, 0xff, 0xe1, 0x3e, 0x4f, 0xff,
+ 0xff, 0xff, 0xfd, 0x62, 0x30, 0x96, 0x54, 0x01, 0x6b, 0xb5, 0x0b, 0x0b,
+ 0x10, 0xff, 0xff, 0xf6, 0x36, 0x7f, 0xff, 0xff, 0xff, 0x74, 0x70, 0x9e,
+ 0x5e, 0x1d, 0x03, 0x27, 0x00, 0x00, 0x0e, 0x9f, 0xff, 0xff, 0xd2, 0x07,
+ 0xbf, 0x1d, 0xbf, 0x00, 0xff, 0xff, 0xfd, 0x96, 0x54, 0x33, 0x33, 0x33,
+ 0x03, 0x33, 0x32, 0xcf, 0xff, 0xfc, 0x10, 0x07, 0xbf, 0x86, 0x75, 0x4f,
+ 0xff, 0xff, 0xff, 0xe9, 0xd4, 0xb0, 0xee, 0x07, 0x07, 0x76, 0x0b, 0x02,
+ 0xe2, 0xc1, 0xfc, 0xee, 0x07, 0x07, 0x77, 0x05, 0x01, 0xe9, 0xd3, 0xe1,
+ 0xe0, 0x07, 0x07, 0x77, 0x00, 0xcf, 0xff, 0xff, 0xff, 0xdc, 0xe9, 0xd2,
+ 0x40, 0x07, 0x07, 0x77, 0x00, 0x6f, 0x1b, 0xff, 0xff, 0xff, 0xe9, 0xd1,
+ 0xf9, 0x07, 0x07, 0x81, 0x77, 0x00, 0x00, 0x1d, 0xff, 0xff, 0xff, 0xe9,
+ 0xb8, 0xd1, 0xf2, 0x07, 0x07, 0x77, 0x00, 0x00, 0x06, 0x1b, 0xff, 0xff,
+ 0xff, 0xe9, 0xd1, 0x90, 0x07, 0x07, 0x80, 0x77, 0x00, 0x00, 0x01, 0xdf,
+ 0xff, 0xff, 0xff, 0x8f, 0xe9, 0xff, 0xff, 0x40, 0x07, 0x07, 0x77, 0x29,
+ 0x08, 0x6f, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xfe, 0x10, 0xf0, 0x07, 0x07,
+ 0x77, 0x29, 0x0c, 0xff, 0xff, 0xff, 0x9e, 0xe9, 0xff, 0xfb, 0x07, 0x07,
+ 0x77, 0x2a, 0x03, 0x13, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xfb, 0x07, 0x07,
+ 0xc2, 0x77, 0x2b, 0x8f, 0xff, 0xff, 0xff, 0xe9, 0xfb, 0xf0, 0x07, 0x07,
+ 0x77, 0x2b, 0x0a, 0xff, 0xff, 0xff, 0xbc, 0xe9, 0xfc, 0x07, 0x07, 0x77,
+ 0x2c, 0xcf, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10, 0x07, 0x07,
+ 0xc2, 0x77, 0x2b, 0x0c, 0xff, 0xff, 0xff, 0xe9, 0x30, 0xf0, 0x07, 0x07,
+ 0x77, 0x2c, 0xaf, 0xff, 0xff, 0xff, 0x1e, 0xff, 0xff, 0x60, 0x07, 0x07,
+ 0x77, 0x2c, 0x05, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x07, 0x07,
+ 0xc0, 0x77, 0x2d, 0x18, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xf0, 0x07, 0x07,
+ 0x77, 0x2e, 0x14, 0x79, 0xa9, 0x86, 0x7f, 0x20, 0x07, 0x07, 0x77, 0x2f,
+ 0x07, 0x07, 0x07, 0xf0, 0x07, 0x07, 0x07, 0x07,
+};
+
+const unsigned char g_pucTest32x32x1Comp[] =
+{
+ IMAGE_FMT_1BPP_COMP,
+ 32, 0,
+ 32, 0,
+
+ 0x80, 0x02, 0x3f, 0xff, 0xff, 0xfc, 0x5f, 0xff, 0xff, 0x00, 0xfa, 0x6f,
+ 0xff, 0xff, 0xf6, 0x77, 0xff, 0xff, 0x00, 0xee, 0x7b, 0xff, 0xff, 0xde,
+ 0x7d, 0xff, 0xff, 0x00, 0xbe, 0x7e, 0xff, 0xff, 0x7e, 0x7f, 0x7f, 0xfe,
+ 0x00, 0xfe, 0x7f, 0xbf, 0xfd, 0xfe, 0x7f, 0xdf, 0xfb, 0x00, 0xfe, 0x7f,
+ 0xef, 0xf7, 0xfe, 0x7f, 0xf7, 0xef, 0x00, 0xfe, 0x7f, 0xfb, 0xdf, 0xfe,
+ 0x7f, 0xfd, 0xbf, 0x0f, 0xfe, 0x7f, 0xfe, 0x7f, 0xe2, 0xa4, 0x62, 0x22,
+ 0x00, 0xef, 0xf7, 0xfe, 0x7f, 0xdf, 0xfb, 0xfe, 0x7f, 0x00, 0xbf, 0xfd,
+ 0xfe, 0x7f, 0x7f, 0xfe, 0xfe, 0x7e, 0x00, 0xff, 0xff, 0x7e, 0x7d, 0xff,
+ 0xff, 0xbe, 0x7b, 0x00, 0xff, 0xff, 0xde, 0x77, 0xff, 0xff, 0xee, 0x6f,
+ 0x00, 0xff, 0xff, 0xf6, 0x5f, 0xff, 0xff, 0xfa, 0x3f, 0x00, 0xff, 0xff,
+ 0xfc, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char g_pucTest32x32x1Raw[] =
+{
+ IMAGE_FMT_1BPP_UNCOMP,
+ 32, 0,
+ 32, 0,
+
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x5f, 0xff, 0xff, 0xfa,
+ 0x6f, 0xff, 0xff, 0xf6, 0x77, 0xff, 0xff, 0xee, 0x7b, 0xff, 0xff, 0xde,
+ 0x7d, 0xff, 0xff, 0xbe, 0x7e, 0xff, 0xff, 0x7e, 0x7f, 0x7f, 0xfe, 0xfe,
+ 0x7f, 0xbf, 0xfd, 0xfe, 0x7f, 0xdf, 0xfb, 0xfe, 0x7f, 0xef, 0xf7, 0xfe,
+ 0x7f, 0xf7, 0xef, 0xfe, 0x7f, 0xfb, 0xdf, 0xfe, 0x7f, 0xfd, 0xbf, 0xfe,
+ 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfd, 0xbf, 0xfe,
+ 0x7f, 0xfb, 0xdf, 0xfe, 0x7f, 0xf7, 0xef, 0xfe, 0x7f, 0xef, 0xf7, 0xfe,
+ 0x7f, 0xdf, 0xfb, 0xfe, 0x7f, 0xbf, 0xfd, 0xfe, 0x7f, 0x7f, 0xfe, 0xfe,
+ 0x7e, 0xff, 0xff, 0x7e, 0x7d, 0xff, 0xff, 0xbe, 0x7b, 0xff, 0xff, 0xde,
+ 0x77, 0xff, 0xff, 0xee, 0x6f, 0xff, 0xff, 0xf6, 0x5f, 0xff, 0xff, 0xfa,
+ 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char g_pucTest32x32x4Comp[] =
+{
+ IMAGE_FMT_4BPP_COMP,
+ 32, 0,
+ 32, 0,
+
+ 4,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff,
+ 0x80, 0x80, 0x00,
+ 0x00, 0xff, 0x00,
+ 0xff, 0xff, 0xff,
+
+ 0xc6, 0x07, 0x06, 0x44, 0x44, 0x44, 0xe9, 0xd4, 0x44, 0x0c, 0x44, 0x00,
+ 0x02, 0x04, 0x7f, 0x31, 0x40, 0x10, 0x30, 0x02, 0x20, 0x07, 0x01, 0x01,
+ 0x10, 0x02, 0x22, 0x45, 0x04, 0x0f, 0x44, 0x40, 0x11, 0x81, 0x20, 0x0f,
+ 0x25, 0x44, 0x01, 0x82, 0x22, 0x04, 0x0f, 0x11, 0x83, 0x66, 0x20, 0x0f,
+ 0x84, 0x22, 0x04, 0x0f, 0x84, 0x20, 0xcd, 0x0f, 0x04, 0x22, 0x04, 0x0e,
+ 0x85, 0x20, 0x0e, 0x9b, 0x05, 0x22, 0x04, 0x0d, 0x86, 0x20, 0x0d, 0x06,
+ 0x37, 0x22, 0x04, 0x0c, 0x87, 0x20, 0x0c, 0x87, 0x87, 0x98, 0x05, 0x03,
+ 0x30, 0x07, 0x0b, 0x33, 0x33, 0x01, 0xc6, 0x07, 0x0a, 0x33, 0x33, 0x30,
+ 0x07, 0x0b, 0x33, 0x31, 0x33, 0x01, 0x07, 0x0a, 0x33, 0x33, 0x30, 0x07,
+ 0x8c, 0x0b, 0x33, 0x33, 0x01, 0x06, 0x0b, 0x33, 0x33, 0x63, 0x30, 0x05,
+ 0x0d, 0x33, 0x33, 0x01, 0x04, 0x0d, 0x18, 0x33, 0x33, 0x30, 0x03, 0x0f,
+ 0x33, 0x33, 0x01, 0xc7, 0x02, 0x0f, 0x33, 0x33, 0x30, 0x01, 0x0f, 0x4a,
+ 0x18, 0x01, 0x10, 0x02, 0x0f, 0x42, 0x30, 0x10, 0x00, 0xc7, 0x0f, 0x43,
+ 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa3,
+};
+
+const unsigned char g_pucTest32x32x4Raw[] =
+{
+ IMAGE_FMT_4BPP_UNCOMP,
+ 32, 0,
+ 32, 0,
+
+ 4,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff,
+ 0x80, 0x80, 0x00,
+ 0x00, 0xff, 0x00,
+ 0xff, 0xff, 0xff,
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00,
+ 0x02, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x10,
+ 0x02, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01, 0x10,
+ 0x02, 0x22, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x11, 0x10,
+ 0x02, 0x22, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x04, 0x44, 0x44, 0x44, 0x44, 0x40, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x44, 0x44, 0x44, 0x44, 0x01, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x04, 0x44, 0x44, 0x40, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x44, 0x44, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x04, 0x40, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x03, 0x30, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x33, 0x33, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x03, 0x33, 0x33, 0x30, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x33, 0x33, 0x33, 0x33, 0x01, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x22, 0x03, 0x33, 0x33, 0x33, 0x33, 0x30, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x22, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x11, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x22, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x11, 0x11, 0x10,
+ 0x02, 0x22, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0x11, 0x10,
+ 0x02, 0x22, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x11, 0x10,
+ 0x02, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0x10,
+ 0x02, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x10,
+ 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char g_pucTest32x32x8Comp[] =
+{
+ IMAGE_FMT_8BPP_COMP,
+ 32, 0,
+ 32, 0,
+
+ 63,
+ 0x00, 0x00, 0x00,
+ 0xff, 0x00, 0x0f,
+ 0xff, 0x00, 0x10,
+ 0xff, 0x0d, 0x00,
+ 0xff, 0x0e, 0x00,
+ 0xff, 0x00, 0x39,
+ 0xff, 0x00, 0x3a,
+ 0xff, 0x00, 0x6d,
+ 0xff, 0x00, 0x6e,
+ 0xff, 0x3c, 0x00,
+ 0xff, 0x3d, 0x00,
+ 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0xa4,
+ 0xff, 0x00, 0xa5,
+ 0x28, 0x00, 0xff,
+ 0x29, 0x00, 0xff,
+ 0x65, 0x00, 0xff,
+ 0x66, 0x00, 0xff,
+ 0xff, 0x00, 0xd6,
+ 0xff, 0x00, 0xd7,
+ 0xa6, 0x00, 0xff,
+ 0xa7, 0x00, 0xff,
+ 0xff, 0x77, 0x00,
+ 0x00, 0x25, 0xff,
+ 0xff, 0x78, 0x00,
+ 0x00, 0x26, 0xff,
+ 0xe0, 0x00, 0xff,
+ 0xe1, 0x00, 0xff,
+ 0xff, 0x00, 0xfa,
+ 0xff, 0x00, 0xfb,
+ 0x00, 0x5d, 0xff,
+ 0x00, 0x5e, 0xff,
+ 0xff, 0xb4, 0x00,
+ 0xff, 0xb5, 0x00,
+ 0x0b, 0xff, 0x00,
+ 0x0c, 0xff, 0x00,
+ 0x00, 0xff, 0x11,
+ 0x33, 0xff, 0x00,
+ 0x34, 0xff, 0x00,
+ 0x67, 0xff, 0x00,
+ 0x68, 0xff, 0x00,
+ 0xff, 0xe7, 0x00,
+ 0xff, 0xe8, 0x00,
+ 0x9e, 0xff, 0x00,
+ 0x9f, 0xff, 0x00,
+ 0x00, 0x9b, 0xff,
+ 0x00, 0x9c, 0xff,
+ 0x00, 0xff, 0x3d,
+ 0x00, 0xff, 0x3e,
+ 0xd0, 0xff, 0x00,
+ 0xd1, 0xff, 0x00,
+ 0xf6, 0xff, 0x00,
+ 0xf7, 0xff, 0x00,
+ 0x00, 0xff, 0x75,
+ 0x00, 0xff, 0x76,
+ 0x00, 0xd3, 0xff,
+ 0x00, 0xd4, 0xff,
+ 0x00, 0xff, 0xaf,
+ 0x00, 0xff, 0xb0,
+ 0x00, 0xff, 0xe1,
+ 0x00, 0xff, 0xe2,
+ 0x00, 0xfb, 0xff,
+ 0x00, 0xfc, 0xff,
+ 0xff, 0xff, 0xff,
+
+ 0x00, 0x0b, 0x0f, 0x11, 0x15, 0x1b, 0x1d, 0x12, 0x0d, 0x00, 0x07, 0x06,
+ 0x02, 0x03, 0x09, 0x18, 0x20, 0x2a, 0x00, 0x34, 0x32, 0x2b, 0x27, 0x26,
+ 0x23, 0x24, 0x30, 0x00, 0x36, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x17,
+ 0x00, 0x0b, 0x0f, 0x10, 0x14, 0x1a, 0x1c, 0x12, 0x0d, 0x00, 0x08, 0x06,
+ 0x02, 0x04, 0x09, 0x16, 0x21, 0x29, 0x14, 0x34, 0x32, 0x2c, 0x04, 0x39,
+ 0x03, 0x19, 0x0b, 0x10, 0x0f, 0x11, 0x15, 0x07, 0x16, 0x21, 0x2a, 0x33,
+ 0x80, 0x02, 0x22, 0x24, 0x2f, 0x36, 0x39, 0x3c, 0x3d, 0x00, 0x38, 0x2d,
+ 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15, 0x00, 0x1b, 0x1c, 0x12, 0x0c, 0x08,
+ 0x05, 0x01, 0x04, 0x40, 0x0a, 0x03, 0x2b, 0x27, 0x25, 0x23, 0x24, 0x30,
+ 0x05, 0x36, 0x3a, 0x3c, 0x3e, 0x37, 0x05, 0x1a, 0x02, 0x04, 0x06, 0x02,
+ 0x03, 0x09, 0x18, 0x01, 0x31, 0x2b, 0x20, 0x27, 0x26, 0x02, 0x39, 0x3b,
+ 0x3e, 0x38, 0x2d, 0x05, 0x1e, 0x19, 0x0b, 0x0f, 0x11, 0x02, 0x0d, 0x01,
+ 0x50, 0x04, 0x03, 0x32, 0x05, 0x3a, 0x3c, 0x3e, 0x38, 0x54, 0x2e, 0x02,
+ 0x10, 0x04, 0x05, 0x02, 0x20, 0x2a, 0x11, 0x34, 0x32, 0x2c, 0x02, 0x2f,
+ 0x36, 0x39, 0x01, 0x10, 0x2d, 0x1e, 0x17, 0x06, 0x07, 0x05, 0x01, 0x03,
+ 0x01, 0x09, 0x16, 0x21, 0x2a, 0x34, 0x31, 0x2b, 0x02, 0x08, 0x30, 0x36,
+ 0x3a, 0x3b, 0x02, 0x19, 0x0b, 0x0f, 0x11, 0x11, 0x15, 0x1b, 0x01, 0x3f,
+ 0x3f, 0x3f, 0xe9, 0x04, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00,
+ 0x01, 0x36, 0x39, 0x3b, 0x3d, 0x37, 0x2d, 0x1f, 0x01, 0x4c, 0x10, 0x01,
+ 0x13, 0x0c, 0x07, 0x07, 0x3b, 0x3e, 0x13, 0x38, 0x2d, 0x1e, 0x05, 0x12,
+ 0x0d, 0x07, 0x06, 0x0e, 0x3a, 0x3c, 0x3e, 0x37, 0x07, 0x07, 0x07, 0x36,
+ 0x08, 0x3a, 0x3b, 0x3e, 0x38, 0x03, 0x11, 0x15, 0x1a, 0xe0, 0x07, 0x07,
+ 0x06, 0x17, 0x0b, 0x0f, 0x10, 0x15, 0x75, 0x1b, 0x07, 0x07, 0x06, 0x19,
+ 0x02, 0x1a, 0x07, 0x81, 0x07, 0x00, 0x36, 0x39, 0x3b, 0x3e, 0x37, 0x07,
+ 0xc0, 0x07, 0x07, 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x2c, 0x1e, 0x17,
+ 0x02, 0x1b, 0x01, 0x46, 0x3f, 0x3f, 0x40, 0x3f, 0xe9, 0x3f, 0x3f, 0x36,
+ 0x39, 0x3b, 0x3e, 0x08, 0x37, 0x2d, 0x1e, 0x19, 0x02, 0x1a, 0x1c, 0x12,
+ 0x60, 0x0c, 0x07, 0x06, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x38, 0x1e, 0x17,
+ 0x07, 0x07, 0x07, 0x3e, 0x37, 0x2d, 0x2e, 0x1e, 0x19, 0x01, 0x14, 0x07,
+ 0x07, 0x02, 0x3c, 0x83, 0x06, 0x15, 0x1b, 0x1c, 0x12, 0x0d, 0x07, 0x05,
+ 0x1b, 0x35, 0x3a, 0x3b, 0x07, 0x01, 0x0c, 0x07, 0x05, 0x2b, 0x36, 0x39,
+ 0x05, 0x0e, 0x03, 0x0d, 0x07, 0x06, 0x0e, 0x3a, 0x3c, 0x3e, 0x38, 0x07,
+ 0x07, 0x07, 0x36, 0x21, 0x3a, 0x3b, 0x01, 0x1f, 0x19, 0x0b, 0x0f, 0x04,
+ 0x00, 0x08, 0x05, 0x02, 0x04, 0x09, 0x18, 0x20, 0x2a, 0x00, 0x33, 0x32,
+ 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30, 0x14, 0x36, 0x3a, 0x3c, 0x01, 0x1e,
+ 0x02, 0x14, 0x1a, 0xa2, 0x03, 0x01, 0x01, 0x21, 0x2a, 0x34, 0x01, 0x25,
+ 0x94, 0x02, 0x39, 0x3b, 0x06, 0x15, 0x01, 0x0c, 0x08, 0x0b, 0x06, 0x02,
+ 0x04, 0x0a, 0x02, 0x31, 0x07, 0x07, 0x81, 0x01, 0x0d, 0x08, 0x05, 0x02,
+ 0x04, 0x09, 0x02, 0x04, 0x32, 0x2c, 0x27, 0x26, 0x22, 0x01, 0x3a, 0x3b,
+ 0x05, 0x3d, 0x37, 0x2d, 0x1e, 0x17, 0x02, 0x1b, 0x06, 0x00, 0x16, 0x20,
+ 0x2a, 0x33, 0x32, 0x2b, 0x28, 0x26, 0x4a, 0x23, 0x02, 0x3c, 0x3e, 0x01,
+ 0x19, 0x02, 0x1a, 0xa0, 0x02, 0x06, 0x01, 0x18, 0x21, 0x2a, 0x34, 0x32,
+ 0x0a, 0x2c, 0x28, 0x25, 0x22, 0x02, 0x3b, 0x05, 0x11, 0xa2, 0x06, 0x03,
+ 0x04, 0x2b, 0x27, 0x26, 0x03, 0x3c, 0xa0, 0x01, 0x1f, 0x01, 0x10, 0x15,
+ 0x1b, 0x1c, 0x12, 0x48, 0x0c, 0x01, 0x04, 0x0a, 0x01, 0x33, 0x32, 0x2c,
+ 0x10, 0x27, 0x26, 0x23, 0x01, 0x39, 0x3b, 0x3d, 0x37, 0x00, 0x2d, 0x1e,
+ 0x19,
+};
+
+const unsigned char g_pucTest32x32x8Raw[] =
+{
+ IMAGE_FMT_8BPP_UNCOMP,
+ 32, 0,
+ 32, 0,
+
+ 63,
+ 0x00, 0x00, 0x00,
+ 0xff, 0x00, 0x0f,
+ 0xff, 0x00, 0x10,
+ 0xff, 0x0d, 0x00,
+ 0xff, 0x0e, 0x00,
+ 0xff, 0x00, 0x39,
+ 0xff, 0x00, 0x3a,
+ 0xff, 0x00, 0x6d,
+ 0xff, 0x00, 0x6e,
+ 0xff, 0x3c, 0x00,
+ 0xff, 0x3d, 0x00,
+ 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0xa4,
+ 0xff, 0x00, 0xa5,
+ 0x28, 0x00, 0xff,
+ 0x29, 0x00, 0xff,
+ 0x65, 0x00, 0xff,
+ 0x66, 0x00, 0xff,
+ 0xff, 0x00, 0xd6,
+ 0xff, 0x00, 0xd7,
+ 0xa6, 0x00, 0xff,
+ 0xa7, 0x00, 0xff,
+ 0xff, 0x77, 0x00,
+ 0x00, 0x25, 0xff,
+ 0xff, 0x78, 0x00,
+ 0x00, 0x26, 0xff,
+ 0xe0, 0x00, 0xff,
+ 0xe1, 0x00, 0xff,
+ 0xff, 0x00, 0xfa,
+ 0xff, 0x00, 0xfb,
+ 0x00, 0x5d, 0xff,
+ 0x00, 0x5e, 0xff,
+ 0xff, 0xb4, 0x00,
+ 0xff, 0xb5, 0x00,
+ 0x0b, 0xff, 0x00,
+ 0x0c, 0xff, 0x00,
+ 0x00, 0xff, 0x11,
+ 0x33, 0xff, 0x00,
+ 0x34, 0xff, 0x00,
+ 0x67, 0xff, 0x00,
+ 0x68, 0xff, 0x00,
+ 0xff, 0xe7, 0x00,
+ 0xff, 0xe8, 0x00,
+ 0x9e, 0xff, 0x00,
+ 0x9f, 0xff, 0x00,
+ 0x00, 0x9b, 0xff,
+ 0x00, 0x9c, 0xff,
+ 0x00, 0xff, 0x3d,
+ 0x00, 0xff, 0x3e,
+ 0xd0, 0xff, 0x00,
+ 0xd1, 0xff, 0x00,
+ 0xf6, 0xff, 0x00,
+ 0xf7, 0xff, 0x00,
+ 0x00, 0xff, 0x75,
+ 0x00, 0xff, 0x76,
+ 0x00, 0xd3, 0xff,
+ 0x00, 0xd4, 0xff,
+ 0x00, 0xff, 0xaf,
+ 0x00, 0xff, 0xb0,
+ 0x00, 0xff, 0xe1,
+ 0x00, 0xff, 0xe2,
+ 0x00, 0xfb, 0xff,
+ 0x00, 0xfc, 0xff,
+ 0xff, 0xff, 0xff,
+
+ 0x0b, 0x0f, 0x11, 0x15, 0x1b, 0x1d, 0x12, 0x0d, 0x07, 0x06, 0x02, 0x03,
+ 0x09, 0x18, 0x20, 0x2a, 0x34, 0x32, 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30,
+ 0x36, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x14,
+ 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x06, 0x02, 0x04, 0x09, 0x16, 0x21, 0x29,
+ 0x34, 0x32, 0x2c, 0x27, 0x26, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3e,
+ 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x11, 0x15, 0x1a, 0x1c, 0x12, 0x0d,
+ 0x08, 0x06, 0x02, 0x04, 0x09, 0x16, 0x21, 0x2a, 0x33, 0x32, 0x2c, 0x27,
+ 0x26, 0x22, 0x24, 0x2f, 0x36, 0x39, 0x3c, 0x3d, 0x38, 0x2d, 0x1e, 0x17,
+ 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0c, 0x08, 0x05, 0x01, 0x04,
+ 0x0a, 0x16, 0x21, 0x2a, 0x33, 0x32, 0x2b, 0x27, 0x25, 0x23, 0x24, 0x30,
+ 0x36, 0x3a, 0x3c, 0x3e, 0x37, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15,
+ 0x1a, 0x1c, 0x12, 0x0c, 0x08, 0x06, 0x02, 0x03, 0x09, 0x18, 0x21, 0x2a,
+ 0x33, 0x31, 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3e,
+ 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x11, 0x15, 0x1a, 0x1c, 0x12, 0x0d,
+ 0x08, 0x06, 0x02, 0x04, 0x09, 0x18, 0x21, 0x2a, 0x33, 0x32, 0x2b, 0x27,
+ 0x26, 0x23, 0x24, 0x30, 0x36, 0x3a, 0x3c, 0x3e, 0x38, 0x2e, 0x1e, 0x19,
+ 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x02, 0x04,
+ 0x09, 0x18, 0x20, 0x2a, 0x34, 0x32, 0x2c, 0x27, 0x26, 0x23, 0x24, 0x2f,
+ 0x36, 0x39, 0x3c, 0x3e, 0x38, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15,
+ 0x1a, 0x1c, 0x12, 0x0d, 0x07, 0x05, 0x01, 0x03, 0x09, 0x16, 0x21, 0x2a,
+ 0x34, 0x31, 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30, 0x36, 0x3a, 0x3b, 0x3e,
+ 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x11, 0x15, 0x1b, 0x1c, 0x12, 0x0d,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x39, 0x3b, 0x3d, 0x37, 0x2d, 0x1f, 0x19,
+ 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x13, 0x0c, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x39, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15,
+ 0x1b, 0x1c, 0x12, 0x0d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x3a, 0x3c, 0x3e,
+ 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0d,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x19,
+ 0x0b, 0x0f, 0x11, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15,
+ 0x1b, 0x1c, 0x12, 0x0d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x3a, 0x3b, 0x3e,
+ 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x39, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19,
+ 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15,
+ 0x1b, 0x1c, 0x12, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x39, 0x3b, 0x3e,
+ 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x17,
+ 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x36, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x14,
+ 0x1a, 0x1c, 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x3a, 0x3c, 0x3e,
+ 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x35, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19,
+ 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x36, 0x39, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0e, 0x10, 0x15,
+ 0x1b, 0x1c, 0x12, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x3a, 0x3c, 0x3e,
+ 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0e, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f,
+ 0x3f, 0x3f, 0x3f, 0x3f, 0x36, 0x3a, 0x3b, 0x3e, 0x38, 0x2d, 0x1f, 0x19,
+ 0x0b, 0x0f, 0x10, 0x15, 0x1b, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x02, 0x04,
+ 0x09, 0x18, 0x20, 0x2a, 0x33, 0x32, 0x2b, 0x27, 0x26, 0x23, 0x24, 0x30,
+ 0x36, 0x3a, 0x3c, 0x3e, 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x14,
+ 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x01, 0x04, 0x09, 0x18, 0x21, 0x2a,
+ 0x34, 0x32, 0x2b, 0x27, 0x25, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3e,
+ 0x38, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0c,
+ 0x08, 0x06, 0x02, 0x04, 0x0a, 0x18, 0x21, 0x2a, 0x34, 0x31, 0x2b, 0x27,
+ 0x25, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3e, 0x38, 0x2d, 0x1e, 0x19,
+ 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x02, 0x04,
+ 0x09, 0x18, 0x21, 0x2a, 0x34, 0x32, 0x2c, 0x27, 0x26, 0x22, 0x24, 0x30,
+ 0x36, 0x3a, 0x3b, 0x3d, 0x37, 0x2d, 0x1e, 0x17, 0x0b, 0x0f, 0x10, 0x15,
+ 0x1b, 0x1c, 0x12, 0x0d, 0x08, 0x05, 0x02, 0x04, 0x09, 0x16, 0x20, 0x2a,
+ 0x33, 0x32, 0x2b, 0x28, 0x26, 0x23, 0x24, 0x30, 0x36, 0x3a, 0x3c, 0x3e,
+ 0x37, 0x2d, 0x1e, 0x19, 0x0b, 0x0f, 0x10, 0x15, 0x1a, 0x1c, 0x12, 0x0d,
+ 0x08, 0x06, 0x02, 0x04, 0x09, 0x18, 0x21, 0x2a, 0x34, 0x32, 0x2c, 0x28,
+ 0x25, 0x22, 0x24, 0x30, 0x36, 0x3a, 0x3b, 0x3e, 0x37, 0x2d, 0x1e, 0x19,
+ 0x0b, 0x0f, 0x11, 0x15, 0x1a, 0x1c, 0x12, 0x0d, 0x08, 0x06, 0x02, 0x03,
+ 0x09, 0x18, 0x21, 0x2a, 0x34, 0x32, 0x2b, 0x27, 0x26, 0x22, 0x24, 0x30,
+ 0x36, 0x3a, 0x3c, 0x3e, 0x37, 0x2d, 0x1f, 0x19, 0x0b, 0x0f, 0x10, 0x15,
+ 0x1b, 0x1c, 0x12, 0x0c, 0x08, 0x06, 0x02, 0x04, 0x0a, 0x18, 0x21, 0x2a,
+ 0x33, 0x32, 0x2c, 0x27, 0x26, 0x23, 0x24, 0x30, 0x36, 0x39, 0x3b, 0x3d,
+ 0x37, 0x2d, 0x1e, 0x19,
+};
diff --git a/boards/dk-tm4c129x/grlib_driver_test/images.h b/boards/dk-tm4c129x/grlib_driver_test/images.h
new file mode 100644
index 0000000..3d0d212
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/images.h
@@ -0,0 +1,41 @@
+//*****************************************************************************
+//
+// images.h - Prototypes for the images used by the application.
+//
+// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+//
+//*****************************************************************************
+
+#ifndef __IMAGES_H__
+#define __IMAGES_H__
+
+//*****************************************************************************
+//
+// Prototypes for the image arrays.
+//
+//*****************************************************************************
+extern const unsigned char g_pucLogo[];
+extern const unsigned char g_pucTest32x32x1Raw[];
+extern const unsigned char g_pucTest32x32x1Comp[];
+extern const unsigned char g_pucTest32x32x4Raw[];
+extern const unsigned char g_pucTest32x32x4Comp[];
+extern const unsigned char g_pucTest32x32x8Raw[];
+extern const unsigned char g_pucTest32x32x8Comp[];
+
+#endif // __IMAGES_H__
diff --git a/boards/dk-tm4c129x/grlib_driver_test/readme.txt b/boards/dk-tm4c129x/grlib_driver_test/readme.txt
new file mode 100644
index 0000000..bbf218e
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/readme.txt
@@ -0,0 +1,117 @@
+Graphics Driver Test Tool
+
+This application provides a simple, command-line tool to aid in
+debugging TivaWare Graphics Library display drivers. As shipped in
+TivaWare, it is configured to operate with a DK-TM4C129X board using its
+QVGA display. The code is written, however, to allow easy retargeting to
+other boards and display drivers via modifications to the driver_config.h
+header file.
+
+The tool is driven via a command line interface provided on UART0. Use a
+terminal emulator on your host system and set the serial port to use
+115200bps, 8-N-1. To see a list of supported commands, enter ``help'' on
+the command line and to see extended help on a specific command enter
+``help [command]''.
+
+The commands in the tool fall broadly into three categories:
+
+- commands allowing a given low level graphics function to be executed with
+ parameters provided by the user,
+- commands providing the ability to read and write arbitrary memory
+ locations and registers, and
+- tests displaying test patterns intended to exercise specific display
+ driver functions.
+
+The first group of commands includes ``r'' to read a word from a memory
+location or register, ``w'' to write a word to a memory location or
+register, ``dump'' to dump a range of memory as words and ``db'' to dump
+a range of memory as bytes. Note that no checking is performed to ensure
+that addresses passed to these functions are valid. If an invalid address
+is passed, the test tool will fault.
+
+The second group of commands contains ``fill'' which fills the screen with
+a given color, ``rect'' which draws a rectangle outline at a given position
+on the display, ''hline`` which draws a horizontal line, ``vline'' which
+draws a vertical line, ``image'' which draws an image at provided
+coordinates, and ``text'' which renders a given text string. The output of
+these commands is also modified via several other commands. ``fg'' selects
+the foreground color to be used by the drawing commands and ``bg'' selects
+the background color. ``setimg'' selects from one of four different test
+images that are drawn in response to the ``image'' command and ``clipimg''
+allows image clipping to be adjusted to test handling of the \e i32X0
+parameter to the driver's PixelDrawMultiple function.
+
+Additional graphics commands are ``pat'' which redraws the test pattern
+displayed when the tool starts, ``colbar'' which fills the display with
+a set of color bars and ``perf'' which draws randomly positioned and
+colored rectangles for a given number of seconds and determines the drawing
+speed in pixels-per-second.
+
+All driver function test patterns are generated using the ``test'' command
+whose first parameter indicates the test to display. Tests are as follow:
+
+- ``color'' tests the driver's color handling. The test starts by
+ splitting the screen into two and showing a different primary or
+ secondary color in each half. Verify that the correct colors are
+ displayed. After this, red, blue and green color gradients are
+ displayed. Again, verify that these are correct and that no color other
+ than the shades of the specific primary are displayed. If any color is
+ incorrect, this likely indicates an error in the driver's
+ pfnColorTranslate function or the function used to set the display
+ palette if the driver provides this feature.
+
+- ``pixel'' tests basic pixel plotting. A test pattern is drawn with a
+ single white pixel in each corner of the display, a small cross
+ comprising 5 white pixels in the center, and small arrows near each
+ corner. If any of the corner dots are missing or any of the other
+ pattern elements are incorrect, this points to a problem in the
+ driver's pfnPixelDraw function or, more generally, a problem with the
+ display coordinate space handling.
+
+- ``hline'' tests horizontal line drawing. White horizontal lines are
+ drawn at the top and bottom and a right-angled triangle is constructed in
+ the center of the display. If any line is missing or the triangle is
+ incorrect, this points to a problem in the driver's pfnLineDrawH
+ function.
+
+- ``vline'' tests vertical line drawing. White vertical lines are drawn
+ at the left and right and a right-angled triangle is constructed in
+ the center of the display. If any line is missing or the triangle is
+ incorrect, this points to a problem in the driver's pfnLineDrawV
+ function.
+
+- ``mult'' tests the driver's pfnPixelDrawMultiple function. This is the
+ most complex driver function and the one most prone to errors. The tool
+ fills the display with each of the included test images in turn. These
+ cover all the pixel formats (1-, 4- and 8-bpp) that the driver is
+ required to handle and the image clipping and x positions are set to
+ ensure that all alignment cases are handled for each format. In each
+ case, the image is drawn inside a single pixel red rectangle. If the
+ driver is handling each case correctly, the image should look correct
+ and no part of the red rectangle should be overwritten when the image
+ is drawn. In the displayed grid of images, the x alignment increases
+ from 1 to 8 across the display and each line increases the left-side
+ image clipping by one pixel from 0 in the top row to 7 in the bottom
+ row. An error in any image indicates that one of the cases handled by
+ the driver's pfnPixelDrawMultiple function is not handled correctly.
+
+
+-------------------------------------------------------------------------------
+
+Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved.
+Software License Agreement
+
+Texas Instruments (TI) is supplying this software for use solely and
+exclusively on TI's microcontroller products. The software is owned by
+TI and/or its suppliers, and is protected under applicable copyright
+laws. You may not combine this software with "viral" open-source
+software in order to form a larger program.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, FOR ANY REASON WHATSOEVER.
+
+This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
diff --git a/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.axf b/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.axf
new file mode 100644
index 0000000..5b34bef
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.axf
Binary files differ
diff --git a/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.bin b/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.bin
new file mode 100644
index 0000000..7d6acc4
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/rvmdk/grlib_driver_test.bin
Binary files differ
diff --git a/boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c b/boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c
new file mode 100644
index 0000000..38dfca5
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/startup_ccs.c
@@ -0,0 +1,275 @@
+//*****************************************************************************
+//
+// startup_ccs.c - Startup code for use with TI's Code Composer Studio.
+//
+// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+//
+//*****************************************************************************
+
+#include <stdint.h>
+#include "inc/hw_nvic.h"
+#include "inc/hw_types.h"
+
+//*****************************************************************************
+//
+// Forward declaration of the default fault handlers.
+//
+//*****************************************************************************
+void ResetISR(void);
+static void NmiSR(void);
+static void FaultISR(void);
+static void IntDefaultHandler(void);
+
+//*****************************************************************************
+//
+// External declaration for the reset handler that is to be called when the
+// processor is started
+//
+//*****************************************************************************
+extern void _c_int00(void);
+
+//*****************************************************************************
+//
+// Linker variable that marks the top of the stack.
+//
+//*****************************************************************************
+extern uint32_t __STACK_TOP;
+
+//*****************************************************************************
+//
+// External declaration for the interrupt handler used by the application.
+//
+//*****************************************************************************
+extern void SysTickIntHandler(void);
+
+//*****************************************************************************
+//
+// The vector table. Note that the proper constructs must be placed on this to
+// ensure that it ends up at physical address 0x0000.0000 or at the start of
+// the program if located at a start address other than 0.
+//
+//*****************************************************************************
+#pragma DATA_SECTION(g_pfnVectors, ".intvecs")
+void (* const g_pfnVectors[])(void) =
+{
+ (void (*)(void))((uint32_t)&__STACK_TOP),
+ // The initial stack pointer
+ ResetISR, // The reset handler
+ NmiSR, // The NMI handler
+ FaultISR, // The hard fault handler
+ IntDefaultHandler, // The MPU fault handler
+ IntDefaultHandler, // The bus fault handler
+ IntDefaultHandler, // The usage fault handler
+ 0, // Reserved
+ 0, // Reserved
+ 0, // Reserved
+ 0, // Reserved
+ IntDefaultHandler, // SVCall handler
+ IntDefaultHandler, // Debug monitor handler
+ 0, // Reserved
+ IntDefaultHandler, // The PendSV handler
+ SysTickIntHandler, // The SysTick handler
+ IntDefaultHandler, // GPIO Port A
+ IntDefaultHandler, // GPIO Port B
+ IntDefaultHandler, // GPIO Port C
+ IntDefaultHandler, // GPIO Port D
+ IntDefaultHandler, // GPIO Port E
+ IntDefaultHandler, // UART0 Rx and Tx
+ IntDefaultHandler, // UART1 Rx and Tx
+ IntDefaultHandler, // SSI0 Rx and Tx
+ IntDefaultHandler, // I2C0 Master and Slave
+ IntDefaultHandler, // PWM Fault
+ IntDefaultHandler, // PWM Generator 0
+ IntDefaultHandler, // PWM Generator 1
+ IntDefaultHandler, // PWM Generator 2
+ IntDefaultHandler, // Quadrature Encoder 0
+ IntDefaultHandler, // ADC Sequence 0
+ IntDefaultHandler, // ADC Sequence 1
+ IntDefaultHandler, // ADC Sequence 2
+ IntDefaultHandler, // ADC Sequence 3
+ IntDefaultHandler, // Watchdog timer
+ IntDefaultHandler, // Timer 0 subtimer A
+ IntDefaultHandler, // Timer 0 subtimer B
+ IntDefaultHandler, // Timer 1 subtimer A
+ IntDefaultHandler, // Timer 1 subtimer B
+ IntDefaultHandler, // Timer 2 subtimer A
+ IntDefaultHandler, // Timer 2 subtimer B
+ IntDefaultHandler, // Analog Comparator 0
+ IntDefaultHandler, // Analog Comparator 1
+ IntDefaultHandler, // Analog Comparator 2
+ IntDefaultHandler, // System Control (PLL, OSC, BO)
+ IntDefaultHandler, // FLASH Control
+ IntDefaultHandler, // GPIO Port F
+ IntDefaultHandler, // GPIO Port G
+ IntDefaultHandler, // GPIO Port H
+ IntDefaultHandler, // UART2 Rx and Tx
+ IntDefaultHandler, // SSI1 Rx and Tx
+ IntDefaultHandler, // Timer 3 subtimer A
+ IntDefaultHandler, // Timer 3 subtimer B
+ IntDefaultHandler, // I2C1 Master and Slave
+ IntDefaultHandler, // CAN0
+ IntDefaultHandler, // CAN1
+ IntDefaultHandler, // Ethernet
+ IntDefaultHandler, // Hibernate
+ IntDefaultHandler, // USB0
+ IntDefaultHandler, // PWM Generator 3
+ IntDefaultHandler, // uDMA Software Transfer
+ IntDefaultHandler, // uDMA Error
+ IntDefaultHandler, // ADC1 Sequence 0
+ IntDefaultHandler, // ADC1 Sequence 1
+ IntDefaultHandler, // ADC1 Sequence 2
+ IntDefaultHandler, // ADC1 Sequence 3
+ IntDefaultHandler, // External Bus Interface 0
+ IntDefaultHandler, // GPIO Port J
+ IntDefaultHandler, // GPIO Port K
+ IntDefaultHandler, // GPIO Port L
+ IntDefaultHandler, // SSI2 Rx and Tx
+ IntDefaultHandler, // SSI3 Rx and Tx
+ IntDefaultHandler, // UART3 Rx and Tx
+ IntDefaultHandler, // UART4 Rx and Tx
+ IntDefaultHandler, // UART5 Rx and Tx
+ IntDefaultHandler, // UART6 Rx and Tx
+ IntDefaultHandler, // UART7 Rx and Tx
+ IntDefaultHandler, // I2C2 Master and Slave
+ IntDefaultHandler, // I2C3 Master and Slave
+ IntDefaultHandler, // Timer 4 subtimer A
+ IntDefaultHandler, // Timer 4 subtimer B
+ IntDefaultHandler, // Timer 5 subtimer A
+ IntDefaultHandler, // Timer 5 subtimer B
+ IntDefaultHandler, // FPU
+ 0, // Reserved
+ 0, // Reserved
+ IntDefaultHandler, // I2C4 Master and Slave
+ IntDefaultHandler, // I2C5 Master and Slave
+ IntDefaultHandler, // GPIO Port M
+ IntDefaultHandler, // GPIO Port N
+ 0, // Reserved
+ IntDefaultHandler, // Tamper
+ IntDefaultHandler, // GPIO Port P (Summary or P0)
+ IntDefaultHandler, // GPIO Port P1
+ IntDefaultHandler, // GPIO Port P2
+ IntDefaultHandler, // GPIO Port P3
+ IntDefaultHandler, // GPIO Port P4
+ IntDefaultHandler, // GPIO Port P5
+ IntDefaultHandler, // GPIO Port P6
+ IntDefaultHandler, // GPIO Port P7
+ IntDefaultHandler, // GPIO Port Q (Summary or Q0)
+ IntDefaultHandler, // GPIO Port Q1
+ IntDefaultHandler, // GPIO Port Q2
+ IntDefaultHandler, // GPIO Port Q3
+ IntDefaultHandler, // GPIO Port Q4
+ IntDefaultHandler, // GPIO Port Q5
+ IntDefaultHandler, // GPIO Port Q6
+ IntDefaultHandler, // GPIO Port Q7
+ IntDefaultHandler, // GPIO Port R
+ IntDefaultHandler, // GPIO Port S
+ IntDefaultHandler, // SHA/MD5 0
+ IntDefaultHandler, // AES 0
+ IntDefaultHandler, // DES3DES 0
+ IntDefaultHandler, // LCD Controller 0
+ IntDefaultHandler, // Timer 6 subtimer A
+ IntDefaultHandler, // Timer 6 subtimer B
+ IntDefaultHandler, // Timer 7 subtimer A
+ IntDefaultHandler, // Timer 7 subtimer B
+ IntDefaultHandler, // I2C6 Master and Slave
+ IntDefaultHandler, // I2C7 Master and Slave
+ IntDefaultHandler, // HIM Scan Matrix Keyboard 0
+ IntDefaultHandler, // One Wire 0
+ IntDefaultHandler, // HIM PS/2 0
+ IntDefaultHandler, // HIM LED Sequencer 0
+ IntDefaultHandler, // HIM Consumer IR 0
+ IntDefaultHandler, // I2C8 Master and Slave
+ IntDefaultHandler, // I2C9 Master and Slave
+ IntDefaultHandler // GPIO Port T
+};
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor first starts execution
+// following a reset event. Only the absolutely necessary set is performed,
+// after which the application supplied entry() routine is called. Any fancy
+// actions (such as making decisions based on the reset cause register, and
+// resetting the bits in that register) are left solely in the hands of the
+// application.
+//
+//*****************************************************************************
+void
+ResetISR(void)
+{
+ //
+ // Jump to the CCS C initialization routine. This will enable the
+ // floating-point unit as well, so that does not need to be done here.
+ //
+ __asm(" .global _c_int00\n"
+ " b.w _c_int00");
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a NMI. This
+// simply enters an infinite loop, preserving the system state for examination
+// by a debugger.
+//
+//*****************************************************************************
+static void
+NmiSR(void)
+{
+ //
+ // Enter an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a fault
+// interrupt. This simply enters an infinite loop, preserving the system state
+// for examination by a debugger.
+//
+//*****************************************************************************
+static void
+FaultISR(void)
+{
+ //
+ // Enter an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives an unexpected
+// interrupt. This simply enters an infinite loop, preserving the system state
+// for examination by a debugger.
+//
+//*****************************************************************************
+static void
+IntDefaultHandler(void)
+{
+ //
+ // Go into an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
diff --git a/boards/dk-tm4c129x/grlib_driver_test/startup_ewarm.c b/boards/dk-tm4c129x/grlib_driver_test/startup_ewarm.c
new file mode 100644
index 0000000..7f2e7df
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/startup_ewarm.c
@@ -0,0 +1,306 @@
+//*****************************************************************************
+//
+// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench,
+// version 5.
+//
+// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+//
+//*****************************************************************************
+
+#include <stdint.h>
+#include "inc/hw_nvic.h"
+#include "inc/hw_types.h"
+
+//*****************************************************************************
+//
+// Enable the IAR extensions for this source file.
+//
+//*****************************************************************************
+#pragma language=extended
+
+//*****************************************************************************
+//
+// Forward declaration of the default fault handlers.
+//
+//*****************************************************************************
+void ResetISR(void);
+static void NmiSR(void);
+static void FaultISR(void);
+static void IntDefaultHandler(void);
+
+//*****************************************************************************
+//
+// External declaration for the interrupt handler used by the application.
+//
+//*****************************************************************************
+extern void SysTickIntHandler(void);
+
+//*****************************************************************************
+//
+// The entry point for the application startup code.
+//
+//*****************************************************************************
+extern void __iar_program_start(void);
+
+//*****************************************************************************
+//
+// Reserve space for the system stack.
+//
+//*****************************************************************************
+static uint32_t pui32Stack[256] @ ".noinit";
+
+//*****************************************************************************
+//
+// A union that describes the entries of the vector table. The union is needed
+// since the first entry is the stack pointer and the remainder are function
+// pointers.
+//
+//*****************************************************************************
+typedef union
+{
+ void (*pfnHandler)(void);
+ uint32_t ui32Ptr;
+}
+uVectorEntry;
+
+//*****************************************************************************
+//
+// The vector table. Note that the proper constructs must be placed on this to
+// ensure that it ends up at physical address 0x0000.0000.
+//
+//*****************************************************************************
+__root const uVectorEntry __vector_table[] @ ".intvec" =
+{
+ { .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) },
+ // The initial stack pointer
+ ResetISR, // The reset handler
+ NmiSR, // The NMI handler
+ FaultISR, // The hard fault handler
+ IntDefaultHandler, // The MPU fault handler
+ IntDefaultHandler, // The bus fault handler
+ IntDefaultHandler, // The usage fault handler
+ 0, // Reserved
+ 0, // Reserved
+ 0, // Reserved
+ 0, // Reserved
+ IntDefaultHandler, // SVCall handler
+ IntDefaultHandler, // Debug monitor handler
+ 0, // Reserved
+ IntDefaultHandler, // The PendSV handler
+ SysTickIntHandler, // The SysTick handler
+ IntDefaultHandler, // GPIO Port A
+ IntDefaultHandler, // GPIO Port B
+ IntDefaultHandler, // GPIO Port C
+ IntDefaultHandler, // GPIO Port D
+ IntDefaultHandler, // GPIO Port E
+ IntDefaultHandler, // UART0 Rx and Tx
+ IntDefaultHandler, // UART1 Rx and Tx
+ IntDefaultHandler, // SSI0 Rx and Tx
+ IntDefaultHandler, // I2C0 Master and Slave
+ IntDefaultHandler, // PWM Fault
+ IntDefaultHandler, // PWM Generator 0
+ IntDefaultHandler, // PWM Generator 1
+ IntDefaultHandler, // PWM Generator 2
+ IntDefaultHandler, // Quadrature Encoder 0
+ IntDefaultHandler, // ADC Sequence 0
+ IntDefaultHandler, // ADC Sequence 1
+ IntDefaultHandler, // ADC Sequence 2
+ IntDefaultHandler, // ADC Sequence 3
+ IntDefaultHandler, // Watchdog timer
+ IntDefaultHandler, // Timer 0 subtimer A
+ IntDefaultHandler, // Timer 0 subtimer B
+ IntDefaultHandler, // Timer 1 subtimer A
+ IntDefaultHandler, // Timer 1 subtimer B
+ IntDefaultHandler, // Timer 2 subtimer A
+ IntDefaultHandler, // Timer 2 subtimer B
+ IntDefaultHandler, // Analog Comparator 0
+ IntDefaultHandler, // Analog Comparator 1
+ IntDefaultHandler, // Analog Comparator 2
+ IntDefaultHandler, // System Control (PLL, OSC, BO)
+ IntDefaultHandler, // FLASH Control
+ IntDefaultHandler, // GPIO Port F
+ IntDefaultHandler, // GPIO Port G
+ IntDefaultHandler, // GPIO Port H
+ IntDefaultHandler, // UART2 Rx and Tx
+ IntDefaultHandler, // SSI1 Rx and Tx
+ IntDefaultHandler, // Timer 3 subtimer A
+ IntDefaultHandler, // Timer 3 subtimer B
+ IntDefaultHandler, // I2C1 Master and Slave
+ IntDefaultHandler, // CAN0
+ IntDefaultHandler, // CAN1
+ IntDefaultHandler, // Ethernet
+ IntDefaultHandler, // Hibernate
+ IntDefaultHandler, // USB0
+ IntDefaultHandler, // PWM Generator 3
+ IntDefaultHandler, // uDMA Software Transfer
+ IntDefaultHandler, // uDMA Error
+ IntDefaultHandler, // ADC1 Sequence 0
+ IntDefaultHandler, // ADC1 Sequence 1
+ IntDefaultHandler, // ADC1 Sequence 2
+ IntDefaultHandler, // ADC1 Sequence 3
+ IntDefaultHandler, // External Bus Interface 0
+ IntDefaultHandler, // GPIO Port J
+ IntDefaultHandler, // GPIO Port K
+ IntDefaultHandler, // GPIO Port L
+ IntDefaultHandler, // SSI2 Rx and Tx
+ IntDefaultHandler, // SSI3 Rx and Tx
+ IntDefaultHandler, // UART3 Rx and Tx
+ IntDefaultHandler, // UART4 Rx and Tx
+ IntDefaultHandler, // UART5 Rx and Tx
+ IntDefaultHandler, // UART6 Rx and Tx
+ IntDefaultHandler, // UART7 Rx and Tx
+ IntDefaultHandler, // I2C2 Master and Slave
+ IntDefaultHandler, // I2C3 Master and Slave
+ IntDefaultHandler, // Timer 4 subtimer A
+ IntDefaultHandler, // Timer 4 subtimer B
+ IntDefaultHandler, // Timer 5 subtimer A
+ IntDefaultHandler, // Timer 5 subtimer B
+ IntDefaultHandler, // FPU
+ 0, // Reserved
+ 0, // Reserved
+ IntDefaultHandler, // I2C4 Master and Slave
+ IntDefaultHandler, // I2C5 Master and Slave
+ IntDefaultHandler, // GPIO Port M
+ IntDefaultHandler, // GPIO Port N
+ 0, // Reserved
+ IntDefaultHandler, // Tamper
+ IntDefaultHandler, // GPIO Port P (Summary or P0)
+ IntDefaultHandler, // GPIO Port P1
+ IntDefaultHandler, // GPIO Port P2
+ IntDefaultHandler, // GPIO Port P3
+ IntDefaultHandler, // GPIO Port P4
+ IntDefaultHandler, // GPIO Port P5
+ IntDefaultHandler, // GPIO Port P6
+ IntDefaultHandler, // GPIO Port P7
+ IntDefaultHandler, // GPIO Port Q (Summary or Q0)
+ IntDefaultHandler, // GPIO Port Q1
+ IntDefaultHandler, // GPIO Port Q2
+ IntDefaultHandler, // GPIO Port Q3
+ IntDefaultHandler, // GPIO Port Q4
+ IntDefaultHandler, // GPIO Port Q5
+ IntDefaultHandler, // GPIO Port Q6
+ IntDefaultHandler, // GPIO Port Q7
+ IntDefaultHandler, // GPIO Port R
+ IntDefaultHandler, // GPIO Port S
+ IntDefaultHandler, // SHA/MD5 0
+ IntDefaultHandler, // AES 0
+ IntDefaultHandler, // DES3DES 0
+ IntDefaultHandler, // LCD Controller 0
+ IntDefaultHandler, // Timer 6 subtimer A
+ IntDefaultHandler, // Timer 6 subtimer B
+ IntDefaultHandler, // Timer 7 subtimer A
+ IntDefaultHandler, // Timer 7 subtimer B
+ IntDefaultHandler, // I2C6 Master and Slave
+ IntDefaultHandler, // I2C7 Master and Slave
+ IntDefaultHandler, // HIM Scan Matrix Keyboard 0
+ IntDefaultHandler, // One Wire 0
+ IntDefaultHandler, // HIM PS/2 0
+ IntDefaultHandler, // HIM LED Sequencer 0
+ IntDefaultHandler, // HIM Consumer IR 0
+ IntDefaultHandler, // I2C8 Master and Slave
+ IntDefaultHandler, // I2C9 Master and Slave
+ IntDefaultHandler // GPIO Port T
+};
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor first starts execution
+// following a reset event. Only the absolutely necessary set is performed,
+// after which the application supplied entry() routine is called. Any fancy
+// actions (such as making decisions based on the reset cause register, and
+// resetting the bits in that register) are left solely in the hands of the
+// application.
+//
+//*****************************************************************************
+void
+ResetISR(void)
+{
+ //
+ // Enable the floating-point unit. This must be done here to handle the
+ // case where main() uses floating-point and the function prologue saves
+ // floating-point registers (which will fault if floating-point is not
+ // enabled). Any configuration of the floating-point unit using DriverLib
+ // APIs must be done here prior to the floating-point unit being enabled.
+ //
+ // Note that this does not use DriverLib since it might not be included in
+ // this project.
+ //
+ HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) &
+ ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) |
+ NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL);
+
+ //
+ // Call the application's entry point.
+ //
+ __iar_program_start();
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a NMI. This
+// simply enters an infinite loop, preserving the system state for examination
+// by a debugger.
+//
+//*****************************************************************************
+static void
+NmiSR(void)
+{
+ //
+ // Enter an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a fault
+// interrupt. This simply enters an infinite loop, preserving the system state
+// for examination by a debugger.
+//
+//*****************************************************************************
+static void
+FaultISR(void)
+{
+ //
+ // Enter an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives an unexpected
+// interrupt. This simply enters an infinite loop, preserving the system state
+// for examination by a debugger.
+//
+//*****************************************************************************
+static void
+IntDefaultHandler(void)
+{
+ //
+ // Go into an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
diff --git a/boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c b/boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c
new file mode 100644
index 0000000..7a4f634
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/startup_gcc.c
@@ -0,0 +1,322 @@
+//*****************************************************************************
+//
+// startup_gcc.c - Startup code for use with GNU tools.
+//
+// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+// Software License Agreement
+//
+// Texas Instruments (TI) is supplying this software for use solely and
+// exclusively on TI's microcontroller products. The software is owned by
+// TI and/or its suppliers, and is protected under applicable copyright
+// laws. You may not combine this software with "viral" open-source
+// software in order to form a larger program.
+//
+// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+// DAMAGES, FOR ANY REASON WHATSOEVER.
+//
+// This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+//
+//*****************************************************************************
+
+#include <stdint.h>
+#include "inc/hw_nvic.h"
+#include "inc/hw_types.h"
+
+//*****************************************************************************
+//
+// Forward declaration of the default fault handlers.
+//
+//*****************************************************************************
+void ResetISR(void);
+static void NmiSR(void);
+static void FaultISR(void);
+static void IntDefaultHandler(void);
+
+//*****************************************************************************
+//
+// External declaration for the interrupt handler used by the application.
+//
+//*****************************************************************************
+extern void SysTickIntHandler(void);
+
+//*****************************************************************************
+//
+// The entry point for the application.
+//
+//*****************************************************************************
+extern int main(void);
+
+//*****************************************************************************
+//
+// Reserve space for the system stack.
+//
+//*****************************************************************************
+static uint32_t pui32Stack[256];
+
+//*****************************************************************************
+//
+// The vector table. Note that the proper constructs must be placed on this to
+// ensure that it ends up at physical address 0x0000.0000.
+//
+//*****************************************************************************
+__attribute__ ((section(".isr_vector")))
+void (* const g_pfnVectors[])(void) =
+{
+ (void (*)(void))((uint32_t)pui32Stack + sizeof(pui32Stack)),
+ // The initial stack pointer
+ ResetISR, // The reset handler
+ NmiSR, // The NMI handler
+ FaultISR, // The hard fault handler
+ IntDefaultHandler, // The MPU fault handler
+ IntDefaultHandler, // The bus fault handler
+ IntDefaultHandler, // The usage fault handler
+ 0, // Reserved
+ 0, // Reserved
+ 0, // Reserved
+ 0, // Reserved
+ IntDefaultHandler, // SVCall handler
+ IntDefaultHandler, // Debug monitor handler
+ 0, // Reserved
+ IntDefaultHandler, // The PendSV handler
+ SysTickIntHandler, // The SysTick handler
+ IntDefaultHandler, // GPIO Port A
+ IntDefaultHandler, // GPIO Port B
+ IntDefaultHandler, // GPIO Port C
+ IntDefaultHandler, // GPIO Port D
+ IntDefaultHandler, // GPIO Port E
+ IntDefaultHandler, // UART0 Rx and Tx
+ IntDefaultHandler, // UART1 Rx and Tx
+ IntDefaultHandler, // SSI0 Rx and Tx
+ IntDefaultHandler, // I2C0 Master and Slave
+ IntDefaultHandler, // PWM Fault
+ IntDefaultHandler, // PWM Generator 0
+ IntDefaultHandler, // PWM Generator 1
+ IntDefaultHandler, // PWM Generator 2
+ IntDefaultHandler, // Quadrature Encoder 0
+ IntDefaultHandler, // ADC Sequence 0
+ IntDefaultHandler, // ADC Sequence 1
+ IntDefaultHandler, // ADC Sequence 2
+ IntDefaultHandler, // ADC Sequence 3
+ IntDefaultHandler, // Watchdog timer
+ IntDefaultHandler, // Timer 0 subtimer A
+ IntDefaultHandler, // Timer 0 subtimer B
+ IntDefaultHandler, // Timer 1 subtimer A
+ IntDefaultHandler, // Timer 1 subtimer B
+ IntDefaultHandler, // Timer 2 subtimer A
+ IntDefaultHandler, // Timer 2 subtimer B
+ IntDefaultHandler, // Analog Comparator 0
+ IntDefaultHandler, // Analog Comparator 1
+ IntDefaultHandler, // Analog Comparator 2
+ IntDefaultHandler, // System Control (PLL, OSC, BO)
+ IntDefaultHandler, // FLASH Control
+ IntDefaultHandler, // GPIO Port F
+ IntDefaultHandler, // GPIO Port G
+ IntDefaultHandler, // GPIO Port H
+ IntDefaultHandler, // UART2 Rx and Tx
+ IntDefaultHandler, // SSI1 Rx and Tx
+ IntDefaultHandler, // Timer 3 subtimer A
+ IntDefaultHandler, // Timer 3 subtimer B
+ IntDefaultHandler, // I2C1 Master and Slave
+ IntDefaultHandler, // CAN0
+ IntDefaultHandler, // CAN1
+ IntDefaultHandler, // Ethernet
+ IntDefaultHandler, // Hibernate
+ IntDefaultHandler, // USB0
+ IntDefaultHandler, // PWM Generator 3
+ IntDefaultHandler, // uDMA Software Transfer
+ IntDefaultHandler, // uDMA Error
+ IntDefaultHandler, // ADC1 Sequence 0
+ IntDefaultHandler, // ADC1 Sequence 1
+ IntDefaultHandler, // ADC1 Sequence 2
+ IntDefaultHandler, // ADC1 Sequence 3
+ IntDefaultHandler, // External Bus Interface 0
+ IntDefaultHandler, // GPIO Port J
+ IntDefaultHandler, // GPIO Port K
+ IntDefaultHandler, // GPIO Port L
+ IntDefaultHandler, // SSI2 Rx and Tx
+ IntDefaultHandler, // SSI3 Rx and Tx
+ IntDefaultHandler, // UART3 Rx and Tx
+ IntDefaultHandler, // UART4 Rx and Tx
+ IntDefaultHandler, // UART5 Rx and Tx
+ IntDefaultHandler, // UART6 Rx and Tx
+ IntDefaultHandler, // UART7 Rx and Tx
+ IntDefaultHandler, // I2C2 Master and Slave
+ IntDefaultHandler, // I2C3 Master and Slave
+ IntDefaultHandler, // Timer 4 subtimer A
+ IntDefaultHandler, // Timer 4 subtimer B
+ IntDefaultHandler, // Timer 5 subtimer A
+ IntDefaultHandler, // Timer 5 subtimer B
+ IntDefaultHandler, // FPU
+ 0, // Reserved
+ 0, // Reserved
+ IntDefaultHandler, // I2C4 Master and Slave
+ IntDefaultHandler, // I2C5 Master and Slave
+ IntDefaultHandler, // GPIO Port M
+ IntDefaultHandler, // GPIO Port N
+ 0, // Reserved
+ IntDefaultHandler, // Tamper
+ IntDefaultHandler, // GPIO Port P (Summary or P0)
+ IntDefaultHandler, // GPIO Port P1
+ IntDefaultHandler, // GPIO Port P2
+ IntDefaultHandler, // GPIO Port P3
+ IntDefaultHandler, // GPIO Port P4
+ IntDefaultHandler, // GPIO Port P5
+ IntDefaultHandler, // GPIO Port P6
+ IntDefaultHandler, // GPIO Port P7
+ IntDefaultHandler, // GPIO Port Q (Summary or Q0)
+ IntDefaultHandler, // GPIO Port Q1
+ IntDefaultHandler, // GPIO Port Q2
+ IntDefaultHandler, // GPIO Port Q3
+ IntDefaultHandler, // GPIO Port Q4
+ IntDefaultHandler, // GPIO Port Q5
+ IntDefaultHandler, // GPIO Port Q6
+ IntDefaultHandler, // GPIO Port Q7
+ IntDefaultHandler, // GPIO Port R
+ IntDefaultHandler, // GPIO Port S
+ IntDefaultHandler, // SHA/MD5 0
+ IntDefaultHandler, // AES 0
+ IntDefaultHandler, // DES3DES 0
+ IntDefaultHandler, // LCD Controller 0
+ IntDefaultHandler, // Timer 6 subtimer A
+ IntDefaultHandler, // Timer 6 subtimer B
+ IntDefaultHandler, // Timer 7 subtimer A
+ IntDefaultHandler, // Timer 7 subtimer B
+ IntDefaultHandler, // I2C6 Master and Slave
+ IntDefaultHandler, // I2C7 Master and Slave
+ IntDefaultHandler, // HIM Scan Matrix Keyboard 0
+ IntDefaultHandler, // One Wire 0
+ IntDefaultHandler, // HIM PS/2 0
+ IntDefaultHandler, // HIM LED Sequencer 0
+ IntDefaultHandler, // HIM Consumer IR 0
+ IntDefaultHandler, // I2C8 Master and Slave
+ IntDefaultHandler, // I2C9 Master and Slave
+ IntDefaultHandler // GPIO Port T
+};
+
+//*****************************************************************************
+//
+// The following are constructs created by the linker, indicating where the
+// the "data" and "bss" segments reside in memory. The initializers for the
+// for the "data" segment resides immediately following the "text" segment.
+//
+//*****************************************************************************
+extern uint32_t _etext;
+extern uint32_t _data;
+extern uint32_t _edata;
+extern uint32_t _bss;
+extern uint32_t _ebss;
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor first starts execution
+// following a reset event. Only the absolutely necessary set is performed,
+// after which the application supplied entry() routine is called. Any fancy
+// actions (such as making decisions based on the reset cause register, and
+// resetting the bits in that register) are left solely in the hands of the
+// application.
+//
+//*****************************************************************************
+void
+ResetISR(void)
+{
+ uint32_t *pui32Src, *pui32Dest;
+
+ //
+ // Copy the data segment initializers from flash to SRAM.
+ //
+ pui32Src = &_etext;
+ for(pui32Dest = &_data; pui32Dest < &_edata; )
+ {
+ *pui32Dest++ = *pui32Src++;
+ }
+
+ //
+ // Zero fill the bss segment.
+ //
+ __asm(" ldr r0, =_bss\n"
+ " ldr r1, =_ebss\n"
+ " mov r2, #0\n"
+ " .thumb_func\n"
+ "zero_loop:\n"
+ " cmp r0, r1\n"
+ " it lt\n"
+ " strlt r2, [r0], #4\n"
+ " blt zero_loop");
+
+ //
+ // Enable the floating-point unit. This must be done here to handle the
+ // case where main() uses floating-point and the function prologue saves
+ // floating-point registers (which will fault if floating-point is not
+ // enabled). Any configuration of the floating-point unit using DriverLib
+ // APIs must be done here prior to the floating-point unit being enabled.
+ //
+ // Note that this does not use DriverLib since it might not be included in
+ // this project.
+ //
+ HWREG(NVIC_CPAC) = ((HWREG(NVIC_CPAC) &
+ ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)) |
+ NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL);
+
+ //
+ // Call the application's entry point.
+ //
+ main();
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a NMI. This
+// simply enters an infinite loop, preserving the system state for examination
+// by a debugger.
+//
+//*****************************************************************************
+static void
+NmiSR(void)
+{
+ //
+ // Enter an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives a fault
+// interrupt. This simply enters an infinite loop, preserving the system state
+// for examination by a debugger.
+//
+//*****************************************************************************
+static void
+FaultISR(void)
+{
+ //
+ // Enter an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
+
+//*****************************************************************************
+//
+// This is the code that gets called when the processor receives an unexpected
+// interrupt. This simply enters an infinite loop, preserving the system state
+// for examination by a debugger.
+//
+//*****************************************************************************
+static void
+IntDefaultHandler(void)
+{
+ //
+ // Go into an infinite loop.
+ //
+ while(1)
+ {
+ }
+}
diff --git a/boards/dk-tm4c129x/grlib_driver_test/startup_rvmdk.S b/boards/dk-tm4c129x/grlib_driver_test/startup_rvmdk.S
new file mode 100644
index 0000000..b2cebec
--- /dev/null
+++ b/boards/dk-tm4c129x/grlib_driver_test/startup_rvmdk.S
@@ -0,0 +1,331 @@
+; <<< Use Configuration Wizard in Context Menu >>>
+;******************************************************************************
+;
+; startup_rvmdk.S - Startup code for use with Keil's uVision.
+;
+; Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved.
+; Software License Agreement
+;
+; Texas Instruments (TI) is supplying this software for use solely and
+; exclusively on TI's microcontroller products. The software is owned by
+; TI and/or its suppliers, and is protected under applicable copyright
+; laws. You may not combine this software with "viral" open-source
+; software in order to form a larger program.
+;
+; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
+; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
+; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
+; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+; DAMAGES, FOR ANY REASON WHATSOEVER.
+;
+; This is part of revision 2.1.0.12573 of the DK-TM4C129X Firmware Package.
+;
+;******************************************************************************
+
+;******************************************************************************
+;
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;
+;******************************************************************************
+Stack EQU 0x00000400
+
+;******************************************************************************
+;
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+;
+;******************************************************************************
+Heap EQU 0x00000000
+
+;******************************************************************************
+;
+; Allocate space for the stack.
+;
+;******************************************************************************
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+StackMem
+ SPACE Stack
+__initial_sp
+
+;******************************************************************************
+;
+; Allocate space for the heap.
+;
+;******************************************************************************
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+HeapMem
+ SPACE Heap
+__heap_limit
+
+;******************************************************************************
+;
+; Indicate that the code in this file preserves 8-byte alignment of the stack.
+;
+;******************************************************************************
+ PRESERVE8
+
+;******************************************************************************
+;
+; Place code into the reset code section.
+;
+;******************************************************************************
+ AREA RESET, CODE, READONLY
+ THUMB
+
+;******************************************************************************
+;
+; External declaration for the interrupt handler used by the application.
+;
+;******************************************************************************
+ EXTERN SysTickIntHandler
+
+;******************************************************************************
+;
+; The vector table.
+;
+;******************************************************************************
+ EXPORT __Vectors
+__Vectors
+ DCD StackMem + Stack ; Top of Stack
+ DCD Reset_Handler ; Reset Handler
+ DCD NmiSR ; NMI Handler
+ DCD FaultISR ; Hard Fault Handler
+ DCD IntDefaultHandler ; The MPU fault handler
+ DCD IntDefaultHandler ; The bus fault handler
+ DCD IntDefaultHandler ; The usage fault handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD IntDefaultHandler ; SVCall handler
+ DCD IntDefaultHandler ; Debug monitor handler
+ DCD 0 ; Reserved
+ DCD IntDefaultHandler ; The PendSV handler
+ DCD SysTickIntHandler ; The SysTick handler
+ DCD IntDefaultHandler ; GPIO Port A
+ DCD IntDefaultHandler ; GPIO Port B
+ DCD IntDefaultHandler ; GPIO Port C
+ DCD IntDefaultHandler ; GPIO Port D
+ DCD IntDefaultHandler ; GPIO Port E
+ DCD IntDefaultHandler ; UART0 Rx and Tx
+ DCD IntDefaultHandler ; UART1 Rx and Tx
+ DCD IntDefaultHandler ; SSI0 Rx and Tx
+ DCD IntDefaultHandler ; I2C0 Master and Slave
+ DCD IntDefaultHandler ; PWM Fault
+ DCD IntDefaultHandler ; PWM Generator 0
+ DCD IntDefaultHandler ; PWM Generator 1
+ DCD IntDefaultHandler ; PWM Generator 2
+ DCD IntDefaultHandler ; Quadrature Encoder 0
+ DCD IntDefaultHandler ; ADC Sequence 0
+ DCD IntDefaultHandler ; ADC Sequence 1
+ DCD IntDefaultHandler ; ADC Sequence 2
+ DCD IntDefaultHandler ; ADC Sequence 3
+ DCD IntDefaultHandler ; Watchdog timer
+ DCD IntDefaultHandler ; Timer 0 subtimer A
+ DCD IntDefaultHandler ; Timer 0 subtimer B
+ DCD IntDefaultHandler ; Timer 1 subtimer A
+ DCD IntDefaultHandler ; Timer 1 subtimer B
+ DCD IntDefaultHandler ; Timer 2 subtimer A
+ DCD IntDefaultHandler ; Timer 2 subtimer B
+ DCD IntDefaultHandler ; Analog Comparator 0
+ DCD IntDefaultHandler ; Analog Comparator 1
+ DCD IntDefaultHandler ; Analog Comparator 2
+ DCD IntDefaultHandler ; System Control (PLL, OSC, BO)
+ DCD IntDefaultHandler ; FLASH Control
+ DCD IntDefaultHandler ; GPIO Port F
+ DCD IntDefaultHandler ; GPIO Port G
+ DCD IntDefaultHandler ; GPIO Port H
+ DCD IntDefaultHandler ; UART2 Rx and Tx
+ DCD IntDefaultHandler ; SSI1 Rx and Tx
+ DCD IntDefaultHandler ; Timer 3 subtimer A
+ DCD IntDefaultHandler ; Timer 3 subtimer B
+ DCD IntDefaultHandler ; I2C1 Master and Slave
+ DCD IntDefaultHandler ; CAN0
+ DCD IntDefaultHandler ; CAN1
+ DCD IntDefaultHandler ; Ethernet
+ DCD IntDefaultHandler ; Hibernate
+ DCD IntDefaultHandler ; USB0
+ DCD IntDefaultHandler ; PWM Generator 3
+ DCD IntDefaultHandler ; uDMA Software Transfer
+ DCD IntDefaultHandler ; uDMA Error
+ DCD IntDefaultHandler ; ADC1 Sequence 0
+ DCD IntDefaultHandler ; ADC1 Sequence 1
+ DCD IntDefaultHandler ; ADC1 Sequence 2
+ DCD IntDefaultHandler ; ADC1 Sequence 3
+ DCD IntDefaultHandler ; External Bus Interface 0
+ DCD IntDefaultHandler ; GPIO Port J
+ DCD IntDefaultHandler ; GPIO Port K
+ DCD IntDefaultHandler ; GPIO Port L
+ DCD IntDefaultHandler ; SSI2 Rx and Tx
+ DCD IntDefaultHandler ; SSI3 Rx and Tx
+ DCD IntDefaultHandler ; UART3 Rx and Tx
+ DCD IntDefaultHandler ; UART4 Rx and Tx
+ DCD IntDefaultHandler ; UART5 Rx and Tx
+ DCD IntDefaultHandler ; UART6 Rx and Tx
+ DCD IntDefaultHandler ; UART7 Rx and Tx
+ DCD IntDefaultHandler ; I2C2 Master and Slave
+ DCD IntDefaultHandler ; I2C3 Master and Slave
+ DCD IntDefaultHandler ; Timer 4 subtimer A
+ DCD IntDefaultHandler ; Timer 4 subtimer B
+ DCD IntDefaultHandler ; Timer 5 subtimer A
+ DCD IntDefaultHandler ; Timer 5 subtimer B
+ DCD IntDefaultHandler ; FPU
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD IntDefaultHandler ; I2C4 Master and Slave
+ DCD IntDefaultHandler ; I2C5 Master and Slave
+ DCD IntDefaultHandler ; GPIO Port M
+ DCD IntDefaultHandler ; GPIO Port N
+ DCD 0 ; Reserved
+ DCD IntDefaultHandler ; Tamper
+ DCD IntDefaultHandler ; GPIO Port P (Summary or P0)
+ DCD IntDefaultHandler ; GPIO Port P1
+ DCD IntDefaultHandler ; GPIO Port P2
+ DCD IntDefaultHandler ; GPIO Port P3
+ DCD IntDefaultHandler ; GPIO Port P4
+ DCD IntDefaultHandler ; GPIO Port P5
+ DCD IntDefaultHandler ; GPIO Port P6
+ DCD IntDefaultHandler ; GPIO Port P7
+ DCD IntDefaultHandler ; GPIO Port Q (Summary or Q0)
+ DCD IntDefaultHandler ; GPIO Port Q1
+ DCD IntDefaultHandler ; GPIO Port Q2
+ DCD IntDefaultHandler ; GPIO Port Q3
+ DCD IntDefaultHandler ; GPIO Port Q4
+ DCD IntDefaultHandler ; GPIO Port Q5
+ DCD IntDefaultHandler ; GPIO Port Q6
+ DCD IntDefaultHandler ; GPIO Port Q7
+ DCD IntDefaultHandler ; GPIO Port R
+ DCD IntDefaultHandler ; GPIO Port S
+ DCD IntDefaultHandler ; SHA/MD5 0
+ DCD IntDefaultHandler ; AES 0
+ DCD IntDefaultHandler ; DES3DES 0
+ DCD IntDefaultHandler ; LCD Controller 0
+ DCD IntDefaultHandler ; Timer 6 subtimer A
+ DCD IntDefaultHandler ; Timer 6 subtimer B
+ DCD IntDefaultHandler ; Timer 7 subtimer A
+ DCD IntDefaultHandler ; Timer 7 subtimer B
+ DCD IntDefaultHandler ; I2C6 Master and Slave
+ DCD IntDefaultHandler ; I2C7 Master and Slave
+ DCD IntDefaultHandler ; HIM Scan Matrix Keyboard 0
+ DCD IntDefaultHandler ; One Wire 0
+ DCD IntDefaultHandler ; HIM PS/2 0
+ DCD IntDefaultHandler ; HIM LED Sequencer 0
+ DCD IntDefaultHandler ; HIM Consumer IR 0
+ DCD IntDefaultHandler ; I2C8 Master and Slave
+ DCD IntDefaultHandler ; I2C9 Master and Slave
+ DCD IntDefaultHandler ; GPIO Port T
+
+;******************************************************************************
+;
+; This is the code that gets called when the processor first starts execution
+; following a reset event.
+;
+;******************************************************************************
+ EXPORT Reset_Handler
+Reset_Handler
+ ;
+ ; Enable the floating-point unit. This must be done here to handle the
+ ; case where main() uses floating-point and the function prologue saves
+ ; floating-point registers (which will fault if floating-point is not
+ ; enabled). Any configuration of the floating-point unit using
+ ; DriverLib APIs must be done here prior to the floating-point unit
+ ; being enabled.
+ ;
+ ; Note that this does not use DriverLib since it might not be included
+ ; in this project.
+ ;
+ MOVW R0, #0xED88
+ MOVT R0, #0xE000
+ LDR R1, [R0]
+ ORR R1, #0x00F00000
+ STR R1, [R0]
+
+ ;
+ ; Call the C library enty point that handles startup. This will copy
+ ; the .data section initializers from flash to SRAM and zero fill the
+ ; .bss section.
+ ;
+ IMPORT __main
+ B __main
+
+;******************************************************************************
+;
+; This is the code that gets called when the processor receives a NMI. This
+; simply enters an infinite loop, preserving the system state for examination
+; by a debugger.
+;
+;******************************************************************************
+NmiSR
+ B NmiSR
+
+;******************************************************************************
+;
+; This is the code that gets called when the processor receives a fault
+; interrupt. This simply enters an infinite loop, preserving the system state
+; for examination by a debugger.
+;
+;******************************************************************************
+FaultISR
+ B FaultISR
+
+;******************************************************************************
+;
+; This is the code that gets called when the processor receives an unexpected
+; interrupt. This simply enters an infinite loop, preserving the system state
+; for examination by a debugger.
+;
+;******************************************************************************
+IntDefaultHandler
+ B IntDefaultHandler
+
+;******************************************************************************
+;
+; Make sure the end of this section is aligned.
+;
+;******************************************************************************
+ ALIGN
+
+;******************************************************************************
+;
+; Some code in the normal code section for initializing the heap and stack.
+;
+;******************************************************************************
+ AREA |.text|, CODE, READONLY
+
+;******************************************************************************
+;
+; The function expected of the C library startup code for defining the stack
+; and heap memory locations. For the C library version of the startup code,
+; provide this function so that the C library initialization code can find out
+; the location of the stack and heap.
+;
+;******************************************************************************
+ IF :DEF: __MICROLIB
+ EXPORT __initial_sp
+ EXPORT __heap_base
+ EXPORT __heap_limit
+ ELSE
+ IMPORT __use_two_region_memory
+ EXPORT __user_initial_stackheap
+__user_initial_stackheap
+ LDR R0, =HeapMem
+ LDR R1, =(StackMem + Stack)
+ LDR R2, =(HeapMem + Heap)
+ LDR R3, =StackMem
+ BX LR
+ ENDIF
+
+;******************************************************************************
+;
+; Make sure the end of this section is aligned.
+;
+;******************************************************************************
+ ALIGN
+
+;******************************************************************************
+;
+; Tell the assembler that we're done.
+;
+;******************************************************************************
+ END