Intial code push

This commit is contained in:
Sunseeker Lab A-216
2021-05-06 17:42:30 -04:00
parent fe095eada0
commit 47ce3522ea
612 changed files with 245803 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?ccsproject version="1.0"?>
<projectOptions>
<ccsVersion value="6.2.0"/>
<deviceVariant value="MSP430F5438A"/>
<deviceFamily value="MSP430"/>
<deviceEndianness value="little"/>
<codegenToolVersion value="15.12.3.LTS"/>
<isElfFormat value="true"/>
<connection value="common/targetdb/connections/TIMSP430-USB.xml"/>
<linkerCommandFile value="lnk_msp430f5438a.cmd"/>
<rts value="libc.a"/>
<createSlaveProjects value=""/>
<templateProperties value="id=com.ti.common.project.core.emptyProjectTemplate,"/>
<filesToOpen value=""/>
</projectOptions>

View File

@@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule configRelations="2" moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1979933467">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1979933467" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1979933467" name="Debug" parent="com.ti.ccstudio.buildDefinitions.MSP430.Debug">
<folderInfo id="com.ti.ccstudio.buildDefinitions.MSP430.Debug.1979933467." name="/" resourcePath="">
<toolChain id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.DebugToolchain.2099237352" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.linkerDebug.903402306">
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.1358383689" 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=ELF"/>
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
<listOptionValue builtIn="false" value="PRODUCTS="/>
<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.218032790" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="15.12.3.LTS" valueType="string"/>
<targetPlatform id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.targetPlatformDebug.1033425674" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.targetPlatformDebug"/>
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.builderDebug.584126814" name="GNU Make.Debug" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.builderDebug"/>
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.compilerDebug.1213885795" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.compilerDebug">
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DEFINE.1568985632" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DEFINE" valueType="definedSymbols">
<listOptionValue builtIn="false" value="__MSP430F5438A__"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DATA_MODEL.128158540" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DATA_MODEL" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DATA_MODEL.restricted" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.USE_HW_MPY.270825461" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.USE_HW_MPY" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.USE_HW_MPY.F5" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU21.1145858544" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU21" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU22.1326195320" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU22" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU23.1272727353" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU23" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU40.1665504978" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU40" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_VERSION.1983583302" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_VERSION.mspx" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.PRINTF_SUPPORT.1714583381" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.PRINTF_SUPPORT" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.PRINTF_SUPPORT.minimal" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DEBUGGING_MODEL.732387903" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DEBUGGING_MODEL" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DEBUGGING_MODEL.SYMDEBUG__DWARF" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.ADVICE__POWER.1675799664" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.ADVICE__POWER" value="all" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WARNING.826896737" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WARNING" valueType="stringList">
<listOptionValue builtIn="false" value="225"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DISPLAY_ERROR_NUMBER.781435786" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WRAP.982580200" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WRAP.off" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.INCLUDE_PATH.123612000" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${CCS_BASE_ROOT}/msp430/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/include&quot;"/>
</option>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__C_SRCS.1262038419" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__CPP_SRCS.1969362972" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__ASM_SRCS.2085742368" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__ASM2_SRCS.1801651410" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__ASM2_SRCS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.linkerDebug.903402306" name="MSP430 Linker" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.linkerDebug">
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.LIBRARY.2039349155" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.LIBRARY" valueType="libs">
<listOptionValue builtIn="false" value="&quot;libmath.a&quot;"/>
<listOptionValue builtIn="false" value="&quot;libc.a&quot;"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.SEARCH_PATH.710060442" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.SEARCH_PATH" valueType="libPaths">
<listOptionValue builtIn="false" value="&quot;${CCS_BASE_ROOT}/msp430/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${CCS_BASE_ROOT}/msp430/lib/5xx_6xx_FRxx&quot;"/>
<listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/lib&quot;"/>
<listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/include&quot;"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.USE_HW_MPY.98900268" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.USE_HW_MPY" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.USE_HW_MPY.F5" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.CINIT_HOLD_WDT.1305838102" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.CINIT_HOLD_WDT" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.CINIT_HOLD_WDT.on" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.HEAP_SIZE.1115594788" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.HEAP_SIZE" value="160" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.STACK_SIZE.398722725" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.STACK_SIZE" value="160" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.OUTPUT_FILE.1490202662" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.OUTPUT_FILE" value="&quot;${ProjName}.out&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.MAP_FILE.1567690249" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.MAP_FILE" value="&quot;${ProjName}.map&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.XML_LINK_INFO.1123932426" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.XML_LINK_INFO" value="&quot;${ProjName}_linkInfo.xml&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DISPLAY_ERROR_NUMBER.1621450265" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DIAG_WRAP.484870698" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DIAG_WRAP.off" valueType="enumerated"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__CMD_SRCS.1768504414" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__CMD_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__CMD2_SRCS.1179136448" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__CMD2_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__GEN_CMDS.1726708131" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__GEN_CMDS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.1635543204" name="MSP430 Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex">
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.ROMWIDTH.458055364" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.ROMWIDTH" value="8" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.MEMWIDTH.1196438589" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.MEMWIDTH" value="8" valueType="string"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.ti.ccstudio.buildDefinitions.MSP430.Release.1700303872">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.MSP430.Release.1700303872" moduleId="org.eclipse.cdt.core.settings" name="Release">
<externalSettings/>
<extensions>
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" id="com.ti.ccstudio.buildDefinitions.MSP430.Release.1700303872" name="Release" parent="com.ti.ccstudio.buildDefinitions.MSP430.Release">
<folderInfo id="com.ti.ccstudio.buildDefinitions.MSP430.Release.1700303872." name="/" resourcePath="">
<toolChain id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.ReleaseToolchain.404800592" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.ReleaseToolchain" targetTool="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.linkerRelease.552910435">
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.314342700" 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=ELF"/>
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
<listOptionValue builtIn="false" value="PRODUCTS="/>
<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.817606364" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="15.12.3.LTS" valueType="string"/>
<targetPlatform id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.targetPlatformRelease.1601809459" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.targetPlatformRelease"/>
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.builderRelease.774112901" name="GNU Make.Release" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.builderRelease"/>
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.compilerRelease.500412336" name="MSP430 Compiler" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.compilerRelease">
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DEFINE.1421512181" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DEFINE" valueType="definedSymbols">
<listOptionValue builtIn="false" value="__MSP430F5438A__"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DATA_MODEL.859980379" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DATA_MODEL" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DATA_MODEL.restricted" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.USE_HW_MPY.405207267" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.USE_HW_MPY" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.USE_HW_MPY.F5" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU21.2067992649" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU21" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU22.2086166934" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU22" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU23.1496965605" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU23" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU40.651304265" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_ERRATA.CPU40" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_VERSION.644782865" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.SILICON_VERSION.mspx" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.PRINTF_SUPPORT.1862648913" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.PRINTF_SUPPORT" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.PRINTF_SUPPORT.minimal" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.ADVICE__POWER.634050816" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.ADVICE__POWER" value="all" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WARNING.757049951" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WARNING" valueType="stringList">
<listOptionValue builtIn="false" value="225"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DISPLAY_ERROR_NUMBER.1967284581" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WRAP.1552082730" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.DIAG_WRAP.off" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.INCLUDE_PATH.1887759790" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${CCS_BASE_ROOT}/msp430/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/include&quot;"/>
</option>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__C_SRCS.442377218" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__CPP_SRCS.66181740" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__ASM_SRCS.378236216" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__ASM2_SRCS.74333072" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.compiler.inputType__ASM2_SRCS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.linkerRelease.552910435" name="MSP430 Linker" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exe.linkerRelease">
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.LIBRARY.211610770" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.LIBRARY" valueType="libs">
<listOptionValue builtIn="false" value="&quot;libmath.a&quot;"/>
<listOptionValue builtIn="false" value="&quot;libc.a&quot;"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.SEARCH_PATH.303004004" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.SEARCH_PATH" valueType="libPaths">
<listOptionValue builtIn="false" value="&quot;${CCS_BASE_ROOT}/msp430/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${CCS_BASE_ROOT}/msp430/lib/5xx_6xx_FRxx&quot;"/>
<listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/lib&quot;"/>
<listOptionValue builtIn="false" value="&quot;${CG_TOOL_ROOT}/include&quot;"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.USE_HW_MPY.581713706" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.USE_HW_MPY" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.USE_HW_MPY.F5" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.CINIT_HOLD_WDT.1824974907" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.CINIT_HOLD_WDT" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.CINIT_HOLD_WDT.on" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.HEAP_SIZE.503779212" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.HEAP_SIZE" value="160" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.STACK_SIZE.1024928966" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.STACK_SIZE" value="160" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.OUTPUT_FILE.866512210" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.OUTPUT_FILE" value="&quot;${ProjName}.out&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.MAP_FILE.16242556" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.MAP_FILE" value="&quot;${ProjName}.map&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.XML_LINK_INFO.1262022594" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.XML_LINK_INFO" value="&quot;${ProjName}_linkInfo.xml&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DISPLAY_ERROR_NUMBER.1055675308" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DIAG_WRAP.932430051" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.MSP430_15.12.linkerID.DIAG_WRAP.off" valueType="enumerated"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__CMD_SRCS.1910978391" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__CMD_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__CMD2_SRCS.873637502" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__CMD2_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__GEN_CMDS.1463097099" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.exeLinker.inputType__GEN_CMDS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.980106029" name="MSP430 Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex">
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.ROMWIDTH.437648212" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.ROMWIDTH" value="8" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.MEMWIDTH.46410579" superClass="com.ti.ccstudio.buildDefinitions.MSP430_15.12.hex.MEMWIDTH" value="8" valueType="string"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="Debug3.com.ti.ccstudio.buildDefinitions.MSP430.ProjectType.591995758" name="MSP430" projectType="com.ti.ccstudio.buildDefinitions.MSP430.ProjectType"/>
</storageModule>
<storageModule moduleId="scannerConfiguration"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping">
<project-mappings>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.asmSource" language="com.ti.ccstudio.core.TIASMLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cHeader" language="com.ti.ccstudio.core.TIGCCLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cSource" language="com.ti.ccstudio.core.TIGCCLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxHeader" language="com.ti.ccstudio.core.TIGPPLanguage"/>
<content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxSource" language="com.ti.ccstudio.core.TIGPPLanguage"/>
</project-mappings>
</storageModule>
</cproject>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Debug3</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.ti.ccstudio.core.ccsNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,3 @@
eclipse.preferences.version=1
inEditor=false
onBuild=false

View File

@@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.cdt.debug.core.toggleBreakpointModel=com.ti.ccstudio.debug.CCSBreakpointMarker

View File

@@ -0,0 +1,6 @@
eclipse.preferences.version=1
encoding//Debug/makefile=UTF-8
encoding//Debug/objects.mk=UTF-8
encoding//Debug/sources.mk=UTF-8
encoding//Debug/subdir_rules.mk=UTF-8
encoding//Debug/subdir_vars.mk=UTF-8

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
# FIXED
LTCspi.obj: ../LTCspi.c
LTCspi.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
LTCspi.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
LTCspi.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
LTCspi.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
../LTCspi.c:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:

Binary file not shown.

View File

@@ -0,0 +1,41 @@
# FIXED
RS232.obj: ../RS232.c
RS232.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
RS232.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
RS232.obj: ../Sunseeker2021.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h
RS232.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h
RS232.obj: ../RTC.h
RS232.obj: ../CAN.h
RS232.obj: ../RS232.h
../RS232.c:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:
../Sunseeker2021.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h:
../RTC.h:
../CAN.h:
../RS232.h:

Binary file not shown.

View File

@@ -0,0 +1,41 @@
# FIXED
RTC.obj: ../RTC.c
RTC.obj: ../Sunseeker2021.h
RTC.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
RTC.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h
RTC.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h
RTC.obj: ../RTC.h
RTC.obj: ../CAN.h
RTC.obj: ../RS232.h
../RTC.c:
../Sunseeker2021.h:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h:
../RTC.h:
../CAN.h:
../RS232.h:

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,41 @@
# FIXED
can0.obj: ../can0.c
can0.obj: ../Sunseeker2021.h
can0.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
can0.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h
can0.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h
can0.obj: ../RTC.h
can0.obj: ../CAN.h
can0.obj: ../RS232.h
../can0.c:
../Sunseeker2021.h:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h:
../RTC.h:
../CAN.h:
../RS232.h:

Binary file not shown.

View File

@@ -0,0 +1,41 @@
# FIXED
can1.obj: ../can1.c
can1.obj: ../Sunseeker2021.h
can1.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
can1.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h
can1.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h
can1.obj: ../RTC.h
can1.obj: ../CAN.h
can1.obj: ../RS232.h
../can1.c:
../Sunseeker2021.h:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h:
../RTC.h:
../CAN.h:
../RS232.h:

Binary file not shown.

View File

@@ -0,0 +1,13 @@
# FIXED
canspi.obj: ../canspi.c
canspi.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
canspi.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
canspi.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
canspi.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
../canspi.c:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:

Binary file not shown.

View File

@@ -0,0 +1 @@
"./LTCspi.obj" "./RS232.obj" "./RTC.obj" "./RTCASMFunctions_CCE.obj" "./can0.obj" "./can1.obj" "./canspi.obj" "./clock_init.obj" "./io_init.obj" "./main.obj" "../lnk_msp430f5438a.cmd" -llibmath.a -llibc.a

View File

@@ -0,0 +1,13 @@
# FIXED
clock_init.obj: ../clock_init.c
clock_init.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
clock_init.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
clock_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
clock_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
../clock_init.c:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:

Binary file not shown.

View File

@@ -0,0 +1,41 @@
# FIXED
io_init.obj: ../io_init.c
io_init.obj: ../Sunseeker2021.h
io_init.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
io_init.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h
io_init.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h
io_init.obj: ../RTC.h
io_init.obj: ../CAN.h
io_init.obj: ../RS232.h
../io_init.c:
../Sunseeker2021.h:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h:
../RTC.h:
../CAN.h:
../RS232.h:

Binary file not shown.

View File

@@ -0,0 +1,41 @@
# FIXED
main.obj: ../main.c
main.obj: ../Sunseeker2021.h
main.obj: C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h
main.obj: C:/ti/ccsv6/ccs_base/msp430/include/in430.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h
main.obj: C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h
main.obj: ../RTC.h
main.obj: ../CAN.h
main.obj: ../RS232.h
../main.c:
../Sunseeker2021.h:
C:/ti/ccsv6/ccs_base/msp430/include/msp430x54xa.h:
C:/ti/ccsv6/ccs_base/msp430/include/in430.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/intrinsics_legacy_undefs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdio.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/linkage.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdarg.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/stdlib.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/ctype.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_isfuncdcl.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/string.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/math.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/_defs.h:
C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include/float.h:
../RTC.h:
../CAN.h:
../RS232.h:

Binary file not shown.

View File

