mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Add MSP430X CCS4 demo project.
This commit is contained in:
parent
34f15ddecd
commit
2cf5546e11
11
Demo/MSP430X_MSP430F5438_CCS4/.ccsproject
Normal file
11
Demo/MSP430X_MSP430F5438_CCS4/.ccsproject
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?ccsproject version="1.0"?>
|
||||
|
||||
<projectOptions>
|
||||
<deviceVariant value="MSP430F5438A"/>
|
||||
<deviceEndianness value="little"/>
|
||||
<codegenToolVersion value="3.3.1"/>
|
||||
<isElfFormat value="false"/>
|
||||
<linkerCommandFile value="lnk_msp430f5438a.cmd"/>
|
||||
<rts value="libc.a"/>
|
||||
</projectOptions>
|
102
Demo/MSP430X_MSP430F5438_CCS4/.cdtbuild
Normal file
102
Demo/MSP430X_MSP430F5438_CCS4/.cdtbuild
Normal file
|
@ -0,0 +1,102 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?fileVersion 3.1.0?>
|
||||
|
||||
<ManagedProjectBuildInfo>
|
||||
<project id="RTOSDemo.com.ti.ccstudio.buildDefinitions.MSP430.ProjectType.390526873" name="MSP430" projectType="com.ti.ccstudio.buildDefinitions.MSP430.ProjectType">
|
||||
<configuration artifactExtension="out" artifactName="RTOSDemo" description="" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382" name="Debug" parent="com.ti.ccstudio.buildDefinitions.MSP430.Debug">
|
||||
<toolChain id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.DebugToolchain.1435545480" name="TI Code Generation Tools" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.linkerDebug.1882128094">
|
||||
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.1939561680" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
|
||||
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=MSP430F5438A"/>
|
||||
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
|
||||
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=COFF"/>
|
||||
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=4.2.0"/>
|
||||
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=lnk_msp430f5438a.cmd"/>
|
||||
<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.2036195343" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="3.3.1" valueType="string"/>
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug">
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.DIAG_WARNING.621480247" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.DIAG_WARNING" valueType="stringList">
|
||||
<listOptionValue builtIn="false" value="225"/>
|
||||
</option>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.PRINTF_SUPPORT.37183846" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.PRINTF_SUPPORT" value="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.PRINTF_SUPPORT.minimal" valueType="enumerated"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_VERSION.1568785139" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_VERSION.mspx" valueType="enumerated"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.DEFINE.1497996645" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.DEFINE" valueType="definedSymbols">
|
||||
<listOptionValue builtIn="false" value="__MSP430F5438A__"/>
|
||||
</option>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_ERRATA.CPU21.1362716564" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_ERRATA.CPU21" value="true" valueType="boolean"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_ERRATA.CPU22.844673927" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_ERRATA.CPU22" value="true" valueType="boolean"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_ERRATA.CPU23.2031322476" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_ERRATA.CPU23" value="true" valueType="boolean"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_ERRATA.CPU40.1655029752" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.SILICON_ERRATA.CPU40" value="true" valueType="boolean"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.INCLUDE_PATH.2084743920" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.INCLUDE_PATH" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${CCS_INSTALL_ROOT}/msp430/include""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/RTOSDemo/Demo_Source/Common_Demo_Files/include}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/RTOSDemo/Demo_Source/MSP-EXP430F5438_HAL}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/RTOSDemo/Demo_Source/F5XX_6XX_Core_Lib}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/RTOSDemo/Demo_Source}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/RTOSDemo}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/RTOSDemo/FreeRTOS_Source/include}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/RTOSDemo/FreeRTOS_Source/portable/CCS4/MSP430X}""/>
|
||||
<listOptionValue builtIn="false" value=""${CG_TOOL_ROOT}/include""/>
|
||||
</option>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.CODE_MODEL.446616973" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.CODE_MODEL" value="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.CODE_MODEL.large" valueType="enumerated"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.DATA_MODEL.1471292597" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.DATA_MODEL" value="com.ti.ccstudio.buildDefinitions.MSP430_3.3.compilerID.DATA_MODEL.large" valueType="enumerated"/>
|
||||
</tool>
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.linkerDebug.1882128094" name="MSP430 Linker" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.linkerDebug">
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.HEAP_SIZE.1907940977" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.HEAP_SIZE" value="300" valueType="string"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.STACK_SIZE.155131239" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.STACK_SIZE" value="300" valueType="string"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.USE_HW_MPY.1895647999" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.USE_HW_MPY" value="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.USE_HW_MPY.F5" valueType="enumerated"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.OUTPUT_FILE.2049770982" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.OUTPUT_FILE" value=""RTOSDemo.out"" valueType="string"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.MAP_FILE.572680980" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.MAP_FILE" value=""RTOSDemo.map"" valueType="string"/>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.LIBRARY.1698632584" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.LIBRARY" valueType="libs">
|
||||
<listOptionValue builtIn="false" value=""libc.a""/>
|
||||
</option>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.SEARCH_PATH.302988553" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.SEARCH_PATH" valueType="stringList">
|
||||
<listOptionValue builtIn="false" value=""${CCS_INSTALL_ROOT}/msp430/include""/>
|
||||
<listOptionValue builtIn="false" value=""${CG_TOOL_ROOT}/lib""/>
|
||||
<listOptionValue builtIn="false" value=""${CG_TOOL_ROOT}/include""/>
|
||||
</option>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.generatedLinkerCommandFiles.757897994" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.generatedLinkerCommandFiles" valueType="libs">
|
||||
<listOptionValue builtIn="false" value=""$(GEN_CMDS_QUOTED)""/>
|
||||
</option>
|
||||
<option id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.INITIALIZATION_MODEL.2021374180" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.INITIALIZATION_MODEL" value="com.ti.ccstudio.buildDefinitions.MSP430_3.3.linkerID.INITIALIZATION_MODEL.ROM_MODEL" valueType="enumerated"/>
|
||||
</tool>
|
||||
<macros expandEnvironmentMacros="true"/>
|
||||
</toolChain>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/F5XX_6XX_Core_Lib/hal_UCS.c" name="hal_UCS.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/F5XX_6XX_Core_Lib/hal_UCS.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/F5XX_6XX_Core_Lib/hal_UCS.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/F5XX_6XX_Core_Lib/hal_UCS.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_board.c" name="hal_board.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/MSP-EXP430F5438_HAL/hal_board.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_board.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_board.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_buttons.c" name="hal_buttons.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/MSP-EXP430F5438_HAL/hal_buttons.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_buttons.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_buttons.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_lcd.c" name="hal_lcd.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/MSP-EXP430F5438_HAL/hal_lcd.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_lcd.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_lcd.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_lcd_fonts.c" name="hal_lcd_fonts.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/MSP-EXP430F5438_HAL/hal_lcd_fonts.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_lcd_fonts.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/MSP-EXP430F5438_HAL/hal_lcd_fonts.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/ParTest.c" name="ParTest.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/ParTest.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/ParTest.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/ParTest.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="true" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/RunTimeStatsConfig.c" name="RunTimeStatsConfig.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/RunTimeStatsConfig.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/RunTimeStatsConfig.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/RunTimeStatsConfig.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/main.c" name="main.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/main.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/main.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/main.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/serial.c" name="serial.c" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/serial.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/serial.c">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/serial.c" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/source/RegTest.s43" name="RegTest.s43" rcbsApplicability="disable" resourcePath="/RTOSDemo/Demo_Source/RegTest.asm" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/RegTest.s43">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/source/RegTest.s43" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
<resourceConfiguration exclude="false" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382./RTOSDemo/FreeRTOS_Source/portable/CCS4/MSP430X/portext.s43" name="portext.s43" rcbsApplicability="disable" resourcePath="/RTOSDemo/FreeRTOS_Source/portable/CCS4/MSP430X/portext.asm" toolsToInvoke="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/FreeRTOS_Source/portable/CCS4/MSP430X/portext.s43">
|
||||
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398./RTOSDemo/FreeRTOS_Source/portable/CCS4/MSP430X/portext.s43" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_3.3.exe.compilerDebug.2087986398"/>
|
||||
</resourceConfiguration>
|
||||
</configuration>
|
||||
<macros/>
|
||||
</project>
|
||||
</ManagedProjectBuildInfo>
|
15
Demo/MSP430X_MSP430F5438_CCS4/.cdtproject
Normal file
15
Demo/MSP430X_MSP430F5438_CCS4/.cdtproject
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?eclipse-cdt version="2.0"?>
|
||||
|
||||
<cdtproject id="org.eclipse.cdt.managedbuilder.core.managedMake">
|
||||
<extension id="org.eclipse.cdt.managedbuilder.core.ManagedBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"/>
|
||||
<extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<data>
|
||||
<item id="org.eclipse.cdt.core.pathentry">
|
||||
<pathentry kind="src" path=""/>
|
||||
<pathentry kind="out" path=""/>
|
||||
<pathentry kind="con" path="org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER"/>
|
||||
<pathentry kind="con" path="com.ti.ccstudio.managedbuild.core.CCS_CONTAINER"/>
|
||||
</item>
|
||||
</data>
|
||||
</cdtproject>
|
20
Demo/MSP430X_MSP430F5438_CCS4/.project
Normal file
20
Demo/MSP430X_MSP430F5438_CCS4/.project
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>RTOSDemo</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||
<nature>com.ti.ccstudio.managedbuild.core.ccsNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,6 @@
|
|||
#Sat Jan 01 13:05:50 GMT 2011
|
||||
com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382/internalBuilder/enabled=false
|
||||
com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382/internalBuilder/ignoreErr=true
|
||||
eclipse.preferences.version=1
|
||||
environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<environment/>\r\n
|
||||
environment/project/com.ti.ccstudio.buildDefinitions.MSP430.Debug.1203657382=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<environment/>\r\n
|
|
@ -0,0 +1,3 @@
|
|||
#Sat Jan 01 16:11:34 GMT 2011
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
|
|
@ -0,0 +1,50 @@
|
|||
REM This file should be executed from the command line prior to the first
|
||||
REM build. It will be necessary to refresh the Eclipse project once the
|
||||
REM .bat file has been executed (normally just press F5 to refresh).
|
||||
|
||||
REM Copies all the required files from their location within the standard
|
||||
REM FreeRTOS directory structure to under the Eclipse project directory.
|
||||
REM This permits the Eclipse project to be used in 'managed' mode and without
|
||||
REM having to setup any linked resources.
|
||||
|
||||
REM Have the files already been copied?
|
||||
IF EXIST FreeRTOS_Source Goto END
|
||||
|
||||
REM Create the required directory structure.
|
||||
MD FreeRTOS_Source
|
||||
MD FreeRTOS_Source\include
|
||||
MD FreeRTOS_Source\portable\CCS4
|
||||
MD FreeRTOS_Source\portable\CCS4\MSP430X
|
||||
MD FreeRTOS_Source\portable\MemMang
|
||||
MD Demo_Source\Common_Demo_Files
|
||||
MD Demo_Source\Common_Demo_Files\include
|
||||
|
||||
REM Copy the core kernel files.
|
||||
copy ..\..\Source\tasks.c FreeRTOS_Source
|
||||
copy ..\..\Source\queue.c FreeRTOS_Source
|
||||
copy ..\..\Source\list.c FreeRTOS_Source
|
||||
|
||||
REM Copy the common header files
|
||||
|
||||
copy ..\..\Source\include\*.* FreeRTOS_Source\include
|
||||
|
||||
REM Copy the portable layer files
|
||||
copy ..\..\Source\portable\GCC\ARM_CM3\*.* FreeRTOS_Source\portable\CCS4\MSP430X
|
||||
|
||||
REM Copy the basic memory allocation files
|
||||
copy ..\..\Source\portable\MemMang\heap_1.c FreeRTOS_Source\portable\MemMang
|
||||
|
||||
REM Copy the files that define the common demo tasks.
|
||||
copy ..\Common\minimal\dynamic.c Demo_Source\Common_Demo_Files
|
||||
copy ..\Common\minimal\comtest.c Demo_Source\Common_Demo_Files
|
||||
copy ..\Common\minimal\GenQTest.c Demo_Source\Common_Demo_Files
|
||||
|
||||
REM Copy the common demo file headers.
|
||||
copy ..\Common\include\dynamic.h Demo_Source\Common_Demo_Files\include
|
||||
copy ..\Common\include\comtest.h Demo_Source\Common_Demo_Files\include
|
||||
copy ..\Common\include\comtest2.h Demo_Source\Common_Demo_Files\include
|
||||
copy ..\Common\include\GenQTest.h Demo_Source\Common_Demo_Files\include
|
||||
copy ..\Common\include\serial.h Demo_Source\Common_Demo_Files\include
|
||||
copy ..\Common\include\partest.h Demo_Source\Common_Demo_Files\include
|
||||
|
||||
: END
|
|
@ -0,0 +1,267 @@
|
|||
//*******************************************************************************
|
||||
// Provides Functions to Initialize the UCS/FLL and clock sources
|
||||
// File: hal_ucs.c
|
||||
//
|
||||
// Texas Instruments
|
||||
//
|
||||
// Version 1.2
|
||||
// 11/24/09
|
||||
//
|
||||
// V1.0 Initial Version
|
||||
// V1.1 Added timeout function
|
||||
// V1.1 Added parameter for XTDrive
|
||||
//*******************************************************************************
|
||||
|
||||
#include "msp430.h"
|
||||
#include "hal_UCS.h"
|
||||
|
||||
//************************************************************************
|
||||
// Check and define required Defines
|
||||
//************************************************************************
|
||||
|
||||
#ifndef XT1LFOFFG // Defines if not available in header file
|
||||
#define XT1LFOFFG 0
|
||||
#endif
|
||||
#ifndef XT1HFOFFG // Defines if not available in header file
|
||||
#define XT1HFOFFG 0
|
||||
#endif
|
||||
#ifndef XT2OFFG // Defines if not available in header file
|
||||
#define XT2OFFG 0
|
||||
#endif
|
||||
#ifndef XTS // Defines if not available in header file
|
||||
#define XTS 0
|
||||
#endif
|
||||
#ifndef XT2DRIVE_3 // Defines if not available in header file
|
||||
#define XT2DRIVE_3 0
|
||||
#endif
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for 32kHz Cristal on LFXT1
|
||||
*
|
||||
*/
|
||||
void LFXT_Start(uint16_t xtdrive)
|
||||
{
|
||||
UCSCTL6_L |= XT1DRIVE1_L+XT1DRIVE0_L; // Highest drive setting for XT1 startup
|
||||
|
||||
while (SFRIFG1 & OFIFG) { // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags fault flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
UCSCTL6 = (UCSCTL6 & ~(XT1DRIVE_3)) |(xtdrive); // set Drive mode
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for 32kHz Cristal on LFXT1 with timeout counter
|
||||
*
|
||||
*/
|
||||
uint16_t LFXT_Start_Timeout(uint16_t xtdrive, uint16_t timeout)
|
||||
{
|
||||
UCSCTL6_L |= XT1DRIVE1_L+XT1DRIVE0_L; // Highest drive setting for XT1 startup
|
||||
|
||||
while ((SFRIFG1 & OFIFG) && timeout--){ // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags fault flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
UCSCTL6 = (UCSCTL6 & ~(XT1DRIVE_3)) |(xtdrive); // set Drive mode
|
||||
if (timeout)
|
||||
return (UCS_STATUS_OK);
|
||||
else
|
||||
return (UCS_STATUS_ERROR);
|
||||
}
|
||||
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for XT1
|
||||
*
|
||||
*/
|
||||
void XT1_Start(uint16_t xtdrive)
|
||||
{
|
||||
UCSCTL6 &= ~(XT1OFF | XT1DRIVE_3); // enable XT1
|
||||
UCSCTL6 |= (XTS | xtdrive); // enable XT1 and set XT1Drive
|
||||
|
||||
while (SFRIFG1 & OFIFG) { // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for XT1 with timeout counter
|
||||
*
|
||||
*/
|
||||
uint16_t XT1_Start_Timeout(uint16_t xtdrive, uint16_t timeout)
|
||||
{
|
||||
UCSCTL6 &= ~(XT1OFF | XT1DRIVE_3); // enable XT1
|
||||
UCSCTL6 |= (XTS | xtdrive); // enable XT1 and set XT1Drive
|
||||
|
||||
while ((SFRIFG1 & OFIFG) && timeout--) { // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
if (timeout)
|
||||
return (UCS_STATUS_OK);
|
||||
else
|
||||
return (UCS_STATUS_ERROR);
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Use XT1 in Bypasss mode
|
||||
*
|
||||
*/
|
||||
void XT1_Bypass(void)
|
||||
{
|
||||
UCSCTL6 |= XT1BYPASS;
|
||||
|
||||
while (SFRIFG1 & OFIFG) { // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for XT2
|
||||
*
|
||||
*/
|
||||
void XT2_Start(uint16_t xtdrive)
|
||||
{
|
||||
UCSCTL6 &= ~(XT2OFF | XT2DRIVE_3); // enable XT2
|
||||
UCSCTL6 |= (xtdrive); // Set XT2Drive
|
||||
|
||||
while (SFRIFG1 & OFIFG) { // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for XT2 with timeout counter
|
||||
*
|
||||
*/
|
||||
uint16_t XT2_Start_Timeout(uint16_t xtdrive, uint16_t timeout)
|
||||
{
|
||||
UCSCTL6 &= ~XT2OFF; // Set XT2 On
|
||||
UCSCTL6 &= ~XT2DRIVE_3; // enable XT2
|
||||
UCSCTL6 |= (xtdrive); // Set XT2Drive
|
||||
|
||||
while ((SFRIFG1 & OFIFG) && timeout--){ // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
if (timeout)
|
||||
return (UCS_STATUS_OK);
|
||||
else
|
||||
return (UCS_STATUS_ERROR);
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Use XT2 in Bypasss mode
|
||||
*
|
||||
*/
|
||||
void XT2_Bypass(void)
|
||||
{
|
||||
#ifdef XT2BYPASS // on devices without XT2 this function will be empty
|
||||
UCSCTL6 |= XT2BYPASS;
|
||||
|
||||
while (SFRIFG1 & OFIFG) { // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Initializes FLL of the UCS and wait till settled
|
||||
*
|
||||
* \param fsystem required system frequency (MCLK) in kHz
|
||||
* \param ratio ratio between MCLK and FLLREFCLK
|
||||
*/
|
||||
void Init_FLL_Settle(uint16_t fsystem, uint16_t ratio)
|
||||
{
|
||||
volatile uint16_t x = ratio * 32;
|
||||
// save actual state of FLL loop control
|
||||
uint16_t globalInterruptState = __get_SR_register() & SCG0;
|
||||
|
||||
__bic_SR_register(SCG0); // Enable FLL loop control
|
||||
|
||||
Init_FLL(fsystem, ratio);
|
||||
|
||||
while(x--)
|
||||
{
|
||||
__delay_cycles(30);
|
||||
}
|
||||
|
||||
__bis_SR_register(globalInterruptState); // restore previous state
|
||||
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Initializes FLL of the UCS
|
||||
*
|
||||
* \param fsystem required system frequency (MCLK) in kHz
|
||||
* \param ratio ratio between fsystem and FLLREFCLK
|
||||
*/
|
||||
static void Init_FLL(uint16_t fsystem, uint16_t ratio)
|
||||
{
|
||||
uint16_t d, dco_div_bits;
|
||||
uint16_t mode = 0;
|
||||
|
||||
d = ratio;
|
||||
dco_div_bits = FLLD__2; // Have at least a divider of 2
|
||||
if (fsystem > 16000){
|
||||
d >>= 1 ;
|
||||
mode = 1;
|
||||
}
|
||||
else
|
||||
fsystem <<= 1; // fsystem = fsystem * 2
|
||||
|
||||
while (d > 512)
|
||||
{
|
||||
dco_div_bits = dco_div_bits + FLLD0; // set next higher div level
|
||||
d >>= 1;
|
||||
}
|
||||
|
||||
UCSCTL0 = 0x000; // Set DCO to lowest Tap
|
||||
|
||||
UCSCTL2 &= ~(0x3FF); // Reset FN bits
|
||||
UCSCTL2 = dco_div_bits | (d - 1);
|
||||
|
||||
if (fsystem <= 630) // fsystem < 0.63MHz
|
||||
UCSCTL1= DCORSEL_0 ;
|
||||
else if (fsystem < 1250) // 0.63MHz < fsystem < 1.25MHz
|
||||
UCSCTL1= DCORSEL_1 ;
|
||||
else if (fsystem < 2500) // 1.25MHz < fsystem < 2.5MHz
|
||||
UCSCTL1= DCORSEL_2 ;
|
||||
else if (fsystem < 5000) // 2.5MHz < fsystem < 5MHz
|
||||
UCSCTL1= DCORSEL_3 ;
|
||||
else if (fsystem < 10000) // 5MHz < fsystem < 10MHz
|
||||
UCSCTL1= DCORSEL_4 ;
|
||||
else if (fsystem < 20000) // 10MHz < fsystem < 20MHz
|
||||
UCSCTL1= DCORSEL_5 ;
|
||||
else if (fsystem < 40000) // 20MHz < fsystem < 40MHz
|
||||
UCSCTL1= DCORSEL_6 ;
|
||||
else
|
||||
UCSCTL1= DCORSEL_7 ;
|
||||
|
||||
while (SFRIFG1 & OFIFG) { // check OFIFG fault flag
|
||||
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG); // Clear OSC flaut Flags
|
||||
SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag
|
||||
}
|
||||
|
||||
if (mode == 1) // fsystem > 16000
|
||||
SELECT_MCLK_SMCLK(SELM__DCOCLK + SELS__DCOCLK); // select DCOCLK
|
||||
else
|
||||
SELECT_MCLK_SMCLK(SELM__DCOCLKDIV + SELS__DCOCLKDIV); // selcet DCODIVCLK
|
||||
|
||||
|
||||
} // End of fll_init()
|
|
@ -0,0 +1,143 @@
|
|||
//*******************************************************************************
|
||||
// Provides Functions to Initialize the UCS/FLL and clock sources
|
||||
// File: hal_ucs.c
|
||||
//
|
||||
// Texas Instruments
|
||||
//
|
||||
// Version 1.2
|
||||
// 11/24/09
|
||||
//
|
||||
// V1.0 Initial Version
|
||||
// V1.1 Added timeout function
|
||||
// V1.1 Added parameter for XTDrive
|
||||
//*******************************************************************************
|
||||
|
||||
|
||||
#ifndef __hal_UCS
|
||||
#define __hal_UCS
|
||||
|
||||
#include <stdint.h>
|
||||
#include "hal_macros.h"
|
||||
|
||||
/*************************************************************************
|
||||
* MACROS
|
||||
**************************************************************************/
|
||||
|
||||
/* Select source for FLLREF e.g. SELECT_FLLREF(SELREF__XT1CLK) */
|
||||
#define SELECT_FLLREF(source) st(UCSCTL3 = (UCSCTL3 & ~(SELREF_7)) | (source);)
|
||||
/* Select source for ACLK e.g. SELECT_ACLK(SELA__XT1CLK) */
|
||||
#define SELECT_ACLK(source) st(UCSCTL4 = (UCSCTL4 & ~(SELA_7)) | (source);)
|
||||
/* Select source for MCLK e.g. SELECT_MCLK(SELM__XT2CLK) */
|
||||
#define SELECT_MCLK(source) st(UCSCTL4 = (UCSCTL4 & ~(SELM_7)) | (source);)
|
||||
/* Select source for SMCLK e.g. SELECT_SMCLK(SELS__XT2CLK) */
|
||||
#define SELECT_SMCLK(source) st(UCSCTL4 = (UCSCTL4 & ~(SELS_7)) | (source);)
|
||||
/* Select source for MCLK and SMCLK e.g. SELECT_MCLK_SMCLK(SELM__DCOCLK + SELS__DCOCLK) */
|
||||
#define SELECT_MCLK_SMCLK(sources) st(UCSCTL4 = (UCSCTL4 & ~(SELM_7 + SELS_7)) | (sources);)
|
||||
|
||||
/* set ACLK/x */
|
||||
#define ACLK_DIV(x) st(UCSCTL5 = (UCSCTL5 & ~(DIVA_7)) | (DIVA__##x);)
|
||||
/* set MCLK/x */
|
||||
#define MCLK_DIV(x) st(UCSCTL5 = (UCSCTL5 & ~(DIVM_7)) | (DIVM__##x);)
|
||||
/* set SMCLK/x */
|
||||
#define SMCLK_DIV(x) st(UCSCTL5 = (UCSCTL5 & ~(DIVS_7)) | (DIVS__##x);)
|
||||
/* Select divider for FLLREF e.g. SELECT_FLLREFDIV(2) */
|
||||
#define SELECT_FLLREFDIV(x) st(UCSCTL3 = (UCSCTL3 & ~(FLLREFDIV_7))|(FLLREFDIV__##x);)
|
||||
|
||||
//************************************************************************
|
||||
// Defines
|
||||
//************************************************************************
|
||||
|
||||
#define UCS_STATUS_OK 0
|
||||
#define UCS_STATUS_ERROR 1
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for 32kHz Cristal on LFXT1
|
||||
*
|
||||
* \param xtdrive: Bits defining the LFXT drive mode after startup
|
||||
*
|
||||
*/
|
||||
extern void LFXT_Start(uint16_t xtdrive);
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for 32kHz Cristal on LFXT1 with timeout counter
|
||||
*
|
||||
* \param xtdrive: Bits defining the LFXT drive mode after startup
|
||||
* \param timeout: value for the timeout counter
|
||||
*
|
||||
*/
|
||||
extern uint16_t LFXT_Start_Timeout(uint16_t xtdrive, uint16_t timeout);
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for XT1
|
||||
*
|
||||
* \param xtdrive: Bits defining the XT drive mode
|
||||
*
|
||||
*/
|
||||
extern void XT1_Start(uint16_t xtdrive);
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for XT1 with timeout counter
|
||||
*
|
||||
* \param xtdrive: Bits defining the XT drive mode
|
||||
* \param timeout: value for the timeout counter
|
||||
*
|
||||
*/
|
||||
extern uint16_t XT1_Start_Timeout(uint16_t xtdrive, uint16_t timeout);
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Use XT1 in Bypasss mode
|
||||
*
|
||||
*/
|
||||
extern void XT1_Bypass(void);
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for XT2
|
||||
*
|
||||
* \param xtdrive: Bits defining the XT drive mode
|
||||
*
|
||||
*/
|
||||
extern void XT2_Start(uint16_t xtdrive);
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Startup routine for XT2 with timeout counter
|
||||
*
|
||||
* \param xtdrive: Bits defining the XT drive mode
|
||||
* \param timeout: value for the timeout counter
|
||||
*
|
||||
*/
|
||||
extern uint16_t XT2_Start_Timeout(uint16_t xtdrive, uint16_t timeout);
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Use XT2 in Bypasss mode for MCLK
|
||||
*
|
||||
*/
|
||||
extern void XT2_Bypass(void);
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Initializes FLL of the UCS and wait till settled
|
||||
*
|
||||
* \param fsystem required system frequency (MCLK) in kHz
|
||||
* \param ratio ratio between fsystem and FLLREFCLK
|
||||
*/
|
||||
extern void Init_FLL_Settle(uint16_t fsystem, uint16_t ratio);
|
||||
|
||||
|
||||
//====================================================================
|
||||
/**
|
||||
* Initializes FLL of the UCS
|
||||
*
|
||||
* \param fsystem required system frequency (MCLK) in kHz
|
||||
* \param ratio ratio between fsystem and FLLREFCLK
|
||||
*/
|
||||
static void Init_FLL(uint16_t fsystem, uint16_t ratio);
|
||||
|
||||
#endif /* __hal_UCS */
|
|
@ -0,0 +1,4 @@
|
|||
/*
|
||||
* This macro is for use by other macros to form a fully valid C statement.
|
||||
*/
|
||||
#define st(x) do { x } while (__LINE__ == -1)
|
123
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/FreeRTOSConfig.h
Normal file
123
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/FreeRTOSConfig.h
Normal file
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd.
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* If you are: *
|
||||
* *
|
||||
* + New to FreeRTOS, *
|
||||
* + Wanting to learn FreeRTOS or multitasking in general quickly *
|
||||
* + Looking for basic training, *
|
||||
* + Wanting to improve your FreeRTOS skills and productivity *
|
||||
* *
|
||||
* then take a look at the FreeRTOS books - available as PDF or paperback *
|
||||
* *
|
||||
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
|
||||
* http://www.FreeRTOS.org/Documentation *
|
||||
* *
|
||||
* A pdf reference manual is also available. Both are usually delivered *
|
||||
* to your inbox within 20 minutes to two hours when purchased between 8am *
|
||||
* and 8pm GMT (although please allow up to 24 hours in case of *
|
||||
* exceptional circumstances). Thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
***NOTE*** The exception to the GPL is included to allow you to distribute
|
||||
a combined work that includes FreeRTOS without being obliged to provide the
|
||||
source code for proprietary components outside of the FreeRTOS kernel.
|
||||
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Application specific definitions.
|
||||
*
|
||||
* These definitions should be adjusted for your particular hardware and
|
||||
* application requirements.
|
||||
*
|
||||
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||
*
|
||||
* See http://www.freertos.org/a00110.html.
|
||||
*----------------------------------------------------------*/
|
||||
|
||||
#define configUSE_PREEMPTION 1
|
||||
#define configUSE_IDLE_HOOK 1
|
||||
#define configUSE_TICK_HOOK 1
|
||||
#define configCPU_CLOCK_HZ ( 16000000UL )
|
||||
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 )
|
||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 70 )
|
||||
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 9 * 1024 ) )
|
||||
#define configMAX_TASK_NAME_LEN ( 10 )
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configIDLE_SHOULD_YIELD 1
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 5
|
||||
#define configGENERATE_RUN_TIME_STATS 0
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||
#define configUSE_RECURSIVE_MUTEXES 0
|
||||
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||
#define configUSE_APPLICATION_TASK_TAG 0
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||
|
||||
/* Set the following definitions to 1 to include the API function, or zero
|
||||
to exclude the API function. */
|
||||
#define INCLUDE_vTaskPrioritySet 1
|
||||
#define INCLUDE_uxTaskPriorityGet 1
|
||||
#define INCLUDE_vTaskDelete 0
|
||||
#define INCLUDE_vTaskCleanUpResources 0
|
||||
#define INCLUDE_vTaskSuspend 1
|
||||
#define INCLUDE_vTaskDelayUntil 1
|
||||
#define INCLUDE_vTaskDelay 1
|
||||
|
||||
/* The MSP430X port uses a callback function to configure its tick interrupt.
|
||||
This allows the application to choose the tick interrupt source.
|
||||
configTICK_INTERRUPT_VECTOR must also be set in FreeRTOSConfig.h to the correct
|
||||
interrupt vector for the chosen tick interrupt source. This implementation of
|
||||
vApplicationSetupTimerInterrupt() generates the tick from timer A0, so in this
|
||||
case configTICK_INTERRUPT_VECTOR is set to TIMER0_A0_VECTOR. */
|
||||
#define configTICK_INTERRUPT_VECTOR TIMER0_A0_VECTOR
|
||||
|
||||
/* Prevent the following definitions being included when FreeRTOSConfig.h
|
||||
is included from an asm file. */
|
||||
#ifdef __ICC430__
|
||||
extern void vConfigureTimerForRunTimeStats( void );
|
||||
extern inline unsigned long ulGetRunTimeStatsTime( void );
|
||||
extern volatile unsigned long ulStatsOverflowCount;
|
||||
#endif /* __ICCARM__ */
|
||||
|
||||
//#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vConfigureTimerForRunTimeStats()
|
||||
//#define portGET_RUN_TIME_COUNTER_VALUE() ulGetRunTimeStatsTime()
|
||||
|
||||
#endif /* FREERTOS_CONFIG_H */
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/*******************************************************************************
|
||||
Filename: hal_MSP-EXP430F5438.h
|
||||
|
||||
Copyright 2010 Texas Instruments, Inc.
|
||||
|
||||
This is the master header file and also the only necessary file to be included
|
||||
in order to use MSP-EXP430F5438 HAL.
|
||||
***************************************************************************/
|
||||
#ifndef HAL_MSP_EXP430F5438_H
|
||||
#define HAL_MSP_EXP430F5438_H
|
||||
|
||||
#include "msp430.h"
|
||||
|
||||
//#include "hal_PMM.h"
|
||||
#include "hal_UCS.h"
|
||||
|
||||
#include "hal_lcd.h"
|
||||
#include "hal_buttons.h"
|
||||
//#include "hal_adc.h"
|
||||
#include "hal_board.h"
|
||||
//#include "hal_usb.h"
|
||||
#include "hal_buttons.h"
|
||||
//#include "hal_rf.h"
|
||||
//#include "hal_rtc.h"
|
||||
//#include "hal_tlv.h"
|
||||
|
||||
#endif /* HAL_MSP_EXP430F5438_H */
|
|
@ -0,0 +1,68 @@
|
|||
/**
|
||||
* @file hal_board.c
|
||||
*
|
||||
* Copyright 2010 Texas Instruments, Inc.
|
||||
******************************************************************************/
|
||||
#include "msp430.h"
|
||||
#include "hal_MSP-EXP430F5438.h"
|
||||
|
||||
/**********************************************************************//**
|
||||
* @brief Initializes ACLK, MCLK, SMCLK outputs on P11.0, P11.1,
|
||||
* and P11.2, respectively.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*************************************************************************/
|
||||
void halBoardOutputSystemClock(void) //outputs clock to testpoints
|
||||
{
|
||||
CLK_PORT_DIR |= 0x07;
|
||||
CLK_PORT_SEL |= 0x07;
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
* @brief Stops the output of ACLK, MCLK, SMCLK on P11.0, P11.1, and P11.2.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*************************************************************************/
|
||||
void halBoardStopOutputSystemClock(void)
|
||||
{
|
||||
CLK_PORT_OUT &= ~0x07;
|
||||
CLK_PORT_DIR |= 0x07;
|
||||
CLK_PORT_SEL &= ~0x07;
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
* @brief Initializes all GPIO configurations.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*************************************************************************/
|
||||
void halBoardInit(void)
|
||||
{
|
||||
//Tie unused ports
|
||||
PAOUT = 0;
|
||||
PADIR = 0xFFFF;
|
||||
PASEL = 0;
|
||||
PBOUT = 0;
|
||||
PBDIR = 0xFFFF;
|
||||
PBSEL = 0;
|
||||
PCOUT = 0;
|
||||
PCDIR = 0xFFFF;
|
||||
PCSEL = 0;
|
||||
PDOUT = 0;
|
||||
PDDIR = 0xFFFF;
|
||||
PDSEL = 0x0003;
|
||||
PEOUT = 0;
|
||||
PEDIR = 0xFEFF; // P10.0 to USB RST pin,
|
||||
// ...if enabled with J5
|
||||
PESEL = 0;
|
||||
P11OUT = 0;
|
||||
P11DIR = 0xFF;
|
||||
PJOUT = 0;
|
||||
PJDIR = 0xFF;
|
||||
P11SEL = 0;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
/**********************************************************************//**
|
||||
Filename: hal_board.h
|
||||
|
||||
Copyright 2010 Texas Instruments, Inc.
|
||||
***************************************************************************/
|
||||
#ifndef HAL_BOARD_H
|
||||
#define HAL_BOARD_H
|
||||
|
||||
#define LED_PORT_DIR P1DIR
|
||||
#define LED_PORT_OUT P1OUT
|
||||
#define LED_1 BIT0
|
||||
#define LED_2 BIT1
|
||||
|
||||
#define CLK_PORT_DIR P11DIR //outputs clocks to testpoints
|
||||
#define CLK_PORT_OUT P11OUT
|
||||
#define CLK_PORT_SEL P11SEL
|
||||
|
||||
/*----------------------------------------------------------------
|
||||
* Function Prototypes
|
||||
*----------------------------------------------------------------
|
||||
*/
|
||||
static void halBoardGetSystemClockSettings(unsigned char systemClockSpeed,
|
||||
unsigned char *setDcoRange,
|
||||
unsigned char *setVCore,
|
||||
unsigned int *setMultiplier);
|
||||
|
||||
extern void halBoardOutputSystemClock(void);
|
||||
extern void halBoardStopOutputSystemClock(void);
|
||||
extern void halBoardInit(void);
|
||||
|
||||
#endif /* HAL_BOARD_H */
|
|
@ -0,0 +1,76 @@
|
|||
/**
|
||||
* @file hal_buttons.c
|
||||
*
|
||||
* Copyright 2010 Texas Instruments, Inc.
|
||||
***************************************************************************/
|
||||
#include "msp430.h"
|
||||
#include "hal_MSP-EXP430F5438.h"
|
||||
|
||||
/**********************************************************************//**
|
||||
* @brief Initializes the GPIO ports to act as buttons.
|
||||
*
|
||||
* @param buttonsMask The mask that specifies the button pins.
|
||||
*
|
||||
* @return none
|
||||
*************************************************************************/
|
||||
void halButtonsInit(unsigned char buttonsMask)
|
||||
{
|
||||
BUTTON_PORT_OUT |= buttonsMask;
|
||||
BUTTON_PORT_DIR &= ~buttonsMask;
|
||||
BUTTON_PORT_REN |= buttonsMask;
|
||||
BUTTON_PORT_SEL &= ~buttonsMask;
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
* @brief Returns LOW for the buttons pressed.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return The buttons that have been pressed, identified by a bit = 0.
|
||||
*************************************************************************/
|
||||
unsigned char halButtonsPressed(void)
|
||||
{
|
||||
unsigned char value;
|
||||
value = BUTTON_PORT_IN;
|
||||
return (0xFF - value); //Low==ButtonPressed
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
* @brief Enables button interrupt(s) with low to high transitions.
|
||||
*
|
||||
* @param buttonIntEnableMask The button pin(s) for which the interrupt(s)
|
||||
* should be enabled.
|
||||
*
|
||||
* @return none
|
||||
*************************************************************************/
|
||||
void halButtonsInterruptEnable(unsigned char buttonIntEnableMask)
|
||||
{
|
||||
BUTTON_PORT_IES &= ~buttonIntEnableMask;
|
||||
BUTTON_PORT_IFG &= ~buttonIntEnableMask;
|
||||
BUTTON_PORT_IE |= buttonIntEnableMask;
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
* @brief Disables button interrupts
|
||||
*
|
||||
* @param buttonIntEnableMask The button pin(s) for which the interrupt(s)
|
||||
* should be disabled.
|
||||
*
|
||||
* @return none
|
||||
*************************************************************************/
|
||||
void halButtonsInterruptDisable(unsigned char buttonIntEnableMask)
|
||||
{
|
||||
BUTTON_PORT_IE &= ~buttonIntEnableMask;
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
* @brief Clears the button GPIO settings, disables the buttons.
|
||||
*
|
||||
* @param none
|
||||
*************************************************************************/
|
||||
void halButtonsShutDown()
|
||||
{
|
||||
//All output, outputting 0s
|
||||
BUTTON_PORT_OUT &= ~(BUTTON_ALL);
|
||||
BUTTON_PORT_DIR |= BUTTON_ALL;
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
/*******************************************************************************
|
||||
Filename: hal_buttons.h
|
||||
|
||||
Copyright 2010 Texas Instruments, Inc.
|
||||
***************************************************************************/
|
||||
#ifndef HAL_BUTTONS_H
|
||||
#define HAL_BUTTONS_H
|
||||
|
||||
#define BUTTON_PORT_DIR P2DIR
|
||||
#define BUTTON_PORT_SEL P2SEL
|
||||
#define BUTTON_PORT_OUT P2OUT
|
||||
#define BUTTON_PORT_REN P2REN
|
||||
#define BUTTON_PORT_IE P2IE
|
||||
#define BUTTON_PORT_IES P2IES
|
||||
#define BUTTON_PORT_IFG P2IFG
|
||||
#define BUTTON_PORT_IN P2IN
|
||||
|
||||
#define BUTTON_SELECT BIT3
|
||||
#define BUTTON_DOWN BIT5
|
||||
#define BUTTON_UP BIT4
|
||||
#define BUTTON_RIGHT BIT2
|
||||
#define BUTTON_LEFT BIT1
|
||||
#define BUTTON_S1 BIT6
|
||||
#define BUTTON_S2 BIT7
|
||||
#define BUTTON_ALL 0xFE
|
||||
|
||||
extern volatile unsigned char buttonsPressed;
|
||||
|
||||
/*-------------------------------------------------------------
|
||||
* Function Prototypes
|
||||
* ------------------------------------------------------------*/
|
||||
extern void halButtonsInit(unsigned char buttonsMask);
|
||||
extern unsigned char halButtonsPressed(void);
|
||||
extern void halButtonsInterruptEnable(unsigned char buttonIntEnableMask);
|
||||
extern void halButtonsInterruptDisable(unsigned char buttonIntEnableMask);
|
||||
extern void halButtonsShutDown();
|
||||
|
||||
#endif /* HAL_BUTTONS_H */
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,122 @@
|
|||
/*******************************************************************************
|
||||
Filename: hal_lcd.h
|
||||
|
||||
Copyright 2010 Texas Instruments, Inc.
|
||||
***************************************************************************/
|
||||
#ifndef HAL_LCD_H
|
||||
#define HAL_LCD_H
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(n,m) (((n) < (m)) ? (n) : (m))
|
||||
#endif
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(n,m) (((n) < (m)) ? (m) : (n))
|
||||
#endif
|
||||
|
||||
#ifndef ABS
|
||||
#define ABS(n) (((n) < 0) ? -(n) : (n))
|
||||
#endif
|
||||
|
||||
#define LCD_BACKLT_OUT P8OUT
|
||||
#define LCD_BACKLT_DIR P8DIR
|
||||
#define LCD_BACKLT_SEL P8SEL
|
||||
#define LCD_BACKLIGHT_PIN BIT3
|
||||
#define LCD_CS_RST_DIR P9DIR
|
||||
#define LCD_CS_RST_OUT P9OUT
|
||||
#define LCD_CS_PIN BIT6
|
||||
#define LCD_RESET_PIN BIT7
|
||||
#define LCD_SPI_SEL P9SEL
|
||||
#define LCD_SPI_DIR P9DIR
|
||||
#define LCD_MOSI_PIN BIT1
|
||||
#define LCD_MISO_PIN BIT2
|
||||
#define LCD_CLK_PIN BIT3
|
||||
|
||||
#define LCD_ROW 110
|
||||
#define LCD_COL 138
|
||||
#define LCD_Size 3505
|
||||
#define LCD_MEM_Size 110*17
|
||||
#define LCD_Max_Column_Offset 0x10
|
||||
|
||||
#define LCD_Last_Pixel 3505
|
||||
|
||||
#define LCD_MEM_Row 0x11
|
||||
#define LCD_Row 0x20
|
||||
|
||||
// Grayscale level definitions
|
||||
#define PIXEL_OFF 0
|
||||
#define PIXEL_LIGHT 1
|
||||
#define PIXEL_DARK 2
|
||||
#define PIXEL_ON 3
|
||||
|
||||
#define INVERT_TEXT BIT0
|
||||
#define OVERWRITE_TEXT BIT2
|
||||
#define GRAYSCALE_TEXT BIT1
|
||||
|
||||
/*-------------------------------------------------------------
|
||||
* Function Prototypes
|
||||
* ------------------------------------------------------------*/
|
||||
extern void halLcdInit(void);
|
||||
extern void halLcdShutDown(void);
|
||||
extern void halLcdBackLightInit(void);
|
||||
extern void halLcdSetBackLight(unsigned char BackLightLevel);
|
||||
extern unsigned int halLcdGetBackLight(void);
|
||||
extern void halLcdShutDownBackLight(void);
|
||||
extern void halLcdSendCommand(unsigned char Data[]) ;
|
||||
extern void halLcdSetContrast(unsigned char ContrastLevel);
|
||||
extern unsigned char halLcdGetContrast(void);
|
||||
extern void halLcdStandby(void);
|
||||
extern void halLcdActive(void);
|
||||
|
||||
//Move to specified LCD address
|
||||
extern void halLcdSetAddress(int Address);
|
||||
|
||||
//Draw at current segment location
|
||||
extern void halLcdDrawCurrentBlock(unsigned int Value);
|
||||
extern void halLcdDrawCurrentLine(const unsigned int *value, int length);
|
||||
|
||||
//Draw at specified location by calling
|
||||
//LCD_Set_Address(Address) & LCD_Draw_Current_Block( value )
|
||||
extern void halLcdDrawBlock(unsigned int Address, unsigned int Value);
|
||||
|
||||
//Read value from LCD CGRAM
|
||||
extern int halLcdReadBlock(unsigned int Address);
|
||||
|
||||
//Clear LCD Screen
|
||||
extern void halLcdClearScreen(void);
|
||||
|
||||
//Invert black to white and vice versa
|
||||
extern void halLcdReverse(void);
|
||||
|
||||
// Draw a Pixel @ (x,y) with GrayScale level
|
||||
extern void halLcdPixel( int x, int y, unsigned char GrayScale);
|
||||
//Draw Line from (x1,y1) to (x2,y2) with GrayScale level
|
||||
extern void halLcdLine( int x1, int y1, int x2, int y2, unsigned char GrayScale);
|
||||
extern void halLcdHLine( int x1, int x2, int y, unsigned char GrayScale);
|
||||
extern void halLcdVLine( int x1, int x2, int y, unsigned char GrayScale);
|
||||
|
||||
extern void halLcdCircle(int x, int y, int Radius, int GrayScale);
|
||||
|
||||
extern void halLcdImage(const unsigned int Image[], int Columns, int Rows, int x, int y);
|
||||
extern void halLcdClearImage(int Columns, int Rows, int x, int y);
|
||||
|
||||
//Print String of Length starting at current LCD location
|
||||
extern void halLcdPrint(char String[], unsigned char TextStyle) ;
|
||||
|
||||
//Print String of Length starting at (x,y)
|
||||
extern void halLcdPrintXY(char String[], int x, int y, unsigned char TextStyle);
|
||||
|
||||
//Print String of Length starting at (x,y)
|
||||
extern void halLcdPrintLine(char String[], unsigned char Line, unsigned char TextStyle);
|
||||
extern void halLcdPrintLineCol(char String[], unsigned char Line, unsigned char Col, unsigned char TextStyle);
|
||||
|
||||
extern void halLcdCursor(void);
|
||||
extern void halLcdCursorOff(void);
|
||||
//Scroll a single row of pixels
|
||||
extern void halLcdScrollRow(int y);
|
||||
//Scroll a number of consecutive rows from yStart to yEnd
|
||||
extern void halLcdHScroll(int yStart, int yEnd);
|
||||
//Scroll a line of text
|
||||
extern void halLcdScrollLine(int Line);
|
||||
|
||||
#endif /* HAL_LCD_H */
|
|
@ -0,0 +1,323 @@
|
|||
/**********************************************************************//**
|
||||
* @file UserExperienceGraphics.c
|
||||
*
|
||||
* Copyright 2010 Texas Instruments, Inc.
|
||||
***************************************************************************/
|
||||
|
||||
const unsigned char fonts_lookup[]={
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
64,65,0,69,0,68,67,0,0,1, //'0' = 48 = 0x30
|
||||
2,3,4,5,6,7,8,9,66,0, //'9' = 57 = 0x39
|
||||
0,70,0,62,0,10,11,12,13,14, //'A' --> 'Z'
|
||||
15,16,17,18,19,20,21,22,23,24,
|
||||
25,26,27,28,29,30,31,32,33,34,
|
||||
35,0,0,0,71,0,0,36,37,38, //'a' = 97
|
||||
39,40,41,42,43,44,45,46,47,48,
|
||||
49,50,51,52,53,54,55,56,57,58,
|
||||
59,60,61,62,0 ,0, 0, 72,73,74,
|
||||
75,76,77,78,79,80,81 //'z' = 122
|
||||
};
|
||||
|
||||
const unsigned int fonts[]= {
|
||||
0x0000, 0x0ffc, 0x3c0f, 0x3f0f, 0x3fcf, 0x3ccf, 0x3cff, 0x3c3f,
|
||||
0x3c0f, 0x0ffc, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c0, 0x00f0,
|
||||
0x00ff, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x0fff, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f00, 0x03c0,
|
||||
0x00f0, 0x003c, 0x0f0f, 0x0fff, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x03fc, 0x0f0f, 0x0f00, 0x0f00, 0x03f0, 0x0f00, 0x0f00, 0x0f0f,
|
||||
0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f00, 0x0fc0, 0x0ff0,
|
||||
0x0f3c, 0x0f0f, 0x3fff, 0x0f00, 0x0f00, 0x3fc0, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0fff, 0x000f, 0x000f, 0x000f, 0x03ff, 0x0f00,
|
||||
0x0f00, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0,
|
||||
0x003c, 0x000f, 0x000f, 0x03ff, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x3fff, 0x3c0f, 0x3c0f, 0x3c00,
|
||||
0x0f00, 0x03c0, 0x00f0, 0x00f0, 0x00f0, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f3f, 0x03fc, 0x0fcf, 0x0f0f,
|
||||
0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f,
|
||||
0x0f0f, 0x0f0f, 0x0ffc, 0x03c0, 0x03c0, 0x00f0, 0x00fc, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x00f0, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f,
|
||||
0x0fff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0fff, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ffc, 0x3c3c, 0x3c3c, 0x3c3c,
|
||||
0x0fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ff0, 0x3c3c, 0x3c0f,
|
||||
0x000f, 0x000f, 0x000f, 0x3c0f, 0x3c3c, 0x0ff0, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x03ff, 0x0f3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c,
|
||||
0x3c3c, 0x0f3c, 0x03ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x3fff,
|
||||
0x303c, 0x003c, 0x0c3c, 0x0ffc, 0x0c3c, 0x003c, 0x303c, 0x3fff,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x3fff, 0x3c3c, 0x303c, 0x0c3c,
|
||||
0x0ffc, 0x0c3c, 0x003c, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0ff0, 0x3c3c, 0x3c0f, 0x000f, 0x000f, 0x3f0f, 0x3c0f,
|
||||
0x3c3c, 0x3ff0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f,
|
||||
0x0f0f, 0x0f0f, 0x0fff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x03fc, 0x00f0, 0x00f0, 0x00f0, 0x00f0,
|
||||
0x00f0, 0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x3fc0, 0x0f00, 0x0f00, 0x0f00, 0x0f00, 0x0f0f, 0x0f0f, 0x0f0f,
|
||||
0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c3f, 0x3c3c, 0x0f3c,
|
||||
0x0f3c, 0x03fc, 0x0f3c, 0x0f3c, 0x3c3c, 0x3c3f, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x00ff, 0x003c, 0x003c, 0x003c, 0x003c, 0x303c,
|
||||
0x3c3c, 0x3c3c, 0x3fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f,
|
||||
0x3f3f, 0x3fff, 0x3fff, 0x3ccf, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f, 0x3c0f, 0x3c3f, 0x3cff,
|
||||
0x3fff, 0x3fcf, 0x3f0f, 0x3c0f, 0x3c0f, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x03f0, 0x0f3c, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f,
|
||||
0x0f3c, 0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x3c3c,
|
||||
0x3c3c, 0x3c3c, 0x0ffc, 0x003c, 0x003c, 0x003c, 0x00ff, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x03f0, 0x0f3c, 0x3c0f, 0x3c0f, 0x3c0f,
|
||||
0x3f0f, 0x3fcf, 0x0ffc, 0x0f00, 0x3fc0, 0x0000, 0x0000, 0x0000,
|
||||
0x0fff, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ffc, 0x0f3c, 0x3c3c, 0x3c3c,
|
||||
0x3c3f, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f,
|
||||
0x000f, 0x00fc, 0x03c0, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0fff, 0x0cf3, 0x00f0, 0x00f0, 0x00f0, 0x00f0,
|
||||
0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f,
|
||||
0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f,
|
||||
0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x00f0, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3ccf, 0x3ccf, 0x0f3c,
|
||||
0x0f3c, 0x0f3c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f,
|
||||
0x0f0f, 0x03fc, 0x00f0, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc,
|
||||
0x00f0, 0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x3fff, 0x3f0f, 0x03c3, 0x03c0, 0x00f0, 0x003c, 0x303c, 0x3c0f,
|
||||
0x3fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x03fc, 0x0f00, 0x0ffc, 0x0f0f, 0x0f0f, 0x3cfc, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x003f, 0x003c, 0x003c, 0x0ffc, 0x3c3c, 0x3c3c,
|
||||
0x3c3c, 0x3c3c, 0x0fcf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x03fc, 0x0f0f, 0x000f, 0x000f, 0x0f0f, 0x03fc,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0fc0, 0x0f00, 0x0f00, 0x0ffc,
|
||||
0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x3cfc, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0fff, 0x000f,
|
||||
0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, 0x0f3c,
|
||||
0x003c, 0x003c, 0x03ff, 0x003c, 0x003c, 0x003c, 0x00ff, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3cfc, 0x0f0f,
|
||||
0x0f0f, 0x0f0f, 0x0ffc, 0x0f00, 0x0f0f, 0x03fc, 0x0000, 0x0000,
|
||||
0x003f, 0x003c, 0x003c, 0x0f3c, 0x3cfc, 0x3c3c, 0x3c3c, 0x3c3c,
|
||||
0x3c3f, 0x0000, 0x0000, 0x0000, 0x0000, 0x03c0, 0x03c0, 0x0000,
|
||||
0x03fc, 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x3ffc, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0f00, 0x0f00, 0x0000, 0x0ff0, 0x0f00, 0x0f00,
|
||||
0x0f00, 0x0f00, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x003f,
|
||||
0x003c, 0x003c, 0x3c3c, 0x0f3c, 0x03fc, 0x0f3c, 0x3c3c, 0x3c3f,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x03c0, 0x03c0, 0x03c0,
|
||||
0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x3ffc, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x3ccf, 0x3ccf, 0x3ccf,
|
||||
0x3ccf, 0x3c0f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x03ff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f,
|
||||
0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0fcf, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c,
|
||||
0x0ffc, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x3cfc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0ffc, 0x0f00, 0x3fc0,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f3f, 0x3f3c, 0x3cfc,
|
||||
0x003c, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x03fc, 0x0f0f, 0x003c, 0x03c0, 0x0f0f, 0x03fc,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030, 0x003c, 0x0fff,
|
||||
0x003c, 0x003c, 0x003c, 0x0f3c, 0x03f0, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f,
|
||||
0x0f0f, 0x3cfc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x00f0, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f, 0x3c0f,
|
||||
0x3ccf, 0x3ccf, 0x0f3c, 0x0f3c, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x3c0f, 0x0f3c, 0x03f0, 0x03f0, 0x0f3c,
|
||||
0x3c0f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ff0, 0x0f00, 0x03c0, 0x00ff,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x0f03, 0x03c0,
|
||||
0x003c, 0x0c0f, 0x0fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc,
|
||||
0x0f0f, 0x0f00, 0x03c0, 0x00f0, 0x00f0, 0x0000, 0x00f0, 0x00f0,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0f00, 0x03c0, 0x00f0, 0x003c, 0x003c, 0x003c, 0x00f0,
|
||||
0x03c0, 0x0f00, 0x0000, 0x0000, 0x0000, 0x0000, 0x003c, 0x00f0,
|
||||
0x03c0, 0x0f00, 0x0f00, 0x0f00, 0x03c0, 0x00f0, 0x003c, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, 0x03f0, 0x0000,
|
||||
0x0000, 0x03f0, 0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0,
|
||||
0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x3ffc, 0x3ffc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x03c0, 0x03c0, 0x3ffc, 0x3ffc,
|
||||
0x03c0, 0x03c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x3ffc, 0x0000, 0x0000, 0x3ffc, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f,
|
||||
0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
//0---------------------------
|
||||
0x0000, 0x0ffc, 0x3c0f, 0x3f0f, 0x3fcf, 0x3ccf, 0x3cff, 0x3c3f,
|
||||
0x3c0f, 0x0ffc, 0x0000, 0x0000, 0x0000,
|
||||
//1---------------------------
|
||||
0x0000, 0x00c0, 0x00f0, 0x00ff, 0x00f0, 0x00f0, 0x00f0, 0x00f0,
|
||||
0x00f0, 0x0fff, 0x0000, 0x0000, 0x0000,
|
||||
//2---------------------------
|
||||
0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f00, 0x03c0, 0x00f0, 0x003c,
|
||||
0x0f0f, 0x0fff, 0x0000, 0x0000, 0x0000,
|
||||
//3---------------------------
|
||||
0x0000, 0x03fc, 0x0f0f, 0x0f00, 0x0f00, 0x03f0, 0x0f00, 0x0f00,
|
||||
0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000,
|
||||
//4---------------------------
|
||||
0x0000, 0x0f00, 0x0fc0, 0x0ff0, 0x0f3c, 0x0f0f, 0x3fff, 0x0f00,
|
||||
0x0f00, 0x3fc0, 0x0000, 0x0000, 0x0000,
|
||||
//5---------------------------
|
||||
0x0000, 0x0fff, 0x000f, 0x000f, 0x000f, 0x03ff, 0x0f00, 0x0f00,
|
||||
0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000,
|
||||
//6---------------------------
|
||||
0x0000, 0x03f0, 0x003c, 0x000f, 0x000f, 0x03ff, 0x0f0f, 0x0f0f,
|
||||
0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000,
|
||||
//7---------------------------
|
||||
0x0000, 0x3fff, 0x3c0f, 0x3c0f, 0x3c00, 0x0f00, 0x03c0, 0x00f0,
|
||||
0x00f0, 0x00f0, 0x0000, 0x0000, 0x0000,
|
||||
//8---------------------------
|
||||
0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f3f, 0x03fc, 0x0fcf, 0x0f0f,
|
||||
0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000,
|
||||
//9---------------------------
|
||||
0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0ffc, 0x03c0, 0x03c0,
|
||||
0x00f0, 0x00fc, 0x0000, 0x0000, 0x0000,
|
||||
} ;
|
||||
|
||||
|
||||
const unsigned int GrayScale_fonts[]= {
|
||||
0x0000, 0x0aa8, 0x280a, 0x2a0a, 0x2a8a, 0x288a, 0x28aa, 0x282a,
|
||||
0x280a, 0x0aa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x00a0,
|
||||
0x00aa, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x0aaa, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a00, 0x0280,
|
||||
0x00a0, 0x0028, 0x0a0a, 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x02a8, 0x0a0a, 0x0a00, 0x0a00, 0x02a0, 0x0a00, 0x0a00, 0x0a0a,
|
||||
0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a00, 0x0a80, 0x0aa0,
|
||||
0x0a28, 0x0a0a, 0x2aaa, 0x0a00, 0x0a00, 0x2a80, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0aaa, 0x000a, 0x000a, 0x000a, 0x02aa, 0x0a00,
|
||||
0x0a00, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0,
|
||||
0x0028, 0x000a, 0x000a, 0x02aa, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, 0x280a, 0x280a, 0x2800,
|
||||
0x0a00, 0x0280, 0x00a0, 0x00a0, 0x00a0, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a2a, 0x02a8, 0x0a8a, 0x0a0a,
|
||||
0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a,
|
||||
0x0a0a, 0x0a0a, 0x0aa8, 0x0280, 0x0280, 0x00a0, 0x00a8, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x00a0, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a,
|
||||
0x0aaa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0aaa, 0x2828, 0x2828, 0x2828, 0x0aa8, 0x2828, 0x2828, 0x2828,
|
||||
0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aa0, 0x2828, 0x280a,
|
||||
0x000a, 0x000a, 0x000a, 0x280a, 0x2828, 0x0aa0, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x02aa, 0x0a28, 0x2828, 0x2828, 0x2828, 0x2828,
|
||||
0x2828, 0x0a28, 0x02aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa,
|
||||
0x2028, 0x0028, 0x0828, 0x0aa8, 0x0828, 0x0028, 0x2028, 0x2aaa,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, 0x2828, 0x2028, 0x0828,
|
||||
0x0aa8, 0x0828, 0x0028, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0aa0, 0x2828, 0x280a, 0x000a, 0x000a, 0x2a0a, 0x280a,
|
||||
0x2828, 0x2aa0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a,
|
||||
0x0a0a, 0x0a0a, 0x0aaa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x02a8, 0x00a0, 0x00a0, 0x00a0, 0x00a0,
|
||||
0x00a0, 0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x2a80, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a0a, 0x0a0a, 0x0a0a,
|
||||
0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x282a, 0x2828, 0x0a28,
|
||||
0x0a28, 0x02a8, 0x0a28, 0x0a28, 0x2828, 0x282a, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x00aa, 0x0028, 0x0028, 0x0028, 0x0028, 0x2028,
|
||||
0x2828, 0x2828, 0x2aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x280a,
|
||||
0x2a2a, 0x2aaa, 0x2aaa, 0x288a, 0x280a, 0x280a, 0x280a, 0x280a,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x280a, 0x280a, 0x282a, 0x28aa,
|
||||
0x2aaa, 0x2a8a, 0x2a0a, 0x280a, 0x280a, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x02a0, 0x0a28, 0x280a, 0x280a, 0x280a, 0x280a, 0x280a,
|
||||
0x0a28, 0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x2828,
|
||||
0x2828, 0x2828, 0x0aa8, 0x0028, 0x0028, 0x0028, 0x00aa, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x02a0, 0x0a28, 0x280a, 0x280a, 0x280a,
|
||||
0x2a0a, 0x2a8a, 0x0aa8, 0x0a00, 0x2a80, 0x0000, 0x0000, 0x0000,
|
||||
0x0aaa, 0x2828, 0x2828, 0x2828, 0x0aa8, 0x0a28, 0x2828, 0x2828,
|
||||
0x282a, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a,
|
||||
0x000a, 0x00a8, 0x0280, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0aaa, 0x08a2, 0x00a0, 0x00a0, 0x00a0, 0x00a0,
|
||||
0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a,
|
||||
0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a,
|
||||
0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x00a0, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x280a, 0x280a, 0x280a, 0x280a, 0x288a, 0x288a, 0x0a28,
|
||||
0x0a28, 0x0a28, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a,
|
||||
0x0a0a, 0x02a8, 0x00a0, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8,
|
||||
0x00a0, 0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x2aaa, 0x2a0a, 0x0282, 0x0280, 0x00a0, 0x0028, 0x2028, 0x280a,
|
||||
0x2aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x02a8, 0x0a00, 0x0aa8, 0x0a0a, 0x0a0a, 0x28a8, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x002a, 0x0028, 0x0028, 0x0aa8, 0x2828, 0x2828,
|
||||
0x2828, 0x2828, 0x0a8a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x02a8, 0x0a0a, 0x000a, 0x000a, 0x0a0a, 0x02a8,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0a80, 0x0a00, 0x0a00, 0x0aa8,
|
||||
0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x28a8, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0aaa, 0x000a,
|
||||
0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, 0x0a28,
|
||||
0x0028, 0x0028, 0x02aa, 0x0028, 0x0028, 0x0028, 0x00aa, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x28a8, 0x0a0a,
|
||||
0x0a0a, 0x0a0a, 0x0aa8, 0x0a00, 0x0a0a, 0x02a8, 0x0000, 0x0000,
|
||||
0x002a, 0x0028, 0x0028, 0x0a28, 0x28a8, 0x2828, 0x2828, 0x2828,
|
||||
0x282a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0280, 0x0280, 0x0000,
|
||||
0x02a8, 0x0280, 0x0280, 0x0280, 0x0280, 0x2aa8, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0a00, 0x0a00, 0x0000, 0x0aa0, 0x0a00, 0x0a00,
|
||||
0x0a00, 0x0a00, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x002a,
|
||||
0x0028, 0x0028, 0x2828, 0x0a28, 0x02a8, 0x0a28, 0x2828, 0x282a,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0280, 0x0280, 0x0280,
|
||||
0x0280, 0x0280, 0x0280, 0x0280, 0x2aa8, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x288a, 0x288a, 0x288a,
|
||||
0x288a, 0x280a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x02aa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a,
|
||||
0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0a8a, 0x2828, 0x2828, 0x2828, 0x2828,
|
||||
0x0aa8, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x28a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0aa8, 0x0a00, 0x2a80,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a2a, 0x2a28, 0x28a8,
|
||||
0x0028, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0028, 0x0280, 0x0a0a, 0x02a8,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0028, 0x0aaa,
|
||||
0x0028, 0x0028, 0x0028, 0x0a28, 0x02a0, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a,
|
||||
0x0a0a, 0x28a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x00a0, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, 0x280a,
|
||||
0x288a, 0x288a, 0x0a28, 0x0a28, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x280a, 0x0a28, 0x02a0, 0x02a0, 0x0a28,
|
||||
0x280a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x2828, 0x2828, 0x2828, 0x2828, 0x0aa0, 0x0a00, 0x0280, 0x00aa,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x0a02, 0x0280,
|
||||
0x0028, 0x080a, 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8,
|
||||
0x0a0a, 0x0a00, 0x0280, 0x00a0, 0x00a0, 0x0000, 0x00a0, 0x00a0,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0a00, 0x0280, 0x00a0, 0x0028, 0x0028, 0x0028, 0x00a0,
|
||||
0x0280, 0x0a00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0028, 0x00a0,
|
||||
0x0280, 0x0a00, 0x0a00, 0x0a00, 0x0280, 0x00a0, 0x0028, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, 0x02a0, 0x0000,
|
||||
0x0000, 0x02a0, 0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0,
|
||||
0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x2aa8, 0x2aa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0280, 0x0280, 0x2aa8, 0x2aa8,
|
||||
0x0280, 0x0280, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x2aa8, 0x0000, 0x0000, 0x2aa8, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a,
|
||||
0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
//0---------------------------
|
||||
0x0000, 0x0aa8, 0x280a, 0x2a0a, 0x2a8a, 0x288a, 0x28aa, 0x282a,
|
||||
0x280a, 0x0aa8, 0x0000, 0x0000, 0x0000,
|
||||
//1---------------------------
|
||||
0x0000, 0x0080, 0x00a0, 0x00aa, 0x00a0, 0x00a0, 0x00a0, 0x00a0,
|
||||
0x00a0, 0x0aaa, 0x0000, 0x0000, 0x0000,
|
||||
//2---------------------------
|
||||
0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a00, 0x0280, 0x00a0, 0x0028,
|
||||
0x0a0a, 0x0aaa, 0x0000, 0x0000, 0x0000,
|
||||
//2---------------------------
|
||||
0x0000, 0x02a8, 0x0a0a, 0x0a00, 0x0a00, 0x02a0, 0x0a00, 0x0a00,
|
||||
0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000,
|
||||
//4---------------------------
|
||||
0x0000, 0x0a00, 0x0a80, 0x0aa0, 0x0a28, 0x0a0a, 0x2aaa, 0x0a00,
|
||||
0x0a00, 0x2a80, 0x0000, 0x0000, 0x0000,
|
||||
//5---------------------------
|
||||
0x0000, 0x0aaa, 0x000a, 0x000a, 0x000a, 0x02aa, 0x0a00, 0x0a00,
|
||||
0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000,
|
||||
//6---------------------------
|
||||
0x0000, 0x02a0, 0x0028, 0x000a, 0x000a, 0x02aa, 0x0a0a, 0x0a0a,
|
||||
0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000,
|
||||
//7---------------------------
|
||||
0x0000, 0x2aaa, 0x280a, 0x280a, 0x2800, 0x0a00, 0x0280, 0x00a0,
|
||||
0x00a0, 0x00a0, 0x0000, 0x0000, 0x0000,
|
||||
//8---------------------------
|
||||
0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a2a, 0x02a8, 0x0a8a, 0x0a0a,
|
||||
0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000,
|
||||
//9---------------------------
|
||||
0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0aa8, 0x0280, 0x0280,
|
||||
0x00a0, 0x00a8, 0x0000, 0x0000, 0x0000,
|
||||
} ;
|
|
@ -0,0 +1,15 @@
|
|||
/*******************************************************************************
|
||||
Filename: hal_lcd_fonts.h
|
||||
|
||||
Copyright 2010 Texas Instruments, Inc.
|
||||
***************************************************************************/
|
||||
#ifndef FONTS_H
|
||||
#define FONTS_H
|
||||
|
||||
#define FONT_HEIGHT 12 // Each character has 13 lines
|
||||
|
||||
extern const unsigned char fonts_lookup[];
|
||||
extern const unsigned int fonts[];
|
||||
extern const unsigned int GrayScale_fonts[];
|
||||
|
||||
#endif /* FONTS_H */
|
144
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/ParTest.c
Normal file
144
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/ParTest.c
Normal file
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd.
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* If you are: *
|
||||
* *
|
||||
* + New to FreeRTOS, *
|
||||
* + Wanting to learn FreeRTOS or multitasking in general quickly *
|
||||
* + Looking for basic training, *
|
||||
* + Wanting to improve your FreeRTOS skills and productivity *
|
||||
* *
|
||||
* then take a look at the FreeRTOS books - available as PDF or paperback *
|
||||
* *
|
||||
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
|
||||
* http://www.FreeRTOS.org/Documentation *
|
||||
* *
|
||||
* A pdf reference manual is also available. Both are usually delivered *
|
||||
* to your inbox within 20 minutes to two hours when purchased between 8am *
|
||||
* and 8pm GMT (although please allow up to 24 hours in case of *
|
||||
* exceptional circumstances). Thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
***NOTE*** The exception to the GPL is included to allow you to distribute
|
||||
a combined work that includes FreeRTOS without being obliged to provide the
|
||||
source code for proprietary components outside of the FreeRTOS kernel.
|
||||
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Simple parallel port IO routines to flash LEDs.
|
||||
*-----------------------------------------------------------*/
|
||||
|
||||
/* Kernel includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
/* Hardware includes. */
|
||||
#include "msp430.h"
|
||||
#include "hal_MSP-EXP430F5438.h"
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestInitialise( void )
|
||||
{
|
||||
/* The port used by the two LEDs is configured from halBoardInit() so
|
||||
nothing needs to be done here. */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
||||
{
|
||||
/* Only two LEDs are provided on the hardware. */
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
if( xValue != pdFALSE )
|
||||
{
|
||||
switch( uxLED )
|
||||
{
|
||||
case 0: LED_PORT_OUT |= LED_1;
|
||||
break;
|
||||
|
||||
case 1: LED_PORT_OUT |= LED_2;
|
||||
break;
|
||||
|
||||
default: /* Nothing to do here, there are only two LEDs. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch( uxLED )
|
||||
{
|
||||
case 0: LED_PORT_OUT &= ~LED_1;
|
||||
break;
|
||||
|
||||
case 1: LED_PORT_OUT &= ~LED_2;
|
||||
break;
|
||||
default: /* Nothing to do here, there are only two LEDs. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||
{
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
switch( uxLED )
|
||||
{
|
||||
case 0: if( ( LED_PORT_OUT & LED_1 ) == 0 )
|
||||
{
|
||||
LED_PORT_OUT |= LED_1;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_PORT_OUT &= ~LED_1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: if( ( LED_PORT_OUT & LED_2 ) == 0 )
|
||||
{
|
||||
LED_PORT_OUT |= LED_2;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_PORT_OUT &= ~LED_2;
|
||||
}
|
||||
break;
|
||||
default: /* Nothing to do here, there are only two LEDs. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
188
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/RegTest.asm
Normal file
188
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/RegTest.asm
Normal file
|
@ -0,0 +1,188 @@
|
|||
;
|
||||
; FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd.
|
||||
;
|
||||
; ***************************************************************************
|
||||
; * *
|
||||
; * If you are: *
|
||||
; * *
|
||||
; * + New to FreeRTOS, *
|
||||
; * + Wanting to learn FreeRTOS or multitasking in general quickly *
|
||||
; * + Looking for basic training, *
|
||||
; * + Wanting to improve your FreeRTOS skills and productivity *
|
||||
; * *
|
||||
; * then take a look at the FreeRTOS books - available as PDF or paperback *
|
||||
; * *
|
||||
; * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
|
||||
; * http://www.FreeRTOS.org/Documentation *
|
||||
; * *
|
||||
; * A pdf reference manual is also available. Both are usually delivered *
|
||||
; * to your inbox within 20 minutes to two hours when purchased between 8am *
|
||||
; * and 8pm GMT (although please allow up to 24 hours in case of *
|
||||
; * exceptional circumstances). Thank you for your support! *
|
||||
; * *
|
||||
; ***************************************************************************
|
||||
;
|
||||
; This file is part of the FreeRTOS distribution.
|
||||
;
|
||||
; FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
; the terms of the GNU General Public License (version 2) as published by the
|
||||
; Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
; ***NOTE*** The exception to the GPL is included to allow you to distribute
|
||||
; a combined work that includes FreeRTOS without being obliged to provide the
|
||||
; source code for proprietary components outside of the FreeRTOS kernel.
|
||||
; FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
|
||||
; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
; more details. You should have received a copy of the GNU General Public
|
||||
; License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
; can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
; by writing to Richard Barry, contact details for whom are available on the
|
||||
; FreeRTOS WEB site.
|
||||
;
|
||||
; 1 tab == 4 spaces!
|
||||
;
|
||||
; http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
; contact details.
|
||||
;
|
||||
; http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
; critical systems.
|
||||
;
|
||||
; http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
; licensing and training services.
|
||||
|
||||
; * The definition of the "register test" tasks, as described at the top of
|
||||
; * main.c
|
||||
|
||||
|
||||
|
||||
|
||||
.global usRegTest1Counter
|
||||
.global usRegTest2Counter
|
||||
.global vPortYield
|
||||
|
||||
.def vRegTest1Task
|
||||
.def vRegTest2Task
|
||||
|
||||
.text
|
||||
|
||||
vRegTest1Task:
|
||||
|
||||
; Fill each general purpose register with a known value.
|
||||
movx.a #0x44444, r4
|
||||
movx.a #0x55555, r5
|
||||
movx.a #0x66666, r6
|
||||
movx.a #0x77777, r7
|
||||
movx.a #0x88888, r8
|
||||
movx.a #0x99999, r9
|
||||
movx.a #0xaaaaa, r10
|
||||
movx.a #0xbbbbb, r11
|
||||
movx.a #0xccccc, r12
|
||||
movx.a #0xddddd, r13
|
||||
movx.a #0xeeeee, r14
|
||||
movx.a #0xfffff, r15
|
||||
|
||||
prvRegTest1Loop:
|
||||
|
||||
; Test each general purpose register to check that it still contains the
|
||||
; expected known value, jumping to vRegTest1Error if any register contains
|
||||
; an unexpected value.
|
||||
cmpx.a #0x44444, r4
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0x55555, r5
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0x66666, r6
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0x77777, r7
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0x88888, r8
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0x99999, r9
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0xaaaaa, r10
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0xbbbbb, r11
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0xccccc, r12
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0xddddd, r13
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0xeeeee, r14
|
||||
jne vRegTest1Error
|
||||
cmpx.a #0xfffff, r15
|
||||
jne vRegTest1Error
|
||||
|
||||
; This task is still running without jumping to vRegTest1Error, so increment
|
||||
; the loop counter so the check task knows the task is running error free.
|
||||
incx.w &usRegTest1Counter
|
||||
|
||||
; Loop again, performing the same tests.
|
||||
jmp prvRegTest1Loop
|
||||
nop
|
||||
|
||||
|
||||
vRegTest1Error:
|
||||
jmp vRegTest1Error
|
||||
nop
|
||||
|
||||
; -----------------------------------------------------------
|
||||
|
||||
; See the comments in vRegTest1Task. This task is the same, it just uses
|
||||
; different values in its registers.
|
||||
vRegTest2Task:
|
||||
|
||||
movx.a #0x14441, r4
|
||||
movx.a #0x15551, r5
|
||||
movx.a #0x16661, r6
|
||||
movx.a #0x17771, r7
|
||||
movx.a #0x18881, r8
|
||||
movx.a #0x19991, r9
|
||||
movx.a #0x1aaa1, r10
|
||||
movx.a #0x1bbb1, r11
|
||||
movx.a #0x1ccc1, r12
|
||||
movx.a #0x1ddd1, r13
|
||||
movx.a #0x1eee1, r14
|
||||
movx.a #0x1fff1, r15
|
||||
|
||||
prvRegTest2Loop:
|
||||
|
||||
cmpx.a #0x14441, r4
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x15551, r5
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x16661, r6
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x17771, r7
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x18881, r8
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x19991, r9
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x1aaa1, r10
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x1bbb1, r11
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x1ccc1, r12
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x1ddd1, r13
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x1eee1, r14
|
||||
jne vRegTest2Error
|
||||
cmpx.a #0x1fff1, r15
|
||||
jne vRegTest2Error
|
||||
|
||||
; Also perform a manual yield, just to increase the scope of the test.
|
||||
calla #vPortYield
|
||||
|
||||
incx.w &usRegTest2Counter
|
||||
jmp prvRegTest2Loop
|
||||
nop
|
||||
|
||||
|
||||
vRegTest2Error:
|
||||
jmp vRegTest2Error
|
||||
nop
|
||||
; /*-----------------------------------------------------------
|
||||
|
||||
|
||||
.end
|
||||
|
115
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/RunTimeStatsConfig.c
Normal file
115
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/RunTimeStatsConfig.c
Normal file
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd.
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* If you are: *
|
||||
* *
|
||||
* + New to FreeRTOS, *
|
||||
* + Wanting to learn FreeRTOS or multitasking in general quickly *
|
||||
* + Looking for basic training, *
|
||||
* + Wanting to improve your FreeRTOS skills and productivity *
|
||||
* *
|
||||
* then take a look at the FreeRTOS books - available as PDF or paperback *
|
||||
* *
|
||||
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
|
||||
* http://www.FreeRTOS.org/Documentation *
|
||||
* *
|
||||
* A pdf reference manual is also available. Both are usually delivered *
|
||||
* to your inbox within 20 minutes to two hours when purchased between 8am *
|
||||
* and 8pm GMT (although please allow up to 24 hours in case of *
|
||||
* exceptional circumstances). Thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
***NOTE*** The exception to the GPL is included to allow you to distribute
|
||||
a combined work that includes FreeRTOS without being obliged to provide the
|
||||
source code for proprietary components outside of the FreeRTOS kernel.
|
||||
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
/* FreeRTOS includes. */
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
/* Hardware includes. */
|
||||
#include "msp430.h"
|
||||
#include "hal_MSP-EXP430F5438.h"
|
||||
|
||||
/* This demo uses Timer A1 to generate the time base for gathering run time
|
||||
statistics information. Run time statistics show much processing time has
|
||||
been allocated to each task since the application booted. */
|
||||
|
||||
/* The time base for the run time stats is generated by a 16 bit timer. Each
|
||||
time the timer overflows ulStatsOverflowCount is incremented. Therefore,
|
||||
when converting the total run time to a 32 bit number, the most significant two
|
||||
bytes are given by ulStatsOverflowCount and the least significant two bytes are
|
||||
given by the current timer counter value. Care must be taken with data
|
||||
consistency when combining the two in case a timer overflow occurs as the
|
||||
value is being read. */
|
||||
volatile unsigned long ulStatsOverflowCount = 0;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vConfigureTimerForRunTimeStats( void )
|
||||
{
|
||||
/* Ensure the timer is stopped. */
|
||||
TA1CTL = 0;
|
||||
|
||||
/* Run the timer from the ACLK/4. */
|
||||
TA1CTL = TASSEL_1 | ID__4;
|
||||
|
||||
/* Clear everything to start with. */
|
||||
TA1CTL |= TACLR;
|
||||
|
||||
/* Enable the interrupts. */
|
||||
TA1CCTL0 = CCIE;
|
||||
|
||||
/* Start up clean. */
|
||||
TA1CTL |= TACLR;
|
||||
|
||||
/* Continuous mode. */
|
||||
TA1CTL |= MC__CONTINOUS;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#pragma vector=TIMER1_A0_VECTOR
|
||||
static __interrupt void prvRunTimeStatsOverflowISR( void )
|
||||
{
|
||||
ulStatsOverflowCount++;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
inline unsigned long ulGetRunTimeStatsTime( void )
|
||||
{
|
||||
unsigned long ulReturn;
|
||||
|
||||
TA1CTL &= ~MC__CONTINOUS;
|
||||
ulReturn = ( ( ulStatsOverflowCount << 16UL ) | ( unsigned long ) TA1R );
|
||||
TA1CTL |= MC__CONTINOUS;
|
||||
|
||||
return ulReturn;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
624
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/main.c
Normal file
624
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/main.c
Normal file
|
@ -0,0 +1,624 @@
|
|||
/*
|
||||
FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd.
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* If you are: *
|
||||
* *
|
||||
* + New to FreeRTOS, *
|
||||
* + Wanting to learn FreeRTOS or multitasking in general quickly *
|
||||
* + Looking for basic training, *
|
||||
* + Wanting to improve your FreeRTOS skills and productivity *
|
||||
* *
|
||||
* then take a look at the FreeRTOS books - available as PDF or paperback *
|
||||
* *
|
||||
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
|
||||
* http://www.FreeRTOS.org/Documentation *
|
||||
* *
|
||||
* A pdf reference manual is also available. Both are usually delivered *
|
||||
* to your inbox within 20 minutes to two hours when purchased between 8am *
|
||||
* and 8pm GMT (although please allow up to 24 hours in case of *
|
||||
* exceptional circumstances). Thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
***NOTE*** The exception to the GPL is included to allow you to distribute
|
||||
a combined work that includes FreeRTOS without being obliged to provide the
|
||||
source code for proprietary components outside of the FreeRTOS kernel.
|
||||
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The documentation page for this demo available on http://www.FreeRTOS.org
|
||||
* documents the hardware configuration required to run this demo. It also
|
||||
* provides more information on the expected demo application behaviour.
|
||||
*
|
||||
* main() creates all the demo application tasks, then starts the scheduler.
|
||||
* A lot of the created tasks are from the pool of "standard demo" tasks. The
|
||||
* web documentation provides more details of the standard demo tasks, which
|
||||
* provide no particular functionality but do provide good examples of how to
|
||||
* use the FreeRTOS API.
|
||||
*
|
||||
* In addition to the standard demo tasks, the following tasks, interrupts and
|
||||
* tests are defined and/or created within this file:
|
||||
*
|
||||
* "LCD" task - The LCD task is a 'gatekeeper' task. It is the only task that
|
||||
* is permitted to access the LCD and therefore ensures access to the LCD is
|
||||
* always serialised and there are no mutual exclusion issues. When a task or
|
||||
* an interrupt wants to write to the LCD, it does not access the LCD directly
|
||||
* but instead sends the message to the LCD task. The LCD task then performs
|
||||
* the actual LCD output. This mechanism also allows interrupts to, in effect,
|
||||
* write to the LCD by sending messages to the LCD task.
|
||||
*
|
||||
* The LCD task is also a demonstration of a 'controller' task design pattern.
|
||||
* Some tasks do not actually send a string to the LCD task directly, but
|
||||
* instead send a command that is interpreted by the LCD task. In a normal
|
||||
* application these commands can be control values or set points, in this
|
||||
* simple example the commands just result in messages being displayed on the
|
||||
* LCD.
|
||||
*
|
||||
* "Button Poll" task - This task polls the state of the 'up' key on the
|
||||
* joystick input device. It uses the vTaskDelay() API function to control
|
||||
* the poll rate to ensure debouncing is not necessary and that the task does
|
||||
* not use all the available CPU processing time.
|
||||
*
|
||||
* Button Interrupt and run time stats display - The select button on the
|
||||
* joystick input device is configured to generate an external interrupt. The
|
||||
* handler for this interrupt sends a message to LCD task, which interprets the
|
||||
* message to mean, firstly write a message to the LCD, and secondly, generate
|
||||
* a table of run time statistics. The run time statistics are displayed as a
|
||||
* table that contains information on how much processing time each task has
|
||||
* been allocated since the application started to execute. This information
|
||||
* is provided both as an absolute time, and as a percentage of the total run
|
||||
* time. The information is displayed in the terminal IO window of the IAR
|
||||
* embedded workbench. The online documentation for this demo shows a screen
|
||||
* shot demonstrating where the run time stats can be viewed.
|
||||
*
|
||||
* Idle Hook - The idle hook is a function that is called on each iteration of
|
||||
* the idle task. In this case it is used to place the processor into a low
|
||||
* power mode. Note however that this application is implemented using standard
|
||||
* components, and is therefore not optimised for low power operation. Lower
|
||||
* power consumption would be achieved by converting polling tasks into event
|
||||
* driven tasks, and slowing the tick interrupt frequency.
|
||||
*
|
||||
* "Check" function called from the tick hook - The tick hook is called during
|
||||
* each tick interrupt. It is called from an interrupt context so must execute
|
||||
* quickly, not attempt to block, and not call any FreeRTOS API functions that
|
||||
* do not end in "FromISR". In this case the tick hook executes a 'check'
|
||||
* function. This only executes every five seconds. Its main function is to
|
||||
* check that all the standard demo tasks are still operational. Each time it
|
||||
* executes it sends a status code to the LCD task. The LCD task interprets the
|
||||
* code and displays an appropriate message - which will be PASS if no tasks
|
||||
* have reported any errors, or a message stating which task has reported an
|
||||
* error.
|
||||
*
|
||||
* "Reg test" tasks - These fill the registers with known values, then check
|
||||
* that each register still contains its expected value. Each task uses
|
||||
* different values. The tasks run with very low priority so get preempted
|
||||
* very frequently. A check variable is incremented on each iteration of the
|
||||
* test loop. A register containing an unexpected value is indicative of an
|
||||
* error in the context switching mechanism and will result in a branch to a
|
||||
* null loop - which in turn will prevent the check variable from incrementing
|
||||
* any further and allow the check task (described a above) to determine that an
|
||||
* error has occurred. The nature of the reg test tasks necessitates that they
|
||||
* are written in assembly code.
|
||||
*
|
||||
* *NOTE 2* vApplicationSetupTimerInterrupt() is called by the kernel to let
|
||||
* the application set up a timer to generate the tick interrupt. In this
|
||||
* example a timer A0 is used for this purpose.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Standard includes. */
|
||||
#include <stdio.h>
|
||||
|
||||
/* FreeRTOS includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "queue.h"
|
||||
|
||||
/* Hardware includes. */
|
||||
#include "msp430.h"
|
||||
#include "hal_MSP-EXP430F5438.h"
|
||||
|
||||
/* Standard demo includes. */
|
||||
#include "ParTest.h"
|
||||
#include "dynamic.h"
|
||||
#include "comtest2.h"
|
||||
#include "GenQTest.h"
|
||||
|
||||
/* Codes sent within messages to the LCD task so the LCD task can interpret
|
||||
exactly what the message it just received was. These are sent in the
|
||||
cMessageID member of the message structure (defined below). */
|
||||
#define mainMESSAGE_BUTTON_UP ( 1 )
|
||||
#define mainMESSAGE_BUTTON_SEL ( 2 )
|
||||
#define mainMESSAGE_STATUS ( 3 )
|
||||
|
||||
/* When the cMessageID member of the message sent to the LCD task is
|
||||
mainMESSAGE_STATUS then these definitions are sent in the ulMessageValue member
|
||||
of the same message and indicate what the status actually is. */
|
||||
#define mainERROR_DYNAMIC_TASKS ( pdPASS + 1 )
|
||||
#define mainERROR_COM_TEST ( pdPASS + 2 )
|
||||
#define mainERROR_GEN_QUEUE_TEST ( pdPASS + 3 )
|
||||
#define mainERROR_REG_TEST ( pdPASS + 4 )
|
||||
|
||||
/* The length of the queue (the number of items the queue can hold) that is used
|
||||
to send messages from tasks and interrupts the the LCD task. */
|
||||
#define mainQUEUE_LENGTH ( 5 )
|
||||
|
||||
/* Priorities used by the test and demo tasks. */
|
||||
#define mainLCD_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainGENERIC_QUEUE_TEST_PRIORITY ( tskIDLE_PRIORITY )
|
||||
|
||||
/* The LED used by the comtest tasks. See the comtest.c file for more
|
||||
information. */
|
||||
#define mainCOM_TEST_LED ( 1 )
|
||||
|
||||
/* The baud rate used by the comtest tasks described at the top of this file. */
|
||||
#define mainCOM_TEST_BAUD_RATE ( 38400 )
|
||||
|
||||
/* The maximum number of lines of text that can be displayed on the LCD. */
|
||||
#define mainMAX_LCD_LINES ( 8 )
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* The reg test tasks as described at the top of this file.
|
||||
*/
|
||||
extern void vRegTest1Task( void *pvParameters );
|
||||
extern void vRegTest2Task( void *pvParameters );
|
||||
|
||||
/*
|
||||
* Configures clocks, LCD, port pints, etc. necessary to execute this demo.
|
||||
*/
|
||||
static void prvSetupHardware( void );
|
||||
|
||||
/*
|
||||
* Definition of the LCD/controller task described in the comments at the top
|
||||
* of this file.
|
||||
*/
|
||||
static void prvLCDTask( void *pvParameters );
|
||||
|
||||
/*
|
||||
* Definition of the button poll task described in the comments at the top of
|
||||
* this file.
|
||||
*/
|
||||
static void prvButtonPollTask( void *pvParameters );
|
||||
|
||||
/*
|
||||
* Converts a status message value into an appropriate string for display on
|
||||
* the LCD. The string is written to pcBuffer.
|
||||
*/
|
||||
static void prvGenerateStatusMessage( char *pcBuffer, long lStatusValue );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Variables that are incremented on each iteration of the reg test tasks -
|
||||
provided the tasks have not reported any errors. The check task inspects these
|
||||
variables to ensure they are still incrementing as expected. If a variable
|
||||
stops incrementing then it is likely that its associate task has stalled. */
|
||||
volatile unsigned short usRegTest1Counter = 0, usRegTest2Counter = 0;
|
||||
|
||||
/* The handle of the queue used to send messages from tasks and interrupts to
|
||||
the LCD task. */
|
||||
static xQueueHandle xLCDQueue = NULL;
|
||||
|
||||
/* The definition of each message sent from tasks and interrupts to the LCD
|
||||
task. */
|
||||
typedef struct
|
||||
{
|
||||
char cMessageID; /* << States what the message is. */
|
||||
unsigned long ulMessageValue; /* << States the message value (can be an integer, string pointer, etc. depending on the value of cMessageID). */
|
||||
} xQueueMessage;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void main( void )
|
||||
{
|
||||
/* Configure the peripherals used by this demo application. This includes
|
||||
configuring the joystick input select button to generate interrupts. */
|
||||
prvSetupHardware();
|
||||
|
||||
/* Create the queue used by tasks and interrupts to send strings to the LCD
|
||||
task. */
|
||||
xLCDQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( xQueueMessage ) );
|
||||
|
||||
/* If the queue could not be created then don't create any tasks that might
|
||||
attempt to use the queue. */
|
||||
if( xLCDQueue != NULL )
|
||||
{
|
||||
/* Add the created queue to the queue registry so it can be viewed in
|
||||
the IAR FreeRTOS state viewer plug-in. */
|
||||
vQueueAddToRegistry( xLCDQueue, ( signed char * ) "LCDQueue" );
|
||||
|
||||
/* Create the standard demo tasks. */
|
||||
vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );
|
||||
vStartDynamicPriorityTasks();
|
||||
vStartGenericQueueTasks( mainGENERIC_QUEUE_TEST_PRIORITY );
|
||||
|
||||
/* Create the LCD, button poll and register test tasks, as described at
|
||||
the top of this file. */
|
||||
xTaskCreate( prvLCDTask, ( signed char * ) "LCD", configMINIMAL_STACK_SIZE * 2, NULL, mainLCD_TASK_PRIORITY, NULL );
|
||||
xTaskCreate( prvButtonPollTask, ( signed char * ) "BPoll", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
|
||||
xTaskCreate( vRegTest1Task, ( signed char * ) "Reg1", configMINIMAL_STACK_SIZE, NULL, 0, NULL );
|
||||
xTaskCreate( vRegTest2Task, ( signed char * ) "Reg2", configMINIMAL_STACK_SIZE, NULL, 0, NULL );
|
||||
|
||||
/* Start the scheduler. */
|
||||
vTaskStartScheduler();
|
||||
}
|
||||
|
||||
/* If all is well then this line will never be reached. If it is reached
|
||||
then it is likely that there was insufficient (FreeRTOS) heap memory space
|
||||
to create the idle task. This may have been trapped by the malloc() failed
|
||||
hook function, if one is configured. */
|
||||
for( ;; );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDTask( void *pvParameters )
|
||||
{
|
||||
xQueueMessage xReceivedMessage;
|
||||
|
||||
/* Buffer into which strings are formatted and placed ready for display on the
|
||||
LCD. Note this is a static variable to prevent it being allocated on the task
|
||||
stack, which is too small to hold such a variable. The stack size is configured
|
||||
when the task is created. */
|
||||
static char cBuffer[ 512 ];
|
||||
unsigned char ucLine = 1;
|
||||
|
||||
|
||||
/* This function is the only function that uses printf(). If printf() is
|
||||
used from any other function then some sort of mutual exclusion on stdout
|
||||
will be necessary.
|
||||
|
||||
This is also the only function that is permitted to access the LCD.
|
||||
|
||||
First print out the number of bytes that remain in the FreeRTOS heap. This
|
||||
can be viewed in the terminal IO window within the IAR Embedded Workbench. */
|
||||
printf( "%d bytes of heap space remain unallocated\n", ( int ) xPortGetFreeHeapSize() );
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Wait for a message to be received. Using portMAX_DELAY as the block
|
||||
time will result in an indefinite wait provided INCLUDE_vTaskSuspend is
|
||||
set to 1 in FreeRTOSConfig.h, therefore there is no need to check the
|
||||
function return value and the function will only return when a value
|
||||
has been received. */
|
||||
xQueueReceive( xLCDQueue, &xReceivedMessage, portMAX_DELAY );
|
||||
|
||||
/* Clear the LCD if no room remains for any more text output. */
|
||||
if( ucLine > mainMAX_LCD_LINES )
|
||||
{
|
||||
halLcdClearScreen();
|
||||
ucLine = 0;
|
||||
}
|
||||
|
||||
/* What is this message? What does it contain? */
|
||||
switch( xReceivedMessage.cMessageID )
|
||||
{
|
||||
case mainMESSAGE_BUTTON_UP : /* The button poll task has just
|
||||
informed this task that the up
|
||||
button on the joystick input has
|
||||
been pressed or released. */
|
||||
sprintf( cBuffer, "Button up = %d", ( int ) xReceivedMessage.ulMessageValue );
|
||||
break;
|
||||
|
||||
case mainMESSAGE_BUTTON_SEL : /* The select button interrupt
|
||||
just informed this task that the
|
||||
select button was pressed.
|
||||
Generate a table of task run time
|
||||
statistics and output this to
|
||||
the terminal IO window in the IAR
|
||||
embedded workbench. */
|
||||
printf( "\nTask\t Abs Time\t %%Time\n*****************************************" );
|
||||
fflush( stdout );
|
||||
//vTaskGetRunTimeStats( ( signed char * ) cBuffer );
|
||||
//printf( cBuffer );
|
||||
//fflush( stdout );
|
||||
|
||||
/* Also print out a message to
|
||||
the LCD - in this case the
|
||||
pointer to the string to print
|
||||
is sent directly in the
|
||||
ulMessageValue member of the
|
||||
message. This just demonstrates
|
||||
a different communication
|
||||
technique. */
|
||||
sprintf( cBuffer, "%s", ( char * ) xReceivedMessage.ulMessageValue );
|
||||
break;
|
||||
|
||||
case mainMESSAGE_STATUS : /* The tick interrupt hook
|
||||
function has just informed this
|
||||
task of the system status.
|
||||
Generate a string in accordance
|
||||
with the status value. */
|
||||
prvGenerateStatusMessage( cBuffer, xReceivedMessage.ulMessageValue );
|
||||
break;
|
||||
|
||||
default : sprintf( cBuffer, "Unknown message" );
|
||||
break;
|
||||
}
|
||||
|
||||
/* Output the message that was placed into the cBuffer array within the
|
||||
switch statement above, then move onto the next line ready for the next
|
||||
message to arrive on the queue. */
|
||||
halLcdPrintLine( cBuffer, ucLine, OVERWRITE_TEXT );
|
||||
ucLine++;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvGenerateStatusMessage( char *pcBuffer, long lStatusValue )
|
||||
{
|
||||
/* Just a utility function to convert a status value into a meaningful
|
||||
string for output onto the LCD. */
|
||||
switch( lStatusValue )
|
||||
{
|
||||
case pdPASS : sprintf( pcBuffer, "Status = PASS" );
|
||||
break;
|
||||
case mainERROR_DYNAMIC_TASKS : sprintf( pcBuffer, "Err: Dynamic tsks" );
|
||||
break;
|
||||
case mainERROR_COM_TEST : sprintf( pcBuffer, "Err: COM test" );
|
||||
break;
|
||||
case mainERROR_GEN_QUEUE_TEST : sprintf( pcBuffer, "Error: Gen Q test" );
|
||||
break;
|
||||
case mainERROR_REG_TEST : sprintf( pcBuffer, "Error: Reg test" );
|
||||
break;
|
||||
default : sprintf( pcBuffer, "Unknown status" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvButtonPollTask( void *pvParameters )
|
||||
{
|
||||
unsigned char ucLastState = pdFALSE, ucState;
|
||||
xQueueMessage xMessage;
|
||||
|
||||
/* This tasks performs the button polling functionality as described at the
|
||||
top of this file. */
|
||||
for( ;; )
|
||||
{
|
||||
/* Check the button state. */
|
||||
ucState = ( halButtonsPressed() & BUTTON_UP );
|
||||
|
||||
if( ucState != 0 )
|
||||
{
|
||||
/* The button was pressed. */
|
||||
ucState = pdTRUE;
|
||||
}
|
||||
|
||||
if( ucState != ucLastState )
|
||||
{
|
||||
/* The state has changed, send a message to the LCD task. */
|
||||
xMessage.cMessageID = mainMESSAGE_BUTTON_UP;
|
||||
xMessage.ulMessageValue = ( unsigned long ) ucState;
|
||||
ucLastState = ucState;
|
||||
xQueueSend( xLCDQueue, &xMessage, portMAX_DELAY );
|
||||
}
|
||||
|
||||
/* Block for 10 milliseconds so this task does not utilise all the CPU
|
||||
time and debouncing of the button is not necessary. */
|
||||
vTaskDelay( 10 / portTICK_RATE_MS );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvSetupHardware( void )
|
||||
{
|
||||
/* Convert a Hz value to a KHz value, as required by the Init_FLL_Settle()
|
||||
function. */
|
||||
unsigned long ulCPU_Clock_KHz = ( configCPU_CLOCK_HZ / 1000UL );
|
||||
|
||||
taskDISABLE_INTERRUPTS();
|
||||
|
||||
/* Disable the watchdog. */
|
||||
WDTCTL = WDTPW + WDTHOLD;
|
||||
|
||||
halBoardInit();
|
||||
|
||||
LFXT_Start( XT1DRIVE_0 );
|
||||
Init_FLL_Settle( ( unsigned short ) ulCPU_Clock_KHz, 488 );
|
||||
|
||||
halButtonsInit( BUTTON_ALL );
|
||||
halButtonsInterruptEnable( BUTTON_SELECT );
|
||||
|
||||
/* Initialise the LCD, but note that the backlight is not used as the
|
||||
library function uses timer A0 to modulate the backlight, and this file
|
||||
defines vApplicationSetupTimerInterrupt() to also use timer A0 to generate
|
||||
the tick interrupt. If the backlight is required, then change either the
|
||||
halLCD library or vApplicationSetupTimerInterrupt() to use a different
|
||||
timer. Timer A1 is used for the run time stats time base6. */
|
||||
halLcdInit();
|
||||
halLcdSetContrast( 100 );
|
||||
halLcdClearScreen();
|
||||
|
||||
halLcdPrintLine( " www.FreeRTOS.org", 0, OVERWRITE_TEXT );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationTickHook( void )
|
||||
{
|
||||
static unsigned short usLastRegTest1Counter = 0, usLastRegTest2Counter = 0;
|
||||
static unsigned long ulCounter = 0;
|
||||
static const unsigned long ulCheckFrequency = 5000UL / portTICK_RATE_MS;
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
/* Define the status message that is sent to the LCD task. By default the
|
||||
status is PASS. */
|
||||
static xQueueMessage xStatusMessage = { mainMESSAGE_STATUS, pdPASS };
|
||||
|
||||
/* This is called from within the tick interrupt and performs the 'check'
|
||||
functionality as described in the comments at the top of this file.
|
||||
|
||||
Is it time to perform the 'check' functionality again? */
|
||||
ulCounter++;
|
||||
if( ulCounter >= ulCheckFrequency )
|
||||
{
|
||||
/* See if the standard demo tasks are executing as expected, changing
|
||||
the message that is sent to the LCD task from PASS to an error code if
|
||||
any tasks set reports an error. */
|
||||
if( xAreComTestTasksStillRunning() != pdPASS )
|
||||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_COM_TEST;
|
||||
}
|
||||
|
||||
if( xAreDynamicPriorityTasksStillRunning() != pdPASS )
|
||||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_DYNAMIC_TASKS;
|
||||
}
|
||||
|
||||
if( xAreGenericQueueTasksStillRunning() != pdPASS )
|
||||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_GEN_QUEUE_TEST;
|
||||
}
|
||||
|
||||
/* Check the reg test tasks are still cycling. They will stop
|
||||
incrementing their loop counters if they encounter an error. */
|
||||
if( usRegTest1Counter == usLastRegTest1Counter )
|
||||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_REG_TEST;
|
||||
}
|
||||
|
||||
if( usRegTest2Counter == usLastRegTest2Counter )
|
||||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_REG_TEST;
|
||||
}
|
||||
|
||||
usLastRegTest1Counter = usRegTest1Counter;
|
||||
usLastRegTest2Counter = usRegTest2Counter;
|
||||
|
||||
/* As this is the tick hook the lHigherPriorityTaskWoken parameter is not
|
||||
needed (a context switch is going to be performed anyway), but it must
|
||||
still be provided. */
|
||||
xQueueSendFromISR( xLCDQueue, &xStatusMessage, &xHigherPriorityTaskWoken );
|
||||
ulCounter = 0;
|
||||
}
|
||||
|
||||
/* Just periodically toggle an LED to show that the tick interrupt is
|
||||
running. Note that this access LED_PORT_OUT in a non-atomic way, so tasks
|
||||
that access the same port must do so from a critical section. */
|
||||
if( ( ulCounter & 0xff ) == 0 )
|
||||
{
|
||||
if( ( LED_PORT_OUT & LED_1 ) == 0 )
|
||||
{
|
||||
LED_PORT_OUT |= LED_1;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_PORT_OUT &= ~LED_1;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#pragma vector=PORT2_VECTOR
|
||||
interrupt void prvSelectButtonInterrupt( void )
|
||||
{
|
||||
/* Define the message sent to the LCD task from this interrupt. */
|
||||
static const xQueueMessage xMessage = { mainMESSAGE_BUTTON_SEL, ( unsigned long ) "Select Interrupt" };
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
/* This is the interrupt handler for the joystick select button input.
|
||||
The button has been pushed, write a message to the LCD via the LCD task. */
|
||||
xQueueSendFromISR( xLCDQueue, &xMessage, &xHigherPriorityTaskWoken );
|
||||
|
||||
P2IFG = 0;
|
||||
|
||||
/* If writing to xLCDQueue caused a task to unblock, and the unblocked task
|
||||
has a priority equal to or above the task that this interrupt interrupted,
|
||||
then lHigherPriorityTaskWoken will have been set to pdTRUE internally within
|
||||
xQueuesendFromISR(), and portEND_SWITCHING_ISR() will ensure that this
|
||||
interrupt returns directly to the higher priority unblocked task. */
|
||||
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The MSP430X port uses this callback function to configure its tick interrupt.
|
||||
This allows the application to choose the tick interrupt source.
|
||||
configTICK_INTERRUPT_VECTOR must also be set in FreeRTOSConfig.h to the correct
|
||||
interrupt vector for the chosen tick interrupt source. This implementation of
|
||||
vApplicationSetupTimerInterrupt() generates the tick from timer A0, so in this
|
||||
case configTICK_INTERRUPT_VECTOR is set to TIMER0_A0_VECTOR. */
|
||||
void vApplicationSetupTimerInterrupt( void )
|
||||
{
|
||||
const unsigned short usACLK_Frequency_Hz = 32768;
|
||||
|
||||
/* Ensure the timer is stopped. */
|
||||
TA0CTL = 0;
|
||||
|
||||
/* Run the timer from the ACLK. */
|
||||
TA0CTL = TASSEL_1;
|
||||
|
||||
/* Clear everything to start with. */
|
||||
TA0CTL |= TACLR;
|
||||
|
||||
/* Set the compare match value according to the tick rate we want. */
|
||||
TA0CCR0 = usACLK_Frequency_Hz / configTICK_RATE_HZ;
|
||||
|
||||
/* Enable the interrupts. */
|
||||
TA0CCTL0 = CCIE;
|
||||
|
||||
/* Start up clean. */
|
||||
TA0CTL |= TACLR;
|
||||
|
||||
/* Up mode. */
|
||||
TA0CTL |= MC_1;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationIdleHook( void )
|
||||
{
|
||||
/* Called on each iteration of the idle task. In this case the idle task
|
||||
just enters a low(ish) power mode. */
|
||||
__bis_SR_register( LPM1_bits + GIE );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationMallocFailedHook( void )
|
||||
{
|
||||
/* Called if a call to pvPortMalloc() fails because there is insufficient
|
||||
free memory available in the FreeRTOS heap. pvPortMalloc() is called
|
||||
internally by FreeRTOS API functions that create tasks, queues or
|
||||
semaphores. */
|
||||
taskDISABLE_INTERRUPTS();
|
||||
for( ;; );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )
|
||||
{
|
||||
( void ) pxTask;
|
||||
( void ) pcTaskName;
|
||||
|
||||
/* Run time stack overflow checking is performed if
|
||||
configconfigCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
|
||||
function is called if a stack overflow is detected. */
|
||||
taskDISABLE_INTERRUPTS();
|
||||
for( ;; );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
205
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/serial.c
Normal file
205
Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/serial.c
Normal file
|
@ -0,0 +1,205 @@
|
|||
/*
|
||||
FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd.
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* If you are: *
|
||||
* *
|
||||
* + New to FreeRTOS, *
|
||||
* + Wanting to learn FreeRTOS or multitasking in general quickly *
|
||||
* + Looking for basic training, *
|
||||
* + Wanting to improve your FreeRTOS skills and productivity *
|
||||
* *
|
||||
* then take a look at the FreeRTOS books - available as PDF or paperback *
|
||||
* *
|
||||
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
|
||||
* http://www.FreeRTOS.org/Documentation *
|
||||
* *
|
||||
* A pdf reference manual is also available. Both are usually delivered *
|
||||
* to your inbox within 20 minutes to two hours when purchased between 8am *
|
||||
* and 8pm GMT (although please allow up to 24 hours in case of *
|
||||
* exceptional circumstances). Thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
***NOTE*** The exception to the GPL is included to allow you to distribute
|
||||
a combined work that includes FreeRTOS without being obliged to provide the
|
||||
source code for proprietary components outside of the FreeRTOS kernel.
|
||||
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
more details. You should have received a copy of the GNU General Public
|
||||
License and the FreeRTOS license exception along with FreeRTOS; if not it
|
||||
can be viewed here: http://www.freertos.org/a00114.html and also obtained
|
||||
by writing to Richard Barry, contact details for whom are available on the
|
||||
FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
|
||||
/* BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER.
|
||||
*
|
||||
* This is not a proper UART driver. It only supports one port, uses loopback
|
||||
* mode, and is used to test interrupts that use the FreeRTOS API as part of
|
||||
* a wider test suite. Nor is it intended to show an efficient implementation
|
||||
* of a UART interrupt service routine as queues are used to pass individual
|
||||
* characters one at a time!
|
||||
*/
|
||||
|
||||
/* Standard includes. */
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "queue.h"
|
||||
#include "task.h"
|
||||
|
||||
/* Demo application includes. */
|
||||
#include "serial.h"
|
||||
|
||||
/* Misc. constants. */
|
||||
#define serNO_BLOCK ( ( portTickType ) 0 )
|
||||
|
||||
/* The queue used to hold received characters. */
|
||||
static xQueueHandle xRxedChars;
|
||||
|
||||
/* The queue used to hold characters waiting transmission. */
|
||||
static xQueueHandle xCharsForTx;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
|
||||
{
|
||||
unsigned portLONG ulBaudRateCount;
|
||||
|
||||
/* Initialise the hardware. */
|
||||
|
||||
/* Generate the baud rate constants for the wanted baud rate. */
|
||||
ulBaudRateCount = configCPU_CLOCK_HZ / ulWantedBaud;
|
||||
|
||||
portENTER_CRITICAL();
|
||||
{
|
||||
/* Create the queues used by the com test task. */
|
||||
xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );
|
||||
xCharsForTx = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );
|
||||
|
||||
/* Reset UART. */
|
||||
UCA1CTL1 |= UCSWRST;
|
||||
|
||||
/* Use SMCLK. */
|
||||
UCA1CTL1 = UCSSEL0 | UCSSEL1;
|
||||
|
||||
/* Setup baud rate low byte. */
|
||||
UCA1BR0 = ( unsigned portCHAR ) ( ulBaudRateCount & ( unsigned portLONG ) 0xff );
|
||||
|
||||
/* Setup baud rate high byte. */
|
||||
ulBaudRateCount >>= 8UL;
|
||||
UCA1BR1 = ( unsigned portCHAR ) ( ulBaudRateCount & ( unsigned portLONG ) 0xff );
|
||||
|
||||
/* UCLISTEN sets loopback mode! */
|
||||
UCA1STAT = UCLISTEN;
|
||||
|
||||
/* Enable interrupts. */
|
||||
UCA1IE |= UCRXIE;
|
||||
|
||||
/* Take out of reset. */
|
||||
UCA1CTL1 &= ~UCSWRST;
|
||||
}
|
||||
portEXIT_CRITICAL();
|
||||
|
||||
/* Note the comments at the top of this file about this not being a generic
|
||||
UART driver. */
|
||||
return NULL;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime )
|
||||
{
|
||||
/* Get the next character from the buffer. Return false if no characters
|
||||
are available, or arrive before xBlockTime expires. */
|
||||
if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) )
|
||||
{
|
||||
return pdTRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return pdFALSE;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime )
|
||||
{
|
||||
signed portBASE_TYPE xReturn;
|
||||
|
||||
/* Send the next character to the queue of characters waiting transmission,
|
||||
then enable the UART Tx interrupt, just in case UART transmission has already
|
||||
completed and switched itself off. */
|
||||
xReturn = xQueueSend( xCharsForTx, &cOutChar, xBlockTime );
|
||||
UCA1IE |= UCTXIE;
|
||||
|
||||
return xReturn;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#pragma vector=USCI_A1_VECTOR
|
||||
interrupt void prvUSCI_A0_ISR( void )
|
||||
{
|
||||
signed portCHAR cChar;
|
||||
portBASE_TYPE xTaskWoken = pdFALSE;
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
while( ( UCA1IFG & UCRXIFG ) != 0 )
|
||||
{
|
||||
/* Get the character from the UART and post it on the queue of Rxed
|
||||
characters. */
|
||||
cChar = UCA1RXBUF;
|
||||
xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );
|
||||
}
|
||||
|
||||
/* If there is a Tx interrupt pending and the tx interrupts are enabled. */
|
||||
if( ( UCA1IFG & UCTXIFG ) != 0 )
|
||||
{
|
||||
/* The previous character has been transmitted. See if there are any
|
||||
further characters waiting transmission. */
|
||||
if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWoken ) == pdTRUE )
|
||||
{
|
||||
/* There was another character queued - transmit it now. */
|
||||
UCA1TXBUF = cChar;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* There were no other characters to transmit - disable the Tx
|
||||
interrupt. */
|
||||
UCA1IE &= ~UCTXIE;
|
||||
}
|
||||
}
|
||||
|
||||
__bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF );
|
||||
|
||||
/* If writing to a queue caused a task to unblock, and the unblocked task
|
||||
has a priority equal to or above the task that this interrupt interrupted,
|
||||
then lHigherPriorityTaskWoken will have been set to pdTRUE internally within
|
||||
xQueuesendFromISR(), and portEND_SWITCHING_ISR() will ensure that this
|
||||
interrupt returns directly to the higher priority unblocked task.
|
||||
|
||||
THIS MUST BE THE LAST THING DONE IN THE ISR. */
|
||||
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
|
||||
}
|
||||
|
||||
|
12
Demo/MSP430X_MSP430F5438_CCS4/MSP430F5438A.ccxml
Normal file
12
Demo/MSP430X_MSP430F5438_CCS4/MSP430F5438A.ccxml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<configurations XML_version="1.2" id="configurations_0">
|
||||
<configuration XML_version="1.2" id="configuration_0">
|
||||
<instance XML_version="1.2" desc="TI MSP430 USB1" href="connections\TIMSP430-USB.xml" id="TI MSP430 USB1" xml="TIMSP430-USB.xml" xmlpath="connections"/>
|
||||
<connection XML_version="1.2" id="TI MSP430 USB1">
|
||||
<instance XML_version="1.2" href="drivers\msp430_emu.xml" id="drivers" xml="msp430_emu.xml" xmlpath="drivers"/>
|
||||
<platform XML_version="1.2" id="platform_0">
|
||||
<instance XML_version="1.2" desc="MSP430F5438A" href="Devices\MSP430F5438A.xml" id="MSP430F5438A" xml="MSP430F5438A.xml" xmlpath="Devices"/>
|
||||
</platform>
|
||||
</connection>
|
||||
</configuration>
|
||||
</configurations>
|
197
Demo/MSP430X_MSP430F5438_CCS4/lnk_msp430f5438a.cmd
Normal file
197
Demo/MSP430X_MSP430F5438_CCS4/lnk_msp430f5438a.cmd
Normal file
|
@ -0,0 +1,197 @@
|
|||
/******************************************************************************/
|
||||
/* lnk_msp430f5438a.cmd - LINKER COMMAND FILE FOR LINKING MSP430F5438A PROGRAMS */
|
||||
/* */
|
||||
/* Usage: lnk430 <obj files...> -o <out file> -m <map file> lnk.cmd */
|
||||
/* cl430 <src files...> -z -o <out file> -m <map file> lnk.cmd */
|
||||
/* */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* These linker options are for command line linking only. For IDE linking, */
|
||||
/* you should set your linker options in Project Properties */
|
||||
/* -c LINK USING C CONVENTIONS */
|
||||
/* -stack 0x0100 SOFTWARE STACK SIZE */
|
||||
/* -heap 0x0100 HEAP AREA SIZE */
|
||||
/* */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/****************************************************************************/
|
||||
/* SPECIFY THE SYSTEM MEMORY MAP */
|
||||
/****************************************************************************/
|
||||
|
||||
MEMORY
|
||||
{
|
||||
SFR : origin = 0x0000, length = 0x0010
|
||||
PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0
|
||||
PERIPHERALS_16BIT : origin = 0x0100, length = 0x0100
|
||||
RAM : origin = 0x1C00, length = 0x4000
|
||||
INFOA : origin = 0x1980, length = 0x0080
|
||||
INFOB : origin = 0x1900, length = 0x0080
|
||||
INFOC : origin = 0x1880, length = 0x0080
|
||||
INFOD : origin = 0x1800, length = 0x0080
|
||||
FLASH : origin = 0x5C00, length = 0xA380
|
||||
FLASH2 : origin = 0x10000,length = 0x35C00
|
||||
INT00 : origin = 0xFF80, length = 0x0002
|
||||
INT01 : origin = 0xFF82, length = 0x0002
|
||||
INT02 : origin = 0xFF84, length = 0x0002
|
||||
INT03 : origin = 0xFF86, length = 0x0002
|
||||
INT04 : origin = 0xFF88, length = 0x0002
|
||||
INT05 : origin = 0xFF8A, length = 0x0002
|
||||
INT06 : origin = 0xFF8C, length = 0x0002
|
||||
INT07 : origin = 0xFF8E, length = 0x0002
|
||||
INT08 : origin = 0xFF90, length = 0x0002
|
||||
INT09 : origin = 0xFF92, length = 0x0002
|
||||
INT10 : origin = 0xFF94, length = 0x0002
|
||||
INT11 : origin = 0xFF96, length = 0x0002
|
||||
INT12 : origin = 0xFF98, length = 0x0002
|
||||
INT13 : origin = 0xFF9A, length = 0x0002
|
||||
INT14 : origin = 0xFF9C, length = 0x0002
|
||||
INT15 : origin = 0xFF9E, length = 0x0002
|
||||
INT16 : origin = 0xFFA0, length = 0x0002
|
||||
INT17 : origin = 0xFFA2, length = 0x0002
|
||||
INT18 : origin = 0xFFA4, length = 0x0002
|
||||
INT19 : origin = 0xFFA6, length = 0x0002
|
||||
INT20 : origin = 0xFFA8, length = 0x0002
|
||||
INT21 : origin = 0xFFAA, length = 0x0002
|
||||
INT22 : origin = 0xFFAC, length = 0x0002
|
||||
INT23 : origin = 0xFFAE, length = 0x0002
|
||||
INT24 : origin = 0xFFB0, length = 0x0002
|
||||
INT25 : origin = 0xFFB2, length = 0x0002
|
||||
INT26 : origin = 0xFFB4, length = 0x0002
|
||||
INT27 : origin = 0xFFB6, length = 0x0002
|
||||
INT28 : origin = 0xFFB8, length = 0x0002
|
||||
INT29 : origin = 0xFFBA, length = 0x0002
|
||||
INT30 : origin = 0xFFBC, length = 0x0002
|
||||
INT31 : origin = 0xFFBE, length = 0x0002
|
||||
INT32 : origin = 0xFFC0, length = 0x0002
|
||||
INT33 : origin = 0xFFC2, length = 0x0002
|
||||
INT34 : origin = 0xFFC4, length = 0x0002
|
||||
INT35 : origin = 0xFFC6, length = 0x0002
|
||||
INT36 : origin = 0xFFC8, length = 0x0002
|
||||
INT37 : origin = 0xFFCA, length = 0x0002
|
||||
INT38 : origin = 0xFFCC, length = 0x0002
|
||||
INT39 : origin = 0xFFCE, length = 0x0002
|
||||
INT40 : origin = 0xFFD0, length = 0x0002
|
||||
INT41 : origin = 0xFFD2, length = 0x0002
|
||||
INT42 : origin = 0xFFD4, length = 0x0002
|
||||
INT43 : origin = 0xFFD6, length = 0x0002
|
||||
INT44 : origin = 0xFFD8, length = 0x0002
|
||||
INT45 : origin = 0xFFDA, length = 0x0002
|
||||
INT46 : origin = 0xFFDC, length = 0x0002
|
||||
INT47 : origin = 0xFFDE, length = 0x0002
|
||||
INT48 : origin = 0xFFE0, length = 0x0002
|
||||
INT49 : origin = 0xFFE2, length = 0x0002
|
||||
INT50 : origin = 0xFFE4, length = 0x0002
|
||||
INT51 : origin = 0xFFE6, length = 0x0002
|
||||
INT52 : origin = 0xFFE8, length = 0x0002
|
||||
INT53 : origin = 0xFFEA, length = 0x0002
|
||||
INT54 : origin = 0xFFEC, length = 0x0002
|
||||
INT55 : origin = 0xFFEE, length = 0x0002
|
||||
INT56 : origin = 0xFFF0, length = 0x0002
|
||||
INT57 : origin = 0xFFF2, length = 0x0002
|
||||
INT58 : origin = 0xFFF4, length = 0x0002
|
||||
INT59 : origin = 0xFFF6, length = 0x0002
|
||||
INT60 : origin = 0xFFF8, length = 0x0002
|
||||
INT61 : origin = 0xFFFA, length = 0x0002
|
||||
INT62 : origin = 0xFFFC, length = 0x0002
|
||||
RESET : origin = 0xFFFE, length = 0x0002
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */
|
||||
/****************************************************************************/
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.bss : {} > RAM /* GLOBAL & STATIC VARS */
|
||||
.sysmem : {} > RAM /* DYNAMIC MEMORY ALLOCATION AREA */
|
||||
.stack : {} > RAM (HIGH) /* SOFTWARE SYSTEM STACK */
|
||||
|
||||
.text : {}>> FLASH | FLASH2 /* CODE */
|
||||
.text:_isr : {} > FLASH /* ISR CODE SPACE */
|
||||
.cinit : {} > FLASH /* INITIALIZATION TABLES */
|
||||
//#ifdef (__LARGE_DATA_MODEL__)
|
||||
.const : {} > FLASH | FLASH2 /* CONSTANT DATA */
|
||||
//#else
|
||||
// .const : {} > FLASH /* CONSTANT DATA */
|
||||
//#endif
|
||||
.cio : {} > RAM /* C I/O BUFFER */
|
||||
|
||||
.pinit : {} > FLASH /* C++ CONSTRUCTOR TABLES */
|
||||
|
||||
.infoA : {} > INFOA /* MSP430 INFO FLASH MEMORY SEGMENTS */
|
||||
.infoB : {} > INFOB
|
||||
.infoC : {} > INFOC
|
||||
.infoD : {} > INFOD
|
||||
|
||||
.int00 : {} > INT00 /* MSP430 INTERRUPT VECTORS */
|
||||
.int01 : {} > INT01
|
||||
.int02 : {} > INT02
|
||||
.int03 : {} > INT03
|
||||
.int04 : {} > INT04
|
||||
.int05 : {} > INT05
|
||||
.int06 : {} > INT06
|
||||
.int07 : {} > INT07
|
||||
.int08 : {} > INT08
|
||||
.int09 : {} > INT09
|
||||
.int10 : {} > INT10
|
||||
.int11 : {} > INT11
|
||||
.int12 : {} > INT12
|
||||
.int13 : {} > INT13
|
||||
.int14 : {} > INT14
|
||||
.int15 : {} > INT15
|
||||
.int16 : {} > INT16
|
||||
.int17 : {} > INT17
|
||||
.int18 : {} > INT18
|
||||
.int19 : {} > INT19
|
||||
.int20 : {} > INT20
|
||||
.int21 : {} > INT21
|
||||
.int22 : {} > INT22
|
||||
.int23 : {} > INT23
|
||||
.int24 : {} > INT24
|
||||
.int25 : {} > INT25
|
||||
.int26 : {} > INT26
|
||||
.int27 : {} > INT27
|
||||
.int28 : {} > INT28
|
||||
.int29 : {} > INT29
|
||||
.int30 : {} > INT30
|
||||
.int31 : {} > INT31
|
||||
.int32 : {} > INT32
|
||||
.int33 : {} > INT33
|
||||
.int34 : {} > INT34
|
||||
.int35 : {} > INT35
|
||||
.int36 : {} > INT36
|
||||
.int37 : {} > INT37
|
||||
.int38 : {} > INT38
|
||||
.int39 : {} > INT39
|
||||
.int40 : {} > INT40
|
||||
.int41 : {} > INT41
|
||||
.int42 : {} > INT42
|
||||
.int43 : {} > INT43
|
||||
.int44 : {} > INT44
|
||||
.int45 : {} > INT45
|
||||
.int46 : {} > INT46
|
||||
.int47 : {} > INT47
|
||||
.int48 : {} > INT48
|
||||
.int49 : {} > INT49
|
||||
.int50 : {} > INT50
|
||||
.int51 : {} > INT51
|
||||
.int52 : {} > INT52
|
||||
.int53 : {} > INT53
|
||||
.int54 : {} > INT54
|
||||
.int55 : {} > INT55
|
||||
.int56 : {} > INT56
|
||||
.int57 : {} > INT57
|
||||
.int58 : {} > INT58
|
||||
.int59 : {} > INT59
|
||||
.int60 : {} > INT60
|
||||
.int61 : {} > INT61
|
||||
.int62 : {} > INT62
|
||||
.reset : {} > RESET /* MSP430 RESET VECTOR */
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
/* INCLUDE PERIPHERALS MEMORY MAP */
|
||||
/****************************************************************************/
|
||||
|
||||
-l msp430f5438a.cmd
|
||||
|
Loading…
Reference in a new issue