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