@@ -0,0 +1,175 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL = cmd.exe
CG_TOOL_ROOT := C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS
GEN_OPTS__FLAG :=
GEN_CMDS__FLAG :=
ORDERED_OBJS += \
"./LTCspi.obj" \
"./RS232.obj" \
"./RTC.obj" \
"./RTCASMFunctions_CCE.obj" \
"./can0.obj" \
"./can1.obj" \
"./canspi.obj" \
"./clock_init.obj" \
"./io_init.obj" \
"./main.obj" \
"../lnk_msp430f5438a.cmd" \
$(GEN_CMDS__FLAG) \
-llibmath.a \
-llibc.a \
-include ../makefile.init
RM := DEL /F
RMDIR := RMDIR /S/Q
# All of the sources participating in the build are defined here
-include sources.mk
-include subdir_vars.mk
-include subdir_rules.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(S_DEPS)),)
-include $(S_DEPS)
endif
ifneq ($(strip $(S_UPPER_DEPS)),)
-include $(S_UPPER_DEPS)
endif
ifneq ($(strip $(S62_DEPS)),)
-include $(S62_DEPS)
endif
ifneq ($(strip $(C64_DEPS)),)
-include $(C64_DEPS)
endif
ifneq ($(strip $(ASM_DEPS)),)
-include $(ASM_DEPS)
endif
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(SV7A_DEPS)),)
-include $(SV7A_DEPS)
endif
ifneq ($(strip $(S55_DEPS)),)
-include $(S55_DEPS)
endif
ifneq ($(strip $(C67_DEPS)),)
-include $(C67_DEPS)
endif
ifneq ($(strip $(CLA_DEPS)),)
-include $(CLA_DEPS)
endif
ifneq ($(strip $(C??_DEPS)),)
-include $(C??_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
ifneq ($(strip $(S??_DEPS)),)
-include $(S??_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(C62_DEPS)),)
-include $(C62_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(ASM_UPPER_DEPS)),)
-include $(ASM_UPPER_DEPS)
endif
ifneq ($(strip $(K_DEPS)),)
-include $(K_DEPS)
endif
ifneq ($(strip $(C43_DEPS)),)
-include $(C43_DEPS)
endif
ifneq ($(strip $(INO_DEPS)),)
-include $(INO_DEPS)
endif
ifneq ($(strip $(S67_DEPS)),)
-include $(S67_DEPS)
endif
ifneq ($(strip $(SA_DEPS)),)
-include $(SA_DEPS)
endif
ifneq ($(strip $(S43_DEPS)),)
-include $(S43_DEPS)
endif
ifneq ($(strip $(OPT_DEPS)),)
-include $(OPT_DEPS)
endif
ifneq ($(strip $(PDE_DEPS)),)
-include $(PDE_DEPS)
endif
ifneq ($(strip $(S64_DEPS)),)
-include $(S64_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
ifneq ($(strip $(C55_DEPS)),)
-include $(C55_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
EXE_OUTPUTS += \
Debug3.out \
EXE_OUTPUTS__QUOTED += \
"Debug3.out" \
BIN_OUTPUTS += \
Debug3.hex \
BIN_OUTPUTS__QUOTED += \
"Debug3.hex" \
# All Target
all: Debug3.out
# Tool invocations
Debug3.out: $(OBJS) $(CMD_SRCS) $(GEN_CMDS)
@echo 'Building target: $@'
@echo 'Invoking: MSP430 Linker'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal -z -m"Debug3.map" --stack_size=160 --heap_size=160 --cinit_hold_wdt=on -i"C:/ti/ccsv6/ccs_base/msp430/include" -i"C:/ti/ccsv6/ccs_base/msp430/lib/5xx_6xx_FRxx" -i"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/lib" -i"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --reread_libs --warn_sections --display_error_number --diag_wrap=off --xml_link_info="Debug3_linkInfo.xml" --use_hw_mpy=F5 --rom_model -o "Debug3.out" $(ORDERED_OBJS)
@echo 'Finished building target: $@'
@echo ' '
Debug3.hex: $(EXE_OUTPUTS)
@echo 'Invoking: MSP430 Hex Utility'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/hex430" --memwidth=8 --romwidth=8 -o "Debug3.hex" $(EXE_OUTPUTS__QUOTED)
@echo 'Finished building: $@'
@echo ' '
# Other Targets
clean:
-$(RM) $(EXE_OUTPUTS__QUOTED)$(BIN_OUTPUTS__QUOTED)
-$(RM) "LTCspi.d" "RS232.d" "RTC.d" "can0.d" "can1.d" "canspi.d" "clock_init.d" "io_init.d" "main.d"
-$(RM) "LTCspi.obj" "RS232.obj" "RTC.obj" "RTCASMFunctions_CCE.obj" "can0.obj" "can1.obj" "canspi.obj" "clock_init.obj" "io_init.obj" "main.obj"
-$(RM) "RTCASMFunctions_CCE.d"
-@echo 'Finished clean'
-@echo ' '
.PHONY: all clean dependents
.SECONDARY:
-include ../makefile.targets

View File

@@ -0,0 +1,8 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
USER_OBJS :=
LIBS := -llibmath.a -llibc.a

View File

@@ -0,0 +1,115 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
O_SRCS :=
CPP_SRCS :=
K_SRCS :=
LD_SRCS :=
S67_SRCS :=
LDS_SRCS :=
CMD_SRCS :=
EXE_SRCS :=
CXX_SRCS :=
CMD_UPPER_SRCS :=
ELF_SRCS :=
C43_SRCS :=
S55_SRCS :=
LD_UPPER_SRCS :=
C62_SRCS :=
S_UPPER_SRCS :=
A_SRCS :=
SA_SRCS :=
C55_SRCS :=
LDS_UPPER_SRCS :=
C_UPPER_SRCS :=
OUT_SRCS :=
INO_SRCS :=
OBJ_SRCS :=
S62_SRCS :=
LIB_SRCS :=
PDE_SRCS :=
SV7A_SRCS :=
ASM_SRCS :=
ASM_UPPER_SRCS :=
C++_SRCS :=
CLA_SRCS :=
S??_SRCS :=
C_SRCS :=
C67_SRCS :=
S_SRCS :=
S43_SRCS :=
OPT_SRCS :=
C64_SRCS :=
CC_SRCS :=
C??_SRCS :=
S64_SRCS :=
OBJS :=
BIN_OUTPUTS :=
S_DEPS :=
S_UPPER_DEPS :=
S62_DEPS :=
C64_DEPS :=
ASM_DEPS :=
CC_DEPS :=
SV7A_DEPS :=
S55_DEPS :=
C67_DEPS :=
CLA_DEPS :=
C??_DEPS :=
CPP_DEPS :=
S??_DEPS :=
C_DEPS :=
C62_DEPS :=
EXE_OUTPUTS :=
CXX_DEPS :=
C++_DEPS :=
ASM_UPPER_DEPS :=
K_DEPS :=
C43_DEPS :=
INO_DEPS :=
S67_DEPS :=
SA_DEPS :=
S43_DEPS :=
OPT_DEPS :=
PDE_DEPS :=
S64_DEPS :=
C_UPPER_DEPS :=
C55_DEPS :=
CPP_DEPS__QUOTED :=
C67_DEPS__QUOTED :=
INO_DEPS__QUOTED :=
C??_DEPS__QUOTED :=
S_UPPER_DEPS__QUOTED :=
CLA_DEPS__QUOTED :=
ASM_UPPER_DEPS__QUOTED :=
C62_DEPS__QUOTED :=
CXX_DEPS__QUOTED :=
EXE_OUTPUTS__QUOTED :=
S67_DEPS__QUOTED :=
BIN_OUTPUTS__QUOTED :=
C_DEPS__QUOTED :=
C_UPPER_DEPS__QUOTED :=
OPT_DEPS__QUOTED :=
S_DEPS__QUOTED :=
K_DEPS__QUOTED :=
S??_DEPS__QUOTED :=
C64_DEPS__QUOTED :=
C++_DEPS__QUOTED :=
OBJS__QUOTED :=
CC_DEPS__QUOTED :=
S43_DEPS__QUOTED :=
S55_DEPS__QUOTED :=
SA_DEPS__QUOTED :=
C55_DEPS__QUOTED :=
PDE_DEPS__QUOTED :=
C43_DEPS__QUOTED :=
S62_DEPS__QUOTED :=
ASM_DEPS__QUOTED :=
SV7A_DEPS__QUOTED :=
S64_DEPS__QUOTED :=
# Every subdirectory with source files must be described here
SUBDIRS := \
. \

View File

@@ -0,0 +1,76 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Each subdirectory must supply rules for building sources it contributes
LTCspi.obj: ../LTCspi.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="LTCspi.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
RS232.obj: ../RS232.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="RS232.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
RTC.obj: ../RTC.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="RTC.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
RTCASMFunctions_CCE.obj: ../RTCASMFunctions_CCE.s43 $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="RTCASMFunctions_CCE.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
can0.obj: ../can0.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="can0.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
can1.obj: ../can1.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="can1.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
canspi.obj: ../canspi.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="canspi.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
clock_init.obj: ../clock_init.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="clock_init.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
io_init.obj: ../io_init.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="io_init.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '
main.obj: ../main.c $(GEN_OPTS) | $(GEN_HDRS)
@echo 'Building file: $<'
@echo 'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/bin/cl430" -vmspx --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/msp430_15.12.3.LTS/include" --advice:power=all -g --define=__MSP430F5438A__ --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU23 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="main.d" $(GEN_OPTS__FLAG) "$<"
@echo 'Finished building: $<'
@echo ' '

View File

@@ -0,0 +1,89 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
CMD_SRCS += \
../lnk_msp430f5438a.cmd
C_SRCS += \
../LTCspi.c \
../RS232.c \
../RTC.c \
../can0.c \
../can1.c \
../canspi.c \
../clock_init.c \
../io_init.c \
../main.c
S43_SRCS += \
../RTCASMFunctions_CCE.s43
OBJS += \
./LTCspi.obj \
./RS232.obj \
./RTC.obj \
./RTCASMFunctions_CCE.obj \
./can0.obj \
./can1.obj \
./canspi.obj \
./clock_init.obj \
./io_init.obj \
./main.obj
C_DEPS += \
./LTCspi.d \
./RS232.d \
./RTC.d \
./can0.d \
./can1.d \
./canspi.d \
./clock_init.d \
./io_init.d \
./main.d
S43_DEPS += \
./RTCASMFunctions_CCE.d
C_DEPS__QUOTED += \
"LTCspi.d" \
"RS232.d" \
"RTC.d" \
"can0.d" \
"can1.d" \
"canspi.d" \
"clock_init.d" \
"io_init.d" \
"main.d"
OBJS__QUOTED += \
"LTCspi.obj" \
"RS232.obj" \
"RTC.obj" \
"RTCASMFunctions_CCE.obj" \
"can0.obj" \
"can1.obj" \
"canspi.obj" \
"clock_init.obj" \
"io_init.obj" \
"main.obj"
S43_DEPS__QUOTED += \
"RTCASMFunctions_CCE.d"
C_SRCS__QUOTED += \
"../LTCspi.c" \
"../RS232.c" \
"../RTC.c" \
"../can0.c" \
"../can1.c" \
"../canspi.c" \
"../clock_init.c" \
"../io_init.c" \
"../main.c"
S43_SRCS__QUOTED += \
"../RTCASMFunctions_CCE.s43"

View File

@@ -0,0 +1,87 @@
/*
* LTCspi.c
*
* Created by Byron Izenbaard on 6/8/11.
* Modified by Kenwood Hoben on 5/26/12
*
* Modified for BPS_V2 by Scott Haver on 11/03/15
*
* Copyright 2015 Western Michigan University Sunseeker. All rights reserved.
*
*/
#include<msp430x54xa.h>
void LTC1SPI_init(void)
{
UCA2CTL1 |= UCSWRST; //software reset
UCA2CTL0 = UCSYNC | UCMODE_0 | UCMST | UCMSB | UCCKPL; //data-capt then change; MSB first; Master; 3-pin SPI
UCA2CTL1 |= UCSSEL_2; // SMCLK - 8 MHz
UCA2BR1 = 0x00;
UCA2BR0 = 0x08; // BR = 1 MHz (max for LTC)
UCA2STAT &= ~UCLISTEN; // not in loopback mode
UCA2CTL1 &= ~UCSWRST; //clear software reset
}
void LTC1_transmit(unsigned char data)
{
UCA2TXBUF = data;
while((UCA2STAT & UCBUSY) != 0); // Wait for Rx completion (implies Tx is also complete)
UCA2RXBUF;
}
unsigned char LTC1_exchange(unsigned char data)
{
UCA2TXBUF = data;
while((UCA2STAT & UCBUSY) != 0); // Wait for Rx completion (implies Tx is also complete)
return(UCA2RXBUF);
}
void LTC2SPI_init(void)
{
UCB2CTL1 |= UCSWRST; //software reset
UCB2CTL0 = UCSYNC | UCMODE_0 | UCMST | UCMSB | UCCKPL; //data-capt then change; MSB first; Master; 3-pin SPI
UCB2CTL1 |= UCSSEL_2; // SMCLK - 8 MHz
UCB2BR1 = 0x00;
UCB2BR0 = 0x08; // BR = 1 MHz (max for LTC)
UCB2STAT &= ~UCLISTEN; // not in loopback mode
UCB2CTL1 &= ~UCSWRST; //clear software reset
}
void LTC2_transmit(unsigned char data)
{
UCB2TXBUF = data;
while((UCB2STAT & UCBUSY) != 0); // Wait for Rx completion (implies Tx is also complete)
UCB2RXBUF;
}
unsigned char LTC2_exchange(unsigned char data)
{
UCB2TXBUF = data;
while((UCB2STAT & UCBUSY) != 0); // Wait for Rx completion (implies Tx is also complete)
return(UCB2RXBUF);
}
void LTC3SPI_init(void)
{
UCB3CTL1 |= UCSWRST; //software reset
UCB3CTL0 = UCSYNC | UCMODE_0 | UCMST | UCMSB | UCCKPL; //data-capt then change; MSB first; Master; 3-pin SPI
UCB3CTL1 |= UCSSEL_2; // SMCLK - 8 MHz
UCB3BR1 = 0x00;
UCB3BR0 = 0x08; // BR = 1 MHz (max for LTC)
UCB3STAT &= ~UCLISTEN; // not in loopback mode
UCB3CTL1 &= ~UCSWRST; //clear software reset
}
void LTC3_transmit(unsigned char data)
{
UCB3TXBUF = data;
while((UCB3STAT & UCBUSY) != 0); // Wait for Rx completion (implies Tx is also complete)
UCB3RXBUF;
}
unsigned char LTC3_exchange(unsigned char data)
{
UCB3TXBUF = data;
while((UCB3STAT & UCBUSY) != 0); // Wait for Rx completion (implies Tx is also complete)
return(UCB3RXBUF);
}

105
Telem_Debug/Debug3/RS232.c Normal file
View File

@@ -0,0 +1,105 @@
/*
* Originally Written for TELEMETRY 2021 PCB Development
*
* UART to Modem UCA3 Interface
*
* Clock and microcontroller Initialization RS232
*/
// Include files
#include<msp430x54xa.h>
#include "Sunseeker2021.h"
#include "RS232.h"
/*********************************************************************************/
// UART to Modem UCA3 Interface (voltage isolated)
/*********************************************************************************/
void UART_init(void)
{
UCA3CTL1 |= UCSWRST | UCSSEL_2; //put state machine in reset & SMCLK
UCA3CTL0 |= UCMODE_0;
UCA3BRW = (int)(SMCLK_RATE/MODEM_BR1); //10MHZ/9600
UCA3MCTL |= UCBRF_0 + (char)MODEM_UCBRS1; //modulation UCBRSx=computed from baud rate UCBRFx=0
UCA3IFG &= ~UCTXIFG; //Clear Xmit and Rec interrupt flags
UCA3IFG &= ~UCRXIFG;
UCA3CTL1 &= ~UCSWRST; // initalize state machine
UCA3ABCTL |= UCABDEN; // automatic baud rate
// UCA3IE |= UCRXIE|UCTXIE; //enable TX & RX interrupt
}
void UART_putchar(char data)
{
while((UCA3IFG & UCTXIFG) == 0);
UCA3TXBUF = data;
}
unsigned char UART_getchar(void)
{
char i = 100;
while((UCA3IFG & UCRXIFG) == 0 && i != 0)
{
i--;
}
return(UCA3RXBUF);
}
int UART_puts(char *str)
{
int i;
char ch;
i = 0;
while((ch=*str)!= '\0')
{
UART_putchar(ch);
str++;
i++;
}
UART_putchar(0x0A);
UART_putchar(0x0D);
return(i);
}
int UART_gets(char *ptr)
{
int i;
i = 0;
while (1) {
*ptr = UART_getchar();
if (*ptr == 0x0D){
*ptr = 0;
return(i);
}
else
{
ptr++;
i++;
}
}
}
void UART_put_int(void)
{
extern char *putPC_ptr;
extern char put_status_PC;
char ch;
ch = *putPC_ptr++;
if (ch == '\0')
{
UCA3IE &= ~UCTXIE;
put_status_PC = FALSE;
}
else
{
UCA3TXBUF = ch;
UCA3IE |= UCTXIE;
put_status_PC = TRUE;
}
}

View File

@@ -0,0 +1,25 @@
#ifndef RS232_PORTS_H_
#define RS232_PORTS_H_
//public declarations constants
static char RS232Cmd[5] = "+++\r\0";
static char RS232_Test1[13] = "Sunseeker \n\r\0";
static char RS232_Test2[9] = "2014. \n\r\0";
static char Parse_header[6][5] = {"LTC \0","ADC \0","ISH \0","ERR \0","BPS \0","BPC \0"};
/*********************************************************************************/
// BPS to PC External RS-232 (voltage isolated)
/*********************************************************************************/
void UART_init();
void UART_putchar(char data);
unsigned char UART_getchar(void);
int UART_gets(char *ptr);
int UART_puts(char *str);
void UART_put_int(void);
#endif /*RS232_PORTS_H_*/

98
Telem_Debug/Debug3/RTC.c Normal file
View File

@@ -0,0 +1,98 @@
//
// Telemetry Real Time Clock
//
#include "Sunseeker2021.h"
/*************************************************************
/ Name: setRTC
/ IN: int hour, int minute, int second, int month, int day, int year
/ OUT: 1 if succesful
/ DESC: This function is used to set the Real Time Clock Values
************************************************************/
void init_RTC(void)
{
RTCCTL01 |= RTCBCD+RTCHOLD+RTCMODE; // RTC enable, BCD mode,
// alarm every Minute,
// enable RTC interrupt
// P1OUT ^= (LED5 | LED6 | LED7| LED8);
// setRTC(0,0,0,5,4,2016);
RTCCTL01 &= ~RTCHOLD; // Enable counting
}
//
// char time_msg[17];// = "TL_TIM,HH:MM:SS\r\n";
//
int insert_time(char *time_string)
{
char h1, h0, m1, m0, s1, s0;
extern int thrs, tmin, tsec;
h1 = ((thrs>>4) & 0x0F)+'0';
h0 = (thrs & 0x0F)+'0';
time_string[7] = h1;
time_string[8] = h0;
m1 = ((tmin>>4) & 0x0F)+'0';
m0 = (tmin & 0x0F)+'0';
time_string[10] = m1;
time_string[11] = m0;
s1 = ((tsec>>4) & 0x0F)+'0';
s0 = (tsec & 0x0F)+'0';
time_string[13] = s1;
time_string[14] = s0;
return 1;
}
/*************************************************************
/ Name: setRTC
/ IN: int hour, int minute, int second, int month, int day, int year
/ OUT: 1 if succesful
/ DESC: This function is used to set the Real Time Clock Values
************************************************************/
int setRTC(int h, int m, int s, int mo, int d, int y)
{
SetRTCYEAR(y);
delay();
// P1OUT ^= (LED5);
SetRTCMON(mo);
delay();
//P1OUT ^= (LED5 | LED6);
SetRTCDAY(d);
delay();
// P1OUT ^= (LED5);
SetRTCHOUR(h);
delay();
//P1OUT ^= (LED5 | LED6 | LED7);
SetRTCMIN(m);
delay();
// P1OUT ^= (LED5 );
SetRTCSEC(s);
delay();
//P1OUT ^= (LED5 | LED6 );
return 1;
}
/*************************************************************
/ Name: getTime
/ IN: int *hour, int *minute, int *second
/ OUT: void
/ DESC: This function returns the current time of the Real time clock
************************************************************/
void getTime(int *h, int *m, int *s)
{
int min_sec;
while((RTCCTL0 && RTCRDYIFG) == 0);
*h = GetRTCHOUR();
while((RTCCTL0 && RTCRDYIFG) == 0);
min_sec = GetRTCTIM0();
*m = (min_sec & 0xFF00)>>8;
*s = min_sec & 0x00FF;
}

54
Telem_Debug/Debug3/RTC.h Normal file
View File

@@ -0,0 +1,54 @@
/******************************************************************************
/ Program to set and keep track of a clock/calender updated by the RTC
/
/
/
/
/
/
/
/
*******************************************************************************/
#ifndef RTC_H_
#define RTC_H_
typedef struct _Time { int Year, Month, DayOfWeek, Day, Hour, Minute, Second; }time;
// User defined functions
extern void init_RTC(void);
extern int setRTC(int h, int m, int s, int mo, int d, int y);
extern void getTime(int *h, int *m, int *s);
extern int insert_time(char *time_string);
// Provided functions
extern int SetRTCYEAR(int year);
extern int SetRTCMON(int month);
extern int SetRTCDAY(int day);
extern int SetRTCDOW(int dow);
extern int SetRTCHOUR(int hour);
extern int SetRTCMIN(int min);
extern int SetRTCSEC(int sec);
extern int GetRTCTIM0(void);
extern int GetRTCTIM1(void);
extern int GetRTCDATE(void);
extern int GetRTCYEAR(void);
extern int GetRTCMON(void);
extern int GetRTCDOW(void);
extern int GetRTCDAY(void);
extern int GetRTCHOUR(void);
extern int GetRTCMIN(void);
extern int GetRTCSEC(void);
int TestRTCYear(time TaD);
int TestRTCMonth(time TaD);
int TestRTCDow(time TaD);
int TestRTCDay(time TaD);
int TestRTCHour(time TaD);
int TestRTCMinute(time TaD);
int TestRTCSecond(time TaD);
#endif /*RTC_H_*/

View File

@@ -0,0 +1,338 @@
;******************************************************************************
; MSP430FG5438 - Real Time Clock Workaround
;
; Description: This program demonstrates the RTC Workaround for the RTC
; Errata deailed in the XMS '5438 Errata under RTC3
; Assembly functions for the RTC workaround
; Allows safe access to the RTC registers that potentially have a write issue
; Code is aligned so that the lower 5 bits of the address of the instruction
; fetch following the RTC register write are equal
; Do not change the code in the ASM file (.s43) all nops in there are needed.
;
; Texas Instruments Inc.
; October 2008
; Built with CCE version 3.2.2
;
;*******************************************************************************
; !!!!!! Do not change the code. Every nop has a function !!!!!!
;*******************************************************************************
.cdecls C,LIST,"msp430x54x.h" ; Include device header file
;-------------------------------------------------------------------------------
.text ; Progam Start
;-------------------------------------------------------------------------------
.align 32
;-------------------------------------------------------------------------------
.global SetRTCYEAR
; int SetRTCYEAR(int year)
; year will be set in the RTCYEAR register
; return value is read back from the RTCYEAR register
; Works only in calendar mode (RTCMODE = 1)
; argument year is in R12
; return value is in R12
SetRTCYEAR: nop
nop
nop
nop
dint
nop
nop
nop
mov.w R12,&RTCYEAR ; Set RTCYEAR to year
nop
nop
mov.w &RTCYEAR,R12 ; Return value
nop
eint
nop
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
;-------------------------------------------------------------------------------
.global SetRTCMON
; int SetRTCMON(int month)
; month will be set in the RTCMON register
; Workaround requires to write 16 bits into RTCDATE
; return value is read back from the RTCMON register
; argument month is in R12
; return value is in R12
SetRTCMON: push.w R5 ; push R5
mov.b &RTCDAY,R5 ; read RTCDAY into R5
swpb R12 ; R12 holds month - swap lower and upper byte
bis.w R12,R5 ; combine read RTCDAY and new RTCMON
dint
nop
mov.w R5,&RTCDATE ; write to RTCDATE
nop
nop
nop
nop
eint
nop
mov.b &RTCMON,R12 ; Read RTCMON register
pop.w R5 ; pop R5
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
;-------------------------------------------------------------------------------
.global SetRTCDAY
; int SetRTCDAY(int day)
; day will be set in the RTCDAY register
; Workaround requires to write 16 bits into RTCDATE
; return value is read back from the RTCDAY register
; argument day is in R12
; return value is in R12
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
SetRTCDAY: ; R12 holds day in lower byte
push.w R5 ; push R5
mov.b &RTCMON,R5 ; read RTCMON into lower byte of R5
swpb R5 ; month is now in higher byte of R5
bic.w #00FFh,R5 ; clear lower byte of R5
bis.w R12,R5 ; combine read RTCDAY and new RTCMON
dint
nop
mov.w R5,&RTCDATE ; write to RTCDATE
nop
eint
nop
mov.b &RTCDAY,R12 ; Read RTCDAY register
pop.w R5 ; pop R5
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
;-------------------------------------------------------------------------------
.global SetRTCDOW
; int SetRTCDOW(int dow)
; dow will be set in the RTCDOW register
; Workaround requires to write 16 bits into RTCTIM1
; return value is read back from the RTCDOW register
; argument dow is in R12
; return value is in R12
SetRTCDOW: push.w R5 ; push R5
mov.b &RTCHOUR,R5 ; read RTCHOUR into R5
swpb R12 ; R12 holds dow - swap lower and upper byte
bis.w R12, R5 ; combine read RTCHOUR and new RTCDOW
dint
nop
mov.w R5,&RTCTIM1 ; write to RTCTIM1
nop
eint
nop
mov.b &RTCDOW,R12 ; Read RTCDOW register
pop.w R5 ; pop R5
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
;-------------------------------------------------------------------------------
.global SetRTCHOUR
; int SetRTCHOUR(int hour)
; hour will be set in the RTCHOUR register
; Workaround requires to write 16 bits into RTCTIM1
; return value is read back from the RTCHOUR register
; argument hour is in R12
; return value is in R12
SetRTCHOUR: ; R12 holds day in lower byte
push.w R5 ; push R5
mov.b &RTCDOW,R5 ; read RTCDOW into lower byte of R5
swpb R5 ; dow is now in higher byte of R5
bis.w R12,R5 ; combine read RTCDOW and new RTCHOUR
dint
nop
nop
mov.w R5,&RTCTIM1 ; write to RTCTIM1
nop
eint
nop
mov.b &RTCHOUR,R12 ; Read RTCHOUR register
pop.w R5 ; pop R5
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
;-------------------------------------------------------------------------------
.global SetRTCMIN
; int SetRTCMIN(int min)
; min will be set in the RTCMIN register
; Workaround requires to write 16 bits into RTCTIM0
; return value is read back from the RTCDOW register
; argument min is in R12
; return value is in R12
SetRTCMIN: push.w R5 ; push R5
mov.b &RTCSEC, R5 ; read RTCSEC into R5
swpb R12 ; R12 holds min - swap lower and upper byte
bis.w R12,R5 ; combine read RTCMIN and new RTCSEC
dint
nop
mov.w R5,&RTCTIM0 ; write to RTCTIM0
nop
eint
nop
mov.b &RTCMIN,R12 ; Read RTCDOW register
pop.w R5 ; pop R5
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
;-------------------------------------------------------------------------------
.global SetRTCSEC
; int SetRTCSEC(int sec)
; sec will be set in the RTCSEC register
; Workaround requires to write 16 bits into RTCTIM0
; return value is read back from the RTCSEC register
; argument sec is in R12
; return value is in R12
SetRTCSEC: ; R12 holds day in lower byte
push.w R5 ; push R5
mov.b &RTCMIN, R5 ; read RTCMIN into lower byte of R5
swpb R5 ; min is now in higher byte of R5
bis.w R12, R5 ; combine read RTCMIN and new RTCSEC
dint
nop
nop
mov.w R5,&RTCTIM0 ; write to RTCTIM0
nop
eint
nop
mov.b &RTCSEC, R12 ; Read RTCSEC register
pop.w R5 ; pop R5
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
;-------------------------------------------------------------------------------
.global GetRTCTIM0
; Read the RTC registers RTCTIM0
; return the values
GetRTCTIM0:
mov.w &RTCTIM0,R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCTIM1
; Read the RTC register RTCTIM1
; return the values
GetRTCTIM1:
mov.w &RTCTIM1,R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCDATE
; Read the RTC register RTCDATE
; return the values
GetRTCDATE:
mov.w &RTCDATE,R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCYEAR
; Read the RTC registers RTCYEAR
; return the values
GetRTCYEAR:
mov.w &RTCYEAR, R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCMON
; Read the RTC register RTCMON
; return the values
GetRTCMON:
mov.b &RTCMON, R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCDOW
; Read the RTC register RTCDOW
; return the values
GetRTCDOW:
mov.b &RTCDOW, R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCDAY
; Read the RTC register RTCDOW
; return the values
GetRTCDAY:
mov.b &RTCDAY, R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCHOUR
; Read the RTC register RTCDOW
; return the values
GetRTCHOUR:
mov.b &RTCHOUR, R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCMIN
; Read the RTC register RTCDOW
; return the values
GetRTCMIN:
mov.b &RTCMIN, R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif
.global GetRTCSEC
; Read the RTC register RTCDOW
; return the values
GetRTCSEC:
mov.b &RTCSEC, R12
.if $isdefed("__LARGE_CODE_MODEL__") = 0
ret
.else
reta
.endif

View File

@@ -0,0 +1,378 @@
/*
* Sunseeker Telemetry 2021
*
* Last modified May 2021 by B. Bazuin
*
* Main CLK : MCLK = XT2 = 20 MHz
* Sub-Main CLK : SMCLK = XT2/2 = 10 MHz
* Aux CLK : ACLK = XT1 = 32.768 kHz
*
*/
#ifndef SUNSEEKER2021_H_
#define SUNSEEKER2021_H_
#include <msp430x54xa.h>
#include <stdio.h>
#include <stdlib.h>
#include <msp430x54xa.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#include <float.h>
void clock_init(void);
void timerB_init(void);
void io_init(void);
static inline void delay(void)
{
volatile int jj;
volatile int ii;
for (ii = 0; ii < 4; ii++)
{
for (jj = 0; jj < 1000; jj++)
{
asm(" nop"); //The space is necessary or else the assember things nop is a label!
}
}
}
// Event timing
#define SMCLK_RATE 10000000 // Hz
#define ACLK_RATE 32768 // Hz
#define TICK_RATE 16 // Hz
#define TELEM_STATUS_COUNT 16 // Number of ticks per event: 5 sec
#define HS_COMMS_SPEED 16*5 // Number of ticks per event: 5 sec
#define LS_COMMS_SPEED 16*10 // Number of ticks per event: 15 sec
#define ST_COMMS_SPEED 16*20 // Number of ticks per event: 60 sec
// Constant Definitions
#define TRUE 1
#define FALSE 0
#ifndef MODEM_BR1
#define MODEM_BR1 9600
#define MODEM_UCBRS1 0x04 // 2*ROUND(SMCLK_RATE/MODEM_BR-INT(SMCLK_RATE/MODEM_BR))*8
#endif
#ifndef MODEM_BR2
#define MODEM_BR2 115200
#define MODEM_UCBRS2 0x0A // 2*ROUND(SMCLK_RATE/MODEM_BR-INT(SMCLK_RATE/MODEM_BR))*8
#endif
#ifndef USB_BR
#define USB_BR 9600
#define USB_UCBRS 0x04 // 2*ROUND(SMCLK_RATE/UART_BR-INT(SMCLK_RATE/UART_BR))*8
#endif
#ifndef UART_BR
#define UART_BR 19200
#define UART_UCBRS 0x0D // 2*ROUND(SMCLK_RATE/UART_BR-INT(SMCLK_RATE/UART_BR))*8
#endif
#include "RTC.h"
#include "CAN.h"
#include "RS232.h"
/******************** Pin Definitions *************************/
// PORT 1
#define P10 0x01
#define P11 0x02
#define P12 0x04
#define P13 0x08
#define P14 0x10
#define P15 0x20
#define RTC_MFP 0x40
#define IMU_INTn 0x80
#define P1_UNUSED 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20
// PORT 2
#define CAN0_INTn 0x01
#define CAN0_RXB0n 0x02
#define CAN0_RXB1n 0x04
#define CAN1_INTn 0x08
#define CAN1_RXB0n 0x10
#define CAN1_RXB1n 0x20
#define GPS_INTn 0x40
#define P27 0x80
#define P2_UNUSED 0x80
// PORT 3
#define CAN0_SCLK 0x01
#define SDC_SIMO 0x02
#define SDC_SOMI 0x04
#define SDC_SCLK 0x08
#define CAN0_MOSI 0x10
#define CAN0_MISO 0x20
#define CAN1_CLK 0x40
#define IMU_SDA 0x80
#define P3_UNUSED 0x00
// PORT 4
#define CAN0_RSTn 0x01
#define CAN0_CSn 0x02
#define CAN1_RSTn 0x04
#define CAN1_CSn 0x08
#define SDC_WPn 0x10
#define SDC_CDn 0x20
#define P46 0x40
#define P47 0x80
#define P4_UNUSED 0x40 | 0x80
// PORT 5
#define P50 0x01
#define P51 0x02
#define XT2IN 0x04
#define XT2OUT 0x08
#define IMU_SCL 0x10
#define P55 0x20
#define CAN1_MOSI 0x40
#define CAN1_MISO 0x80
#define P5_UNUSED 0x01 | 0x02 | 0x20
// PORT 6
#define P60 0x01
#define P61 0x02
#define P62 0x04
#define P63 0x08
#define P64 0x10
#define P65 0x20
#define P66 0x40
#define P67 0x80
#define P6_UNUSED 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80
// PORT 7
#define XT1IN 0x01
#define XT1OUT 0x02
#define P72 0x04
#define P73 0x08
#define P74 0x10
#define P75 0x20
#define P76 0x40
#define P77 0x80
#define P7_UNUSED 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80
// PORT 8
#define P80 0x01
#define P81 0x02
#define P82 0x04
#define LEDG 0x08
#define LEDR 0x10
#define LEDY0 0x20
#define LEDY1 0x40
#define Button0 0x80
#define P8_UNUSED 0x01 | 0x02 | 0x04
// PORT 9
#define P90 0x01
#define RTC_SDA 0x02
#define RTC_SCL 0x04
#define P93 0x08
#define USB_TX 0x10
#define USB_RX 0x20
#define SDC_CSn 0x40
#define GPS_CSn 0x80
#define P9_UNUSED 0x40 | 0x80
// PORT 10
#define BT_CSn 0x01
#define BT_MOSI 0x02
#define BT_MISO 0x04
#define BT_SCLK 0x08
#define UART_TX 0x10
#define UART_RX 0x20
#define BT_EN 0x40
#define P107 0x80
#define P10_UNUSED 0x80
// PORT 11
#define ACLK_TEST 0x01
#define MCLK_TEST 0x02
#define SMCLK_TEST 0x04
// PORT J
#define JTAG_TDO 0x01
#define JTAG_TDI 0x02
#define JTAG_TMS 0x04
#define JTAG_TCK 0x08
// Transmit Packet Info
#define HF_MSG_PACKET 10 //number of messages per packet in high frequency
#define LF_MSG_PACKET 0 //number of messages per packet in low frequency
#define ST_MSG_PACKET 0 //number of messages that we receive and don't send out
#define No_MSG_PACKET 38 //number of messages that we receive and don't send out
#define LOOKUP_ROWS HF_MSG_PACKET+LF_MSG_PACKET+ST_MSG_PACKET+No_MSG_PACKET
#define NAME_LOOKUP_ROWS LOOKUP_ROWS
//#define TIME_SIZE 30 //number of characters in time
#define MSG_SIZE 30 //number of characters in single message
// Motor controller CAN base address and packet offsets
#define MC_CAN_BASE1 0x400 // High = CAN1_SERIAL Number Low = 0x00004003 P=1s
#define MC_CAN_BASE2 0x420 // High = CAN1_SERIAL Number Low = 0x00004003 P=1s
#define MC_LIMITS 0x01 // High = CAN_Err,Active Motor Low = Error & Limit flags P=200ms
#define MC_BUS 0x02 // High = Bus Current Low = Bus Voltage P=200ms
#define MC_VELOCITY 0x03 // High = Velocity (m/s) Low = Velocity (rpm) P=200ms
#define MC_PHASE 0x04 // High = Phase C Current Low = Phase B Current P=200ms
#define MC_V_VECTOR 0x05 // High = Vd vector Low = Vq vector P=200ms
#define MC_I_VECTOR 0x06 // High = Id vector Low = Iq vector P=200ms
#define MC_BEMF_VECTOR 0x07 // High = BEMFd vector Low = BEMFq vector P=200ms
#define MC_RAIL1 0x08 // High = 15V Low = Reserved P=1s
#define MC_RAIL2 0x09 // High = 3.3V Low = 1.9V P=1s
//#define MC_FAN 0x0A // High = Reserved Low = Reserved P=
#define MC_TEMP1 0x0B // High = Heatsink Temp (case) Low = Motor Temp (internal) P=1s
#define MC_TEMP2 0x0C // High = Reserved Low = DSP Temp P=1s
//#define MC_TEMP3 0x0D // High = Outlet Temp Low = Capacitor Temp P=
#define MC_CUMULATIVE 0x0E // High = DC Bus AmpHours (A-Hr) Low = Odometer (m) P=1s
#define MC_SLIPSPEED 0x17 // High = Slip Speed (Hz ) Low = Reserved P=200ms
// Driver controls CAN base address and packet offsets
#define DC_CAN_BASE 0x500 // High = CAN1_SERIAL Number Low = "TRIb" string P=1s
#define DC_DRIVE 0x01 // High = Motor Current Setpoint Low = Motor Velocity Setpoint P=100ms
#define DC_POWER 0x02 // High = Bus Current Setpoint Low = Unused P=100ms
#define DC_RESET 0x03 // High = Unused Low = Unused P=
#define DC_SWITCH 0x04 // High = Switch position Low = Switch state change P=100ms
//Battery Protection System base address and packet offsets
#define BP_CAN_BASE 0x580 // High = "BPV1" string or nulls Low = CAN1_SERIAL Number P=10s
#define BP_VMAX 0x01 // High = Max. Voltage Value Low = Max. Voltage Cell Num. P=10s
#define BP_VMIN 0x02 // High = Min. Voltage Value Low = Min. Voltage Cell Num. P=10s
#define BP_TMAX 0x03 // High = Max. Temperature Low = Max. Temperature Cell P=10s
#define BP_PCDONE 0x04 // High = "BPV2" or "0000" string Low = CAN1_SERIAL Number P=When Ready
#define BP_ISH 0x05 // High = Shunt Current Low = Battery Voltage P=1s
//Battery Protection System base address and packet offsets
#define AC_CAN_BASE 0x5C0 // High = "ACV1" string or nulls Low = CAN1_SERIAL Number P=10s
#define AC_M1 0x01 // High = Array Voltage Average Low = Array Current Average P=10s
#define AC_M2 0x02 // High = Array Voltage Average Low = Array Current Average P=10s
#define AC_M3 0x03 // High = Array Voltage Average Low = Array Current Average P=10s
#define AC_ISH 0x04 // High = Shunt Current Low = Battery Voltage P=1s
#define AC_TMAX 0x05 // High = Max. Temperature Low = Max. Temperature MPPT P=10s
#define AC_TVAL1 0x06 // High = Temp AC1 Low = Temp AC2 P=10s
#define AC_TVAL2 0x06 // High = Temp AC3 Low = Reserved P=10s
#define AC_BP_CHARGE 0x07 // High = "ACV1" or "0000" string Low = CAN1_SERIAL Number P=When Charge
static int addr_lookup[LOOKUP_ROWS][5] = {
//address ASCII Offset MSG_REC position Packet(0-HF:1-LF:2-Status) Filter Priority
{MC_CAN_BASE1, 0, 0x0001, 3, 29}, //0-0x400 High = CAN1_SERIAL Number Low = "TRIa" string
{MC_CAN_BASE1 + MC_LIMITS, 0, 0x0001, 3, 15}, //1-0x01 High = Active Motor Low = Error & Limit flags
{MC_CAN_BASE1 + MC_BUS, 0, 0x0002, 0, 1}, //2-0x02 High = Bus Current Low = Bus Voltage
{MC_CAN_BASE1 + MC_VELOCITY, 1, 0x0004, 0, 2}, //3-0x03 High = Velocity (m/s) Low = Velocity (rpm)
{MC_CAN_BASE1 + MC_PHASE, 1, 0x0001, 3, 30}, //4-0x04 High = Phase A Current Low = Phase B Current
{MC_CAN_BASE1 + MC_V_VECTOR, 2, 0x0002, 3, 31}, //5-0x05 High = Vd vector Low = Vq vector
{MC_CAN_BASE1 + MC_I_VECTOR, 3, 0x0004, 3, 32}, //6-0x06 High = Id vector Low = Iq vector
{MC_CAN_BASE1 + MC_BEMF_VECTOR, 4, 0x0008, 3, 33}, //7-0x07 High = BEMFd vector Low = BEMFq vector
{MC_CAN_BASE1 + MC_RAIL1, 1, 0x0002, 3, 16}, //8-0x08 High = 15V Low = Reserved
{MC_CAN_BASE1 + MC_RAIL2, 2, 0x0004, 3, 17}, //9-0x09 High = 3.3V Low = 1.9V
{MC_CAN_BASE1 + MC_TEMP1, 0, 0x0001, 3, 7}, //10-0x0B High = Heatsink Temp Low = Motor Temp
{MC_CAN_BASE1 + MC_TEMP2, 1, 0x0002, 3, 8}, //11-0x0C High = Inlet Temp Low = CPU Temp
{MC_CAN_BASE1 + MC_CUMULATIVE, 3, 0x0008, 3, 18}, //12-x0E High = DC Bus AmpHours Low = Odometer
{MC_CAN_BASE1 + MC_SLIPSPEED, 5, 0x0010, 3, 34}, //13-0x17 High =Slip Speed (Hz) Low = Reserved
{MC_CAN_BASE2, 6, 0x0020, 3, 35}, //14-0x420 High = CAN1_SERIAL Number Low = "TRIa" string
{MC_CAN_BASE2 + MC_LIMITS, 4, 0x0010, 3, 19}, //15-0x01 High = Active Motor Low = Error & Limit flags
{MC_CAN_BASE2 + MC_BUS, 2, 0x0010, 0, 3}, //16-0x02 High = Bus Current Low = Bus Voltage
{MC_CAN_BASE2 + MC_VELOCITY, 3, 0x0020, 0, 4}, //17-0x03 High = Velocity (m/s) Low = Velocity (rpm)
{MC_CAN_BASE2 + MC_PHASE, 7, 0x0040, 3, 36}, //18-0x04 High = Phase A Current Low = Phase B Current
{MC_CAN_BASE2 + MC_V_VECTOR, 8, 0x0080, 3, 37}, //19-0x05 High = Vd vector Low = Vq vector
{MC_CAN_BASE2 + MC_I_VECTOR, 9, 0x0100, 3, 38}, //20-0x06 High = Id vector Low = Iq vector
{MC_CAN_BASE2 + MC_BEMF_VECTOR, 10, 0x0200, 3, 39}, //21-0x07 High = BEMFd vector Low = BEMFq vector
{MC_CAN_BASE2 + MC_RAIL1, 5, 0x0020, 3, 20}, //22-0x08 High = 15V Low = Reserved
{MC_CAN_BASE2 + MC_RAIL2, 6, 0x0040, 3, 21}, //23-0x09 High = 3.3V Low = 1.9V
{MC_CAN_BASE2 + MC_TEMP1, 2, 0x0004, 3, 9}, //24-0x0B High = Heatsink Temp Low = Motor Temp
{MC_CAN_BASE2 + MC_TEMP2, 3, 0x0008, 3, 10}, //25-0x0C High = Inlet Temp Low = CPU Temp
{MC_CAN_BASE2 + MC_CUMULATIVE, 7, 0x0080, 3, 22}, //26-0x0E High = DC Bus AmpHours Low = Odometer
{MC_CAN_BASE2 + MC_SLIPSPEED, 11, 0x0400, 3, 40}, //27-0x17 High =Slip Speed (Hz) Low = Reserved
{DC_CAN_BASE, 12, 0x0800, 3, 41}, //28-0x500 High = CAN1_SERIAL Number Low = "TRIb" string
{DC_CAN_BASE + DC_DRIVE, 4, 0x0800, 0, 23}, //29-0x01 High = Motor Current Setpoint Low = Motor Velocity Setpoint
{DC_CAN_BASE + DC_POWER, 9, 0x0200, 3, 24}, //30-0x02 High = Bus Current Setpoint Low = Unused
{DC_CAN_BASE + DC_RESET, 13, 0x1000, 3, 42}, //31-0x03 High = Unused Low = Unused
{DC_CAN_BASE + DC_SWITCH, 5, 0x0080, 0, 25}, //32-0x04 High = Switch position Low = Switch state change
{BP_CAN_BASE, 14, 0x2000, 3, 43}, //33-0x580 High = BPV2" string or nulls Low = CAN1_SERIAL Number
{BP_CAN_BASE + BP_VMAX, 6, 0x0010, 0, 11}, //34-0x01 High = Max Voltage Low = Cell Number
{BP_CAN_BASE + BP_VMIN, 7, 0x0020, 0, 12}, //35-0x02 High = Min Voltage Low = Cell Number
{BP_CAN_BASE + BP_TMAX, 8, 0x0040, 0, 13}, //36-0x03 High = Temp Max Low = Cell Number
{BP_CAN_BASE + BP_PCDONE, 15, 0x0200, 3, 44}, //37-0x04 High = "BPV1" string Low = CAN1_SERIAL Number
{BP_CAN_BASE + BP_ISH, 9, 0x0010, 0, 5}, //38-0x05 High = Shunt Current Low = Battery Voltage
{AC_CAN_BASE, 16, 0x8000, 3, 45}, //39-0x5C0 High = ACV1" string or nulls Low = CAN1_SERIAL Number
{AC_CAN_BASE + AC_M1, 11, 0x0800, 3, 26}, //40-0x01 High = Array Voltage Average Low = Array Current Average
{AC_CAN_BASE + AC_M2, 12, 0x1000, 3, 27}, //41-0x02 High = Array Voltage Average Low = Array Current Average
{AC_CAN_BASE + AC_M3, 13, 0x2000, 3, 28}, //42-0x03 High = Array Voltage Average Low = Array Current Average
{AC_CAN_BASE + AC_ISH, 5, 0x0020, 3, 6}, //43-0x04 High = Shunt Current Low = Battery Voltage
{AC_CAN_BASE + AC_TMAX, 7, 0x0080, 3, 14}, //44-0x05 High = Max. Temperature Low = Max. Temperature MPPT
{AC_CAN_BASE + AC_TVAL1, 17, 0x1000, 3, 46}, //45-0x03 High = Temp AC1 Low = Temp AC2
{AC_CAN_BASE + AC_TVAL2, 18, 0x2000, 3, 47}, //46-0x04 High = Temp AC3 Low = Reserved
{AC_CAN_BASE + AC_BP_CHARGE, 19, 0x4000, 3, 48}, //47-0x05 High = "ACV1" or "0000" string Low = CAN1_SERIAL Number
};
// removed
//{MC_CAN_BASE1 + MC_FAN, -, 0x----, -, --}, //xx-0x0A High = Fan speed (rpm) Low = Fan drive (%)
//{MC_CAN_BASE1 + MC_TEMP3, -, 0x----, -, --}, //xx-0x0D High = Outlet Temp Low = Capacitor Temp
//{MC_CAN_BASE2 + MC_FAN, -, 0x----, -, --}, //xx-0x0A High = Fan speed (rpm) Low = Fan drive (%)
//{MC_CAN_BASE2 + MC_TEMP3, -, 0x----, -, --}, //xx-0x0D High = Outlet Temp Low = Capacitor Temp
//static char lut_blacklist[] = {32,11,4,5,11,12,13,14,15,23,24,25,3,26,27,28};
//static char lut_blacklist[] = {44};
static char lut_blacklist[] = {49};
static char *name_lookup[NAME_LOOKUP_ROWS] = {
//name
"MC1BAS", //MC_CAN_BASE1_
"MC1LIM", //MC_CAN_BASE1 + MC_LIMITS
"MC1BUS", //MC_CAN_BASE1 + MC_BUS
"MC1VEL", //MC_CAN_BASE1 + MC_VELOCITY
"MC1PHA", //MC_CAN_BASE1 + MC_PHASE
"MC1VVC", //MC_CAN_BASE1 + MC_V_VECTOR
"MC1IVC", //MC_CAN_BASE1 + MC_I_VECTOR
"MC1BEM", //MC_CAN_BASE1 + MC_BEMF_VECTOR
"MC1RL1", //MC_CAN_BASE1 + MC_RAIL1
"MC1RL2", //MC_CAN_BASE1 + MC_RAIL2
"MC1TP1", //MC_CAN_BASE1 + MC_TEMP1
"MC1TP2", //MC_CAN_BASE1 + MC_TEMP2
"MC1CUM", //MC_CAN_BASE1 + MC_CUMULATIVE
"MC1SLS", //MC_CAN_BASE1 + MC_SLIPSPEED
"MC2BAS", //MC_CAN_BASE2
"MC2LIM", //MC_CAN_BASE2 + MC_LIMITS
"MC2BUS", //MC_CAN_BASE2 + MC_BUS
"MC2VEL", //MC_CAN_BASE2 + MC_VELOCITY
"MC2PHA", //MC_CAN_BASE2 + MC_PHASE
"MC2VVC", //MC_CAN_BASE2 + MC_V_VECTOR
"MC2IVC", //MC_CAN_BASE2 + MC_I_VECTOR
"MC2BEM", //MC_CAN_BASE2 + MC_BEMF_VECTOR
"MC2RL1", //MC_CAN_BASE2 + MC_RAIL1
"MC2RL2", //MC_CAN_BASE2 + MC_RAIL2
"MC2TP1", //MC_CAN_BASE2 + MC_TEMP1
"MC2TP2", //MC_CAN_BASE2 + MC_TEMP2
"MC2CUM", //MC_CAN_BASE2 + MC_CUMULATIVE
"MC2SLS", //MC_CAN_BASE2 + MC_SLIPSPEED
"DC_BAS", //DC_CAN_BASE
"DC_DRV", //DC_CAN_BASE + DC_DRIVE
"DC_POW", //DC_CAN_BASE + DC_POWER
"DC_RST", //DC_CAN_BASE + DC_RESET
"DC_SWC", //DC_CAN_BASE + DC_SWITCH
"BP_BAS", //BP_CAN_BASE
"BP_VMX", //BP_CAN_BASE + BP_VMAX
"BP_VMN", //BP_CAN_BASE + BP_VMIN
"BP_TMX", //BP_CAN_BASE + BP_TMAX
"BP_PCD", //BP_CAN_BASE + BP_PCDONE
"BP_ISH", //BP_CAN_BASE + BP_ISH
"AC_BAS", //AC_CAN_BASE
"AC_MP1", //AC_CAN_BASE + AC_M1
"AC_MP2", //AC_CAN_BASE + AC_M2
"AC_MP3", //AC_CAN_BASE + AC_M3
"AC_ISH", //AC_CAN_BASE + AC_ISH
"AC_TMX", //AC_CAN_BASE + AC_TMAX
"AC_TV1", //AC_CAN_BASE + AC_TVAL1
"AC_TV2", //AC_CAN_BASE + AC_TVAL2
"AC_BPC", //AC_CAN_BASE + AC_BP_CHARGE
};
// removed
// "MC1FAN", //MC_CAN_BASE1 + MC_FAN
// "MC1TP3", //MC_CAN_BASE1 + MC_TEMP3
// "MC2FAN", //MC_CAN_BASE2 + MC_FAN
//"MC2TP3", //MC_CAN_BASE2 + MC_TEMP3
#endif /* SUNSEEKER2021_H_ */

340
Telem_Debug/Debug3/can.h Normal file
View File

@@ -0,0 +1,340 @@
/*
* Tritium MCP2515 CAN interface header
* Copyright (c) 2006, Tritium Pty Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the distribution.
* - Neither the name of Tritium Pty Ltd nor the names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* Last Modified: J.Kennedy, Tritium Pty Ltd, 18 December 2006
*
* - Implements the following CAN interface functions
* - can0_init
* - can0_transmit
* - can0_receive
*
*/
#ifndef CAN_H_
#define CAN_H_
// Public Function prototypes
extern void can0spi_init( void );
extern void can0spi_transmit( unsigned char data );
extern unsigned char can0spi_exchange( unsigned char data );
extern void can1spi_init( void );
extern void can1spi_transmit( unsigned char data );
extern unsigned char can1spi_exchange( unsigned char data );
// Public function prototypes
extern void can0_init( void );
extern int can0_transmit( void );
extern void can0_receive( void );
extern void can0_flag_check( void );
extern void can1_init( void );
extern int can1_transmit( void );
extern void can1_receive( void );
extern void can1_flag_check( void );
// Public variables
// Typedefs for quickly joining multiple bytes/ints/etc into larger values
// These rely on byte ordering in CPU & memory - i.e. they're not portable across architectures
typedef union _group_64 {
float data_fp[2];
unsigned char data_u8[8];
unsigned int data_u16[4];
unsigned long data_u32[2];
} group_64;
typedef union _group_32 {
float data_fp;
unsigned char data_u8[4];
unsigned int data_u16[2];
unsigned long data_u32;
} group_32;
typedef union _group_16 {
unsigned char data_u8[2];
unsigned int data_u16;
} group_16;
typedef struct _can_variables
{
unsigned int status;
unsigned int address;
group_64 data;
} can_variables;
extern can_variables can;
// Private function prototypes
void can0_reset( void );
void can0_read( unsigned char address, unsigned char *ptr, unsigned char bytes );
void can0_read_rx( unsigned char address, unsigned char *ptr );
void can0_write( unsigned char address, unsigned char *ptr, unsigned char bytes );
void can0_write_tx( unsigned char address, unsigned char *ptr );
void can0_rts( unsigned char address );
unsigned char can0_read_status( void );
unsigned char can0_read_filter( void );
void can0_mod( unsigned char address, unsigned char mask, unsigned char data );
void can1_reset( void );
void can1_read( unsigned char address, unsigned char *ptr, unsigned char bytes );
void can1_read_rx( unsigned char address, unsigned char *ptr );
void can1_write( unsigned char address, unsigned char *ptr, unsigned char bytes );
void can1_write_tx( unsigned char address, unsigned char *ptr );
void can1_rts( unsigned char address );
unsigned char can1_read_status( void );
unsigned char can1_read_filter( void );
void can1_mod( unsigned char address, unsigned char mask, unsigned char data );
// SPI port interface macros
#define can0_select P4OUT &= ~CAN0_CSn
#define can0_deselect P4OUT |= CAN0_CSn
#define can1_select P4OUT &= ~CAN1_CSn
#define can1_deselect P4OUT |= CAN1_CSn
// Device serial number
#define DEVICE_SERIAL 0x00000001
// Status values (for message reception)
#define CAN_ERROR 0xFFFF
#define CAN_MERROR 0xFFFE
#define CAN_WAKE 0xFFFD
#define CAN_RTR 0xFFFC
#define CAN_FERROR 0xFFF0
#define CAN_OK 0x0001
// Motor controller CAN base address and packet offsets
#define MC_CAN_BASE1 0x400 // High = CAN1_SERIAL Number Low = 0x00004003 P=1s
#define MC_CAN_BASE2 0x420 // High = CAN1_SERIAL Number Low = 0x00004003 P=1s
#define MC_LIMITS 0x01 // High = CAN_Err,Active Motor Low = Error & Limit flags P=200ms
#define MC_BUS 0x02 // High = Bus Current Low = Bus Voltage P=200ms
#define MC_VELOCITY 0x03 // High = Velocity (m/s) Low = Velocity (rpm) P=200ms
#define MC_PHASE 0x04 // High = Phase C Current Low = Phase B Current P=200ms
#define MC_V_VECTOR 0x05 // High = Vd vector Low = Vq vector P=200ms
#define MC_I_VECTOR 0x06 // High = Id vector Low = Iq vector P=200ms
#define MC_BEMF_VECTOR 0x07 // High = BEMFd vector Low = BEMFq vector P=200ms
#define MC_RAIL1 0x08 // High = 15V Low = Reserved P=1s
#define MC_RAIL2 0x09 // High = 3.3V Low = 1.9V P=1s
//#define MC_FAN 0x0A // High = Reserved Low = Reserved P=
#define MC_TEMP1 0x0B // High = Heatsink Temp (case) Low = Motor Temp (internal) P=1s
#define MC_TEMP2 0x0C // High = Reserved Low = DSP Temp P=1s
//#define MC_TEMP3 0x0D // High = Outlet Temp Low = Capacitor Temp P=
#define MC_CUMULATIVE 0x0E // High = DC Bus AmpHours (A-Hr) Low = Odometer (m) P=1s
#define MC_SLIPSPEED 0x17 // High = Slip Speed (Hz ) Low = Reserved P=200ms
// Driver controls CAN base address and packet offsets
#define DC_CAN_BASE 0x500 // High = CAN1_SERIAL Number Low = "TRIb" string P=1s
#define DC_DRIVE 0x01 // High = Motor Current Setpoint Low = Motor Velocity Setpoint P=100ms
#define DC_POWER 0x02 // High = Bus Current Setpoint Low = Unused P=100ms
#define DC_RESET 0x03 // High = Unused Low = Unused P=
#define DC_SWITCH 0x04 // High = Switch position Low = Switch state change P=100ms
// Driver controls switch position packet bitfield positions (lower 16 bits)
#define SW_LIGHT_HIGH 0x0001
#define SW_LIGHT_LOW 0x0002
#define SW_LIGHT_PARK 0x0004
#define SW_REGEN 0x0008
#define SW_BRAKE_1 0x0010
#define SW_REVERSE 0x0020
#define SW_IGN_ON 0x0040
#define SW_IGN_ACC 0x0080
#define SW_HORN 0x0100
#define SW_HAZARD 0x0200
#define SW_IND_L 0x0400
#define SW_IND_R 0x0800
#define SW_ENC1_SW 0x1000
#define SW_ENC2_SW 0x2000
#define SW_DEBUG 0x4000
// Driver controls switch position packet bitfield positions (upper 16 bits)
#define SW_BLINK_L 0x0001
#define SW_BLINK_R 0x0002
//Battery Protection System base address and packet offsets
#define BP_CAN_BASE 0x580 // High = "BPV1" string or nulls Low = CAN1_SERIAL Number P=10s
#define BP_VMAX 0x01 // High = Max. Voltage Value Low = Max. Voltage Cell Num. P=10s
#define BP_VMIN 0x02 // High = Min. Voltage Value Low = Min. Voltage Cell Num. P=10s
#define BP_TMAX 0x03 // High = Max. Temperature Low = Max. Temperature Cell P=10s
#define BP_PCDONE 0x04 // High = "BPV2" or "0000" string Low = CAN1_SERIAL Number P=When Ready
#define BP_ISH 0x05 // High = Shunt Current Low = Battery Voltage P=1s
//Battery Protection System base address and packet offsets
#define AC_CAN_BASE 0x5C0 // High = "ACV1" string or nulls Low = CAN1_SERIAL Number P=10s
#define AC_M1 0x01 // High = Array Voltage Average Low = Array Current Average P=10s
#define AC_M2 0x02 // High = Array Voltage Average Low = Array Current Average P=10s
#define AC_M3 0x03 // High = Array Voltage Average Low = Array Current Average P=10s
#define AC_ISH 0x04 // High = Shunt Current Low = Battery Voltage P=1s
#define AC_TMAX 0x05 // High = Max. Temperature Low = Max. Temperature MPPT P=10s
#define AC_TVAL1 0x06 // High = Temp AC1 Low = Temp AC2 P=10s
#define AC_TVAL2 0x06 // High = Temp AC3 Low = Reserved P=10s
#define AC_BP_CHARGE 0x07 // High = "ACV1" or "0000" string Low = CAN1_SERIAL Number P=When Charge
// MCP2515 command bytes
#define MCP_RESET 0xC0
#define MCP_READ 0x03
#define MCP_READ_RX 0x90 // When used, needs to have RX_BUFFER address inserted into lower bits
#define MCP_WRITE 0x02
#define MCP_WRITE_TX 0x40 // When used, needs to have TX_BUFFER address inserted into lower bits
#define MCP_RTS 0x80 // When used, needs to have buffer to transmit inserted into lower bits
#define MCP_STATUS 0xA0
#define MCP_FILTER 0xB0
#define MCP_MODIFY 0x05
// MCP2515 register names
#define RXF0SIDH 0x00
#define RXF0SIDL 0x01
#define RXF0EID8 0x02
#define RXF0EID0 0x03
#define RXF1SIDH 0x04
#define RXF1SIDL 0x05
#define RXF1EID8 0x06
#define RXF1EID0 0x07
#define RXF2SIDH 0x08
#define RXF2SIDL 0x09
#define RXF2EID8 0x0A
#define RXF2EID0 0x0B
#define BFPCTRL 0x0C
#define TXRTSCTRL 0x0D
#define CANSTAT 0x0E
#define CANCTRL 0x0F
#define RXF3SIDH 0x10
#define RXF3SIDL 0x11
#define RXF3EID8 0x12
#define RXF3EID0 0x13
#define RXF4SIDH 0x14
#define RXF4SIDL 0x15
#define RXF4EID8 0x16
#define RXF4EID0 0x17
#define RXF5SIDH 0x18
#define RXF5SIDL 0x19
#define RXF5EID8 0x1A
#define RXF5EID0 0x1B
#define TEC 0x1C
#define REC 0x1D
#define RXM0SIDH 0x20
#define RXM0SIDL 0x21
#define RXM0EID8 0x22
#define RXM0EID0 0x23
#define RXM1SIDH 0x24
#define RXM1SIDL 0x25
#define RXM1EID8 0x26
#define RXM1EID0 0x27
#define CNF3 0x28
#define CNF2 0x29
#define CNF1 0x2A
#define CANINTE 0x2B
#define CANINTF 0x2C
#define EFLAG 0x2D
#define TXB0CTRL 0x30
#define TXB0SIDH 0x31
#define TXB0SIDL 0x32
#define TXB0EID8 0x33
#define TXB0EID0 0x34
#define TXB0DLC 0x35
#define TXB0D0 0x36
#define TXB0D1 0x37
#define TXB0D2 0x38
#define TXB0D3 0x39
#define TXB0D4 0x3A
#define TXB0D5 0x3B
#define TXB0D6 0x3C
#define TXB0D7 0x3D
#define TXB1CTRL 0x40
#define TXB1SIDH 0x41
#define TXB1SIDL 0x42
#define TXB1EID8 0x43
#define TXB1EID0 0x44
#define TXB1DLC 0x45
#define TXB1D0 0x46
#define TXB1D1 0x47
#define TXB1D2 0x48
#define TXB1D3 0x49
#define TXB1D4 0x4A
#define TXB1D5 0x4B
#define TXB1D6 0x4C
#define TXB1D7 0x4D
#define TXB2CTRL 0x50
#define TXB2SIDH 0x51
#define TXB2SIDL 0x52
#define TXB2EID8 0x53
#define TXB2EID0 0x54
#define TXB2DLC 0x55
#define TXB2D0 0x56
#define TXB2D1 0x57
#define TXB2D2 0x58
#define TXB2D3 0x59
#define TXB2D4 0x5A
#define TXB2D5 0x5B
#define TXB2D6 0x5C
#define TXB2D7 0x5D
#define RXB0CTRL 0x60
#define RXB0SIDH 0x61
#define RXB0SIDL 0x62
#define RXB0EID8 0x63
#define RXB0EID0 0x64
#define RXB0DLC 0x65
#define RXB0D0 0x66
#define RXB0D1 0x67
#define RXB0D2 0x68
#define RXB0D3 0x69
#define RXB0D4 0x6A
#define RXB0D5 0x6B
#define RXB0D6 0x6C
#define RXB0D7 0x6D
#define RXB1CTRL 0x70
#define RXB1SIDH 0x71
#define RXB1SIDL 0x72
#define RXB1EID8 0x73
#define RXB1EID0 0x74
#define RXB1DLC 0x75
#define RXB1D0 0x76
#define RXB1D1 0x77
#define RXB1D2 0x78
#define RXB1D3 0x79
#define RXB1D4 0x7A
#define RXB1D5 0x7B
#define RXB1D6 0x7C
#define RXB1D7 0x7D
// MCP2515 RX ctrl bit definitions
#define MCP_RXB0_RTR 0x08
#define MCP_RXB1_RTR 0x08
// MCP2515 Interrupt flag register bit definitions
#define MCP_IRQ_MERR 0x80
#define MCP_IRQ_WAKE 0x40
#define MCP_IRQ_ERR 0x20
#define MCP_IRQ_TXB2 0x10
#define MCP_IRQ_TXB1 0x08
#define MCP_IRQ_TXB0 0x04
#define MCP_IRQ_RXB1 0x02
#define MCP_IRQ_RXB0 0x01
#endif /*CAN_H_*/

574
Telem_Debug/Debug3/can0.c Normal file
View File

@@ -0,0 +1,574 @@
/*
* Tritium MCP2515 CAN Interface
* Copyright (c) 2006, Tritium Pty Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the distribution.
* - Neither the name of Tritium Pty Ltd nor the names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* Last Modified: J.Kennedy, Tritium Pty Ltd, 18 December 2006
*
* - Implements the following CAN interface functions
* - can0_init
* - can0_transmit
* - can0_receive
*
* Modified for tranmist errors, B. Bazuin 7/2012
*
*/
// Include files
#include "Sunseeker2021.h"
#include "can.h"
// Public variables
can_variables can;
// Private variables
unsigned char buffer[16];
/**************************************************************************************************
* PUBLIC FUNCTIONS
*************************************************************************************************/
/*
* Initialises MCP2515 CAN controller
* - Resets MCP2515 via SPI port (switches to config mode, clears errors)
* - Changes CLKOUT to /4 rate (4 MHz)
* - Sets up bit timing
* - originally 1 Mbit operation
* - modified for 250 kbps operation (buffer[2] setting below)
* - Sets up receive filters and masks
* - Rx Filter 0 = Motor controller velocity
* - Rx Filter 1 = Unused
* - Rx Filter 2 = Driver controls packets (for remote frame requests)
* - Rx Filter 3 = Unused
* - Rx Filter 4 = Unused
* - Rx Filter 5 = Unused
* - Rx Mask 0 = Exact message must match (all 11 bits)
* - Rx Mask 1 = Block address must match (upper 6 bits)
* - Enables ERROR and RX interrupts on IRQ pin
* - Switches to normal (operating) mode
*/
void can0_init( void )
{
// Set up reset and clocking
can0_reset();
can0_mod( CANCTRL, 0x03, 0x02 ); // CANCTRL register, modify lower 2 bits, CLK = /4
// Set up bit timing & interrupts
buffer[0] = 0x02; // CNF3 register: PHSEG2 = 3Tq, No wakeup, CLKOUT = CLK
buffer[1] = 0xC9; // CNF2 register: set PHSEG2 in CNF3, Triple sample, PHSEG1= 2Tq, PROP = 2Tq
// buffer[2] = 0x00; // CNF1 register: SJW = 1Tq, BRP = 0 > 1Mbps
buffer[2] = 0x03; // CNF1 register: SJW = 1Tq, BRP = 3 > 250 kbps
buffer[3] = 0xA3; // CANINTE register: enable MERRE, ERROR, RX0 & RX1 interrupts on IRQ pin
// buffer[3] = 0x23; // CANINTE register: enable ERROR, RX0 & RX1 interrupts on IRQ pin
buffer[4] = 0x00; // CANINTF register: clear all IRQ flags
buffer[5] = 0x00; // EFLG register: clear all user-changable error flags
can0_write( CNF3, &buffer[0], 6); // Write to registers
// Set up receive filtering & masks
// RXF0 - Buffer 0
buffer[ 0] = (unsigned char)((DC_CAN_BASE + DC_SWITCH) >> 3);
buffer[ 1] = (unsigned char)((DC_CAN_BASE + DC_SWITCH) << 5);
buffer[ 2] = 0x00;
buffer[ 3] = 0x00;
// RXF1 - Buffer 0
buffer[ 4] = (unsigned char)((AC_CAN_BASE + AC_BP_CHARGE) >> 3);
buffer[ 5] = (unsigned char)((AC_CAN_BASE + AC_BP_CHARGE) >> 3);
buffer[ 6] = 0x00;
buffer[ 7] = 0x00;
// RXF2 - Buffer 1
buffer[ 8] = (unsigned char)((BP_CAN_BASE) >> 3);
buffer[ 9] = (unsigned char)((BP_CAN_BASE) << 5);
buffer[10] = 0x00;
buffer[11] = 0x00;
can0_write( RXF0SIDH, &buffer[0], 12 );
// RXF3 - Buffer 1
buffer[ 0] = 0x00;
buffer[ 1] = 0x00;
buffer[ 2] = 0x00;
buffer[ 3] = 0x00;
// RXF4 - Buffer 1
buffer[ 4] = 0x00;
buffer[ 5] = 0x00;
buffer[ 6] = 0x00;
buffer[ 7] = 0x00;
// RXF5 - Buffer 1
buffer[ 8] = 0x00;
buffer[ 9] = 0x00;
buffer[10] = 0x00;
buffer[11] = 0x00;
can0_write( RXF3SIDH, &buffer[0], 12 );
// RXM0 - Buffer 0
buffer[ 0] = 0xFF; // Match entire 11 bit ID (ID is left-justified in 32-bit mask register)
buffer[ 1] = 0xE0;
buffer[ 2] = 0x00;
buffer[ 3] = 0x00;
// RXM1 - Buffer 1
buffer[ 4] = 0xFC; // Match upper 6 bits of ID - don't care about lower 5 bits (block address)
buffer[ 5] = 0x00;
buffer[ 6] = 0x00;
buffer[ 7] = 0x00;
can0_write( RXM0SIDH, &buffer[0], 8 );
buffer[0] = 0x04; //enable filters & rollover
can0_write(RXB0CTRL, &buffer[0], 1);
buffer[0] = 0x04; //enable filters
can0_write(RXB1CTRL, &buffer[0], 1);
buffer[0] = 0x0F; //enable RX0BINT and RX1BINT pins
can0_write(BFPCTRL, &buffer[0], 1);
// Switch out of config mode into normal operating mode
// can0_mod( CANCTRL, 0x08, 0x08 ); // CANCTRL register,One-SHot Mode for Transmission
// Switch out of config mode into normal operating mode
can0_mod( CANCTRL, 0xE0, 0x00 ); // CANCTRL register, modify upper 3 bits, mode = Normal
}
/*
* Receives a CAN message from the MCP2515
* - Run this routine when an IRQ is received
* - Query the controller to identify the source of the IRQ
* - If it was an ERROR IRQ, read & clear the Error Flag register, and return it
* - If it was an RX IRQ, read the message and address, and return them
* - If both, handle the error preferentially to the message
* - Clear the appropriate IRQ flag bits
*/
void can0_receive( void )
{
unsigned char flags;
// Read out the interrupt flags register
can0_read( CANINTF, &flags, 1 );
// Check for errors
if(( flags & MCP_IRQ_ERR ) != 0x00 ){
// Read error flags and counters
can0_read( EFLAG, &buffer[0], 1 );
can0_read( TEC, &buffer[1], 2 );
// Clear error flags
can0_mod( EFLAG, buffer[0], 0x00 ); // Modify (to '0') all bits that were set
// Return error code, a blank address field, and error registers in data field
can.status = CAN_ERROR;
can.address = 0x0000;
can.data.data_u8[0] = flags; // CANINTF
can.data.data_u8[1] = buffer[0]; // EFLG
can.data.data_u8[2] = buffer[1]; // TEC
can.data.data_u8[3] = buffer[2]; // REC
// Clear the IRQ flag
can0_mod( CANINTF, MCP_IRQ_ERR, 0x00 );
}
// No error, check for received messages, buffer 0
else if(( flags & MCP_IRQ_RXB0 ) != 0x00 ){
// Read in the info, address & message data
can0_read( RXB0CTRL, &buffer[0], 14 );
// Fill out return structure
// check for Remote Frame requests and indicate the status correctly
if(( buffer[0] & MCP_RXB0_RTR ) == 0x00 ){
// We've received a standard data packet
can.status = CAN_OK;
// Fill in the data
can.data.data_u8[0] = buffer[ 6];
can.data.data_u8[1] = buffer[ 7];
can.data.data_u8[2] = buffer[ 8];
can.data.data_u8[3] = buffer[ 9];
can.data.data_u8[4] = buffer[10];
can.data.data_u8[5] = buffer[11];
can.data.data_u8[6] = buffer[12];
can.data.data_u8[7] = buffer[13];
}
else{
// We've received a remote frame request
// Data is irrelevant with an RTR
can.status = CAN_RTR;
}
// Fill in the address
can.address = buffer[1];
can.address = can.address << 3;
buffer[2] = buffer[2] >> 5;
can.address = can.address | buffer[2];
// Clear the IRQ flag
can0_mod( CANINTF, MCP_IRQ_RXB0, 0x00 );
}
// No error, check for received messages, buffer 1
else if(( flags & MCP_IRQ_RXB1 ) != 0x00 ){
// Read in the info, address & message data
can0_read( RXB1CTRL, &buffer[0], 14 );
// Fill out return structure
// check for Remote Frame requests and indicate the status correctly
if(( buffer[0] & MCP_RXB1_RTR ) == 0x00 ){
// We've received a standard data packet
can.status = CAN_OK;
// Fill in the data
can.data.data_u8[0] = buffer[ 6];
can.data.data_u8[1] = buffer[ 7];
can.data.data_u8[2] = buffer[ 8];
can.data.data_u8[3] = buffer[ 9];
can.data.data_u8[4] = buffer[10];
can.data.data_u8[5] = buffer[11];
can.data.data_u8[6] = buffer[12];
can.data.data_u8[7] = buffer[13];
}
else{
// We've received a remote frame request
// Data is irrelevant with an RTR
can.status = CAN_RTR;
}
// Fill in the address
can.address = buffer[1];
can.address = can.address << 3;
buffer[2] = buffer[2] >> 5;
can.address = can.address | buffer[2];
// Clear the IRQ flag
can0_mod( CANINTF, MCP_IRQ_RXB1, 0x00 );
}
// If multiple receive then clear that error
else if(( flags & MCP_IRQ_MERR) != 0x00 ){
// Read error flags and counters
can0_read( EFLAG, &buffer[0], 1 );
can0_read( TEC, &buffer[1], 2 );
// Clear error flags
can0_mod( EFLAG, buffer[0], 0x00 ); // Modify (to '0') all bits that were set
// Return error code, a blank address field, and error registers in data field
can.status = CAN_MERROR;
can.address = 0x0000;
can.data.data_u8[0] = flags; // CANINTF
can.data.data_u8[1] = buffer[0]; // EFLG
can.data.data_u8[2] = buffer[1]; // TEC
can.data.data_u8[3] = buffer[2]; // REC
// Clear the IRQ flag
can0_mod( CANINTF, MCP_IRQ_MERR, 0x00 );
}
else{
can.status = CAN_FERROR;
can.address = 0x0001;
can.data.data_u8[0] = flags; // CANINTF
// Clear all IRQ flag
can0_mod( CANINTF, 0xFF, 0x00 );
}
//added to tritum code to account for the fact that we could have more then one intrrupt pending at a given time
//NOTE: YOU MUST CLEAR THE MAIN_MODE STATUS BEFORE ENTERING THIS FUNCTION OR YOU WILL CLEAR THE RETURN FLAG
can0_read(CANINTF, &flags, 1 );
if((( flags & MCP_IRQ_ERR ) ||( flags & MCP_IRQ_MERR )) != 0x00 )
{
can0_read(EFLAG, &buffer[0], 1 );
can0_read(TEC, &buffer[1], 2 );
// Clear error flags
can0_mod(EFLAG, buffer[0], 0x00 ); // Modify (to '0') all bits that were set
// Clear the IRQ flag
can0_mod(CANINTF, 0XA3, 0x00 );
}
}
/*
* Transmits a CAN message to the bus
* - Accepts address and data payload via can_interface structure
* - Busy waits while message is sent to CAN controller
* - Uses all available transmit buffers (3 available in CAN controller) to maximise throughput
* - Only modifies address information if it's different from what is already set up in CAN controller
* - Assumes constant 8-byte data length value
*/
int can0_transmit( void )
{
unsigned int wait_count;
static unsigned int buf_addr[3] = {0xFFFF, 0xFFFF, 0xFFFF};
extern unsigned char can_full; //used for CAN transmission status
// Fill data into buffer, it's used by any address
// Allow room at the start of the buffer for the address info if needed
buffer[ 5] = can.data.data_u8[0];
buffer[ 6] = can.data.data_u8[1];
buffer[ 7] = can.data.data_u8[2];
buffer[ 8] = can.data.data_u8[3];
buffer[ 9] = can.data.data_u8[4];
buffer[10] = can.data.data_u8[5];
buffer[11] = can.data.data_u8[6];
buffer[12] = can.data.data_u8[7];
// Check if the incoming address has already been configured in a mailbox
if( can.address == buf_addr[0] ){
// Mailbox 0 setup matches our new message
// Write to TX Buffer 0, start at data registers, and initiate transmission
can0_write_tx( 0x01, &buffer[5] );
can0_rts( 0 );
}
else if( can.address == buf_addr[1] ){
// Mailbox 1 setup matches our new message
// Write to TX Buffer 1, start at data registers, and initiate transmission
can0_write_tx( 0x03, &buffer[5] );
can0_rts( 1 );
}
else if( can.address == buf_addr[2] ){
// Mailbox 2 setup matches our new message
// Write to TX Buffer 2, start at data registers, and initiate transmission
can0_write_tx( 0x05, &buffer[5] );
can0_rts( 2 );
}
else{
// No matches in existing mailboxes
// No mailboxes already configured, so we'll need to load an address - set it up
buffer[0] = (unsigned char)(can.address >> 3);
buffer[1] = (unsigned char)(can.address << 5);
buffer[2] = 0x00; // EID8
buffer[3] = 0x00; // EID0
buffer[4] = 0x08; // DLC = 8 bytes
// Check if we've got any un-setup mailboxes free and use them
// Otherwise, find a non-busy mailbox and set it up with our new address
if( buf_addr[0] == 0xFFFF ){ // Mailbox 0 is free
// Write to TX Buffer 0, start at address registers, and initiate transmission
can0_write_tx( 0x00, &buffer[0] );
can0_rts( 0 );
buf_addr[0] = can.address;
}
else if( buf_addr[1] == 0xFFFF ){ // Mailbox 1 is free
// Write to TX Buffer 1, start at address registers, and initiate transmission
can0_write_tx( 0x02, &buffer[0] );
can0_rts( 1 );
buf_addr[1] = can.address;
}
else if( buf_addr[2] == 0xFFFF ){ // Mailbox 2 is free
// Write to TX Buffer 2, start at address registers, and initiate transmission
can0_write_tx( 0x04, &buffer[0] );
can0_rts( 2 );
buf_addr[2] = can.address;
}
else {
// No mailboxes free, wait until at least one is not busy
wait_count = 0;
while((( can0_read_status() & 0x54 ) == 0x54) && (wait_count<2))
{
delay();
wait_count++;
}
// Continue without sending ...
// if(( can0_read_status() & 0x54 ) == 0x54) {
// can0_full = TRUE;
// }
// else {
// Is it mailbox 0?
if(( can0_read_status() & 0x04 ) == 0x00) {
// Setup mailbox 0 and send the message
can0_write_tx( 0x00, &buffer[0] );
can0_rts( 0 );
buf_addr[0] = can.address;
}
// Is it mailbox 1?
else if(( can0_read_status() & 0x10 ) == 0x00) {
// Setup mailbox 1 and send the message
can0_write_tx( 0x02, &buffer[0] );
can0_rts( 1 );
buf_addr[1] = can.address;
}
// Is it mailbox 2?
else if(( can0_read_status() & 0x40 ) == 0x00) {
// Setup mailbox 2 and send the message
can0_write_tx( 0x04, &buffer[0] );
can0_rts( 2 );
buf_addr[2] = can.address;
}
// }
}
}
return(0);
}
/*
* Read CAN Status flags
*/
void can0_flag_check( void )
{
extern unsigned char can_CANINTF, can0_FLAGS[3];
can0_read( CANINTF, &can_CANINTF, 1 );
// Check for errors
can0_read( EFLAG, &can0_FLAGS[0], 1 );
can0_read( TEC, &can0_FLAGS[1], 2 );
}
/**************************************************************************************************
* PRIVATE FUNCTIONS
*************************************************************************************************/
/*
* Resets MCP2515 CAN controller via SPI port
* - SPI port must be already initialised
*/
void can0_reset( void )
{
can0_select;
can0spi_transmit( MCP_RESET );
can0_deselect;
}
/*
* Reads data bytes from the MCP2515
* - Pass in starting address, pointer to array of bytes for return data, and number of bytes to read
*/
void can0_read( unsigned char address, unsigned char *ptr, unsigned char bytes )
{
unsigned char i;
can0_select;
can0spi_transmit( MCP_READ );
can0spi_transmit( address );
for( i = 0; i < bytes; i++ ) *ptr++ = can0spi_exchange( 0x00 );
can0_deselect;
}
/*
* Reads data bytes from receive buffers
* - Pass in buffer number and start position as defined in MCP2515 datasheet
* - For starting at data, returns 8 bytes
* - For starting at address, returns 13 bytes
*/
void can0_read_rx( unsigned char address, unsigned char *ptr )
{
unsigned char i;
address &= 0x03; // Force upper bits of address to be zero (they're invalid)
address <<= 1; // Shift input bits to correct location in command byte
address |= MCP_READ_RX; // Construct command byte for MCP2515
can0_select;
can0spi_transmit( address );
if(( address & 0x02 ) == 0x00 ){ // Start at address registers
for( i = 0; i < 13; i++ ){
*ptr++ = can0spi_exchange( 0x00 );
}
}
else{ // Start at data registers
for( i = 0; i < 8; i++ ){
*ptr++ = can0spi_exchange( 0x00 );
}
}
can0_deselect;
}
/*
* Writes data bytes to the MCP2515
* - Pass in starting address, pointer to array of bytes, and number of bytes to write
*/
void can0_write( unsigned char address, unsigned char *ptr, unsigned char bytes )
{
unsigned char i;
can0_select;
can0spi_transmit( MCP_WRITE );
can0spi_transmit( address );
for( i = 0; i < (bytes-1); i++ ){
can0spi_transmit( *ptr++ );
}
can0spi_transmit( *ptr );
can0_deselect;
}
/*
* Writes data bytes to transmit buffers
* - Pass in buffer number and start position as defined in MCP2515 datasheet
* - For starting at data, accepts 8 bytes
* - For starting at address, accepts 13 bytes
*/
void can0_write_tx( unsigned char address, unsigned char *ptr )
{
unsigned char i;
address &= 0x07; // Force upper bits of address to be zero (they're invalid)
address |= MCP_WRITE_TX; // Construct command byte for MCP2515
can0_select;
can0spi_transmit( address );
if(( address & 0x01 ) == 0x00 ){ // Start at address registers
for( i = 0; i < 13; i++ ){
can0spi_transmit( *ptr++ );
}
}
else{ // Start at data registers
for( i = 0; i < 8; i++ ){
can0spi_transmit( *ptr++ );
}
}
can0_deselect;
}
/*
* Request to send selected transmit buffer
* - Pass in address of buffer to transmit: 0, 1 or 2
*/
void can0_rts( unsigned char address )
{
unsigned char i;
// Set up address bits in command byte
i = MCP_RTS;
if( address == 0 ) i |= 0x01;
else if( address == 1 ) i |= 0x02;
else if( address == 2 ) i |= 0x04;
// Write command
can0_select;
can0spi_transmit( i );
can0_deselect;
}
/*
* Reads MCP2515 status register
*/
unsigned char can0_read_status( void )
{
unsigned char status;
can0_select;
can0spi_transmit( MCP_STATUS );
status = can0spi_exchange( 0x00 );
can0_deselect;
return status;
}
/*
* Reads MCP2515 RX status (filter match) register
*/
unsigned char can0_read_filter( void )
{
unsigned char status;
can0_select;
can0spi_transmit( MCP_FILTER );
status = can0spi_exchange( 0x00 );
can0_deselect;
return status;
}
/*
* Modifies selected register in MCP2515
* - Pass in register to be modified, bit mask, and bit data
*/
void can0_mod( unsigned char address, unsigned char mask, unsigned char data )
{
can0_select;
can0spi_transmit( MCP_MODIFY );
can0spi_transmit( address );
can0spi_transmit( mask );
can0spi_transmit( data );
can0_deselect;
}

574
Telem_Debug/Debug3/can1.c Normal file
View File

@@ -0,0 +1,574 @@
/*
* Tritium MCP2515 CAN Interface
* Copyright (c) 2006, Tritium Pty Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the distribution.
* - Neither the name of Tritium Pty Ltd nor the names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* Last Modified: J.Kennedy, Tritium Pty Ltd, 18 December 2006
*
* - Implements the following CAN interface functions
* - can1_init
* - can1_transmit
* - can1_receive
*
* Modified for tranmist errors, B. Bazuin 7/2012
*
*/
// Include files
#include "Sunseeker2021.h"
#include "can.h"
// Public variables
can_variables can;
// Private variables
unsigned char buffer[16];
/**************************************************************************************************
* PUBLIC FUNCTIONS
*************************************************************************************************/
/*
* Initialises MCP2515 CAN controller
* - Resets MCP2515 via SPI port (switches to config mode, clears errors)
* - Changes CLKOUT to /4 rate (4 MHz)
* - Sets up bit timing
* - originally 1 Mbit operation
* - modified for 250 kbps operation (buffer[2] setting below)
* - Sets up receive filters and masks
* - Rx Filter 0 = Motor controller velocity
* - Rx Filter 1 = Unused
* - Rx Filter 2 = Driver controls packets (for remote frame requests)
* - Rx Filter 3 = Unused
* - Rx Filter 4 = Unused
* - Rx Filter 5 = Unused
* - Rx Mask 0 = Exact message must match (all 11 bits)
* - Rx Mask 1 = Block address must match (upper 6 bits)
* - Enables ERROR and RX interrupts on IRQ pin
* - Switches to normal (operating) mode
*/
void can1_init( void )
{
// Set up reset and clocking
can1_reset();
can1_mod( CANCTRL, 0x03, 0x02 ); // CANCTRL register, modify lower 2 bits, CLK = /4
// Set up bit timing & interrupts
buffer[0] = 0x02; // CNF3 register: PHSEG2 = 3Tq, No wakeup, CLKOUT = CLK
buffer[1] = 0xC9; // CNF2 register: set PHSEG2 in CNF3, Triple sample, PHSEG1= 2Tq, PROP = 2Tq
// buffer[2] = 0x00; // CNF1 register: SJW = 1Tq, BRP = 0 > 1Mbps
buffer[2] = 0x03; // CNF1 register: SJW = 1Tq, BRP = 3 > 250 kbps
buffer[3] = 0xA3; // CANINTE register: enable MERRE, ERROR, RX0 & RX1 interrupts on IRQ pin
// buffer[3] = 0x23; // CANINTE register: enable ERROR, RX0 & RX1 interrupts on IRQ pin
buffer[4] = 0x00; // CANINTF register: clear all IRQ flags
buffer[5] = 0x00; // EFLG register: clear all user-changable error flags
can1_write( CNF3, &buffer[0], 6); // Write to registers
// Set up receive filtering & masks
// RXF0 - Buffer 0
buffer[ 0] = (unsigned char)((DC_CAN_BASE + DC_SWITCH) >> 3);
buffer[ 1] = (unsigned char)((DC_CAN_BASE + DC_SWITCH) << 5);
buffer[ 2] = 0x00;
buffer[ 3] = 0x00;
// RXF1 - Buffer 0
buffer[ 4] = (unsigned char)((AC_CAN_BASE + AC_BP_CHARGE) >> 3);
buffer[ 5] = (unsigned char)((AC_CAN_BASE + AC_BP_CHARGE) >> 3);
buffer[ 6] = 0x00;
buffer[ 7] = 0x00;
// RXF2 - Buffer 1
buffer[ 8] = (unsigned char)((BP_CAN_BASE) >> 3);
buffer[ 9] = (unsigned char)((BP_CAN_BASE) << 5);
buffer[10] = 0x00;
buffer[11] = 0x00;
can1_write( RXF0SIDH, &buffer[0], 12 );
// RXF3 - Buffer 1
buffer[ 0] = 0x00;
buffer[ 1] = 0x00;
buffer[ 2] = 0x00;
buffer[ 3] = 0x00;
// RXF4 - Buffer 1
buffer[ 4] = 0x00;
buffer[ 5] = 0x00;
buffer[ 6] = 0x00;
buffer[ 7] = 0x00;
// RXF5 - Buffer 1
buffer[ 8] = 0x00;
buffer[ 9] = 0x00;
buffer[10] = 0x00;
buffer[11] = 0x00;
can1_write( RXF3SIDH, &buffer[0], 12 );
// RXM0 - Buffer 0
buffer[ 0] = 0xFF; // Match entire 11 bit ID (ID is left-justified in 32-bit mask register)
buffer[ 1] = 0xE0;
buffer[ 2] = 0x00;
buffer[ 3] = 0x00;
// RXM1 - Buffer 1
buffer[ 4] = 0xFC; // Match upper 6 bits of ID - don't care about lower 5 bits (block address)
buffer[ 5] = 0x00;
buffer[ 6] = 0x00;
buffer[ 7] = 0x00;
can1_write( RXM0SIDH, &buffer[0], 8 );
buffer[0] = 0x04; //enable filters & rollover
can1_write(RXB0CTRL, &buffer[0], 1);
buffer[0] = 0x04; //enable filters
can1_write(RXB1CTRL, &buffer[0], 1);
buffer[0] = 0x0F; //enable RX0BINT and RX1BINT pins
can1_write(BFPCTRL, &buffer[0], 1);
// Switch out of config mode into normal operating mode
// can1_mod( CANCTRL, 0x08, 0x08 ); // CANCTRL register,One-SHot Mode for Transmission
// Switch out of config mode into normal operating mode
can1_mod( CANCTRL, 0xE0, 0x00 ); // CANCTRL register, modify upper 3 bits, mode = Normal
}
/*
* Receives a CAN message from the MCP2515
* - Run this routine when an IRQ is received
* - Query the controller to identify the source of the IRQ
* - If it was an ERROR IRQ, read & clear the Error Flag register, and return it
* - If it was an RX IRQ, read the message and address, and return them
* - If both, handle the error preferentially to the message
* - Clear the appropriate IRQ flag bits
*/
void can1_receive( void )
{
unsigned char flags;
// Read out the interrupt flags register
can1_read( CANINTF, &flags, 1 );
// Check for errors
if(( flags & MCP_IRQ_ERR ) != 0x00 ){
// Read error flags and counters
can1_read( EFLAG, &buffer[0], 1 );
can1_read( TEC, &buffer[1], 2 );
// Clear error flags
can1_mod( EFLAG, buffer[0], 0x00 ); // Modify (to '0') all bits that were set
// Return error code, a blank address field, and error registers in data field
can.status = CAN_ERROR;
can.address = 0x0000;
can.data.data_u8[0] = flags; // CANINTF
can.data.data_u8[1] = buffer[0]; // EFLG
can.data.data_u8[2] = buffer[1]; // TEC
can.data.data_u8[3] = buffer[2]; // REC
// Clear the IRQ flag
can1_mod( CANINTF, MCP_IRQ_ERR, 0x00 );
}
// No error, check for received messages, buffer 0
else if(( flags & MCP_IRQ_RXB0 ) != 0x00 ){
// Read in the info, address & message data
can1_read( RXB0CTRL, &buffer[0], 14 );
// Fill out return structure
// check for Remote Frame requests and indicate the status correctly
if(( buffer[0] & MCP_RXB0_RTR ) == 0x00 ){
// We've received a standard data packet
can.status = CAN_OK;
// Fill in the data
can.data.data_u8[0] = buffer[ 6];
can.data.data_u8[1] = buffer[ 7];
can.data.data_u8[2] = buffer[ 8];
can.data.data_u8[3] = buffer[ 9];
can.data.data_u8[4] = buffer[10];
can.data.data_u8[5] = buffer[11];
can.data.data_u8[6] = buffer[12];
can.data.data_u8[7] = buffer[13];
}
else{
// We've received a remote frame request
// Data is irrelevant with an RTR
can.status = CAN_RTR;
}
// Fill in the address
can.address = buffer[1];
can.address = can.address << 3;
buffer[2] = buffer[2] >> 5;
can.address = can.address | buffer[2];
// Clear the IRQ flag
can1_mod( CANINTF, MCP_IRQ_RXB0, 0x00 );
}
// No error, check for received messages, buffer 1
else if(( flags & MCP_IRQ_RXB1 ) != 0x00 ){
// Read in the info, address & message data
can1_read( RXB1CTRL, &buffer[0], 14 );
// Fill out return structure
// check for Remote Frame requests and indicate the status correctly
if(( buffer[0] & MCP_RXB1_RTR ) == 0x00 ){
// We've received a standard data packet
can.status = CAN_OK;
// Fill in the data
can.data.data_u8[0] = buffer[ 6];
can.data.data_u8[1] = buffer[ 7];
can.data.data_u8[2] = buffer[ 8];
can.data.data_u8[3] = buffer[ 9];
can.data.data_u8[4] = buffer[10];
can.data.data_u8[5] = buffer[11];
can.data.data_u8[6] = buffer[12];
can.data.data_u8[7] = buffer[13];
}
else{
// We've received a remote frame request
// Data is irrelevant with an RTR
can.status = CAN_RTR;
}
// Fill in the address
can.address = buffer[1];
can.address = can.address << 3;
buffer[2] = buffer[2] >> 5;
can.address = can.address | buffer[2];
// Clear the IRQ flag
can1_mod( CANINTF, MCP_IRQ_RXB1, 0x00 );
}
// If multiple receive then clear that error
else if(( flags & MCP_IRQ_MERR) != 0x00 ){
// Read error flags and counters
can1_read( EFLAG, &buffer[0], 1 );
can1_read( TEC, &buffer[1], 2 );
// Clear error flags
can1_mod( EFLAG, buffer[0], 0x00 ); // Modify (to '0') all bits that were set
// Return error code, a blank address field, and error registers in data field
can.status = CAN_MERROR;
can.address = 0x0000;
can.data.data_u8[0] = flags; // CANINTF
can.data.data_u8[1] = buffer[0]; // EFLG
can.data.data_u8[2] = buffer[1]; // TEC
can.data.data_u8[3] = buffer[2]; // REC
// Clear the IRQ flag
can1_mod( CANINTF, MCP_IRQ_MERR, 0x00 );
}
else{
can.status = CAN_FERROR;
can.address = 0x0001;
can.data.data_u8[0] = flags; // CANINTF
// Clear all IRQ flag
can1_mod( CANINTF, 0xFF, 0x00 );
}
//added to tritum code to account for the fact that we could have more then one intrrupt pending at a given time
//NOTE: YOU MUST CLEAR THE MAIN_MODE STATUS BEFORE ENTERING THIS FUNCTION OR YOU WILL CLEAR THE RETURN FLAG
can1_read(CANINTF, &flags, 1 );
if((( flags & MCP_IRQ_ERR ) ||( flags & MCP_IRQ_MERR )) != 0x00 )
{
can1_read(EFLAG, &buffer[0], 1 );
can1_read(TEC, &buffer[1], 2 );
// Clear error flags
can1_mod(EFLAG, buffer[0], 0x00 ); // Modify (to '0') all bits that were set
// Clear the IRQ flag
can1_mod(CANINTF, 0XA3, 0x00 );
}
}
/*
* Transmits a CAN message to the bus
* - Accepts address and data payload via can_interface structure
* - Busy waits while message is sent to CAN controller
* - Uses all available transmit buffers (3 available in CAN controller) to maximise throughput
* - Only modifies address information if it's different from what is already set up in CAN controller
* - Assumes constant 8-byte data length value
*/
int can1_transmit( void )
{
unsigned int wait_count;
static unsigned int buf_addr[3] = {0xFFFF, 0xFFFF, 0xFFFF};
extern unsigned char can_full; //used for CAN transmission status
// Fill data into buffer, it's used by any address
// Allow room at the start of the buffer for the address info if needed
buffer[ 5] = can.data.data_u8[0];
buffer[ 6] = can.data.data_u8[1];
buffer[ 7] = can.data.data_u8[2];
buffer[ 8] = can.data.data_u8[3];
buffer[ 9] = can.data.data_u8[4];
buffer[10] = can.data.data_u8[5];
buffer[11] = can.data.data_u8[6];
buffer[12] = can.data.data_u8[7];
// Check if the incoming address has already been configured in a mailbox
if( can.address == buf_addr[0] ){
// Mailbox 0 setup matches our new message
// Write to TX Buffer 0, start at data registers, and initiate transmission
can1_write_tx( 0x01, &buffer[5] );
can1_rts( 0 );
}
else if( can.address == buf_addr[1] ){
// Mailbox 1 setup matches our new message
// Write to TX Buffer 1, start at data registers, and initiate transmission
can1_write_tx( 0x03, &buffer[5] );
can1_rts( 1 );
}
else if( can.address == buf_addr[2] ){
// Mailbox 2 setup matches our new message
// Write to TX Buffer 2, start at data registers, and initiate transmission
can1_write_tx( 0x05, &buffer[5] );
can1_rts( 2 );
}
else{
// No matches in existing mailboxes
// No mailboxes already configured, so we'll need to load an address - set it up
buffer[0] = (unsigned char)(can.address >> 3);
buffer[1] = (unsigned char)(can.address << 5);
buffer[2] = 0x00; // EID8
buffer[3] = 0x00; // EID0
buffer[4] = 0x08; // DLC = 8 bytes
// Check if we've got any un-setup mailboxes free and use them
// Otherwise, find a non-busy mailbox and set it up with our new address
if( buf_addr[0] == 0xFFFF ){ // Mailbox 0 is free
// Write to TX Buffer 0, start at address registers, and initiate transmission
can1_write_tx( 0x00, &buffer[0] );
can1_rts( 0 );
buf_addr[0] = can.address;
}
else if( buf_addr[1] == 0xFFFF ){ // Mailbox 1 is free
// Write to TX Buffer 1, start at address registers, and initiate transmission
can1_write_tx( 0x02, &buffer[0] );
can1_rts( 1 );
buf_addr[1] = can.address;
}
else if( buf_addr[2] == 0xFFFF ){ // Mailbox 2 is free
// Write to TX Buffer 2, start at address registers, and initiate transmission
can1_write_tx( 0x04, &buffer[0] );
can1_rts( 2 );
buf_addr[2] = can.address;
}
else {
// No mailboxes free, wait until at least one is not busy
wait_count = 0;
while((( can1_read_status() & 0x54 ) == 0x54) && (wait_count<2))
{
delay();
wait_count++;
}
// Continue without sending ...
// if(( can1_read_status() & 0x54 ) == 0x54) {
// can1_full = TRUE;
// }
// else {
// Is it mailbox 0?
if(( can1_read_status() & 0x04 ) == 0x00) {
// Setup mailbox 0 and send the message
can1_write_tx( 0x00, &buffer[0] );
can1_rts( 0 );
buf_addr[0] = can.address;
}
// Is it mailbox 1?
else if(( can1_read_status() & 0x10 ) == 0x00) {
// Setup mailbox 1 and send the message
can1_write_tx( 0x02, &buffer[0] );
can1_rts( 1 );
buf_addr[1] = can.address;
}
// Is it mailbox 2?
else if(( can1_read_status() & 0x40 ) == 0x00) {
// Setup mailbox 2 and send the message
can1_write_tx( 0x04, &buffer[0] );
can1_rts( 2 );
buf_addr[2] = can.address;
}
// }
}
}
return(0);
}
/*
* Read CAN Status flags
*/
void can1_flag_check( void )
{
extern unsigned char can_CANINTF, can1_FLAGS[3];
can1_read( CANINTF, &can_CANINTF, 1 );
// Check for errors
can1_read( EFLAG, &can1_FLAGS[0], 1 );
can1_read( TEC, &can1_FLAGS[1], 2 );
}
/**************************************************************************************************
* PRIVATE FUNCTIONS
*************************************************************************************************/
/*
* Resets MCP2515 CAN controller via SPI port
* - SPI port must be already initialised
*/
void can1_reset( void )
{
can1_select;
can1spi_transmit( MCP_RESET );
can1_deselect;
}
/*
* Reads data bytes from the MCP2515
* - Pass in starting address, pointer to array of bytes for return data, and number of bytes to read
*/
void can1_read( unsigned char address, unsigned char *ptr, unsigned char bytes )
{
unsigned char i;
can1_select;
can1spi_transmit( MCP_READ );
can1spi_transmit( address );
for( i = 0; i < bytes; i++ ) *ptr++ = can1spi_exchange( 0x00 );
can1_deselect;
}
/*
* Reads data bytes from receive buffers
* - Pass in buffer number and start position as defined in MCP2515 datasheet
* - For starting at data, returns 8 bytes
* - For starting at address, returns 13 bytes
*/
void can1_read_rx( unsigned char address, unsigned char *ptr )
{
unsigned char i;
address &= 0x03; // Force upper bits of address to be zero (they're invalid)
address <<= 1; // Shift input bits to correct location in command byte
address |= MCP_READ_RX; // Construct command byte for MCP2515
can1_select;
can1spi_transmit( address );
if(( address & 0x02 ) == 0x00 ){ // Start at address registers
for( i = 0; i < 13; i++ ){
*ptr++ = can1spi_exchange( 0x00 );
}
}
else{ // Start at data registers
for( i = 0; i < 8; i++ ){
*ptr++ = can1spi_exchange( 0x00 );
}
}
can1_deselect;
}
/*
* Writes data bytes to the MCP2515
* - Pass in starting address, pointer to array of bytes, and number of bytes to write
*/
void can1_write( unsigned char address, unsigned char *ptr, unsigned char bytes )
{
unsigned char i;
can1_select;
can1spi_transmit( MCP_WRITE );
can1spi_transmit( address );
for( i = 0; i < (bytes-1); i++ ){
can1spi_transmit( *ptr++ );
}
can1spi_transmit( *ptr );
can1_deselect;
}
/*
* Writes data bytes to transmit buffers
* - Pass in buffer number and start position as defined in MCP2515 datasheet
* - For starting at data, accepts 8 bytes
* - For starting at address, accepts 13 bytes
*/
void can1_write_tx( unsigned char address, unsigned char *ptr )
{
unsigned char i;
address &= 0x07; // Force upper bits of address to be zero (they're invalid)
address |= MCP_WRITE_TX; // Construct command byte for MCP2515
can1_select;
can1spi_transmit( address );
if(( address & 0x01 ) == 0x00 ){ // Start at address registers
for( i = 0; i < 13; i++ ){
can1spi_transmit( *ptr++ );
}
}
else{ // Start at data registers
for( i = 0; i < 8; i++ ){
can1spi_transmit( *ptr++ );
}
}
can1_deselect;
}
/*
* Request to send selected transmit buffer
* - Pass in address of buffer to transmit: 0, 1 or 2
*/
void can1_rts( unsigned char address )
{
unsigned char i;
// Set up address bits in command byte
i = MCP_RTS;
if( address == 0 ) i |= 0x01;
else if( address == 1 ) i |= 0x02;
else if( address == 2 ) i |= 0x04;
// Write command
can1_select;
can1spi_transmit( i );
can1_deselect;
}
/*
* Reads MCP2515 status register
*/
unsigned char can1_read_status( void )
{
unsigned char status;
can1_select;
can1spi_transmit( MCP_STATUS );
status = can1spi_exchange( 0x00 );
can1_deselect;
return status;
}
/*
* Reads MCP2515 RX status (filter match) register
*/
unsigned char can1_read_filter( void )
{
unsigned char status;
can1_select;
can1spi_transmit( MCP_FILTER );
status = can1spi_exchange( 0x00 );
can1_deselect;
return status;
}
/*
* Modifies selected register in MCP2515
* - Pass in register to be modified, bit mask, and bit data
*/
void can1_mod( unsigned char address, unsigned char mask, unsigned char data )
{
can1_select;
can1spi_transmit( MCP_MODIFY );
can1spi_transmit( address );
can1spi_transmit( mask );
can1spi_transmit( data );
can1_deselect;
}

View File

@@ -0,0 +1,96 @@
/*
* - Implements the following UCA0 and UCA1 interface functions
* - init
* - transmit
* - exchange
*
*/
// Include files
#include<msp430x54xa.h>
/*
* Initialise UCA0 port can0
*/
// Public Function prototypes
void can0spi_init(void)
{
UCA0CTL1 |= UCSWRST; //software reset
UCA0CTL0 |= UCCKPH | UCMSB | UCMST | UCMODE_0 | UCSYNC; //data-capt then change; MSB first; Master; 3-pin SPI; sync
UCA0CTL1 |= UCSSEL_2; //set SMCLK
UCA0BR0 = 0x01; //set clk prescaler to 1
UCA0BR1 = 0x00;
UCA0STAT = 0x00; //not in loopback mode
UCA0CTL1 &= ~UCSWRST; //SPI enable turn off software reset
// UCA0IE |= UCTXIE | UCRXIE; // Interrupt Enable
}
/*
* Transmits data on UCA0 connection
* - Busy waits until entire shift is complete
*/
void can0spi_transmit(unsigned char data)
{
unsigned char forceread;
UCA0TXBUF = data;
while((UCA0IFG & UCRXIFG) == 0x00); // Wait for Rx completion (implies Tx is also complete)
forceread = UCA0RXBUF;
}
/*
* Exchanges data on UCA0 connection
* - Busy waits until entire shift is complete
* - This function is safe to use to control hardware lines that rely on shifting being finalised
*/
unsigned char can0spi_exchange(unsigned char data)
{
UCA0TXBUF = data;
while((UCA0IFG & UCRXIFG) == 0x00); // Wait for Rx completion (implies Tx is also complete)
return(UCA0RXBUF);
}
// Can1 SPI
/*
* Initialise UCA1 port can1
*/
// Public Function prototypes
void can1spi_init(void)
{
UCA1CTL1 |= UCSWRST; //software reset
UCA1CTL0 |= UCCKPH | UCMSB | UCMST | UCMODE_0 | UCSYNC; //data-capt then change; MSB first; Master; 3-pin SPI; sync
UCA1CTL1 |= UCSSEL_2; //set SMCLK
UCA1BR0 = 0x01; //set clk prescaler to 1
UCA1BR1 = 0x00;
UCA1STAT = 0x00; //not in loopback mode
UCA1CTL1 &= ~UCSWRST; //SPI enable turn off software reset
// UCA1IE |= UCTXIE | UCRXIE; // Interrupt Enable
}
/*
* Transmits data on UCA1 connection
* - Busy waits until entire shift is complete
*/
void can1spi_transmit(unsigned char data)
{
unsigned char forceread;
UCA1TXBUF = data;
while((UCA1IFG & UCRXIFG) == 0x00); // Wait for Rx completion (implies Tx is also complete)
forceread = UCA1RXBUF;
}
/*
* Exchanges data on UCA1 connection
* - Busy waits until entire shift is complete
* - This function is safe to use to control hardware lines that rely on shifting being finalised
*/
unsigned char can1spi_exchange(unsigned char data)
{
UCA1TXBUF = data;
while((UCA1IFG & UCRXIFG) == 0x00); // Wait for Rx completion (implies Tx is also complete)
return(UCA1RXBUF);
}

View File

@@ -0,0 +1,130 @@
/*
* Clock Initialization Code MSP430F5438A
* Initialize Clock Source XT1 @ 32768 Hz
* Initialize Clock Source XT2 @ 20MHz
*
* Sunseeker Telemetry 2021
*
* Last modified October 2015 by Scott Haver
* Last modified May 2021 by B. Bazuin
*
* Main CLK : MCLK = XT2 = 20 MHz
* Sub-Main CLK : SMCLK = XT2/2 = 10 MHz
* Aux CLK : ACLK = XT1 = 32.768 kHz
*
*/
#include <msp430x54xa.h>
void Port_Init(void);
void Clock_XT1_Init(void);
void Clock_XT2_Init(void);
void SetVCoreUp(unsigned int level);
void clock_init(void)
{
WDTCTL = WDTPW + WDTHOLD; //Stop watchdog timer
Port_Init(); //ensure clock pins are configured
SetVCoreUp(1); //Configure MCU core voltage for HF clock
SetVCoreUp(2); //
SetVCoreUp(3); //
Clock_XT1_Init(); //LF clock source init
Clock_XT2_Init(); //HF clock source init
}
void Port_Init(void)
{
//Clock Source TEST PINS ACLK/MCLK/SMCLK
P11DIR |= (1 << 0) | (1 << 1) | (1 << 2); //set P11.0:P11.2 as output ACLK/MCLK/SMCLK
P11SEL |= (1 << 0) | (1 << 1) | (1 << 2); //set P11.0:P11.2 as ACLK/MCLK/SMCLK function
//XT1 ALTERNATE PIN CONFIG
P7SEL |= (1 << 0) | (1 << 1); //set P7.0 & P7.1 as XT1IN/XT1OUT periph
P7DIR |= (1 << 0) | (1 << 1);
//XT2 ALTERNATE PIN CONFIG
P5SEL |= (1 << 2) | (1 << 3); //set P5.2 & P5.3 as XT2IN/XT2OUT periph
P5DIR |= (1 << 2) | (1 << 3);
}
void Clock_XT1_Init(void)
{
char i;
//XT1 CLOCK CONFIG
UCSCTL6 &= ~(XT1OFF); //Enable XT1
UCSCTL6 &= ~(XT1DRIVE1 | XT1DRIVE0); //lowest drive current LF 32KHz oscillator
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);//Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; //Clear fault flags
for(i=255;i>0;i--); //Delay for Osc to stabilize
}
while ((SFRIFG1 & OFIFG) != 0); //Test oscillator fault flag
UCSCTL4 |= SELA__XT1CLK; //Clock Source ACLK = XT1 = 32kHz
UCSCTL5 |= DIVA_0; //Divide ACLK/1 = 32kHz
}
void Clock_XT2_Init(void)
{
char i;
//XT2 CLOCK CONFIG
UCSCTL6 &= ~(XT2OFF); //Enable XT2
UCSCTL6 |= XT2DRIVE_3; //Drive current 16-24 MHz Clock
UCSCTL6 &= ~XT2BYPASS; //XT2 Sourced Externally from pin - 20MHz
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);//Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; //Clear fault flags
for(i=255;i>0;i--); //Delay for Osc to stabilize
}
while ((SFRIFG1 & OFIFG) != 0); //Test oscillator fault flag
UCSCTL4 |= (SELS__XT2CLK | SELM__XT2CLK);//Clock Source SMCLK=MCLK = XT2 = 20MHz
UCSCTL5 |= DIVM_0 | DIVS_1; //MCLK:XT2/1 = 20MHz SMCLK:XT2/2 = 10MHz
}
/*************************************************************
/ Name: SetVCoreUp
/ IN: int Level
/ OUT: void
/ DESC: This function is used to set the voltage of the VCORE to
/ The level specified in input
/ Reference: Users Guide page 74
************************************************************/
void SetVCoreUp (unsigned int level)
{
// Open PMM registers for write access
PMMCTL0_H = 0xA5;
// Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
// Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDLYIFG) == 0);
// Clear already set flags
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
// Set VCore to new level
PMMCTL0_L = PMMCOREV0 * level;
// Wait till new level reached
if ((PMMIFG & SVMLIFG))
while ((PMMIFG & SVMLVLRIFG) == 0);
// Set SVS/SVM low side to new level
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDLYIFG) == 0);
// Lock PMM registers for write access
PMMCTL0_H = 0x00;
}

View File

@@ -0,0 +1,110 @@
/*
* Battery Protection Software for BPS PCB Development
* Originally Written for BPS_V1 2012
*
* Modified for BPS_V2 2015 by Scott Haver
* WMU Sunseeker 2015
*
* I/O Initialization
*/
// Include files
#include "Sunseeker2021.h"
/*
* Initialise I/O port directions and states
* Drive unused pins as outputs to avoid floating inputs
*
*/
void io_init( void )
{
/******************************PORT 1**************************************/
P1OUT = 0x00; // Pull pins low
P1DIR = P1_UNUSED; //set to output
P1DIR &= ~(RTC_MFP | IMU_INTn); //set to input
/*Interrupts Enable*/
// P1SEL = RTC_MFP | IMU_INTn;
// P1IE = RTC_MFP | IMU_INTn; // Enable Interrupts
P1IES = IMU_INTn; //high to low
P1IFG = 0x00; //Clears all interrupt flags on Port 1
delay();
/******************************PORT 2**************************************/
P2OUT = 0x00; // Pull pins low
P2DIR = P2_UNUSED; //set to output
/*Interrupts Enable */
// P2SEL = CAN0_INTn | CAN1_INTn | GPS_INTn; //Interrupts Select
// P2IES = CAN0_INTn | CAN1_INTn | GPS_INTn;
// P2IE = CAN0_INTn | CAN1_INTn | GPS_INTn; // Enable Interrupts
// P2SEL |= CAN0_RXB0n | CAN0_RXB1n | CAN1_RXB0n | CAN1_RXB1n; //Interrupts Select
// P2IES |= CAN0_RXB0n | CAN0_RXB1n | CAN1_RXB0n | CAN1_RXB1n;
// P2IE |= CAN0_RXB0n | CAN0_RXB1n | CAN1_RXB0n | CAN1_RXB1n; // Enable Interrupts
P2IFG = 0x00; //Clears all interrupt flags on Port 2
delay();
/******************************PORT 3**************************************/
P3OUT = 0x00; // Pull pins low
P3DIR = CAN0_SCLK | CAN0_MOSI | SDC_SCLK | SDC_SIMO | CAN1_CLK | P3_UNUSED;
P3OUT |= CAN0_SCLK | CAN0_MOSI | SDC_SCLK | SDC_SIMO | CAN1_CLK;
P3DIR &= ~(CAN0_MISO | SDC_SOMI);
P3SEL = CAN0_SCLK | CAN0_MOSI | CAN0_MISO | SDC_SCLK | SDC_SIMO | SDC_SOMI | CAN1_CLK | IMU_SDA;
/******************************PORT 4**************************************/
P4OUT = 0x00; // Pull pins low
P4DIR = CAN0_RSTn | CAN0_CSn | CAN1_RSTn | CAN1_CSn | P4_UNUSED;
P4OUT = CAN0_RSTn | CAN0_CSn | CAN1_RSTn | CAN1_CSn;
delay();
P4OUT &= ~(CAN0_RSTn | CAN1_RSTn) ;
delay();
delay();
P4OUT |= (CAN0_RSTn | CAN1_RSTn) ;
/******************************PORT 5**************************************/
P5OUT = 0x00; // Pull pins low
P5DIR = XT2OUT | CAN1_MOSI | P5_UNUSED;
P5OUT = CAN1_MOSI;
P5DIR &= ~(CAN1_MISO);
P5SEL = XT2IN | XT2OUT | IMU_SCL | CAN1_MOSI | CAN1_MISO;
/******************************PORT 6**************************************/
P6OUT = 0x00; // Pull pins low
P6DIR = P6_UNUSED;
P6SEL = 0x00;
/******************************PORT 7**************************************/
P7OUT = 0x00; // Pull pins low
P7DIR = XT1OUT | P7_UNUSED;
P7SEL = XT1IN | XT1OUT;
/******************************PORT 8**************************************/
P8OUT = 0x00; // Pull pins low
P8DIR = LEDG | LEDR | LEDY0 | LEDY1 | P8_UNUSED;
P8DIR &= ~(Button0);
P8SEL = 0x00;
/******************************PORT 9**************************************/
P9OUT = 0x00; // Pull pins low
P9DIR = USB_TX | SDC_CSn | GPS_CSn | P9_UNUSED;
P9OUT = SDC_CSn | GPS_CSn;
P9SEL = RTC_SDA | RTC_SCL | USB_TX | USB_RX;
/******************************PORT 10**************************************/
P10OUT = 0x00; // Pull pins low
P10DIR = BT_CSn | BT_MOSI | BT_SCLK | UART_TX | BT_EN |P10_UNUSED;
P10OUT = BT_CSn | BT_MOSI | BT_SCLK;
P10SEL = BT_MOSI | BT_MISO | BT_SCLK | UART_TX | UART_RX;
/******************************PORT 11**************************************/
P11OUT = 0x00; // Pull pins low
P11DIR = ACLK_TEST | MCLK_TEST | SMCLK_TEST;
P11OUT = ACLK_TEST | MCLK_TEST | SMCLK_TEST;
P11SEL = ACLK_TEST | MCLK_TEST | SMCLK_TEST;
/******************************PORT J**************************************/
PJOUT = 0x00;
PJDIR = 0x0F; //set to output as per user's guide
}

View File

@@ -0,0 +1,250 @@
/* ============================================================================ */
/* Copyright (c) 2016, Texas Instruments Incorporated */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or without */
/* modification, are permitted provided that the following conditions */
/* are met: */
/* */
/* * Redistributions of source code must retain the above copyright */
/* notice, this list of conditions and the following disclaimer. */
/* */
/* * Redistributions in binary form must reproduce the above copyright */
/* notice, this list of conditions and the following disclaimer in the */
/* documentation and/or other materials provided with the distribution. */
/* */
/* * Neither the name of Texas Instruments Incorporated nor the names of */
/* its contributors may be used to endorse or promote products derived */
/* from this software without specific prior written permission. */
/* */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" */
/* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, */
/* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */
/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */
/* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, */
/* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; */
/* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, */
/* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */
/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
/* ============================================================================ */
/******************************************************************************/
/* 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 */
/* */
/*----------------------------------------------------------------------------*/
/* Version: 1.192 */
/*----------------------------------------------------------------------------*/
/****************************************************************************/
/* 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 */
.data : {} > RAM /* Global & static vars */
.TI.noinit : {} > RAM /* For #pragma noinit */
.sysmem : {} > RAM /* Dynamic memory allocation area */
.stack : {} > RAM (HIGH) /* Software system stack */
#ifndef __LARGE_DATA_MODEL__
.text : {} > FLASH /* Code */
#else
.text : {} >> FLASH2 | FLASH /* Code */
#endif
.text:_isr : {} > FLASH /* ISR Code space */
.cinit : {} > FLASH /* Initialization tables */
#ifndef __LARGE_DATA_MODEL__
.const : {} > FLASH /* Constant data */
#else
.const : {} >> FLASH | FLASH2 /* Constant data */
#endif
.cio : {} > RAM /* C I/O Buffer */
.pinit : {} > FLASH /* C++ Constructor tables */
.binit : {} > FLASH /* Boot-time Initialization tables */
.init_array : {} > FLASH /* C++ Constructor tables */
.mspabi.exidx : {} > FLASH /* C++ Constructor tables */
.mspabi.extab : {} > FLASH /* C++ Constructor tables */
#ifdef __TI_COMPILER_VERSION__
#if __TI_COMPILER_VERSION__ >= 15009000
#ifndef __LARGE_DATA_MODEL__
.TI.ramfunc : {} load=FLASH, run=RAM, table(BINIT)
#else
.TI.ramfunc : {} load=FLASH | FLASH2, run=RAM, table(BINIT)
#endif
#endif
#endif
.infoA : {} > INFOA /* MSP430 INFO FLASH Memory segments */
.infoB : {} > INFOB
.infoC : {} > INFOC
.infoD : {} > INFOD
/* MSP430 Interrupt vectors */
.int00 : {} > INT00
.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
RTC : { * ( .int41 ) } > INT41 type = VECT_INIT
PORT2 : { * ( .int42 ) } > INT42 type = VECT_INIT
USCI_B3 : { * ( .int43 ) } > INT43 type = VECT_INIT
USCI_A3 : { * ( .int44 ) } > INT44 type = VECT_INIT
USCI_B1 : { * ( .int45 ) } > INT45 type = VECT_INIT
USCI_A1 : { * ( .int46 ) } > INT46 type = VECT_INIT
PORT1 : { * ( .int47 ) } > INT47 type = VECT_INIT
TIMER1_A1 : { * ( .int48 ) } > INT48 type = VECT_INIT
TIMER1_A0 : { * ( .int49 ) } > INT49 type = VECT_INIT
DMA : { * ( .int50 ) } > INT50 type = VECT_INIT
USCI_B2 : { * ( .int51 ) } > INT51 type = VECT_INIT
USCI_A2 : { * ( .int52 ) } > INT52 type = VECT_INIT
TIMER0_A1 : { * ( .int53 ) } > INT53 type = VECT_INIT
TIMER0_A0 : { * ( .int54 ) } > INT54 type = VECT_INIT
ADC12 : { * ( .int55 ) } > INT55 type = VECT_INIT
USCI_B0 : { * ( .int56 ) } > INT56 type = VECT_INIT
USCI_A0 : { * ( .int57 ) } > INT57 type = VECT_INIT
WDT : { * ( .int58 ) } > INT58 type = VECT_INIT
TIMER0_B1 : { * ( .int59 ) } > INT59 type = VECT_INIT
TIMER0_B0 : { * ( .int60 ) } > INT60 type = VECT_INIT
UNMI : { * ( .int61 ) } > INT61 type = VECT_INIT
SYSNMI : { * ( .int62 ) } > INT62 type = VECT_INIT
.reset : {} > RESET /* MSP430 Reset vector */
}
/****************************************************************************/
/* Include peripherals memory map */
/****************************************************************************/
-l msp430f5438a.cmd

164
Telem_Debug/Debug3/main.c Normal file
View File

@@ -0,0 +1,164 @@
//
// Telemetry
//
// Modified by Erik in 2010-2011
//
/* Modifications for 2013 by B. Bazuin
* - 2013v1
* - reworked to operate continuously with CAN at 250 kbps
* - no USB device code included
* - no ADC code
* - table values collected only the first time captured
* - 2014V2 MODIFICATIONS
* - Reordered and eliminated some messages
* - HF rate 10 sec, LF rate 30 sec, ST rate 60 sec
* - BP_PCDONE and BP_ISH added
* - Precharge Controller Removed
*/
/* Modifications for 2016 by B. Bazuin
* -New BPS and Array Controller
*
*/
#include "Sunseeker2021.h"
// structures
//message_fifo decode_queue;
//char_fifo USB_FIFO, MODEM_FIFO;
//hf_packet pckHF;
//lf_packet pckLF;
//status_packet pckST;
unsigned volatile char forceread;
unsigned int can_mask0, can_mask1;
enum MODE {INIT, CANREAD, DECODE, MODEMTX, USBTX, LOWP, LOOP} ucMODE;
unsigned volatile char can_status_test, can_rcv_status_test;
unsigned long can_msg_count = 0, can_stall_cnt = 0;
unsigned long can_err_count = 0, can_read_cnt = 0;
int thrs, tmin, tsec;
char ucFLAG,usbENABLE;
char CAN1_INT_FLAG = FALSE;
volatile unsigned char status_flag = FALSE;
volatile unsigned char hs_comms_flag = FALSE;
volatile unsigned char ls_comms_flag = FALSE;
volatile unsigned char st_comms_flag = FALSE;
static char init_msg_data[21] = "0xHHHHHHHH,0xHHHHHHHH";
// General Variables
// CAN Communication Variables
volatile unsigned char cancomm_flag = FALSE; //used for CAN transmission timing
volatile unsigned char send_can = FALSE; //used for CAN transmission timing
volatile unsigned char rcv_can = FALSE; //used for CAN transmission timing
volatile unsigned char can_full = FALSE; //used for CAN transmission status
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
_DINT(); //disables interrupts
clock_init(); //Configure HF and LF clocks
delay();
timerB_init(); //init timer B
delay();
io_init();
delay();
UART_init();
delay();
can0spi_init();
delay();
can1spi_init();
delay();
_EINT(); //enable global interrupts
ucMODE = INIT;
while(1)
{
if(status_flag){
status_flag = FALSE;
P8OUT ^= BIT3; // Toggle P1.0
P8OUT ^= BIT6; // Toggle P1.0
}
// __delay_cycles(100000); // Delay
}
return 0;
}
/*
* Initialise Timer B
* - Provides timer tick timebase at 100 Hz
*/
void timerB_init( void )
{
TBCTL = CNTL_0 | TBSSEL_1 | ID_3 | TBCLR; // ACLK/8, clear TBR
TBCCR0 = (ACLK_RATE/8/TICK_RATE); // Set timer to count to this value = TICK_RATE overflow
TBCCTL0 = CCIE; // Enable CCR0 interrrupt
TBCTL |= MC_1; // Set timer to 'up' count mode
}
/*
* Timer B CCR0 Interrupt Service Routine
* - Interrupts on Timer B CCR0 match at 10Hz
* - Sets Time_Flag variable
*/
/*
* GNU interropt symantics
* interrupt(TIMERB0_VECTOR) timer_b0(void)
*/
#pragma vector = TIMERB0_VECTOR
__interrupt void timer_b0(void)
{
static unsigned int status_count = TELEM_STATUS_COUNT;
static unsigned int hs_comms_count = HS_COMMS_SPEED;
static unsigned int ls_comms_count = LS_COMMS_SPEED;
static unsigned int st_comms_count = ST_COMMS_SPEED;
if (ucMODE != INIT)
{
// Trigger comms events (hs command packet transmission)
hs_comms_count--;
if( hs_comms_count == 0 ){
hs_comms_count = HS_COMMS_SPEED;
hs_comms_flag = TRUE;
}
ls_comms_count--;
if( ls_comms_count == 0 ){
ls_comms_count = LS_COMMS_SPEED;
ls_comms_flag = TRUE;
}
st_comms_count--;
if( st_comms_count == 0 ){
st_comms_count = ST_COMMS_SPEED;
st_comms_flag = TRUE;
}
}
// Primary System Heart beat
status_count--;
if( status_count == 0 )
{
status_count = TELEM_STATUS_COUNT;
status_flag = TRUE;
}
}

View 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>

View File

@@ -0,0 +1,9 @@
The 'targetConfigs' folder contains target-configuration (.ccxml) files, automatically generated based
on the device and connection settings specified in your project on the Properties > General page.
Please note that in automatic target-configuration management, changes to the project's device and/or
connection settings will either modify an existing or generate a new target-configuration file. Thus,
if you manually edit these auto-generated files, you may need to re-apply your changes. Alternatively,
you may create your own target-configuration file for this project and manage it manually. You can
always switch back to automatic target-configuration management by checking the "Manage the project's
target-configuration automatically" checkbox on the project's Properties > General page.