Commit 3 RX100 low power demos.

This commit is contained in:
Richard Barry 2013-04-17 10:04:38 +00:00
parent 2b41be4cb9
commit 2bd7d0c1f5
112 changed files with 37911 additions and 0 deletions

View File

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="ASCII"?>
<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore" targets="GNU_RX">
<definedRegionsList name="RAM">
<startAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>
<endAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="20479"/>
</definedRegionsList>
<definedRegionsList name="ROM">
<startAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294836224"/>
<endAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294967295"/>
</definedRegionsList>
<sections name=".fvectors" isKeep="true">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294967248"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fvectors"/>
</sections>
<sections name=".option_bytes" isKeep="true">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294967176"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".option_bytes"/>
</sections>
<sections name=".endian_bytes" isKeep="true">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294967168"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".endian_bytes"/>
</sections>
<sections name=".text">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294836224"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text.*"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="P"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="etext"/>
</sections>
<sections name=".rvectors">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.3"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_rvectors_start"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rvectors"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_rvectors_end"/>
</sections>
<sections name=".init">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.4"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".init"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__preinit_array_start"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".preinit_array"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__preinit_array_end"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__init_array_start = (. + 3) &amp; ~ 3"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".init_array"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="SORT(.init_array.*)"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__init_array_end"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__fini_array_start"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fini_array"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="SORT(.fini_array.*)"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__fini_array_end"/>
</sections>
<sections name=".fini">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.5"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fini"/>
</sections>
<sections name=".got">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.6"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got.plt"/>
</sections>
<sections name=".rodata">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.7"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata.*"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="C_1"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="C_2"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="C"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_erodata"/>
</sections>
<sections name=".eh_frame_hdr">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.8"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame_hdr"/>
</sections>
<sections name=".eh_frame">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.9"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame"/>
</sections>
<sections name=".jcr">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.10"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".jcr"/>
</sections>
<sections name=".tors">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.11"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_LIST__"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".ctors"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors_end"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_END__"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_LIST__"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".dtors"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors_end"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_END__"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_mdata"/>
</sections>
<sections name=".data">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="512"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data.*"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="D"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="D_1"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="D_2"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_edata"/>
<reservedMemAddress xsi:type="com.renesas.linkersection.model:ReferencedLabelAddress" label="//@sections.12/@contents.10"/>
</sections>
<sections name=".gcc_exc">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.13"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".gcc_exc"/>
</sections>
<sections name=".bss">
<sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.14"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_bss"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss.**"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="COMMON"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="B"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="B_1"/>
<contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="B_2"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ebss"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_end"/>
</sections>
<sections name=".ustack">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="511"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ustack"/>
</sections>
<sections name=".istack">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="507"/>
<contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_istack"/>
</sections>
</com.renesas.linkersection.model:SectionContainer>

View File

@ -0,0 +1,202 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?>
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.1038200195">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.1038200195" moduleId="org.eclipse.cdt.core.settings" name="HardwareDebug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="RTOSDemo_GCC" buildArtefactType="com.renesas.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=com.renesas.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf *.lst *.lis *.lpp *.map" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.VCErrorParser" id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.1038200195" name="HardwareDebug" parent="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id">
<folderInfo id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.1038200195." name="/" resourcePath="">
<toolChain id="%com.renesas.cdt.rx.hardwaredebug.win32.toolChain.Id.1200713553" name="KPIT GNURX-ELF Toolchain" superClass="%com.renesas.cdt.rx.hardwaredebug.win32.toolChain.Id">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rx.hardwaredebug.win32.targetPlatform.Id.2026223031" osList="win32" superClass="com.renesas.cdt.rx.hardwaredebug.win32.targetPlatform.Id"/>
<builder buildPath="${workspace_loc:/RTOSDemo_GCC/HardwareDebug}" id="com.renesas.cdt.rx.hardwaredebug.win32.builder.Id.53784355" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make Builder" superClass="com.renesas.cdt.rx.hardwaredebug.win32.builder.Id"/>
<tool command="rx-elf-libgen" id="com.renesas.cdt.rx.hardwaredebug.win32.tool.libgen.Id.454501696" name="Library Generator" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.libgen.Id">
<option id="com.renesas.cdt.core.LibraryGenerator.option.stdlib.1751934062" name="stdlib.h : Performs C program statndard processing such as storage area management" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdlib" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.core.LibraryGenerator.option.string.223218455" name="string.h : Performs string comparison, copying " superClass="com.renesas.cdt.core.LibraryGenerator.option.string" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary.850493556" name="Select library" superClass="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary" value="Optimized" valueType="enumerated"/>
<option id="com.renesas.cdt.core.LibraryGenerator.option.libraryType.1978494303" name="Library type" superClass="com.renesas.cdt.core.LibraryGenerator.option.libraryType" value="Project-Built" valueType="enumerated"/>
</tool>
<tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id.1144539497" name="Compiler" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.compiler.Id">
<option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian.769042703" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian" value="Little-endian data" valueType="enumerated"/>
<option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType.2018307272" name="CPU type" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType" value="RX100" valueType="enumerated"/>
<option id="com.renesas.cdt.core.Compiler.option.includeFileDir.316833280" name="Include file directories" superClass="com.renesas.cdt.core.Compiler.option.includeFileDir" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${TCINSTALL}\rx-elf\optlibinc&quot;"/>
<listOptionValue builtIn="false" value="&quot;${TCINSTALL}\rx-elf\include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Common_Demo_Tasks/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_bsp/mcu/rx111}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/FreeRTOS_Source/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/FreeRTOS_Source/portable/GCC/RX100}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_bsp}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_bsp/board/rskrx111}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_switches}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_switches/src}&quot;"/>
</option>
<option id="com.renesas.cdt.core.Compiler.option.CPUSeries.2032738140" name="Cpu Series" superClass="com.renesas.cdt.core.Compiler.option.CPUSeries" value="RX111" valueType="string"/>
<option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.debugLevel.1225535928" name="Debug level" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.debugLevel" value="com.renesas.cdt.rx.HardwareDebug.Compiler.option.debugLevel.none" valueType="enumerated"/>
<option id="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel.1088290642" name="Optimization level" superClass="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rx.HardwareDebug.Compiler.option.optimizationLevel.speedCodeSize" valueType="enumerated"/>
<inputType id="%Base.Compiler.C.InputType.Id.962451183" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>
</tool>
<tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id.1642705589" name="Assembler" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.assembler.Id">
<option id="com.renesas.cdt.rx.HardwareDebug.Assembler.option.dataEndian.67883143" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Assembler.option.dataEndian" value="Little-endian data" valueType="enumerated"/>
<option id="com.renesas.cdt.core.Assembler.option.includeFileDirectories.434361507" name="Include file directories" superClass="com.renesas.cdt.core.Assembler.option.includeFileDirectories" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}\src&quot;"/>
</option>
<inputType id="%Base.Assembler.inputType.Id.2097860459" name="Assembler InputType" superClass="%Base.Assembler.inputType.Id"/>
</tool>
<tool command="rx-elf-ld" commandLinePattern="${COMMAND} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT}${INPUTS} ${FLAGS}" id="com.renesas.cdt.rx.hardwaredebug.win32.tool.linker.Id.1295703269" name="Linker" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.linker.Id">
<option id="com.renesas.cdt.rx.HardwareDebug.Linker.option.dataEndian.1400369130" name="Data Endian" superClass="com.renesas.cdt.rx.HardwareDebug.Linker.option.dataEndian" value="Little-endian data" valueType="enumerated"/>
<option id="com.renesas.cdt.rx.HardwareDebug.Linker.option.archiveSearchDirectories.770090581" name="Archive search directories" superClass="com.renesas.cdt.rx.HardwareDebug.Linker.option.archiveSearchDirectories" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;${CONFIGDIR}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${TCINSTALL}\lib\gcc\rx-elf\\${GCC_VERSION}&quot;"/>
</option>
<option id="com.renesas.cdt.rx.HardwareDebug.Linker.option.archiveLibraryFiles.1867799274" name="Archive (library) files" superClass="com.renesas.cdt.rx.HardwareDebug.Linker.option.archiveLibraryFiles" valueType="stringList">
<listOptionValue builtIn="false" value="${ProjName}"/>
<listOptionValue builtIn="false" value="gcc"/>
</option>
<option id="com.renesas.cdt.core.Linker.option.userDefinedOptions.1094627795" name="User defined options" superClass="com.renesas.cdt.core.Linker.option.userDefinedOptions" valueType="stringList">
<listOptionValue builtIn="false" value="-e_PowerON_Reset"/>
</option>
</tool>
<tool id="com.renesas.cdt.rx.hardwaredebug.win32.tool.objcopy.Id.1559563032" name="Objcopy" superClass="com.renesas.cdt.rx.hardwaredebug.win32.tool.objcopy.Id"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<profile id="com.iar.cdt.v850.scanner.IAR_V850_PerProjectProfile">
<buildOutputProvider>
<openAction enabled="false" filePath=""/>
<parser enabled="false"/>
</buildOutputProvider>
<scannerInfoProvider id="com.iar.cdt.v850.toolchain.scannerInfoProvider1">
<runAction arguments="" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="com.iar.cdt.rl78.scanner.IAR_RL78_PerProjectProfile">
<buildOutputProvider>
<openAction enabled="false" filePath=""/>
<parser enabled="false"/>
</buildOutputProvider>
<scannerInfoProvider id="com.iar.cdt.rl78.toolchain.scannerInfoProviderRL78">
<runAction arguments="" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="com.iar.cdt.rx.scanner.IAR_RX_PerProjectProfile">
<buildOutputProvider>
<openAction enabled="false" filePath=""/>
<parser enabled="false"/>
</buildOutputProvider>
<scannerInfoProvider id="com.iar.cdt.rx.toolchain.scannerInfoProviderRX">
<runAction arguments="" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="RTOSDemo_GCC.com.renesas.cdt.rx.projectType.Id.1714941242" name="GNURX" projectType="com.renesas.cdt.rx.projectType.Id"/>
</storageModule>
</cproject>

View File

@ -0,0 +1,6 @@
TOOL_CHAIN=KPIT GNURX-ELF Toolchain
VERSION=v12.01
TC_INSTALL=C:\devtools\Renesas\e2studio\GNURXV~1.01-\rx-elf\
GCC_STRING=4.6-GNURX_v12.01
VERISON_IDE=3.06.02.080
E2STUDIO_VERSION=1.1.1.7

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>RTOSDemo_GCC</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.renesas.cdt.core.genmakebuilder</name>
<arguments>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>make</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildLocation</key>
<value>${workspace_loc:/RTOSDemo_GCC/HardwareDebug}</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.configurationIds</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>com.renesas.cdt.core.kpitcnature</nature>
<nature>com.renesas.cdt.core.kpitccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,22 @@
#Mon Mar 11 11:21:23 GMT 2013
Library\ Generator\ Command=rx-elf-libgen
com.renesas.cdt.core.Assembler.option.includeFileDirectories="${workspace_loc\:/${ProjName}}\\src";
com.renesas.cdt.core.Compiler.option.includeFileDir.316833280="${TCINSTALL}\\rx-elf\\optlibinc";
com.renesas.cdt.core.LibraryGenerator.option.ctype=true
com.renesas.cdt.core.LibraryGenerator.option.libraryType=Project-Built
com.renesas.cdt.core.LibraryGenerator.option.math=false
com.renesas.cdt.core.LibraryGenerator.option.selectLibrary=Optimized
com.renesas.cdt.core.LibraryGenerator.option.stdio=false
com.renesas.cdt.core.LibraryGenerator.option.stdlib=true
com.renesas.cdt.core.LibraryGenerator.option.string=true
com.renesas.cdt.core.Linker.option.userDefinedOptions=[Ljava.lang.String;@13ec853
com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType=RX100
com.renesas.cdt.rx.HardwareDebug.Compiler.option.cpuType.2018307272=RX100
com.renesas.cdt.rx.HardwareDebug.Compiler.option.dataEndian=Little-endian data
com.renesas.cdt.rx.HardwareDebug.Compiler.option.disableFPUInstructions=false
com.renesas.cdt.rx.HardwareDebug.Compiler.option.genCodeForRX610=false
com.renesas.cdt.rx.HardwareDebug.Compiler.option.generateRXas100output=false
com.renesas.cdt.rx.HardwareDebug.Compiler.option.make64bitDouble=false
com.renesas.cdt.rx.HardwareDebug.Linker.option.archiveLibraryFiles=${ProjName};gcc;
com.renesas.cdt.rx.HardwareDebug.Linker.option.archiveSearchDirectories.770090581="${CONFIGDIR}";"${TCINSTALL}\\lib\\gcc\\rx-elf\\\\${GCC_VERSION}";
eclipse.preferences.version=1

View File

@ -0,0 +1,52 @@
REM This file should be executed from the command line prior to the first
REM build. It will be necessary to refresh the Eclipse project once the
REM .bat file has been executed (normally just press F5 to refresh).
REM Copies all the required files from their location within the standard
REM FreeRTOS directory structure to under the Eclipse project directory.
REM This permits the Eclipse project to be used in 'managed' mode and without
REM having to setup any linked resources.
REM Standard paths
SET FREERTOS_SOURCE=..\..\Source
SET COMMON_SOURCE=..\Common\minimal
SET COMMON_INCLUDE=..\Common\include
REM Have the files already been copied?
IF EXIST RTOSDemo\FreeRTOS_Source Goto END
REM Create the required directory structure.
MD RTOSDemo\FreeRTOS_Source
MD RTOSDemo\FreeRTOS_Source\include
MD RTOSDemo\FreeRTOS_Source\portable
MD RTOSDemo\FreeRTOS_Source\portable\MemMang
MD RTOSDemo\FreeRTOS_Source\portable\GCC
MD RTOSDemo\FreeRTOS_Source\portable\GCC\RX100
MD RTOSDemo\Common_Demo_Tasks
MD RTOSDemo\Common_Demo_Tasks\include
REM Copy the core kernel files into the project directory
copy %FREERTOS_SOURCE%\tasks.c RTOSDemo\FreeRTOS_Source
copy %FREERTOS_SOURCE%\queue.c RTOSDemo\FreeRTOS_Source
copy %FREERTOS_SOURCE%\list.c RTOSDemo\FreeRTOS_Source
copy %FREERTOS_SOURCE%\timers.c RTOSDemo\FreeRTOS_Source
REM Copy the common header files into the project directory
copy %FREERTOS_SOURCE%\include\*.* RTOSDemo\FreeRTOS_Source\include
REM Copy the portable layer files into the project directory
copy %FREERTOS_SOURCE%\portable\GCC\RX100\*.* RTOSDemo\FreeRTOS_Source\portable\GCC\RX100
REM Copy the memory allocation files into the project directory
copy %FREERTOS_SOURCE%\portable\MemMang\heap_4.c RTOSDemo\FreeRTOS_Source\portable\MemMang
REM Copy the files that define the common demo tasks.
copy %COMMON_SOURCE%\death.c RTOSDemo\Common_Demo_Tasks
copy %COMMON_SOURCE%\blocktim.c RTOSDemo\Common_Demo_Tasks
copy %COMMON_SOURCE%\GenQTest.c RTOSDemo\Common_Demo_Tasks
copy %COMMON_SOURCE%\recmutex.c RTOSDemo\Common_Demo_Tasks
REM Copy the common demo file headers.
copy %COMMON_INCLUDE%\*.h RTOSDemo\Common_Demo_Tasks\include
: END

View File

@ -0,0 +1,186 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/*
* The following #error directive is to remind users that a batch file must be
* executed prior to this project being built. The batch file *cannot* be
* executed from within the IDE! Once it has been executed, re-open or refresh
* the Eclipse project and remove the #error line below.
*/
//#error Ensure CreateProjectDirectoryStructure.bat has been executed before building. See comment immediately above.
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
/* Hardware specifics. */
#include "platform.h"
/*-----------------------------------------------------------
* Application specific definitions.
*
* These definitions should be adjusted for your particular hardware and
* application requirements.
*
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
*
* See http://www.freertos.org/a00110.html.
*----------------------------------------------------------*/
/* DEMO SPECIFIC SETTING:
* Set configCREATE_LOW_POWER_DEMO to one to run the low power demo with tick
* suppression, or 0 to run the more comprehensive test and demo application.
* If configCREATE_LOW_POWER_DEMO is set to 1 then main() calls main_low_power().
* If configCREATE_LOW_POWER_DEMO is set to 0 then main() calls main_full().
*/
#define configCREATE_LOW_POWER_DEMO 1
#define configUSE_PREEMPTION 1
#define configUSE_TICKLESS_IDLE configCREATE_LOW_POWER_DEMO
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ( ICLK_HZ ) /* Set in mcu_info.h. */
#define configPERIPHERAL_CLOCK_HZ ( PCLKB_HZ ) /* Set in muc_info.h. */
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 9 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 12 )
#define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
#define configUSE_CO_ROUTINES 0
#define configUSE_MUTEXES 1
#define configGENERATE_RUN_TIME_STATS 0
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configUSE_RECURSIVE_MUTEXES 1
#define configQUEUE_REGISTRY_SIZE 0
#define configUSE_MALLOC_FAILED_HOOK 0
#define configUSE_APPLICATION_TASK_TAG 0
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 7 )
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
/* Software timer definitions - only included when the demo is configured to
build the full demo (as opposed to the low power demo). */
#if configCREATE_LOW_POWER_DEMO == 1
#define configUSE_TIMERS 0
#else
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 3 )
#define configTIMER_QUEUE_LENGTH 5
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE )
#endif /* configCREATE_LOW_POWER_DEMO */
/* The interrupt priority used by the kernel itself for the tick interrupt and
the pended interrupt. This would normally be the lowest priority. */
#define configKERNEL_INTERRUPT_PRIORITY 1
/* The maximum interrupt priority from which FreeRTOS API calls can be made.
Interrupts that use a priority above this will not be effected by anything the
kernel is doing but must not make any use of FreeRTOS functionality.
interrupts that use a priority at or below configMAX_SYSCALL_INTERRUPT_PRIORITY
can make use of FreeRTOS API function but *only* functions that end in
"FromISR()". */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_uxTaskGetStackHighWaterMark 1
#define INCLUDE_xTaskGetSchedulerState 1
extern void vAssertCalled( void );
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled();
/* The configPRE_SLEEP_PROCESSING() and configPOST_SLEEP_PROCESSING() macros
allow the application writer to add additional code before and after the MCU is
placed into the low power state respectively. The implementations provided in
this demo can be extended to save even more power - for example the analog
input used by the low power demo could be switched off in the pre-sleep macro
and back on again in the post sleep macro. */
void vPreSleepProcessing( unsigned long xExpectedIdleTime );
void vPostSleepProcessing( unsigned long xExpectedIdleTime );
#define configPRE_SLEEP_PROCESSING( xExpectedIdleTime ) vPreSleepProcessing( xExpectedIdleTime );
#define configPOST_SLEEP_PROCESSING( xExpectedIdleTime ) vPostSleepProcessing( xExpectedIdleTime );
#endif /* FREERTOS_CONFIG_H */

View File

@ -0,0 +1,200 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/*-----------------------------------------------------------
* Simple IO routines to control the LEDs.
*-----------------------------------------------------------*/
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
/* Demo includes. */
#include "partest.h"
#define partestNUM_LEDS ( 4 )
long lParTestGetLEDState( unsigned long ulLED );
/*-----------------------------------------------------------*/
void vParTestInitialise( void )
{
/* Port pin configuration is done by the low level set up prior to this
function being called. */
}
/*-----------------------------------------------------------*/
void vParTestSetLED( unsigned long ulLED, signed long xValue )
{
if( ulLED < partestNUM_LEDS )
{
if( xValue != 0 )
{
/* Turn the LED on. */
taskENTER_CRITICAL();
{
switch( ulLED )
{
case 0: LED0 = LED_ON;
break;
case 1: LED1 = LED_ON;
break;
case 2: LED2 = LED_ON;
break;
case 3: LED3 = LED_ON;
break;
}
}
taskEXIT_CRITICAL();
}
else
{
/* Turn the LED off. */
taskENTER_CRITICAL();
{
switch( ulLED )
{
case 0: LED0 = LED_OFF;
break;
case 1: LED1 = LED_OFF;
break;
case 2: LED2 = LED_OFF;
break;
case 3: LED3 = LED_OFF;
break;
}
}
taskEXIT_CRITICAL();
}
}
}
/*-----------------------------------------------------------*/
void vParTestToggleLED( unsigned long ulLED )
{
if( ulLED < partestNUM_LEDS )
{
taskENTER_CRITICAL();
{
if( lParTestGetLEDState( ulLED ) != 0x00 )
{
vParTestSetLED( ulLED, 0 );
}
else
{
vParTestSetLED( ulLED, 1 );
}
}
taskEXIT_CRITICAL();
}
}
/*-----------------------------------------------------------*/
long lParTestGetLEDState( unsigned long ulLED )
{
long lReturn = pdTRUE;
if( ulLED < partestNUM_LEDS )
{
switch( ulLED )
{
case 0 : if( LED0 != 0 )
{
lReturn = pdFALSE;
}
break;
case 1 : if( LED1 != 0 )
{
lReturn = pdFALSE;
}
break;
case 2 : if( LED2 != 0 )
{
lReturn = pdFALSE;
}
break;
case 3 : if( LED3 != 0 )
{
lReturn = pdFALSE;
}
break;
}
}
return lReturn;
}
/*-----------------------------------------------------------*/

View File

@ -0,0 +1,252 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lcd.c
* Device(s) : RX
* H/W Platform : RSKRX111
* Description : Provides variable and function declarations for lcd.c file
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Standard string manipulation & formatting functions */
#include <stdio.h>
#include <string.h>
/* Defines standard variable types used in this function */
#include <stdint.h>
/* Bring in board includes. */
#include "platform.h"
/* Following header file provides function prototypes for LCD controlling functions & macro defines */
#include "lcd.h"
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
static void lcd_delay(volatile int32_t nsecs);
static void lcd_nibble_write(uint8_t data_or_ctrl, uint8_t value);
static void lcd_write(uint8_t data_or_ctrl, uint8_t value);
/***********************************************************************************************************************
* Function name : lcd_initialize
* Description : Initializes the LCD display.
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void lcd_initialize(void)
{
/* Set LCD data pins as outputs. */
PORT4.PDR.BYTE |= 0x0F;
/* Set LCD control pins as outputs. */
RS_PIN_DDR = 1;
E_PIN_DDR = 1;
/* Power Up Delay for the LCD Module */
lcd_delay(50000000);
/* Display initialises in 8 bit mode - so send one write (seen as 8 bit) to set to 4 bit mode. */
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
/* Function Set */
lcd_nibble_write(CTRL_WR, 0x02);
lcd_delay(39000);
lcd_nibble_write(CTRL_WR, 0x02);
lcd_nibble_write(CTRL_WR, (LCD_DISPLAY_ON | LCD_TWO_LINE ));
lcd_delay(39000);
/* Display ON/OFF control */
lcd_write(CTRL_WR, LCD_CURSOR_OFF);
lcd_delay(39000);
/* Display Clear */
lcd_write(CTRL_WR, LCD_CLEAR);
lcd_delay(2000000);
/* Entry Mode Set */
lcd_write(CTRL_WR, 0x06);
lcd_delay(39000);
/* Home the cursor */
lcd_write(CTRL_WR, LCD_HOME_L1);
lcd_delay(5000000);
}
/***********************************************************************************************************************
* Function name : lcd_clear
* Description : Clears the LCD
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void lcd_clear(void)
{
/* Display Clear */
lcd_write(CTRL_WR, LCD_CLEAR);
lcd_delay(2000000);
}
/***********************************************************************************************************************
* Function name : lcd_display
* Description : This function controls LCD writes to line 1 or 2 of the LCD.
* You need to use the defines LCD_LINE1 and LCD_LINE2 in order to specify the starting position.
* For example, to start at the 2nd position on line 1...
* lcd_display(LCD_LINE1 + 1, "Hello")
* Arguments : position -
* Line number of display
* string -
* Pointer to null terminated string
* Return Value : none
***********************************************************************************************************************/
void lcd_display(uint8_t position, uint8_t const * string)
{
/* Declare next position variable */
static uint8_t next_pos = 0xFF;
/* Set line position if needed. We don't want to if we don't need to because LCD control operations take longer
than LCD data operations. */
if (next_pos != position)
{
if(position < LCD_LINE2)
{
/* Display on Line 1 */
lcd_write(CTRL_WR, ((uint8_t)(LCD_HOME_L1 + position)));
}
else
{
/* Display on Line 2 */
lcd_write(CTRL_WR, ((uint8_t)((LCD_HOME_L2 + position) - LCD_LINE2)));
}
lcd_delay(39000);
/* set position index to known value */
next_pos = position;
}
do
{
/* Write character to LCD. */
lcd_write(DATA_WR,*string++);
lcd_delay(43000);
/* Increment position index */
next_pos++;
}
while(*string);
}
/***********************************************************************************************************************
* Function name : lcd_delay
* Description : Implements LCD required delays.
* Arguments : nsecs -
* Number of nanoseconds to delay. RX111 has max clock of 32MHz which gives a cycle time of 31.3ns.
* This means that nothing under 313ns should be input. 313ns would be 10 cycles which is still
* being optimistic for getting in and out of this function.
* Return Value : none
***********************************************************************************************************************/
static void lcd_delay(volatile int32_t nsecs)
{
while (0 < nsecs)
{
/* Subtract off 10 cycles per iteration. This number was obtained when using the Renesas toolchain at
optimization level 2. The number to nanoseconds to subtract off below is calculated off of the ICLK speed. */
nsecs -= (int32_t)((313.0)*(32000000.0/(float)ICLK_HZ));
}
}
/***********************************************************************************************************************
* Function name : lcd_nibble_write
* Description : Writes data to display. Sends command to display.
* Arguments : value -
* The value to write
* data_or_ctrl -
* Whether to write data or control.
* 1 = DATA
* 0 = CONTROL
* Return Value : none
***********************************************************************************************************************/
static void lcd_nibble_write(uint8_t data_or_ctrl, uint8_t value)
{
/* Set Register Select pin high for Data */
if (data_or_ctrl == DATA_WR)
{
/* Data write. */
RS_PIN = 1;
}
else
{
/* Control write. */
RS_PIN = 0;
}
/* tsu1 delay */
lcd_delay(60);
/* EN enable chip (HIGH) */
E_PIN = 1;
/* Output the data */
PORT4.PODR.BYTE = (value & 0x0F);
/* tw delay */
lcd_delay(450);
/* Latch data by dropping E */
E_PIN = 0;
/* th2 delay */
lcd_delay(10);
/* tc delay */
lcd_delay(480);
}
/***********************************************************************************************************************
* Function name : lcd_write
* Description : This function controls LCD writes to line 1 or 2 of the LCD. You need to use the defines LCD_LINE1 and
* LCD_LINE2 in order to specify the starting position.
* For example, to start at the 2nd position on line 1...
* lcd_display(LCD_LINE1 + 1, "Hello")
* Arguments : value -
* The value to write
* data_or_ctrl -
* Whether to write data or control.
* 1 = DATA
* 0 = CONTROL
* Return Value : none
***********************************************************************************************************************/
static void lcd_write(uint8_t data_or_ctrl, uint8_t value)
{
/* Write upper nibble first */
lcd_nibble_write(data_or_ctrl, (uint8_t)((value & 0xF0) >> 4));
/* Write lower nibble second */
lcd_nibble_write(data_or_ctrl, (uint8_t)(value & 0x0F));
}

View File

@ -0,0 +1,101 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lcd.h
* Device(s) : RX
* H/W Platform : RSKRX111
* Description : Provides variable and function declarations for lcd.c file
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/* Multiple inclusion prevention macro */
#ifndef LCD_H
#define LCD_H
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Defines standard integer variable types used in this file */
#include <stdint.h>
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* RS register select pin */
#define RS_PIN PORTC.PODR.BIT.B5
#define RS_PIN_DDR PORTC.PDR.BIT.B5
/* Display enable pin */
#define E_PIN PORTB.PODR.BIT.B1
#define E_PIN_DDR PORTB.PDR.BIT.B1
/* Data write/read definition */
#define DATA_WR 1
/* Control write/read definition */
#define CTRL_WR 0
/* Maximum characters per line of LCD display. */
#define NUMB_CHARS_PER_LINE 8
/* Number of lines on the LCD display */
#define MAXIMUM_LINES 2
/* Character position of LCD line 1 */
#define LCD_LINE1 0
/* Character position of LCD line 2 */
#define LCD_LINE2 16
/* Clear LCD display and home cursor */
#define LCD_CLEAR 0x01
/* Move cursor to line 1 */
#define LCD_HOME_L1 0x80
/* Move cursor to line 2 */
#define LCD_HOME_L2 0xC0
/* Cursor auto decrement after R/W */
#define CURSOR_MODE_DEC 0x04
/* Cursor auto increment after R/W */
#define CURSOR_MODE_INC 0x06
/* Setup, 4 bits,2 lines, 5X7 */
#define FUNCTION_SET 0x28
/* Display ON with Cursor */
#define LCD_CURSOR_ON 0x0E
/* Display ON with Cursor off */
#define LCD_CURSOR_OFF 0x0C
/* Display on with blinking cursor */
#define LCD_CURSOR_BLINK 0x0D
/* Move Cursor Left One Position */
#define LCD_CURSOR_LEFT 0x10
/* Move Cursor Right One Position */
#define LCD_CURSOR_RIGHT 0x14
/* Enable LCD display */
#define LCD_DISPLAY_ON 0x04
/* Enable both LCD lines */
#define LCD_TWO_LINE 0x08
/***********************************************************************************************************************
Exported global functions (to be accessed by other files)
***********************************************************************************************************************/
/* LCD initialisation function declaration */
void lcd_initialize (void);
/* Update display function declaration */
void lcd_display(uint8_t position, uint8_t const * string);
/* Clear LCD function delcaration */
void lcd_clear (void);
/* End of multiple inclusion prevention macro */
#endif

View File

@ -0,0 +1,50 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp.h
* H/W Platform : RSKRX111
* Description : Has the header files that should be included for this platform.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef PLATFORM_BOARD_RSKRX111
#define PLATFORM_BOARD_RSKRX111
/* Make sure that no other platforms have already been defined. Do not touch this! */
#ifdef PLATFORM_DEFINED
#error "Error - Multiple platforms defined in platform.h!"
#else
#define PLATFORM_DEFINED
#endif
/***********************************************************************************************************************
INCLUDE APPROPRIATE MCU AND BOARD FILES
***********************************************************************************************************************/
#include "r_bsp_config.h"
#include ".\mcu\rx111\iodefine.h"
#include ".\mcu\rx111\mcu_info.h"
#include ".\board\rskrx111\rskrx111.h"
#include ".\board\rskrx111\lcd.h"
#endif /* PLATFORM_BOARD_RSKRX111 */

View File

@ -0,0 +1,250 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp_config_reference.c
* Device(s) : RX111
* Description : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included
* somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)
* is just a reference file that the user can use to make their own r_bsp_config.h file.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef R_BSP_CONFIG_REF_HEADER_FILE
#define R_BSP_CONFIG_REF_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* Enter the product part number for your MCU. This information will be used to obtain information about your MCU such
as package and memory size.
To help parse this information, the part number will be defined using multiple macros.
R 5 F 51 11 5 A D FM
| | | | | | | | | Macro Name Description
| | | | | | | | |__MCU_PART_PACKAGE = Package type, number of pins, and pin pitch
| | | | | | | |____not used = Products with wide temperature range (D: -40 to 85C G: -40 to 105C)
| | | | | | |______not used = Blank
| | | | | |________MCU_PART_MEMORY_SIZE = ROM, RAM, and Data Flash Capacity
| | | | |___________MCU_PART_GROUP = Group name
| | | |______________MCU_PART_SERIES = Series name
| | |________________MCU_PART_MEMORY_TYPE = Type of memory (Flash)
| |__________________not used = Renesas MCU
|____________________not used = Renesas semiconductor product.
*/
/* Package type. Set the macro definition based on values below:
Character(s) = Value for macro = Package Type/Number of Pins/Pin Pitch
FM = 0x0 = LFQFP/64/0.50
FK = 0x1 = LQFP/64/0.80
LF = 0x2 = TFLGA/64/0.50
FL = 0x3 = LFQFP/48/0.50
NE = 0x4 = VQFN/48/0.50
NC = 0x5 = HWQFN/36/0.50
LM = 0x6 = WFLGA/36/0.50
SB = 0x7 = SSOP/36/0.80
*/
#define MCU_PART_PACKAGE (0x0)
/* ROM, RAM, and Data Flash Capacity.
Character(s) = Value for macro = ROM Size/Ram Size/Data Flash Size
5 = 0x5 = 128KB/16KB/8KB
4 = 0x4 = 96KB/16KB/8KB
3 = 0x3 = 64KB/10KB/8KB
1 = 0x1 = 32KB/10KB/8KB
J = 0x0 = 16KB/8KB/8KB
*/
#define MCU_PART_MEMORY_SIZE (0x5)
/* Group name.
Character(s) = Value for macro = Description
10 = 0x0 = RX110 Group
11 = 0x1 = RX111 Group
*/
#define MCU_PART_GROUP (0x1)
/* Series name.
Character(s) = Value for macro = Description
51 = 0x0 = RX100 Series
*/
#define MCU_PART_SERIES (0x0)
/* Memory type.
Character(s) = Value for macro = Description
F = 0x0 = Flash memory version
*/
#define MCU_PART_MEMORY_TYPE (0x0)
/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a
'#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */
#if defined(BSP_DECLARE_STACK)
/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize su=0x400
/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize si=0x100
#endif
/* Heap size in bytes. */
#define HEAP_BYTES (0x400)
/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information
on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.
0 = Stay in Supervisor mode.
1 = Switch to User mode.
*/
#define RUN_IN_USER_MODE (0)
/* This macro lets other modules no if a RTOS is being used.
0 = RTOS is not used.
1 = RTOS is used.
*/
#define RTOS_USED (0)
/* Clock source select (CKSEL).
0 = Low Speed On-Chip Oscillator (LOCO)
1 = High Speed On-Chip Oscillator (HOCO)
2 = Main Clock Oscillator
3 = Sub-Clock Oscillator
4 = PLL Circuit
*/
#define CLOCK_SOURCE (4)
/* Clock configuration options.
The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The
multiplier settings are used to set the clock registers in resetprg.c. If a 16MHz clock is used and the
ICLK is 24MHz, PCLKB is 24MHz, FCLK is 24MHz, PCLKD is 24MHz, and CKO is 1MHz then the
settings would be:
XTAL_HZ = 16000000
PLL_DIV = 2
PLL_MUL = 6 (16MHz x 3 = 48MHz)
ICK_DIV = 2 : System Clock (ICLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV) = 24MHz
PCKB_DIV = 2 : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 24MHz
PCKD_DIV = 2 : Peripheral Clock D (PCLKD) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV) = 24MHz
FCK_DIV = 2 : Flash IF Clock (FCLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV) = 24MHz
*/
/* XTAL - Input clock frequency in Hz */
#define XTAL_HZ (16000000)
/* PLL Input Frequency Divider Select (PLIDIV).
Available divisors = /1 (no division), /2, /4
*/
#define PLL_DIV (2)
/* PLL Frequency Multiplication Factor Select (STC).
Available multipliers = x6, x8
*/
#define PLL_MUL (6)
/* System Clock Divider (ICK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define ICK_DIV (2)
/* Peripheral Module Clock B Divider (PCKB).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKB_DIV (2)
/* Peripheral Module Clock D Divider (PCKD).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKD_DIV (2)
/* Flash IF Clock Divider (FCK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define FCK_DIV (2)
/* Below are callback functions that can be used for detecting MCU exceptions, undefined interrupt sources, and
bus errors. If the user wishes to be alerted of these events then they will need to define the macro as a
function to be called when the event occurs. For example, if the user wanted the function
excep_undefined_instr_isr() to be called when an undefined interrupt source ISR is triggered then they would
do the following:
#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
If the user does not wish to be alerted of these events then they should comment out the macros.
NOTE: When a callback function is called it will be called from within a ISR. This means that the function
will essentially be an interrupt and will hold off other interrupts that occur in the system while it
is executing. For this reason, it is recommended to keep these callback functions short as to not
decrease the real-time response of your system.
*/
/* Callback for Supervisor Instruction Violation Exception. */
//#define EXCEP_SUPERVISOR_ISR_CALLBACK supervisor_instr_cb
/* Callback for Undefined Instruction Exception. */
//#define EXCEP_UNDEFINED_INSTR_ISR_CALLBACK undefined_instr_cb
/* Callback for Non-maskable Interrupt. */
//#define NMI_ISR_CALLBACK nmi_cb
/* Callback for all undefined interrupt vectors. User can set a breakpoint in this function to determine which source
is creating unwanted interrupts. */
//#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
/* Callback for Bus Error Interrupt. */
//#define BUS_ERROR_ISR_CALLBACK bus_error_cb
/* The user has the option of separately choosing little or big endian for the User Application Area */
/* Endian mode for User Application.
0 = Big Endian
Else = Little Endian (Default)
*/
#define USER_APP_ENDIAN (1)
/* Configure WDT and IWDT settings.
OFS0 - Option Function Select Register 0
OFS0 - Option Function Select Register 0
b31:b15 Reserved (set to 1)
b14 IWDTSLCSTP - IWDT Sleep Mode Count Stop Control - (0=can't stop count, 1=stop w/some low power modes)
b13 Reserved (set to 1)
b12 IWDTRSTIRQS - IWDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)
b11:b10 IWDTRPSS - IWDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)
b9:b8 IWDTRPES - IWDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)
b7:b4 IWDTCKS - IWDT Clock Frequency Division Ratio - (0=none, 2=/16, 3 = /32, 4=/64, 0xF=/128, 5=/256)
b3:b2 IWDTTOPS - IWDT Timeout Period Select - (0=128 cycles, 1=512, 2=1024, 3=2048)
b1 IWDTSTRT - IWDT Start Mode Select - (0=auto-start after reset, 1=halt after reset)
b0 Reserved (set to 1) */
#define OFS0_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Configure whether voltage detection 1 circuit and HOCO are enabled after reset.
OFS1 - Option Function Select Register 1
b31:b9 Reserved (set to 1)
b8 HOCOEN - Enable/disable HOCO oscillation after a reset (0=enable, 1=disable)
b7:b4 STUPLVD1LVL - Startup Voltage Monitoring 1 Reset Detection Level Select
0 1 0 0: 3.10 V
0 1 0 1: 3.00 V
0 1 1 0: 2.90 V
0 1 1 1: 2.79 V
1 0 0 0: 2.68 V
1 0 0 1: 2.58 V
1 0 1 0: 2.48 V
1 0 1 1: 2.06 V
1 1 0 0: 1.96 V
1 1 0 1: 1.86 V
b3:b2 Reserved (set to 1)
b2 STUPLVD1REN - Startup Voltage Monitoring 1 Reset Enable (1=monitoring disabled)
b0 FASTSTUP - Power-On Fast Startup Time (1=normal; read only) */
#define OFS1_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Initializes C input & output library functions.
0 = Disable I/O library initialization in resetprg.c. If you are not using stdio then use this value.
1 = Enable I/O library initialization in resetprg.c. This is default and needed if you are using stdio. */
#define IO_LIB_ENABLE (1)
#endif /* R_BSP_CONFIG_REF_HEADER_FILE */

View File

@ -0,0 +1,63 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : rskrx111.h
* H/W Platform : RSKRX111
* Description : Board specific definitions for the RSKRX111.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef RSKRX111_H
#define RSKRX111_H
/* Local defines */
#define LED_ON (0)
#define LED_OFF (1)
#define SET_BIT_HIGH (1)
#define SET_BIT_LOW (0)
#define SET_BYTE_HIGH (0xFF)
#define SET_BYTE_LOW (0x00)
/* Switches */
#define SW_ACTIVE 0
#define SW1 PORT3.PIDR.BIT.B0
#define SW2 PORT3.PIDR.BIT.B1
#define SW3 PORTE.PIDR.BIT.B4
#define SW1_PDR PORT3.PDR.BIT.B0
#define SW2_PDR PORT3.PDR.BIT.B1
#define SW3_PDR PORTE.PDR.BIT.B4
#define SW1_PMR PORT3.PMR.BIT.B0
#define SW2_PMR PORT3.PMR.BIT.B1
#define SW3_PMR PORTE.PMR.BIT.B4
/* LEDs */
#define LED0 PORTB.PODR.BIT.B7
#define LED1 PORTA.PODR.BIT.B0
#define LED2 PORT5.PODR.BIT.B4
#define LED3 PORT1.PODR.BIT.B7
#define LED0_PDR PORTB.PDR.BIT.B7
#define LED1_PDR PORTA.PDR.BIT.B0
#define LED2_PDR PORT5.PDR.BIT.B4
#define LED3_PDR PORT1.PDR.BIT.B7
#endif /* RSKRX111_H */

View File

@ -0,0 +1,367 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : hwsetup.c
* Device(s) : RX
* H/W Platform : RSKRX210
* Description : Defines the initialization routines used each time the MCU is restarted.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* I/O Register and board definitions */
#include "platform.h"
#include "r_switches_config.h"
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
/* MCU I/O port configuration function delcaration */
static void output_ports_configure(void);
/* Interrupt configuration function delcaration */
static void interrupts_configure(void);
/* MCU peripheral module configuration function declaration */
static void peripheral_modules_enable(void);
/* Configure MCU clocks. */
static void clock_source_select (void);
void operating_frequency_set(void);
/***********************************************************************************************************************
* Function name: hardware_setup
* Description : Contains setup functions called at device restart
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void HardwareSetup(void)
{
operating_frequency_set();
output_ports_configure();
interrupts_configure();
peripheral_modules_enable();
}
/***********************************************************************************************************************
* Function name: output_ports_configure
* Description : Configures the port and pin direction settings, and sets the pin outputs to a safe level.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void output_ports_configure(void)
{
/* Enable LEDs. */
/* Start with LEDs off. */
LED0 = LED_OFF;
LED1 = LED_OFF;
LED2 = LED_OFF;
LED3 = LED_OFF;
/* Set LED pins as outputs. */
LED0_PDR = 1;
LED1_PDR = 1;
LED2_PDR = 1;
LED3_PDR = 1;
/* Enable switches. */
/* Set pins as inputs. */
SW1_PDR = 0;
SW2_PDR = 0;
SW3_PDR = 0;
/* Set port mode registers for switches. */
SW1_PMR = 0;
SW2_PMR = 0;
SW3_PMR = 0;
/* Unlock MPC registers to enable writing to them. */
MPC.PWPR.BIT.B0WI = 0 ; /* Unlock protection register */
MPC.PWPR.BIT.PFSWE = 1 ; /* Unlock MPC registers */
/* TXD1 is output. */
PORT1.PDR.BIT.B6 = 1;
PORT1.PMR.BIT.B6 = 1;
MPC.P16PFS.BYTE = 0x0A;
/* RXD1 is input. */
PORT1.PDR.BIT.B5 = 0;
PORT1.PMR.BIT.B5 = 1;
MPC.P15PFS.BYTE = 0x0A;
/* Configure the pin connected to the ADC Pot as an input */
PORT4.PDR.BIT.B4 = 0;
/* Protect off. */
SYSTEM.PRCR.WORD = 0xA50B;
/* Turn off module stop for the A2D converter. */
SYSTEM.MSTPCRA.BIT.MSTPA17 = 0;
/* Protect on. */
SYSTEM.PRCR.WORD = 0xA500;
/* Initialise the first button to generate an interrupt. */
R_SWITCHES_Init();
}
/***********************************************************************************************************************
* Function name: interrupts_configure
* Description : Configures interrupts used
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void interrupts_configure(void)
{
/* Add code here to setup additional interrupts */
}
/***********************************************************************************************************************
* Function name: peripheral_modules_enable
* Description : Enables and configures peripheral devices on the MCU
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void peripheral_modules_enable(void)
{
/* Enable triggers to start an ADC conversion. */
S12AD.ADCSR.BIT.TRGE = 1;
/* Only channel 4 is going to be used. */
S12AD.ADANSA.BIT.ANSA4 = 1;
}
/***********************************************************************************************************************
* Function name: operating_frequency_set
* Description : Configures the clock settings for each of the device clocks
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void operating_frequency_set(void)
{
/* Used for constructing value to write to SCKCR and CKOCR registers. */
uint32_t temp_clock = 0;
/*
Clock Description Frequency
----------------------------------------
Input Clock Frequency............ 16 MHz
PLL frequency (x3)............... 48 MHz
Internal Clock Frequency......... 24 MHz
Peripheral Clock Frequency....... 24 MHz
Clock Out Frequency.............. 1 MHz */
volatile unsigned int i;
/* Protect off. */
SYSTEM.PRCR.WORD = 0xA50B;
/* Select the clock based upon user's choice. */
clock_source_select();
/* Figure out setting for FCK bits. */
#if FCK_DIV == 1
/* Do nothing since FCK bits should be 0. */
#elif FCK_DIV == 2
temp_clock |= 0x10000000;
#elif FCK_DIV == 4
temp_clock |= 0x20000000;
#elif FCK_DIV == 8
temp_clock |= 0x30000000;
#elif FCK_DIV == 16
temp_clock |= 0x40000000;
#elif FCK_DIV == 32
temp_clock |= 0x50000000;
#elif FCK_DIV == 64
temp_clock |= 0x60000000;
#else
#error "Error! Invalid setting for FCK_DIV in r_bsp_config.h"
#endif
/* Figure out setting for ICK bits. */
#if ICK_DIV == 1
/* Do nothing since ICK bits should be 0. */
#elif ICK_DIV == 2
temp_clock |= 0x01000000;
#elif ICK_DIV == 4
temp_clock |= 0x02000000;
#elif ICK_DIV == 8
temp_clock |= 0x03000000;
#elif ICK_DIV == 16
temp_clock |= 0x04000000;
#elif ICK_DIV == 32
temp_clock |= 0x05000000;
#elif ICK_DIV == 64
temp_clock |= 0x06000000;
#else
#error "Error! Invalid setting for ICK_DIV in r_bsp_config.h"
#endif
/* Figure out setting for PCKB bits. */
#if PCKB_DIV == 1
/* Do nothing since PCKB bits should be 0. */
#elif PCKB_DIV == 2
temp_clock |= 0x00000100;
#elif PCKB_DIV == 4
temp_clock |= 0x00000200;
#elif PCKB_DIV == 8
temp_clock |= 0x00000300;
#elif PCKB_DIV == 16
temp_clock |= 0x00000400;
#elif PCKB_DIV == 32
temp_clock |= 0x00000500;
#elif PCKB_DIV == 64
temp_clock |= 0x00000600;
#else
#error "Error! Invalid setting for PCKB_DIV in r_bsp_config.h"
#endif
/* Figure out setting for PCKD bits. */
#if PCKD_DIV == 1
/* Do nothing since PCKD bits should be 0. */
#elif PCKD_DIV == 2
temp_clock |= 0x00000001;
#elif PCKD_DIV == 4
temp_clock |= 0x00000002;
#elif PCKD_DIV == 8
temp_clock |= 0x00000003;
#elif PCKD_DIV == 16
temp_clock |= 0x00000004;
#elif PCKD_DIV == 32
temp_clock |= 0x00000005;
#elif PCKD_DIV == 64
temp_clock |= 0x00000006;
#else
#error "Error! Invalid setting for PCKD_DIV in r_bsp_config.h"
#endif
/* Set SCKCR register. */
SYSTEM.SCKCR.LONG = temp_clock;
/* Choose clock source. Default for r_bsp_config.h is PLL. */
SYSTEM.SCKCR3.WORD = ((uint16_t)CLOCK_SOURCE) << 8;
/* Protect on. */
SYSTEM.PRCR.WORD = 0xA500;
}
/***********************************************************************************************************************
* Function name: clock_source_select
* Description : Enables and disables clocks as chosen by the user. This function also implements the software delays
* needed for the clocks to stabilize.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
static void clock_source_select (void)
{
/* Declared volatile for software delay purposes. */
volatile unsigned int i;
/* NOTE: AS OF VERSION 0.50 OF THE RX111 HARDWARE MANUAL, ALL OF THE CLOCK
* STABILIZATION TIMES ARE TBD. FOR NOW, WHERE EVER A WAIT COUNT REGISTER
* IS AVAILABLE, THE DELAY IS SET TO THE MAX NUMBER OF CYCLES. WHERE EVER
* DELAY LOOPS ARE PRESENT, THE VALUES FROM THE 63N ARE RE-USED. KEEP IN
* MIND THAT THE 63N RUNS ON A FASTER CRYSTAL.
*/
#if (CLOCK_SOURCE == 1)
/* HOCO is chosen. Start it operating. */
SYSTEM.HOCOCR.BYTE = 0x00;
/* The delay period needed is to make sure that the HOCO has stabilized.*/
for(i = 0; i< 28; i++) // tHOCOWT2 is TBD
{
__asm volatile( "NOP" );
}
#else
/* HOCO is not chosen. Stop the HOCO. */
SYSTEM.HOCOCR.BYTE = 0x01;
#endif
#if (CLOCK_SOURCE == 2)
/* Main clock oscillator is chosen. Start it operating. */
SYSTEM.MOSCWTCR.BYTE = 0x07; // Wait 65,536 cycles
/* Set the main clock to operating. */
SYSTEM.MOSCCR.BYTE = 0x00;
/* The delay period needed is to make sure that the main clock has stabilized. */
for(i = 0; i< 140; i++) // tMAINOSCWT is TBD
{
__asm volatile( "NOT" );
}
#endif
#if (CLOCK_SOURCE == 3)
/* Sub-clock oscillator is chosen. Start it operating. */
/* In section 9.8.4, there is a reference to a SOSCWTCR register, but there is no
* description for this register in the manual nor reference for it in iodefine.h. */
/* Set the sub-clock to operating. */
SYSTEM.SOSCCR.BYTE = 0x00;
/* The delay period needed is to make sure that the sub-clock has stabilized. */
for(i = 0; i< 30233; i++) // tSUBOSCWT0 is TBD
{
__asm volatile( "NOP" );
}
#else
/* Set the sub-clock to stopped. */
SYSTEM.SOSCCR.BYTE = 0x01;
#endif
#if (CLOCK_SOURCE == 4)
/* PLL is chosen. Start it operating. Must start main clock as well since PLL uses it. */
SYSTEM.MOSCWTCR.BYTE = 0x07; // Wait 65,536 cycles
/* Set the main clock to operating. */
SYSTEM.MOSCCR.BYTE = 0x00;
/* Set PLL Input Divisor. */
SYSTEM.PLLCR.BIT.PLIDIV = PLL_DIV >> 1;
/* Set PLL Multiplier. */
SYSTEM.PLLCR.BIT.STC = (PLL_MUL * 2) - 1;
/* Set the PLL to operating. */
SYSTEM.PLLCR2.BYTE = 0x00;
/* The delay period needed is to make sure that the main clock and PLL have stabilized. */
for(i = 0; i< 140; i++) // tPLLWT2 is TBD
{
__asm volatile( "NOP" );
}
#endif
/* LOCO is saved for last since it is what is running by default out of reset. This means you do not want to turn
it off until another clock has been enabled and is ready to use. */
#if (CLOCK_SOURCE == 0)
/* LOCO is chosen. This is the default out of reset. */
SYSTEM.LOCOCR.BYTE = 0x00;
#else
/* LOCO is not chosen and another clock has already been setup. Turn off the LOCO. */
SYSTEM.LOCOCR.BYTE = 0x01;
#endif
/* Make sure a valid clock was chosen. */
#if (CLOCK_SOURCE > 4) || (CLOCK_SOURCE < 0)
#error "ERROR - Valid clock source must be chosen in r_bsp_config.h using CLOCK_SOURCE macro."
#endif
}

View File

@ -0,0 +1,54 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp.h
* Description : Has the header files that should be included for this platform.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 13.01.2012 1.00 First Release
* : 27.06.2012 1.10 Updated with new information to reflect udpated r_bsp structure.
***********************************************************************************************************************/
#ifndef PLATFORM_BOARD_USER
#define PLATFORM_BOARD_USER
/* Make sure that no other platforms have already been defined. Do not touch this! */
#ifdef PLATFORM_DEFINED
#error "Error - Multiple platforms defined in platform.h!"
#else
#define PLATFORM_DEFINED
#endif
/***********************************************************************************************************************
INCLUDE APPROPRIATE MCU AND BOARD FILES
***********************************************************************************************************************/
/* This is a user defined board. Start off by:
1)Copy and rename one of the 'board' folders that most closely matches your system (same MCU Series and Group).
2)Substitute in your MCU Group for the *MCU Group* option in the #include below for mcu_info.h.
3)Copy the other #includes from the r_bsp.h in the 'board' folder that you copied earlier.
4)Configure the BSP for your board by modifying the r_bsp_config_reference.h.
5)Copy r_bsp_config_reference.h to your project directory and rename it r_bsp_config.h.
You can also add your own include files here as well. */
#include "r_bsp_config.h"
#include ".\mcu\*MCU Group*\mcu_info.h"
#endif /* PLATFORM_BOARD_USER */

View File

@ -0,0 +1,283 @@
/***********************************************************************/
/* */
/* PROJECT NAME : RTOSDemo_GCC */
/* FILE : interrupt_handlers.c */
/* DESCRIPTION : Interrupt Handler */
/* CPU SERIES : RX100 */
/* CPU TYPE : RX111 */
/* */
/* This file is generated by e2studio. */
/* */
/***********************************************************************/
#include "interrupt_handlers.h"
// INT_Exception(Supervisor Instruction)
void INT_Excep_SuperVisorInst(void){/* brk(); */}
// Exception(Undefined Instruction)
void INT_Excep_UndefinedInst(void){/* brk(); */}
// Exception(Floating Point)
void INT_Excep_FloatingPoint(void){/* brk(); */}
// NMI
void INT_NonMaskableInterrupt(void){/* brk(); */}
// Dummy
void Dummy(void)
{
for( ;; );
}
// BRK
void INT_Excep_BRK(void){/* wait(); */}
//;0x0000 Reserved
void INT_Excep_BUSERR(void){ }
// ICU SWINT
void INT_Excep_ICU_SWINT(void){ }
// CMT0 CMI0
void INT_Excep_CMT0_CMI0(void){ }
// CMT1 CMI1
void INT_Excep_CMT1_CMI1(void){ }
// CAC FERRF
void INT_Excep_CAC_FERRF(void){ }
// CAC MENDF
void INT_Excep_CAC_MENDF(void){ }
// CAC OVFF
void INT_Excep_CAC_OVFF(void){ }
// USB0 D0FIFO0
void INT_Excep_USB0_D0FIFO0(void){ }
// USB0 D1FIFO0
void INT_Excep_USB0_D1FIFO0(void){ }
// USB0 USBI0
void INT_Excep_USB0_USBI0(void){ }
// RSPI0 SPEI0
void INT_Excep_RSPI0_SPEI0(void){ }
// RSPI0 SPRI0
void INT_Excep_RSPI0_SPRI0(void){ }
// RSPI0 SPTI0
void INT_Excep_RSPI0_SPTI0(void){ }
// RSPI0 SPII0
void INT_Excep_RSPI0_SPII0(void){ }
// DOC DOPCF
void INT_Excep_DOC_DOPCF(void){ }
// RTC CUP
void INT_Excep_RTC_CUP(void){ }
// ICU IRQ0
void INT_Excep_ICU_IRQ0(void){ }
// ICU IRQ1
void INT_Excep_ICU_IRQ1(void){ }
// ICU IRQ2
void INT_Excep_ICU_IRQ2(void){ }
// ICU IRQ3
void INT_Excep_ICU_IRQ3(void){ }
// ICU IRQ4
void INT_Excep_ICU_IRQ4(void){ }
// ICU IRQ5
void INT_Excep_ICU_IRQ5(void){ }
// ICU IRQ6
void INT_Excep_ICU_IRQ6(void){ }
// ICU IRQ7
void INT_Excep_ICU_IRQ7(void){ }
// LVD LVD1
void INT_Excep_LVD_LVD1(void){ }
// LVD LVD2
void INT_Excep_LVD_LVD2(void){ }
// USB0 USBR0
void INT_Excep_USB0_USBR0(void){ }
// RTC ALM
void INT_Excep_RTC_ALM(void){ }
// RTC PRD
void INT_Excep_RTC_PRD(void){ }
// S12AD S12ADI0
void INT_Excep_S12AD_S12ADI0(void){ }
// S12AD GBADI
void INT_Excep_S12AD_GBADI(void){ }
// ELC ELSR18I
void INT_Excep_ELC_ELSR18I(void){ }
// MTU0 TGIA0
void INT_Excep_MTU0_TGIA0(void){ }
// MTU0 TGIB0
void INT_Excep_MTU0_TGIB0(void){ }
// MTU0 TGIC0
void INT_Excep_MTU0_TGIC0(void){ }
// MTU0 TGID0
void INT_Excep_MTU0_TGID0(void){ }
// MTU0 TCIV0
void INT_Excep_MTU0_TCIV0(void){ }
// MTU0 TGIE0
void INT_Excep_MTU0_TGIE0(void){ }
// MTU0 TGIF0
void INT_Excep_MTU0_TGIF0(void){ }
// MTU1 TGIA1
void INT_Excep_MTU1_TGIA1(void){ }
// MTU1 TGIB1
void INT_Excep_MTU1_TGIB1(void){ }
// MTU1 TCIV1
void INT_Excep_MTU1_TCIV1(void){ }
// MTU1 TCIU1
void INT_Excep_MTU1_TCIU1(void){ }
// MTU2 TGIA2
void INT_Excep_MTU2_TGIA2(void){ }
// MTU2 TGIB2
void INT_Excep_MTU2_TGIB2(void){ }
// MTU2 TCIV2
void INT_Excep_MTU2_TCIV2(void){ }
// MTU2 TCIU2
void INT_Excep_MTU2_TCIU2(void){ }
// MTU3 TGIA3
void INT_Excep_MTU3_TGIA3(void){ }
// MTU3 TGIB3
void INT_Excep_MTU3_TGIB3(void){ }
// MTU3 TGIC3
void INT_Excep_MTU3_TGIC3(void){ }
// MTU3 TGID3
void INT_Excep_MTU3_TGID3(void){ }
// MTU3 TCIV3
void INT_Excep_MTU3_TCIV3(void){ }
// MTU4 TGIA4
void INT_Excep_MTU4_TGIA4(void){ }
// MTU4 TGIB4
void INT_Excep_MTU4_TGIB4(void){ }
// MTU4 TGIC4
void INT_Excep_MTU4_TGIC4(void){ }
// MTU4 TGID4
void INT_Excep_MTU4_TGID4(void){ }
// MTU4 TCIV4
void INT_Excep_MTU4_TCIV4(void){ }
// MTU5 TGIU5
void INT_Excep_MTU5_TGIU5(void){ }
// MTU5 TGIV5
void INT_Excep_MTU5_TGIV5(void){ }
// MTU5 TGIW5
void INT_Excep_MTU5_TGIW5(void){ }
// POE OEI1
void INT_Excep_POE_OEI1(void){ }
// POE OEI2
void INT_Excep_POE_OEI2(void){ }
// SCI1 ERI1
void INT_Excep_SCI1_ERI1(void){ }
// SCI1 RXI1
void INT_Excep_SCI1_RXI1(void){ }
// SCI1 TXI1
void INT_Excep_SCI1_TXI1(void){ }
// SCI1 TEI1
void INT_Excep_SCI1_TEI1(void){ }
// SCI5 ERI5
void INT_Excep_SCI5_ERI5(void){ }
// SCI5 RXI5
void INT_Excep_SCI5_RXI5(void){ }
// SCI5 TXI5
void INT_Excep_SCI5_TXI5(void){ }
// SCI5 TEI5
void INT_Excep_SCI5_TEI5(void){ }
// SCI12 ERI12
void INT_Excep_SCI12_ERI12(void){ }
// SCI12 RXI12
void INT_Excep_SCI12_RXI12(void){ }
// SCI12 TXI12
void INT_Excep_SCI12_TXI12(void){ }
// SCI12 TEI12
void INT_Excep_SCI12_TEI12(void){ }
// SCI12 SCIX0
void INT_Excep_SCI12_SCIX0(void){ }
// SCI12 SCIX1
void INT_Excep_SCI12_SCIX1(void){ }
// SCI12 SCIX2
void INT_Excep_SCI12_SCIX2(void){ }
// SCI12 SCIX3
void INT_Excep_SCI12_SCIX3(void){ }
// RIIC0 EEI0
void INT_Excep_RIIC0_EEI0(void){ }
// RIIC0 RXI0
void INT_Excep_RIIC0_RXI0(void){ }
// RIIC0 TXI0
void INT_Excep_RIIC0_TXI0(void){ }
// RIIC0 TEI0
void INT_Excep_RIIC0_TEI0(void){ }

View File

@ -0,0 +1,371 @@
/***********************************************************************/
/* */
/* PROJECT NAME : RTOSDemo_GCC */
/* FILE : interrupt_handlers.h */
/* DESCRIPTION : Interrupt Handler Declarations */
/* CPU SERIES : RX100 */
/* CPU TYPE : RX111 */
/* */
/* This file is generated by e2studio. */
/* */
/***********************************************************************/
#ifndef INTERRUPT_HANDLERS_H
#define INTERRUPT_HANDLERS_H
// Exception(Supervisor Instruction)
// Exception(Supervisor Instruction)
void INT_Excep_SuperVisorInst(void) __attribute__ ((interrupt));
// Exception(Undefined Instruction)
void INT_Excep_UndefinedInst(void) __attribute__ ((interrupt));
// Exception(Floating Point)
void INT_Excep_FloatingPoint(void) __attribute__ ((interrupt));
// NMI
void INT_NonMaskableInterrupt(void) __attribute__ ((interrupt));
// Dummy
void Dummy (void) __attribute__ ((interrupt));
// BRK
void INT_Excep_BRK(void) __attribute__ ((interrupt));
//;0x0000 Reserved
void INT_Excep_BUSERR(void) __attribute__ ((interrupt));
//;0x0044 Reserved
void INT_Excep_ICU_SWINT(void) __attribute__ ((interrupt));
// CMT0 CMI0
void INT_Excep_CMT0_CMI0(void) __attribute__ ((interrupt));
// CMT1 CMI1
void INT_Excep_CMT1_CMI1(void) __attribute__ ((interrupt));
// CAC FERRF
void INT_Excep_CAC_FERRF(void) __attribute__ ((interrupt));
// CAC MENDF
void INT_Excep_CAC_MENDF(void) __attribute__ ((interrupt));
// CAC OVFF
void INT_Excep_CAC_OVFF(void) __attribute__ ((interrupt));
// USB0 D0FIFO0
void INT_Excep_USB0_D0FIFO0(void) __attribute__ ((interrupt));
// USB0 D1FIFO0
void INT_Excep_USB0_D1FIFO0(void) __attribute__ ((interrupt));
// USB0 USBI0
void INT_Excep_USB0_USBI0(void) __attribute__ ((interrupt));
// RSPI0 SPEI0
void INT_Excep_RSPI0_SPEI0(void) __attribute__ ((interrupt));
// RSPI0 SPRI0
void INT_Excep_RSPI0_SPRI0(void) __attribute__ ((interrupt));
// RSPI0 SPTI0
void INT_Excep_RSPI0_SPTI0(void) __attribute__ ((interrupt));
// RSPI0 SPII0
void INT_Excep_RSPI0_SPII0(void) __attribute__ ((interrupt));
// DOC DOPCF
void INT_Excep_DOC_DOPCF(void) __attribute__ ((interrupt));
// RTC CUP
void INT_Excep_RTC_CUP(void) __attribute__ ((interrupt));
// ICU IRQ0
void INT_Excep_ICU_IRQ0(void) __attribute__ ((interrupt));
// ICU IRQ1
void INT_Excep_ICU_IRQ1(void) __attribute__ ((interrupt));
// ICU IRQ2
void INT_Excep_ICU_IRQ2(void) __attribute__ ((interrupt));
// ICU IRQ3
void INT_Excep_ICU_IRQ3(void) __attribute__ ((interrupt));
// ICU IRQ4
void INT_Excep_ICU_IRQ4(void) __attribute__ ((interrupt));
// ICU IRQ5
void INT_Excep_ICU_IRQ5(void) __attribute__ ((interrupt));
// ICU IRQ6
void INT_Excep_ICU_IRQ6(void) __attribute__ ((interrupt));
// ICU IRQ7
void INT_Excep_ICU_IRQ7(void) __attribute__ ((interrupt));
// LVD LVD1
void INT_Excep_LVD_LVD1(void) __attribute__ ((interrupt));
// LVD LVD2
void INT_Excep_LVD_LVD2(void) __attribute__ ((interrupt));
// USB0 USBR0
void INT_Excep_USB0_USBR0(void) __attribute__ ((interrupt));
// RTC ALM
void INT_Excep_RTC_ALM(void) __attribute__ ((interrupt));
// RTC PRD
void INT_Excep_RTC_PRD(void) __attribute__ ((interrupt));
// S12AD S12ADI0
void INT_Excep_S12AD_S12ADI0(void) __attribute__ ((interrupt));
// S12AD GBADI
void INT_Excep_S12AD_GBADI(void) __attribute__ ((interrupt));
// ELC ELSR18I
void INT_Excep_ELC_ELSR18I(void) __attribute__ ((interrupt));
// MTU0 TGIA0
void INT_Excep_MTU0_TGIA0(void) __attribute__ ((interrupt));
// MTU0 TGIB0
void INT_Excep_MTU0_TGIB0(void) __attribute__ ((interrupt));
// MTU0 TGIC0
void INT_Excep_MTU0_TGIC0(void) __attribute__ ((interrupt));
// MTU0 TGID0
void INT_Excep_MTU0_TGID0(void) __attribute__ ((interrupt));
// MTU0 TCIV0
void INT_Excep_MTU0_TCIV0(void) __attribute__ ((interrupt));
// MTU0 TGIE0
void INT_Excep_MTU0_TGIE0(void) __attribute__ ((interrupt));
// MTU0 TGIF0
void INT_Excep_MTU0_TGIF0(void) __attribute__ ((interrupt));
// MTU1 TGIA1
void INT_Excep_MTU1_TGIA1(void) __attribute__ ((interrupt));
// MTU1 TGIB1
void INT_Excep_MTU1_TGIB1(void) __attribute__ ((interrupt));
// MTU1 TCIV1
void INT_Excep_MTU1_TCIV1(void) __attribute__ ((interrupt));
// MTU1 TCIU1
void INT_Excep_MTU1_TCIU1(void) __attribute__ ((interrupt));
// MTU2 TGIA2
void INT_Excep_MTU2_TGIA2(void) __attribute__ ((interrupt));
// MTU2 TGIB2
void INT_Excep_MTU2_TGIB2(void) __attribute__ ((interrupt));
// MTU2 TCIV2
void INT_Excep_MTU2_TCIV2(void) __attribute__ ((interrupt));
// MTU2 TCIU2
void INT_Excep_MTU2_TCIU2(void) __attribute__ ((interrupt));
// MTU3 TGIA3
void INT_Excep_MTU3_TGIA3(void) __attribute__ ((interrupt));
// MTU3 TGIB3
void INT_Excep_MTU3_TGIB3(void) __attribute__ ((interrupt));
// MTU3 TGIC3
void INT_Excep_MTU3_TGIC3(void) __attribute__ ((interrupt));
// MTU3 TGID3
void INT_Excep_MTU3_TGID3(void) __attribute__ ((interrupt));
// MTU3 TCIV3
void INT_Excep_MTU3_TCIV3(void) __attribute__ ((interrupt));
// MTU4 TGIA4
void INT_Excep_MTU4_TGIA4(void) __attribute__ ((interrupt));
// MTU4 TGIB4
void INT_Excep_MTU4_TGIB4(void) __attribute__ ((interrupt));
// MTU4 TGIC4
void INT_Excep_MTU4_TGIC4(void) __attribute__ ((interrupt));
// MTU4 TGID4
void INT_Excep_MTU4_TGID4(void) __attribute__ ((interrupt));
// MTU4 TCIV4
void INT_Excep_MTU4_TCIV4(void) __attribute__ ((interrupt));
// MTU5 TGIU5
void INT_Excep_MTU5_TGIU5(void) __attribute__ ((interrupt));
// MTU5 TGIV5
void INT_Excep_MTU5_TGIV5(void) __attribute__ ((interrupt));
// MTU5 TGIW5
void INT_Excep_MTU5_TGIW5(void) __attribute__ ((interrupt));
// POE OEI1
void INT_Excep_POE_OEI1(void) __attribute__ ((interrupt));
// POE OEI2
void INT_Excep_POE_OEI2(void) __attribute__ ((interrupt));
// SCI1 ERI1
void INT_Excep_SCI1_ERI1(void) __attribute__ ((interrupt));
// SCI1 RXI1
void INT_Excep_SCI1_RXI1(void) __attribute__ ((interrupt));
// SCI1 TXI1
void INT_Excep_SCI1_TXI1(void) __attribute__ ((interrupt));
// SCI1 TEI1
void INT_Excep_SCI1_TEI1(void) __attribute__ ((interrupt));
// SCI5 ERI5
void INT_Excep_SCI5_ERI5(void) __attribute__ ((interrupt));
// SCI5 RXI5
void INT_Excep_SCI5_RXI5(void) __attribute__ ((interrupt));
// SCI5 TXI5
void INT_Excep_SCI5_TXI5(void) __attribute__ ((interrupt));
// SCI5 TEI5
void INT_Excep_SCI5_TEI5(void) __attribute__ ((interrupt));
// SCI12 ERI12
void INT_Excep_SCI12_ERI12(void) __attribute__ ((interrupt));
// SCI12 RXI12
void INT_Excep_SCI12_RXI12(void) __attribute__ ((interrupt));
// SCI12 TXI12
void INT_Excep_SCI12_TXI12(void) __attribute__ ((interrupt));
// SCI12 TEI12
void INT_Excep_SCI12_TEI12(void) __attribute__ ((interrupt));
// SCI12 SCIX0
void INT_Excep_SCI12_SCIX0(void) __attribute__ ((interrupt));
// SCI12 SCIX1
void INT_Excep_SCI12_SCIX1(void) __attribute__ ((interrupt));
// SCI12 SCIX2
void INT_Excep_SCI12_SCIX2(void) __attribute__ ((interrupt));
// SCI12 SCIX3
void INT_Excep_SCI12_SCIX3(void) __attribute__ ((interrupt));
// RIIC0 EEI0
void INT_Excep_RIIC0_EEI0(void) __attribute__ ((interrupt));
// RIIC0 RXI0
void INT_Excep_RIIC0_RXI0(void) __attribute__ ((interrupt));
// RIIC0 TXI0
void INT_Excep_RIIC0_TXI0(void) __attribute__ ((interrupt));
// RIIC0 TEI0
void INT_Excep_RIIC0_TEI0(void) __attribute__ ((interrupt));
//;<<VECTOR DATA START (POWER ON RESET)>>
//;Power On Reset PC
extern void PowerON_Reset(void);
//;<<VECTOR DATA END (POWER ON RESET)>>
#endif

View File

@ -0,0 +1,112 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : mcu_info.h
* Device(s) : RX111
* Description : Information about the MCU on this board (RSKRX111).
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef _MCU_INFO
#define _MCU_INFO
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Gets MCU configuration information. */
#include "r_bsp_config.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* MCU Series. */
#if MCU_PART_SERIES == 0x0
#define MCU_SERIES_RX100 (1)
#else
#error "ERROR - MCU_PART_SERIES - Unknown MCU Series chosen in r_bsp_config.h"
#endif
/* MCU Group name. */
#if MCU_PART_GROUP == 0x1
#define MCU_RX111 (1)
#define MCU_RX11x (1)
#else
#error "ERROR - MCU_PART_GROUP - Unknown MCU Group chosen in r_bsp_config.h"
#endif
/* Package. */
#if MCU_PART_PACKAGE == 0x0
#define PACKAGE_LFQFP64 (1)
#elif MCU_PART_PACKAGE == 0x1
#define PACKAGE_LQFP64 (1)
#elif MCU_PART_PACKAGE == 0x2
#define PACKAGE_TFLGA64 (1)
#elif MCU_PART_PACKAGE == 0x3
#define PACKAGE_LFQFP48 (1)
#elif MCU_PART_PACKAGE == 0x4
#define PACKAGE_VQFN48 (1)
#elif MCU_PART_PACKAGE == 0x5
#define PACKAGE_HWQFN36 (1)
#elif MCU_PART_PACKAGE == 0x6
#define PACKAGE_WFLGA36 (1)
#elif MCU_PART_PACKAGE == 0x7
#define PACKAGE_SSOP36 (1)
#else
#error "ERROR - MCU_PART_PACKAGE - Unknown package chosen in r_bsp_config.h"
#endif
/* Memory size of your MCU. */
#if MCU_PART_MEMORY_SIZE == 0x0 // "J" parts
#define ROM_SIZE_BYTES (16384)
#define RAM_SIZE_BYTES (8192)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x1
#define ROM_SIZE_BYTES (32768)
#define RAM_SIZE_BYTES (10240)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x3
#define ROM_SIZE_BYTES (65536)
#define RAM_SIZE_BYTES (10240)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x4
#define ROM_SIZE_BYTES (98304)
#define RAM_SIZE_BYTES (16384)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x5
#define ROM_SIZE_BYTES (131072)
#define RAM_SIZE_BYTES (16384)
#define DF_SIZE_BYTES (8192)
#else
#error "ERROR - MCU_PART_MEMORY_SIZE - Unknown memory size chosen in r_bsp_config.h"
#endif
/* System clock speed in Hz. */
#define ICLK_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV)
/* Peripheral Module Clock B speed in Hz. */
#define PCLKB_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV)
/* Peripheral Module Clock D speed in Hz. */
#define PCLKD_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV)
/* FlashIF clock speed in Hz. */
#define FCLK_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV)
#endif /* _MCU_INFO */

View File

@ -0,0 +1,175 @@
/***********************************************************************/
/* */
/* PROJECT NAME : RTOSDemo_GCC */
/* FILE : reset_program.asm */
/* DESCRIPTION : Reset Program */
/* CPU SERIES : RX100 */
/* CPU TYPE : RX111 */
/* */
/* This file is generated by e2studio. */
/* */
/***********************************************************************/
/*reset_program.asm*/
.list
.section .text
.global _PowerON_Reset /*global Start routine */
.extern _HardwareSetup /*external Sub-routine to initialise Hardware*/
.extern _data
.extern _mdata
.extern _ebss
.extern _bss
.extern _edata
.extern _main
.extern _ustack
.extern _istack
.extern _rvectors
.extern _exit
_PowerON_Reset :
/* initialise user stack pointer */
mvtc #_ustack,USP
/* initialise interrupt stack pointer */
mvtc #_istack,ISP
/* setup intb */
mvtc #_rvectors_start, intb /* INTERRUPT VECTOR ADDRESS definition */
/* load data section from ROM to RAM */
mov #_mdata,r2 /* src ROM address of data section in R2 */
mov #_data,r1 /* dest start RAM address of data section in R1 */
mov #_edata,r3 /* end RAM address of data section in R3 */
sub r1,r3 /* size of data section in R3 (R3=R3-R1) */
smovf /* block copy R3 bytes from R2 to R1 */
/* bss initialisation : zero out bss */
mov #00h,r2 /* load R2 reg with zero */
mov #_ebss, r3 /* store the end address of bss in R3 */
mov #_bss, r1 /* store the start address of bss in R1 */
sub r1,r3 /* size of bss section in R3 (R3=R3-R1) */
sstr.b
/* call the hardware initialiser */
bsr.a _HardwareSetup
nop
#ifdef RUN_IN_USER_MODE
/* setup PSW */
mvtc #10000h, psw /* Set Ubit & Ibit for PSW */
/* change PSW PM to user-mode */
MVFC PSW,R1
OR #00100000h,R1
PUSH.L R1
MVFC PC,R1
ADD #10,R1
PUSH.L R1
RTE
NOP
NOP
#endif
#ifdef CPPAPP
bsr.a __rx_init
#endif
/* start user program */
bsr.a _main
bsr.a _exit
#ifdef CPPAPP
.global _rx_run_preinit_array
.type _rx_run_preinit_array,@function
_rx_run_preinit_array:
mov #__preinit_array_start,r1
mov #__preinit_array_end,r2
bra.a _rx_run_inilist
.global _rx_run_init_array
.type _rx_run_init_array,@function
_rx_run_init_array:
mov #__init_array_start,r1
mov #__init_array_end,r2
mov #4, r3
bra.a _rx_run_inilist
.global _rx_run_fini_array
.type _rx_run_fini_array,@function
_rx_run_fini_array:
mov #__fini_array_start,r2
mov #__fini_array_end,r1
mov #-4, r3
/* fall through */
_rx_run_inilist:
next_inilist:
cmp r1,r2
beq.b done_inilist
mov.l [r1],r4
cmp #-1, r4
beq.b skip_inilist
cmp #0, r4
beq.b skip_inilist
pushm r1-r3
jsr r4
popm r1-r3
skip_inilist:
add r3,r1
bra.b next_inilist
done_inilist:
rts
.section .init,"ax"
.balign 4
.global __rx_init
__rx_init:
.section .fini,"ax"
.balign 4
.global __rx_fini
__rx_fini:
bsr.a _rx_run_fini_array
.section .sdata
.balign 4
.global __gp
.weak __gp
__gp:
.section .data
.global ___dso_handle
.weak ___dso_handle
___dso_handle:
.long 0
.section .init,"ax"
bsr.a _rx_run_preinit_array
bsr.a _rx_run_init_array
rts
.global __rx_init_end
__rx_init_end:
.section .fini,"ax"
rts
.global __rx_fini_end
__rx_fini_end:
#endif
/* call to exit*/
_exit:
bra _loop_here
_loop_here:
bra _loop_here
.text
.end

View File

@ -0,0 +1,25 @@
/***********************************************************************/
/* */
/* PROJECT NAME : RTOSDemo_GCC */
/* FILE : typedefine.h */
/* DESCRIPTION : Aliases of Integer Type */
/* CPU SERIES : RX100 */
/* CPU TYPE : RX111 */
/* */
/* This file is generated by e2studio. */
/* */
/***********************************************************************/
typedef signed char _SBYTE;
typedef unsigned char _UBYTE;
typedef signed short _SWORD;
typedef unsigned short _UWORD;
typedef signed int _SINT;
typedef unsigned int _UINT;
typedef signed long _SDWORD;
typedef unsigned long _UDWORD;
typedef signed long long _SQWORD;
typedef unsigned long long _UQWORD;

View File

@ -0,0 +1,590 @@
/***********************************************************************/
/* */
/* PROJECT NAME : RTOSDemo_GCC */
/* FILE : vector_table.c */
/* DESCRIPTION : Vector Table */
/* CPU SERIES : RX100 */
/* CPU TYPE : RX111 */
/* */
/* This file is generated by e2studio. */
/* */
/***********************************************************************/
#include "interrupt_handlers.h"
typedef void (*fp) (void);
extern void PowerON_Reset (void);
extern void stack (void);
extern void vPortSoftwareInterruptISR( void );
extern void vPortTickISR( void );
extern void Dummy( void );
extern void vButtonInterrupt( void );
#ifdef __RX_LITTLE_ENDIAN__
const unsigned char Endian_Select[] __attribute__ ((section (".endian_bytes"))) = {
0xff, 0xff, 0xff, 0xff
};
#elif __RX_BIG_ENDIAN__
const unsigned char Endian_Select[] __attribute__ ((section (".endian_bytes"))) = {
0xff, 0xff, 0xff, 0xf8
};
#endif
// Option bytes setting for OFS1:0xFFFFFF88 and OFS0:0xFFFFFF8C
const unsigned char Security_Id[] __attribute__ ((section (".option_bytes"))) = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
#define FVECT_SECT __attribute__ ((section (".fvectors")))
const void *HardwareVectors[] FVECT_SECT = {
//;0xffffffd0 Exception(Supervisor Instruction)
INT_Excep_SuperVisorInst,
//;0xffffffd4 Reserved
(fp)0,
//;0xffffffd8 Reserved
(fp)0,
//;0xffffffdc Exception(Undefined Instruction)
INT_Excep_UndefinedInst,
//;0xffffffe0 Reserved
(fp)0,
//;0xffffffe4 Exception(Floating Point)
INT_Excep_FloatingPoint,
//;0xffffffe8 Reserved
(fp)0,
//;0xffffffec Reserved
(fp)0,
//;0xfffffff0 Reserved
(fp)0,
//;0xfffffff4 Reserved
(fp)0,
//;0xfffffff8 NMI
INT_NonMaskableInterrupt,
//;0xfffffffc RESET
//;<<VECTOR DATA START (POWER ON RESET)>>
//;Power On Reset PC
PowerON_Reset
//;<<VECTOR DATA END (POWER ON RESET)>>
};
#define RVECT_SECT __attribute__ ((section (".rvectors")))
const fp RelocatableVectors[] RVECT_SECT = {
//;0x0000 Reserved
(fp)0,
//;0x0004 Reserved
(fp)0,
//;0x0008 Reserved
(fp)0,
//;0x000C Reserved
(fp)0,
//;0x0010 Reserved
(fp)0,
//;0x0014 Reserved
(fp)0,
//;0x0018 Reserved
(fp)0,
//;0x001C Reserved
(fp)0,
//;0x0020 Reserved
(fp)0,
//;0x0024 Reserved
(fp)0,
//;0x0028 Reserved
(fp)0,
//;0x002C Reserved
(fp)0,
//;0x0030 Reserved
(fp)0,
//;0x0034 Reserved
(fp)0,
//;0x0038 Reserved
(fp)0,
//;0x003C Reserved
(fp)0,
//;0x0040
(fp)Dummy,
//;0x0044 Reserved
(fp)0,
//;0x0048 Reserved
(fp)0,
//;0x004C Reserved
(fp)0,
//;0x0050 Reserved
(fp)0,
//;0x0054
(fp)Dummy,
//;0x0058 Reserved
(fp)0,
//;0x005C
(fp)Dummy,
//;0x0060 Reserved
(fp)0,
//;0x0064 Reserved
(fp)0,
//;0x0068 Reserved
(fp)0,
//;0x006C Reserved
(fp)vPortSoftwareInterruptISR,
//;0x0070 CMTU0_CMT0
(fp)vPortTickISR,
//;0x0074
(fp)Dummy,
//;0x0078
(fp)Dummy,
//;0x007C
(fp)Dummy,
//;0x0080
(fp)Dummy,
//;0x0084 Reserved
(fp)0,
//;0x0088 Reserved
(fp)0,
//;0x008C Reserved
(fp)0,
//;0x0090 Reserved
(fp)0,
//;0x0094 Reserved
(fp)0,
//;0x0098 Reserved
(fp)0,
//;0x009C Reserved
(fp)0,
//;0x00A0 Reserved
(fp)0,
//;0x00A4 Reserved
(fp)0,
//;0x00A8 Reserved
(fp)0,
//;0x00AC Reserved
(fp)0,
//;0x00B0 Reserved
(fp)0,
//;0x00B4 Reserved
(fp)0,
//;0x00B8 Reserved
(fp)0,
//;0x00BC Reserved
(fp)0,
//;0x00C0 Reserved
(fp)0,
//;0x00C4 Reserved
(fp)0,
//;0x00C8 Reserved
(fp)0,
//;0x00CC Reserved
(fp)0,
//;0x00D0 Reserved
(fp)0,
//;0x00D4 Reserved
(fp)0,
//;0x00D8 Reserved
(fp)0,
//;0x00DC Reserved
(fp)0,
//;0x00E0 Reserved
(fp)0,
//;0x00E4 Reserved
(fp)0,
//;0x00E8 Reserved
(fp)0,
//;0x00EC Reserved
(fp)0,
//;0x00F0 Reserved
(fp)0,
//;0x00F4 Reserved
(fp)0,
//;0x00F8 Reserved
(fp)0,
//;0x00FC Reserved
(fp)0,
//;0x0100 IRQ0
(fp)vButtonInterrupt,
//;0x0104 IRQ1
(fp)vButtonInterrupt,
//;0x0108 IRQ2
(fp)Dummy,
//;0x010C IRQ3
(fp)Dummy,
//;0x0110 IRQ4
(fp)vButtonInterrupt,
//;0x0114 IRQ5
(fp)Dummy,
//;0x0118 IRQ6
(fp)Dummy,
//;0x011C IRQ7
(fp)Dummy,
//;0x0120
(fp)Dummy,
//;0x0124
(fp)Dummy,
//;0x0128
(fp)Dummy,
//;0x012C
(fp)Dummy,
//;0x0130
(fp)Dummy,
//;0x0134
(fp)Dummy,
//;0x0138
(fp)Dummy,
//;0x013C
(fp)Dummy,
//;0x0140 Reserved
(fp)0,
//;0x0144 Reserved
(fp)0,
//;0x0148 Reserved
(fp)0,
//;0x014C Reserved
(fp)0,
//;0x0150 Reserved
(fp)0,
//;0x0154 Reserved
(fp)0,
//;0x0158 Reserved
(fp)0,
//;0x015C Reserved
(fp)0,
//;0x0160 Reserved
(fp)0,
//;0x0164 Reserved
(fp)0,
//;0x0168 Reserved
(fp)0,
//;0x016C Reserved
(fp)0,
//;0x0170 Reserved
(fp)0,
//;0x0174 Reserved
(fp)0,
//;0x0178 Reserved
(fp)0,
//;0x017C Reserved
(fp)0,
//;0x0180
(fp)Dummy,
//;0x0184 Reserved
(fp)0,
//;0x0188
(fp)Dummy,
//;0x018C
(fp)Dummy,
//;0x0190
(fp)Dummy,
//;0x0194
(fp)Dummy,
//;0x0198 Reserved
(fp)0,
//;0x019C Reserved
(fp)0,
//;0x01A0
(fp)Dummy,
//;0x01A4
(fp)Dummy,
//;0x01A8
(fp)Dummy,
//;0x01AC
(fp)Dummy,
//;0x01B0
(fp)Dummy,
//;0x01B4 Reserved
(fp)0,
//;0x01B8 Reserved
(fp)0,
//;0x01BC
(fp)Dummy,
//;0x01C0
(fp)Dummy,
//;0x01C4 Reserved
(fp)Dummy,
//;0x01C8 Reserved
(fp)Dummy,
//;0x01CC
(fp)Dummy,
//;0x01D0
(fp)Dummy,
//;0x01D4
(fp)Dummy,
//;0x01D8
(fp)Dummy,
//;0x01DC Reserved
(fp)Dummy,
//;0x01E0
(fp)Dummy,
//;0x01E4
(fp)Dummy,
//;0x01E8
(fp)Dummy,
//;0x01EC
(fp)Dummy,
//;0x01F0
(fp)Dummy,
//;0x01F4
(fp)Dummy,
//;0x01F8
(fp)Dummy,
//;0x01FC
(fp)Dummy,
//;0x0200
(fp)Dummy,
//;0x0204 Reserved
(fp)Dummy,
//;0x0208 Reserved
(fp)Dummy,
//;0x020C
(fp)Dummy,
//;0x0210
(fp)Dummy,
//;0x0214
(fp)Dummy,
//;0x0218
(fp)Dummy,
//;0x021C Reserved
(fp)Dummy,
//;0x0220
(fp)Dummy,
//;0x0224
(fp)Dummy,
//;0x0228
(fp)Dummy,
//;0x022C
(fp)Dummy,
//;0x0230
(fp)Dummy,
//;0x0234
(fp)Dummy,
//;0x0238
(fp)Dummy,
//;0x023C Reserved
(fp)Dummy,
//;0x0240 Reserved
(fp)Dummy,
//;0x0244
(fp)Dummy,
//;0x0248
(fp)Dummy,
//;0x024C Reserved
(fp)Dummy,
//;0x0250 Reserved
(fp)Dummy,
//;0x0254
(fp)Dummy,
//;0x0258
(fp)Dummy,
//;0x025C
(fp)Dummy,
//;0x0260
(fp)Dummy,
//;0x0264 Reserved
(fp)Dummy,
//;0x0268
(fp)Dummy,
//;0x026C
(fp)Dummy,
//;0x0270
(fp)Dummy,
//;0x0274
(fp)Dummy,
//;0x0278
(fp)Dummy,
//;0x027C
(fp)Dummy,
//;0x0280
(fp)Dummy,
//;0x0284
(fp)Dummy,
//;0x0288
(fp)Dummy,
//;0x028C Reserved
(fp)Dummy,
//;0x0290 Reserved
(fp)Dummy,
//;0x0294
(fp)Dummy,
//;0x0298
(fp)Dummy,
//;0x029C
(fp)Dummy,
//;0x02A0
(fp)Dummy,
//;0x02A4 Reserved
(fp)Dummy,
//;0x02A8
(fp)Dummy,
//;0x02AC
(fp)Dummy,
//;0x02B0 Reserved
(fp)Dummy,
//;0x02B4 Reserved
(fp)Dummy,
//;0x02B8
(fp)Dummy,
//;0x02BC
(fp)Dummy,
//;0x02C0
(fp)Dummy,
//;0x02C4
(fp)Dummy,
//;0x02C8
(fp)Dummy,
//;0x02CC
(fp)Dummy,
//;0x02D0
(fp)Dummy,
//;0x02D4
(fp)Dummy,
//;0x02D8
(fp)Dummy,
//;0x02DC
(fp)Dummy,
//;0x02E0
(fp)Dummy,
//;0x02E4
(fp)Dummy,
//;0x02E8 Reserved
(fp)Dummy,
//;0x02EC Reserved
(fp)Dummy,
//;0x02F0 Reserved
(fp)Dummy,
//;0x02F4 Reserved
(fp)Dummy,
//;0x02F8 Reserved
(fp)Dummy,
//;0x02FC Reserved
(fp)Dummy,
//;0x0300 Reserved
(fp)Dummy,
//;0x0304 Reserved
(fp)Dummy,
//;0x0308 Reserved
(fp)Dummy,
//;0x030C Reserved
(fp)Dummy,
//;0x0310 Reserved
(fp)Dummy,
//;0x0314 Reserved
(fp)Dummy,
//;0x0318
(fp)Dummy,
//;0x031C
(fp)Dummy,
//;0x0320
(fp)Dummy,
//;0x0324
(fp)Dummy,
//;0x0328 Reserved
(fp)Dummy,
//;0x032C Reserved
(fp)Dummy,
//;0x0330 Reserved
(fp)Dummy,
//;0x0334 Reserved
(fp)Dummy,
//;0x0338 Reserved
(fp)Dummy,
//;0x033C Reserved
(fp)Dummy,
//;0x0340 Reserved
(fp)Dummy,
//;0x0344 Reserved
(fp)Dummy,
//;0x0348 Reserved
(fp)Dummy,
//;0x034C Reserved
(fp)Dummy,
//;0x0350 Reserved
(fp)Dummy,
//;0x0354 Reserved
(fp)Dummy,
//;0x0358
(fp)Dummy,
//;0x035C
(fp)Dummy,
//;0x0360
(fp)Dummy,
//;0x0364
(fp)Dummy,
//;0x0368
(fp)Dummy,
//;0x036C
(fp)Dummy,
//;0x0370
(fp)Dummy,
//;0x0374
(fp)Dummy,
//;0x0378
(fp)Dummy,
//;0x037C
(fp)Dummy,
//;0x0380
(fp)Dummy,
//;0x0384
(fp)Dummy,
//;0x0388
(fp)Dummy,
//;0x038C
(fp)Dummy,
//;0x0390
(fp)Dummy,
//;0x0394
(fp)Dummy,
//;0x0398
(fp)Dummy,
//;0x039C
(fp)Dummy,
//;0x03A0
(fp)Dummy,
//;0x03A4
(fp)Dummy,
//;0x03A8
(fp)Dummy,
//;0x03AC
(fp)Dummy,
//;0x03B0
(fp)Dummy,
//;0x03B4
(fp)Dummy,
//;0x03B8
(fp)Dummy,
//;0x03BC
(fp)Dummy,
//;0x03C0
(fp)Dummy,
//;0x03C4
(fp)Dummy,
//;0x03C8 Reserved
(fp)Dummy,
//;0x03CC Reserved
(fp)Dummy,
//;0x03D0 Reserved
(fp)Dummy,
//;0x03D4 Reserved
(fp)Dummy,
//;0x03D8
(fp)Dummy,
//;0x03DC
(fp)Dummy,
//;0x03E0
(fp)Dummy,
//;0x03E4
(fp)Dummy,
//;0x03E8
(fp)Dummy,
//;0x03EC
(fp)Dummy,
//;0x03F0
(fp)Dummy,
//;0x03F4
(fp)Dummy,
//;0x03F8 Reserved
(fp)0,
//;0x03FC Reserved
(fp)0,
};

View File

@ -0,0 +1,88 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : platform.h
* Description : The user chooses which MCU and board they are developing for in this file. If the board you are using
* is not listed below, please add your own or use the default 'User Board'.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 30.11.2011 1.00 First Release
* : 13.01.2012 1.10 Moved from having platform defined using macro defintion, to having platform defined
* by choosing an include path. This makes this file simpler and cleans up the issue
* where HEW shows all header files for all platforms under 'Dependencies'.
* : 14.02.2012 1.20 Added RX210 BSP.
* : 18.04.2012 1.30 Updated to v0.70 of FIT S/W Spec and v0.20 of FIT r_bsp Spec. This includes adding
* locking.c and locking.h in board folders. Also, r_bsp can now be configured through
* r_bsp_config.h.
* : 26.06.2012 1.40 Added new options such as exception callbacks and the ability to choose your MCU using
* its part number in r_bsp_config.h. Moved mcu_info.h to the 'mcu' folder. Made an effort
* to remove any extra files that the user would need to touch. Removed the flash_options.c
* file and put its contents in vecttbl.c.
* : 17.07.2012 1.50 Fixed bug with exception callback function names. Added BCLK_OUTPUT and SDCLK_OUTPUT
* macro options in r_bsp_config.h. Added some extra code to handle exceptions in
* vecttbl.c. Added vecttbl.h so that user has prototypes for exception callbacks.
* : 08.11.2012 1.60 Added RX111 BSP
***********************************************************************************************************************/
#ifndef _PLATFORM_H_
#define _PLATFORM_H_
/***********************************************************************************************************************
DEFINE YOUR SYSTEM - UNCOMMENT THE INCLUDE PATH FOR THE PLATFORM YOU ARE USING.
***********************************************************************************************************************/
/* RSKRX610 */
//#include "./board/rskrx610/r_bsp.h"
/* RSKRX62N */
//#include "./board/rskrx62n/r_bsp.h"
/* RSKRX62T */
//#include "./board/rskrx62t/r_bsp.h"
/* RDKRX62N */
//#include "./board/rdkrx62n/r_bsp.h"
/* RSKRX630 */
//#include "./board/rskrx630/r_bsp.h"
/* RSKRX63N */
//#include "./board/rskrx63n/r_bsp.h"
/* RDKRX63N */
//#include "./board/rdkrx63n/r_bsp.h"
/* RSKRX210 */
//#include "./board/rskrx210/r_bsp.h"
/* RSKRX111 */
#include "./board/rskrx111/r_bsp.h"
/* User Board - Define your own board here. */
//#include "./board/user/r_bsp.h"
/***********************************************************************************************************************
MAKE SURE AT LEAST ONE PLATFORM WAS DEFINED - DO NOT EDIT BELOW THIS POINT
***********************************************************************************************************************/
#ifndef PLATFORM_DEFINED
#error "Error - No platform defined in platform.h!"
#endif
#endif /* _PLATFORM_H_ */

View File

@ -0,0 +1,250 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp_config_reference.c
* Device(s) : RX111
* Description : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included
* somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)
* is just a reference file that the user can use to make their own r_bsp_config.h file.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef R_BSP_CONFIG_REF_HEADER_FILE
#define R_BSP_CONFIG_REF_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* Enter the product part number for your MCU. This information will be used to obtain information about your MCU such
as package and memory size.
To help parse this information, the part number will be defined using multiple macros.
R 5 F 51 11 5 A D FM
| | | | | | | | | Macro Name Description
| | | | | | | | |__MCU_PART_PACKAGE = Package type, number of pins, and pin pitch
| | | | | | | |____not used = Products with wide temperature range (D: -40 to 85C G: -40 to 105C)
| | | | | | |______not used = Blank
| | | | | |________MCU_PART_MEMORY_SIZE = ROM, RAM, and Data Flash Capacity
| | | | |___________MCU_PART_GROUP = Group name
| | | |______________MCU_PART_SERIES = Series name
| | |________________MCU_PART_MEMORY_TYPE = Type of memory (Flash)
| |__________________not used = Renesas MCU
|____________________not used = Renesas semiconductor product.
*/
/* Package type. Set the macro definition based on values below:
Character(s) = Value for macro = Package Type/Number of Pins/Pin Pitch
FM = 0x0 = LFQFP/64/0.50
FK = 0x1 = LQFP/64/0.80
LF = 0x2 = TFLGA/64/0.50
FL = 0x3 = LFQFP/48/0.50
NE = 0x4 = VQFN/48/0.50
NC = 0x5 = HWQFN/36/0.50
LM = 0x6 = WFLGA/36/0.50
SB = 0x7 = SSOP/36/0.80
*/
#define MCU_PART_PACKAGE (0x0)
/* ROM, RAM, and Data Flash Capacity.
Character(s) = Value for macro = ROM Size/Ram Size/Data Flash Size
5 = 0x5 = 128KB/16KB/8KB
4 = 0x4 = 96KB/16KB/8KB
3 = 0x3 = 64KB/10KB/8KB
1 = 0x1 = 32KB/10KB/8KB
J = 0x0 = 16KB/8KB/8KB
*/
#define MCU_PART_MEMORY_SIZE (0x5)
/* Group name.
Character(s) = Value for macro = Description
10 = 0x0 = RX110 Group
11 = 0x1 = RX111 Group
*/
#define MCU_PART_GROUP (0x1)
/* Series name.
Character(s) = Value for macro = Description
51 = 0x0 = RX100 Series
*/
#define MCU_PART_SERIES (0x0)
/* Memory type.
Character(s) = Value for macro = Description
F = 0x0 = Flash memory version
*/
#define MCU_PART_MEMORY_TYPE (0x0)
/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a
'#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */
#if defined(BSP_DECLARE_STACK)
/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize su=0x400
/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize si=0x100
#endif
/* Heap size in bytes. */
#define HEAP_BYTES (0x001)
/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information
on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.
0 = Stay in Supervisor mode.
1 = Switch to User mode.
*/
#define RUN_IN_USER_MODE (0)
/* This macro lets other modules no if a RTOS is being used.
0 = RTOS is not used.
1 = RTOS is used.
*/
#define RTOS_USED (0)
/* Clock source select (CKSEL).
0 = Low Speed On-Chip Oscillator (LOCO)
1 = High Speed On-Chip Oscillator (HOCO)
2 = Main Clock Oscillator
3 = Sub-Clock Oscillator
4 = PLL Circuit
*/
#define CLOCK_SOURCE (4) // GI org 4
/* Clock configuration options.
The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The
multiplier settings are used to set the clock registers in resetprg.c. If a 16MHz clock is used and the
ICLK is 24MHz, PCLKB is 24MHz, FCLK is 24MHz, PCLKD is 24MHz, and CKO is 1MHz then the
settings would be:
XTAL_HZ = 16000000
PLL_DIV = 2
PLL_MUL = 6 (16MHz x 3 = 48MHz)
ICK_DIV = 2 : System Clock (ICLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV) = 24MHz
PCKB_DIV = 2 : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 24MHz
PCKD_DIV = 2 : Peripheral Clock D (PCLKD) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV) = 24MHz
FCK_DIV = 2 : Flash IF Clock (FCLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV) = 24MHz
*/
/* XTAL - Input clock frequency in Hz */
#define XTAL_HZ (16000000)
/* PLL Input Frequency Divider Select (PLIDIV).
Available divisors = /1 (no division), /2, /4
*/
#define PLL_DIV (2) // GI org 2
/* PLL Frequency Multiplication Factor Select (STC).
Available multipliers = x6, x8
*/
#define PLL_MUL (6) // GI org 6
/* System Clock Divider (ICK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define ICK_DIV (2) // NOTE: ICLK CANNOT BE SLOWER THAN PCLK!
/* Peripheral Module Clock B Divider (PCKB).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKB_DIV (2) // GI org 2
/* Peripheral Module Clock D Divider (PCKD).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKD_DIV (2)
/* Flash IF Clock Divider (FCK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define FCK_DIV (2)
/* Below are callback functions that can be used for detecting MCU exceptions, undefined interrupt sources, and
bus errors. If the user wishes to be alerted of these events then they will need to define the macro as a
function to be called when the event occurs. For example, if the user wanted the function
excep_undefined_instr_isr() to be called when an undefined interrupt source ISR is triggered then they would
do the following:
#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
If the user does not wish to be alerted of these events then they should comment out the macros.
NOTE: When a callback function is called it will be called from within a ISR. This means that the function
will essentially be an interrupt and will hold off other interrupts that occur in the system while it
is executing. For this reason, it is recommended to keep these callback functions short as to not
decrease the real-time response of your system.
*/
/* Callback for Supervisor Instruction Violation Exception. */
//#define EXCEP_SUPERVISOR_ISR_CALLBACK supervisor_instr_cb
/* Callback for Undefined Instruction Exception. */
//#define EXCEP_UNDEFINED_INSTR_ISR_CALLBACK undefined_instr_cb
/* Callback for Non-maskable Interrupt. */
//#define NMI_ISR_CALLBACK nmi_cb
/* Callback for all undefined interrupt vectors. User can set a breakpoint in this function to determine which source
is creating unwanted interrupts. */
//#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
/* Callback for Bus Error Interrupt. */
//#define BUS_ERROR_ISR_CALLBACK bus_error_cb
/* The user has the option of separately choosing little or big endian for the User Application Area */
/* Endian mode for User Application.
0 = Big Endian
Else = Little Endian (Default)
*/
#define USER_APP_ENDIAN (1)
/* Configure WDT and IWDT settings.
OFS0 - Option Function Select Register 0
OFS0 - Option Function Select Register 0
b31:b15 Reserved (set to 1)
b14 IWDTSLCSTP - IWDT Sleep Mode Count Stop Control - (0=can't stop count, 1=stop w/some low power modes)
b13 Reserved (set to 1)
b12 IWDTRSTIRQS - IWDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)
b11:b10 IWDTRPSS - IWDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)
b9:b8 IWDTRPES - IWDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)
b7:b4 IWDTCKS - IWDT Clock Frequency Division Ratio - (0=none, 2=/16, 3 = /32, 4=/64, 0xF=/128, 5=/256)
b3:b2 IWDTTOPS - IWDT Timeout Period Select - (0=128 cycles, 1=512, 2=1024, 3=2048)
b1 IWDTSTRT - IWDT Start Mode Select - (0=auto-start after reset, 1=halt after reset)
b0 Reserved (set to 1) */
#define OFS0_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Configure whether voltage detection 1 circuit and HOCO are enabled after reset.
OFS1 - Option Function Select Register 1
b31:b9 Reserved (set to 1)
b8 HOCOEN - Enable/disable HOCO oscillation after a reset (0=enable, 1=disable)
b7:b4 STUPLVD1LVL - Startup Voltage Monitoring 1 Reset Detection Level Select
0 1 0 0: 3.10 V
0 1 0 1: 3.00 V
0 1 1 0: 2.90 V
0 1 1 1: 2.79 V
1 0 0 0: 2.68 V
1 0 0 1: 2.58 V
1 0 1 0: 2.48 V
1 0 1 1: 2.06 V
1 1 0 0: 1.96 V
1 1 0 1: 1.86 V
b3:b2 Reserved (set to 1)
b2 STUPLVD1REN - Startup Voltage Monitoring 1 Reset Enable (1=monitoring disabled)
b0 FASTSTUP - Power-On Fast Startup Time (1=normal; read only) */
#define OFS1_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Initializes C input & output library functions.
0 = Disable I/O library initialization in resetprg.c. If you are not using stdio then use this value.
1 = Enable I/O library initialization in resetprg.c. This is default and needed if you are using stdio. */
#define IO_LIB_ENABLE (0)
#endif /* R_BSP_CONFIG_REF_HEADER_FILE */

View File

@ -0,0 +1,100 @@
r_bsp Package
=============
Document Number
---------------
N/A
Version
-------
v1.60
Overview
--------
The r_bsp package provides a foundation for code to be built on top of. It provides startup code, iodefines, and MCU
information for different boards. There are 2 folders that make up the r_bsp package. The 'mcu' folder has iodefine
files and a file named 'mcu_info.h' for each MCU group. The 'mcu_info.h' file has information about the MCU on the board
and is configured based on the information given in r_bsp_config.h. The information in 'mcu_info.h' is used to help
configure Renesas middleware that uses the r_bsp package. The 'board' folder has a folder with startup code for each
supported board. Which MCU and board is chosen is decided by the settings in 'platform.h'. The user can choose which
board they are using by uncommenting the include path that applies to their board. For example, if you are using the
RSK+RX62N then you would uncomment the #include "./board/rskrx62n/r_bsp.h" include path. Users are encouraged to add
their own boards to the 'board' directory. BSPs are configured by using the r_bsp_config.h file. Each board will have a
reference configuration file named r_bsp_config_reference.h. The user should copy this file to their project, rename it
to r_bsp_config.h, and use the options inside the file to configure the BSP for their project.
Features
--------
* Provides foundation to build code on top of.
* Provides MCU startup code.
* Provides SFR access through iodefine.h
* Stores details of MCU in 'mcu_info.h' to help configure Renesas middleware.
* Easily configure BSP through r_bsp_config.h.
* Choose MCU easily by inputting part number details in r_bsp_config.h.
* Provides callbacks for MCU exceptions and the bus error interrupt.
Limitations
-----------
N/A
Peripherals Used Directly
-------------------------
N/A
Required Packages
-----------------
* r_glyph [required if you want to use LCD for RDK boards]
* r_rspi_rx [required if you want to use LCD for RDK boards]
How to add to your project
--------------------------
* Copy the r_bsp folder to your project.
* Add an include path to the 'r_bsp' directory.
* Add all of the source files for your board from the 'r_bsp\board\--YOUR_BOARD--' directory to your project.
* Uncomment the include path for your board in 'platform.h' which is located in the 'r_bsp' directory.
* Copy the file r_bsp_config_reference.h from the 'r_bsp\board\--YOUR_BOARD--' directory and copy it to your project's
source code directory. Rename the file r_bsp_config.h.
* Open r_bsp_config.h and use the macros to configure the BSP for your project.
File Structure
--------------
r_bsp
| platform.h (choose which board is being used)
| readme.txt
|
+---board (contains supported boards)
| +---rdkrx62n (contains BSP source and header files)
| |
| +---rdkrx63n
| |
| +---rskrx111
| |
| +---rskrx210
| |
| +---rskrx610
| |
| +---rskrx62n
| |
| +---rskrx62t
| |
| +---rskrx630
| |
| +---rskrx63n
| |
| \---user
|
\---mcu
+---rx111 (contains common files to this MCU group, e.g. iodefine.h)
|
+---rx210
|
+---rx610
|
+---rx62n
|
+---rx62t
|
+---rx630
|
\---rx63n

View File

@ -0,0 +1,47 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches_config.c
* Description : Configures the switches code
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
***********************************************************************************************************************/
#ifndef SWITCHES_CONFIG_HEADER_FILE
#define SWITCHES_CONFIG_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* This macro sets whether interrupts or polling is used for detecting switch presses. The benefit of using interrupts
is that no extra processing is used for polling and the use of a system timer tick is not a requirement. The downside
of using interrupts is that callback functions are called from within an interrupt so if your ISR is long then it can
degrade the real-time response of your system. The benefit of polling is that functions are called at the application
level and debouncing is supported. The downside to polling is that your system must call the R_SWITCHES_Update() on a
regular basis which requires extra processing.
0 = Use interrupts
1 = Use polling
*/
#define SWITCHES_DETECTION_MODE (0)
#endif /* SWITCHES_CONFIG_HEADER_FILE */

View File

@ -0,0 +1,72 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches_if.h
* Description : Functions for using switches with callback functions.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
***********************************************************************************************************************/
#ifndef SWITCHES_API_HEADER_FILE
#define SWITCHES_API_HEADER_FILE
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Fixed width integer support. */
#include <stdint.h>
/* Used for configuring the code */
#include "r_switches_config.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* Version Number of API. */
#define SWITCHES_VERSION_MAJOR (1)
#define SWITCHES_VERSION_MINOR (0)
/* The process of getting the version number is done through the macro below. The version number is encoded where the
top 2 bytes are the major version number and the bottom 2 bytes are the minor version number. For example,
Version 4.25 would be returned as 0x00040019. */
#define R_SWITCHES_GetVersion() ((((uint32_t)SWITCHES_VERSION_MAJOR) << 16) | (uint32_t)SWITCHES_VERSION_MINOR)
/***********************************************************************************************************************
Public Functions
***********************************************************************************************************************/
void R_SWITCHES_Init(void);
void R_SWITCHES_Update(void);
/* Callback prototypes. */
#if defined(SW1_CALLBACK_FUNCTION)
void SW1_CALLBACK_FUNCTION(void);
#endif
#if defined(SW2_CALLBACK_FUNCTION)
void SW2_CALLBACK_FUNCTION(void);
#endif
#if defined(SW3_CALLBACK_FUNCTION)
void SW3_CALLBACK_FUNCTION(void);
#endif
#endif /* SWITCHES_API_HEADER_FILE */

View File

@ -0,0 +1,83 @@
PLEASE REFER TO THE APPLICATION NOTE FOR THIS MIDDLEWARE FOR MORE INFORMATION
Switches
========
Document Number
---------------
N/A
Version
-------
v1.40
Overview
--------
Configures port pins for switches and calls user defined function on switch press. Switch presses can be detected using
IRQ interrupts or by polling. The benefit of using interrupts is that no extra processing is used for polling and the
use of a system timer tick is not a requirement. The downside of using interrupts is that callback functions are called
from within an interrupt so if your ISR is long then it can degrade the real-time response of your system. The benefit
of polling is that functions are called at the application level and debouncing is supported. The downside to polling is
that your system must call the R_SWITCHES_Update() on a regular basis which requires extra processing.
Features
--------
* Call one function to setup switches.
* Define function to call when switch is pressed.
* Can be configured to be interrupt or poll driven.
Supported MCUs
--------------
* RX610 Group
* RX621, RX62N Group
* RX62T Group
* RX630 Group
* RX631, RX63N Group
* RX210 Group
* RX111 Group
Boards Tested On
----------------
* RSKRX610
* RSK+RX62N
* RSKRX62T
* RDKRX62N
* RSKRX630
* RSKRX63N
* RDKRX63N
* RSKRX111
Limitations
-----------
* None
Peripherals Used Directly
-------------------------
* None
Required Packages
-----------------
* None
How to add to your project
--------------------------
* Add src\r_switches.c to your project.
* Add an include path to the 'r_switches' directory.
* Add an include path to the 'r_switches\src' directory.
* Configure middleware through r_switches_config.h.
* Add a #include for r_switches_if.h to files that need to use this package.
Toolchain(s) Used
-----------------
* Renesas RX v1.02
File Structure
--------------
r_switches
| readme.txt
| r_switches_config.h
| r_switches_if.h
|
\---src
r_switches.c

View File

@ -0,0 +1,232 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches.c
* Description : Functions for using switches with callback functions.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
* : 07.11.2012 1.40 Added support for RSKRX111
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Board and MCU support. */
#include "platform.h"
/* Switches prototypes. */
#include "r_switches_if.h"
/* Scheduler includes. */
#include "FreeRTOS.h"
typedef int bool;
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* This helps reduce the amount of unique code for each supported board. */
#define X_IRQ( x ) XX_IRQ( x )
#define XX_IRQ( x ) _ICU_IRQ##x
/* These macros define which IRQ pins are used for the switches. Note that these defintions cannot have parentheses
around them. */
#if defined(PLATFORM_BOARD_RSKRX111)
#define SW1_IRQ_NUMBER 0
#define SW2_IRQ_NUMBER 1
#define SW3_IRQ_NUMBER 4
#else
#error This file is only for use on the RX100 RSK
#endif
/* Number of switches on this board. */
#define SWITCHES_NUM (3)
/* Register definitions not yet correct in iodefine.h. */
#define MPC_P30PFS_REG ( * ( unsigned char * ) 0x0008C158 )
#define MPC_P31PFS_REG ( * ( unsigned char * ) 0x0008C159 )
#define MPC_PE4PFS_REG ( * ( unsigned char * ) 0x0008C1B4 )
/***********************************************************************************************************************
Typedef definitions
***********************************************************************************************************************/
typedef struct
{
bool active;
int32_t debounce_cnt;
} switch_t;
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
#if SWITCHES_DETECTION_MODE == 1
/* Update Hz */
static uint32_t g_sw_debounce_cnts;
/* Used for debounce. */
switch_t g_switches[SWITCHES_NUM];
#endif
/***********************************************************************************************************************
* Function Name: R_SWITCHES_Init
* Description : Initializes pins to be input and interrupt on switch presses.
* Arguments :
* Return Value : none
***********************************************************************************************************************/
void R_SWITCHES_Init (void)
{
/* Unlock protection register */
MPC.PWPR.BYTE &= 0x7F;
/* Unlock MPC registers */
MPC.PWPR.BYTE |= 0x40;
/* Make switch pins inputs. */
PORT3.PDR.BYTE &= 0xFC;
PORTE.PDR.BYTE &= 0xEF;
/* Set port mode registers for switches. */
PORT3.PMR.BYTE &= 0xFC;
PORTE.PMR.BYTE &= 0xEF;
MPC_P30PFS_REG = 0x40; /* P30 is used as IRQ pin */
MPC_P31PFS_REG = 0x40; /* P31 is used as IRQ pin */
MPC_PE4PFS_REG = 0x40; /* PE4 is used as IRQ pin */
/* Set IRQ type (falling edge) */
ICU.IRQCR[ SW1_IRQ_NUMBER ].BYTE = 0x04;
ICU.IRQCR[ SW2_IRQ_NUMBER ].BYTE = 0x04;
ICU.IRQCR[ SW3_IRQ_NUMBER ].BYTE = 0x04;
/* Set interrupt priorities, which must be below
configMAX_SYSCALL_INTERRUPT_PRIORITY. */
_IPR( X_IRQ(SW1_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
_IPR( X_IRQ(SW2_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
_IPR( X_IRQ(SW3_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
/* Clear any pending interrupts */
_IR( X_IRQ(SW1_IRQ_NUMBER) ) = 0;
_IR( X_IRQ(SW2_IRQ_NUMBER) ) = 0;
_IR( X_IRQ(SW3_IRQ_NUMBER) ) = 0;
/* Enable the interrupts */
_IEN( X_IRQ(SW1_IRQ_NUMBER) ) = 1;
_IEN( X_IRQ(SW2_IRQ_NUMBER) ) = 1;
_IEN( X_IRQ(SW3_IRQ_NUMBER) ) = 1;
}
/* If using polling then the user must call the update function. */
/***********************************************************************************************************************
* Function name: R_SWITCHES_Update
* Description : Polls switches and calls callback functions as needed. If you are using IRQ mode then this function
* is not needed and can be removed if desired. It is left in so that code will not fail when switching
* between polling or IRQ mode.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void R_SWITCHES_Update (void)
{
#if SWITCHES_DETECTION_MODE == 1
/* This code is only needed for polling mode. */
/* Check switch 1. */
if (SW1 == SW_ACTIVE)
{
if (g_switches[0].active != true)
{
if (++g_switches[0].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[0].active = true;
/* Call callback function. */
SW1_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[0].debounce_cnt)
{
g_switches[0].active = false;
}
else
{
g_switches[0].debounce_cnt--;
}
}
/* Check switch 2. */
if (SW2 == SW_ACTIVE)
{
if (g_switches[1].active != true)
{
if (++g_switches[1].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[1].active = true;
/* Call callback function. */
SW2_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[1].debounce_cnt)
{
g_switches[1].active = false;
}
else
{
g_switches[1].debounce_cnt--;
}
}
/* Check switch 3. */
if (SW3 == SW_ACTIVE)
{
if (g_switches[2].active != true)
{
if (++g_switches[2].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[2].active = true;
/* Call callback function. */
SW3_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[2].debounce_cnt)
{
g_switches[2].active = false;
}
else
{
g_switches[2].debounce_cnt--;
}
}
#endif /* SWITCHES_DETECTION_MODE */
}

View File

@ -0,0 +1,204 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/******************************************************************************
* This project provides two demo applications. A low power project that
* demonstrates the FreeRTOS tickless mode, and a more comprehensive test and
* demo application. The configCREATE_LOW_POWER_DEMO setting (defined at the
* top of FreeRTOSConfig.h) is used to select between the two. The low power
* demo is implemented and described in main_low_power.c. The more
* comprehensive test and demo application is implemented and described in
* main_full.c.
*
* This file implements the code that is not demo specific, including the
* hardware setup and FreeRTOS hook functions.
*/
/* Kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
/* Platform includes. */
#include "lcd.h"
/*-----------------------------------------------------------*/
/*
* main_low_power() is used when configCREATE_LOW_POWER_DEMO is set to 1.
* main_full() is used when configCREATE_LOW_POWER_DEMO is set to 0.
*/
extern void main_low_power( void );
extern void main_full( void );
/* Prototypes for the standard FreeRTOS callback/hook functions implemented
within this file. */
void vApplicationMallocFailedHook( void );
void vApplicationIdleHook( void );
void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName );
void vApplicationTickHook( void );
/*-----------------------------------------------------------*/
/* See the documentation page for this demo on the FreeRTOS.org web site for
full information - including hardware setup requirements. */
void main( void )
{
lcd_initialize();
lcd_display( LCD_LINE1, "FreeRTOS" );
/* The configCREATE_LOW_POWER_DEMO setting is described in FreeRTOSConfig.h. */
#if configCREATE_LOW_POWER_DEMO == 1
{
lcd_display( LCD_LINE2, "LP Demo" );
main_low_power();
}
#else
{
lcd_display( LCD_LINE2, "Ful Demo" );
main_full();
}
#endif
}
/*-----------------------------------------------------------*/
void vApplicationMallocFailedHook( void )
{
/* vApplicationMallocFailedHook() will only be called if
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
function that will get called if a call to pvPortMalloc() fails.
pvPortMalloc() is called internally by the kernel whenever a task, queue,
timer or semaphore is created. It is also called by various parts of the
demo application. If heap_1.c, heap_2.c or heap_4.c are used, then the size
of the heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE
in FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
to query the size of free heap space that remains (although it does not
provide information on how the remaining heap might be fragmented). */
taskDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationIdleHook( void )
{
/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
task. It is essential that code added to this hook function never attempts
to block in any way (for example, call xQueueReceive() with a block time
specified, or call vTaskDelay()). If the application makes use of the
vTaskDelete() API function (as this demo application does) then it is also
important that vApplicationIdleHook() is permitted to return to its calling
function, because it is the responsibility of the idle task to clean up
memory allocated by the kernel to any task that has since been deleted. */
}
/*-----------------------------------------------------------*/
void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName )
{
( void ) pcTaskName;
( void ) pxTask;
/* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
called if a stack overflow is detected. */
taskDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationTickHook( void )
{
/* This function will be called by each tick interrupt if
configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be
added here, but the tick hook is called from an interrupt context, so
code must not attempt to block, and only the interrupt safe FreeRTOS API
functions can be used (those that end in FromISR()). */
}
/*-----------------------------------------------------------*/
void vAssertCalled( void )
{
volatile unsigned long ul = 0;
taskENTER_CRITICAL();
{
/* Set ul to a non-zero value using the debugger to step out of this
function. */
while( ul == 0 )
{
__asm volatile( "NOP" );
}
}
taskEXIT_CRITICAL();
}

View File

@ -0,0 +1,540 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/* ****************************************************************************
* This project includes a lot of tasks and tests and is therefore complex.
* If you would prefer a much simpler project to get started with then select
* the 'low power' demo by setting configCREATE_LOW_POWER_DEMO to 1 in
* FreeRTOSConfig.h. When configCREATE_LOW_POWER_DEMO is set to 1 main() will
* call main_low_power() instead of main_full().
* ****************************************************************************
*
* Creates all the demo application tasks, then starts the scheduler. The web
* documentation provides more details of the standard demo application tasks,
* which provide no particular functionality but do provide a good example of
* how to use the FreeRTOS API.
*
* In addition to the standard demo tasks, the following tasks and tests are
* defined and/or created within this file:
*
* "Reg test" tasks - These fill the registers with known values, then
* repeatedly check that each register still contains its expected value for
* the lifetime of the tasks. Each task uses different values. The tasks run
* with very low priority so get preempted very frequently. A check variable
* is incremented on each iteration of the test loop. A register containing an
* unexpected value is indicative of an error in the context switching
* mechanism and will result in a branch to a null loop - which in turn will
* prevent the check variable from incrementing any further and allow the check
* timer (described below) to determine that an error has occurred. The nature
* of the reg test tasks necessitates that they are written in assembly code.
*
* "Check Timer" and Callback Function - The check timer period is initially
* set to three seconds. The check timer callback function checks that all the
* standard demo tasks are not only still executing, but are executing without
* reporting any errors. If the check timer discovers that a task has either
* stalled, or reported an error, then it changes its own period from the
* initial three seconds, to just 200ms. The check timer callback function
* also toggles LED 0 each time it is called. This provides a visual
* indication of the system status: If the LED toggles every three seconds,
* then no issues have been discovered. If the LED toggles every 200ms, then
* an issue has been discovered with at least one task.
*
* *NOTE 1* The CPU must be in Supervisor mode when the scheduler is started.
* The PowerON_Reset_PC() supplied in resetprg.c with this demo has
* Change_PSW_PM_to_UserMode() commented out to ensure this is the case.
*/
/* Standard includes. */
#include <string.h>
/* Hardware specific includes. */
#include "iodefine.h"
/* Kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#include "semphr.h"
/* Standard demo includes. */
#include "partest.h"
#include "death.h"
#include "blocktim.h"
#include "GenQTest.h"
#include "recmutex.h"
/* The code in this file is only built when configCREATE_LOW_POWER_DEMO is set
to 0, otherwise the code in main_low_power.c is used. */
#if configCREATE_LOW_POWER_DEMO == 0
/* Values that are passed into the reg test tasks using the task parameter.
The tasks check that the values are passed in correctly. */
#define mainREG_TEST_1_PARAMETER ( 0x12121212UL )
#define mainREG_TEST_2_PARAMETER ( 0x12345678UL )
/* Priorities at which the standard demo tasks are created. */
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
/* The LED toggled by the check timer. */
#define mainCHECK_LED ( 0 )
/* The period at which the check timer will expire, in ms, provided no errors
have been reported by any of the standard demo tasks. ms are converted to the
equivalent in ticks using the portTICK_RATE_MS constant. */
#define mainCHECK_TIMER_PERIOD_MS ( 3000UL / portTICK_RATE_MS )
/* The period at which the check timer will expire, in ms, if an error has been
reported in one of the standard demo tasks. ms are converted to the equivalent
in ticks using the portTICK_RATE_MS constant. */
#define mainERROR_CHECK_TIMER_PERIOD_MS ( 200UL / portTICK_RATE_MS )
/* A block time of zero simple means "Don't Block". */
#define mainDONT_BLOCK ( 0UL )
/*
* The reg test tasks as described at the top of this file.
*/
static void prvRegTest1Task( void *pvParameters );
static void prvRegTest2Task( void *pvParameters );
/*
* The actual implementation of the reg test functionality, which, because of
* the direct register access, have to be in assembly.
*/
static void prvRegTest1Implementation( void ) __attribute__(( naked ));
static void prvRegTest2Implementation( void ) __attribute__(( naked ));
/*
* The check timer callback function, as described at the top of this file.
*/
static void prvCheckTimerCallback( xTimerHandle xTimer );
/*-----------------------------------------------------------*/
/* Variables that are incremented on each iteration of the reg test tasks -
provided the tasks have not reported any errors. The check timer inspects these
variables to ensure they are still incrementing as expected. If a variable
stops incrementing then it is likely that its associated task has stalled. */
unsigned long ulRegTest1CycleCount = 0UL, ulRegTest2CycleCount = 0UL;
/* The check timer. This uses prvCheckTimerCallback() as its callback
function. */
static xTimerHandle xCheckTimer = NULL;
/*-----------------------------------------------------------*/
void main_full( void )
{
/* Start the reg test tasks which test the context switching mechanism. */
xTaskCreate( prvRegTest1Task, "RegTst1", configMINIMAL_STACK_SIZE, ( void * ) mainREG_TEST_1_PARAMETER, tskIDLE_PRIORITY, NULL );
xTaskCreate( prvRegTest2Task, "RegTst2", configMINIMAL_STACK_SIZE, ( void * ) mainREG_TEST_2_PARAMETER, tskIDLE_PRIORITY, NULL );
/* Create the standard demo tasks. */
vCreateBlockTimeTasks();
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
vStartRecursiveMutexTasks();
/* The suicide tasks must be created last as they need to know how many
tasks were running prior to their creation in order to ascertain whether
or not the correct/expected number of tasks are running at any given time. */
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
/* Create the software timer that performs the 'check' functionality,
as described at the top of this file. */
xCheckTimer = xTimerCreate( ( const signed char * ) "CheckTimer",/* A text name, purely to help debugging. */
( mainCHECK_TIMER_PERIOD_MS ), /* The timer period, in this case 5000ms (5s). */
pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */
( void * ) 0, /* The ID is not used, so can be set to anything. */
prvCheckTimerCallback /* The callback function that inspects the status of all the other tasks. */
);
configASSERT( xCheckTimer );
/* Start the check timer. It will actually start when the scheduler is
started. */
xTimerStart( xCheckTimer, mainDONT_BLOCK );
/* Start the tasks running. */
vTaskStartScheduler();
/* If all is well execution will never reach here as the scheduler will be
running. If this null loop is reached then it is likely there was
insufficient FreeRTOS heap available for the idle task and/or timer task to
be created. See http://www.freertos.org/a00111.html. */
for( ;; );
}
/*-----------------------------------------------------------*/
static void prvCheckTimerCallback( xTimerHandle xTimer )
{
static long lChangedTimerPeriodAlready = pdFALSE, lErrorStatus = pdPASS;
static volatile unsigned long ulLastRegTest1CycleCount = 0UL, ulLastRegTest2CycleCount = 0UL;
/* Remove compiler warnings about unused parameters. */
( void ) xTimer;
/* Check the standard demo tasks are running without error. */
if( xAreGenericQueueTasksStillRunning() != pdTRUE )
{
lErrorStatus = pdFAIL;
}
else if( xIsCreateTaskStillRunning() != pdTRUE )
{
lErrorStatus = pdFAIL;
}
else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
{
lErrorStatus = pdFAIL;
}
else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
{
lErrorStatus = pdFAIL;
}
/* Check the reg test tasks are still cycling. They will stop incrementing
their loop counters if they encounter an error. */
if( ulRegTest1CycleCount == ulLastRegTest1CycleCount )
{
lErrorStatus = pdFAIL;
}
if( ulRegTest2CycleCount == ulLastRegTest2CycleCount )
{
lErrorStatus = pdFAIL;
}
/* Remember the loop counter values this time around so they can be checked
again the next time this callback function executes. */
ulLastRegTest1CycleCount = ulRegTest1CycleCount;
ulLastRegTest2CycleCount = ulRegTest2CycleCount;
/* Toggle the check LED to give an indication of the system status. If
the LED toggles every three seconds then everything is ok. A faster toggle
indicates an error. */
vParTestToggleLED( mainCHECK_LED );
/* Was an error detected this time through the callback execution? */
if( lErrorStatus != pdPASS )
{
if( lChangedTimerPeriodAlready == pdFALSE )
{
lChangedTimerPeriodAlready = pdTRUE;
/* This call to xTimerChangePeriod() uses a zero block time.
Functions called from inside of a timer callback function must
*never* attempt to block. */
xTimerChangePeriod( xCheckTimer, ( mainERROR_CHECK_TIMER_PERIOD_MS ), mainDONT_BLOCK );
}
}
}
/*-----------------------------------------------------------*/
/* This function is explained in the comments at the top of this file. */
static void prvRegTest1Task( void *pvParameters )
{
if( ( ( unsigned long ) pvParameters ) != mainREG_TEST_1_PARAMETER )
{
/* The parameter did not contain the expected value. */
for( ;; )
{
/* Stop the tick interrupt so its obvious something has gone wrong. */
taskDISABLE_INTERRUPTS();
}
}
/* This is an inline asm function that never returns. */
prvRegTest1Implementation();
}
/*-----------------------------------------------------------*/
/* This function is explained in the comments at the top of this file. */
static void prvRegTest2Task( void *pvParameters )
{
if( ( ( unsigned long ) pvParameters ) != mainREG_TEST_2_PARAMETER )
{
/* The parameter did not contain the expected value. */
for( ;; )
{
/* Stop the tick interrupt so its obvious something has gone wrong. */
taskDISABLE_INTERRUPTS();
}
}
/* This is an inline asm function that never returns. */
prvRegTest2Implementation();
}
/*-----------------------------------------------------------*/
/* This function is explained in the comments at the top of this file. */
static void prvRegTest1Implementation( void )
{
__asm volatile
(
/* Set each register to a known value. */
" MOV.L #0x33333333, R15 \n\t"
" MVTACHI R15 \n\t"
" MOV.L #0x44444444, R15 \n\t"
" MVTACLO R15 \n\t"
" MOV.L #1, R1 \n\t"
" MOV.L #2, R2 \n\t"
" MOV.L #3, R3 \n\t"
" MOV.L #4, R4 \n\t"
" MOV.L #5, R5 \n\t"
" MOV.L #6, R6 \n\t"
" MOV.L #7, R7 \n\t"
" MOV.L #8, R8 \n\t"
" MOV.L #9, R9 \n\t"
" MOV.L #10, R10 \n\t"
" MOV.L #11, R11 \n\t"
" MOV.L #12, R12 \n\t"
" MOV.L #13, R13 \n\t"
" MOV.L #14, R14 \n\t"
" MOV.L #15, R15 \n\t"
" \n\t"
/* Loop, checking each iteration that each register still contains the
expected value. */
"TestLoop1: \n\t"
" \n\t"
/* Push the registers that are going to get clobbered. */
" PUSHM R14-R15 \n\t"
" \n\t"
/* Increment the loop counter to show this task is still getting CPU
time. */
" MOV.L #_ulRegTest1CycleCount, R14 \n\t"
" MOV.L [ R14 ], R15 \n\t"
" ADD #1, R15 \n\t"
" MOV.L R15, [ R14 ] \n\t"
" \n\t"
/* Yield to extend the text coverage. Set the bit in the ITU SWINTR
register. */
" MOV.L #1, R14 \n\t"
" MOV.L #0872E0H, R15 \n\t"
" MOV.B R14, [R15] \n\t"
" NOP \n\t"
" NOP \n\t"
" \n\t"
/* Check the accumulator value. */
" MVFACHI R15 \n\t"
" CMP #0x33333333, R15 \n\t"
" BNE RegTest2Error \n\t"
" MVFACMI R15 \n\t"
" CMP #0x33334444, R15 \n\t"
" BNE RegTest2Error \n\t"
" \n\t"
/* Restore the clobbered registers. */
" POPM R14-R15 \n\t"
" \n\t"
/* Now compare each register to ensure it still contains the value that
was set before this loop was entered. */
" CMP #1, R1 \n\t"
" BNE RegTest1Error \n\t"
" CMP #2, R2 \n\t"
" BNE RegTest1Error \n\t"
" CMP #3, R3 \n\t"
" BNE RegTest1Error \n\t"
" CMP #4, R4 \n\t"
" BNE RegTest1Error \n\t"
" CMP #5, R5 \n\t"
" BNE RegTest1Error \n\t"
" CMP #6, R6 \n\t"
" BNE RegTest1Error \n\t"
" CMP #7, R7 \n\t"
" BNE RegTest1Error \n\t"
" CMP #8, R8 \n\t"
" BNE RegTest1Error \n\t"
" CMP #9, R9 \n\t"
" BNE RegTest1Error \n\t"
" CMP #10, R10 \n\t"
" BNE RegTest1Error \n\t"
" CMP #11, R11 \n\t"
" BNE RegTest1Error \n\t"
" CMP #12, R12 \n\t"
" BNE RegTest1Error \n\t"
" CMP #13, R13 \n\t"
" BNE RegTest1Error \n\t"
" CMP #14, R14 \n\t"
" BNE RegTest1Error \n\t"
" CMP #15, R15 \n\t"
" BNE RegTest1Error \n\t"
" \n\t"
/* All comparisons passed, start a new iteration of this loop. */
" BRA TestLoop1 \n\t"
" \n\t"
/* A compare failed, just loop here so the loop counter stops
incrementing causing the check timer to indicate the error. */
"RegTest1Error: \n\t"
" BRA RegTest1Error "
);
}
/*-----------------------------------------------------------*/
/* This function is explained in the comments at the top of this file. */
static void prvRegTest2Implementation( void )
{
__asm volatile
(
/* Set each register to a known value. */
" MOV.L #0x11111111, R15 \n\t"
" MVTACHI R15 \n\t"
" MOV.L #0x22222222, R15 \n\t"
" MVTACLO R15 \n\t"
" MOV.L #100, R1 \n\t"
" MOV.L #200, R2 \n\t"
" MOV.L #300, R3 \n\t"
" MOV.L #400, R4 \n\t"
" MOV.L #500, R5 \n\t"
" MOV.L #600, R6 \n\t"
" MOV.L #700, R7 \n\t"
" MOV.L #800, R8 \n\t"
" MOV.L #900, R9 \n\t"
" MOV.L #1000, R10 \n\t"
" MOV.L #1001, R11 \n\t"
" MOV.L #1002, R12 \n\t"
" MOV.L #1003, R13 \n\t"
" MOV.L #1004, R14 \n\t"
" MOV.L #1005, R15 \n\t"
" \n\t"
/* Loop, checking each iteration that each register still contains the
expected value. */
"TestLoop2: \n\t"
" \n\t"
/* Push the registers that are going to get clobbered. */
" PUSHM R14-R15 \n\t"
" \n\t"
/* Increment the loop counter to show this task is still getting CPU
time. */
" MOV.L #_ulRegTest2CycleCount, R14 \n\t"
" MOV.L [ R14 ], R15 \n\t"
" ADD #1, R15 \n\t"
" MOV.L R15, [ R14 ] \n\t"
" \n\t"
/* Check the accumulator value. */
" MVFACHI R15 \n\t"
" CMP #0x11111111, R15 \n\t"
" BNE RegTest2Error \n\t"
" MVFACMI R15 \n\t"
" CMP #0x11112222, R15 \n\t"
" BNE RegTest2Error \n\t"
" \n\t"
/* Restore the clobbered registers. */
" POPM R14-R15 \n\t"
" \n\t"
/* Now compare each register to ensure it still contains the value that
was set before this loop was entered. */
" CMP #100, R1 \n\t"
" BNE RegTest2Error \n\t"
" CMP #200, R2 \n\t"
" BNE RegTest2Error \n\t"
" CMP #300, R3 \n\t"
" BNE RegTest2Error \n\t"
" CMP #400, R4 \n\t"
" BNE RegTest2Error \n\t"
" CMP #500, R5 \n\t"
" BNE RegTest2Error \n\t"
" CMP #600, R6 \n\t"
" BNE RegTest2Error \n\t"
" CMP #700, R7 \n\t"
" BNE RegTest2Error \n\t"
" CMP #800, R8 \n\t"
" BNE RegTest2Error \n\t"
" CMP #900, R9 \n\t"
" BNE RegTest2Error \n\t"
" CMP #1000, R10 \n\t"
" BNE RegTest2Error \n\t"
" CMP #1001, R11 \n\t"
" BNE RegTest2Error \n\t"
" CMP #1002, R12 \n\t"
" BNE RegTest2Error \n\t"
" CMP #1003, R13 \n\t"
" BNE RegTest2Error \n\t"
" CMP #1004, R14 \n\t"
" BNE RegTest2Error \n\t"
" CMP #1005, R15 \n\t"
" BNE RegTest2Error \n\t"
" \n\t"
/* All comparisons passed, start a new iteration of this loop. */
" BRA TestLoop2 \n\t"
" \n\t"
/* A compare failed, just loop here so the loop counter stops
incrementing causing the check timer to indicate the error. */
"RegTest2Error: \n\t"
" BRA RegTest2Error "
);
}
/*-----------------------------------------------------------*/
#endif /* configCREATE_LOW_POWER_DEMO */

View File

@ -0,0 +1,436 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/* ****************************************************************************
* When configCREATE_LOW_POWER_DEMO is set to 1 in FreeRTOSConfig.h main() will
* call main_low_power(), which is defined in this file. main_low_power()
* demonstrates FreeRTOS tick suppression being used to allow the MCU to be
* placed into both the low power deep sleep mode and the low power software
* standby mode. When configCREATE_LOW_POWER_DEMO is set to 0 main will
* instead call main_full(), which is a more comprehensive RTOS demonstration.
* ****************************************************************************
*
* This application demonstrates the FreeRTOS tickless idle mode (tick
* suppression). See http://www.freertos.org/low-power-tickless-rtos.html
* The demo is configured to execute on the Renesas RX100 RSK.
*
* Functionality:
*
* + Two tasks are created, an Rx task and a Tx task.
*
* + The Rx task repeatedly blocks on a queue to wait for data. The Rx task
* toggles LED 0 each time is receives a value from the queue.
*
* + The Tx task repeatedly enters the Blocked state for an amount of time
* that is set by the position of the potentiometer. On exiting the blocked
* state the Tx task sends a value through the queue to the Rx task (causing
* the Rx task to exit the blocked state and toggle LED 0).
*
* If the value read from the potentiometer is less than or equal to
* mainSOFTWARE_STANDBY_DELAY then the Tx task blocks for the equivalent
* number of milliseconds. For example, if the sampled analog value is
* 2000, then the Tx task blocks for 2000ms. Blocking for a finite period
* allows the kernel to stop the tick interrupt and place the RX100 into
* deep sleep mode.
*
* If the value read form the potentiometer is greater than
* mainSOFTWARE_STANDBY_DELAY then the Tx task blocks on a semaphore with
* an infinite timeout. Blocking with an infinite timeout allows the kernel
* to stop the tick interrupt and place the RX100 into software standby
* mode. Pressing a button will generate an interrupt that causes the RX100
* to exit software standby mode. The interrupt service routine 'gives' the
* semaphore to unblock the Tx task.
*
*
* Using the Demo and Observed Behaviour:
*
* 1) Turn the potentiometer completely counter clockwise.
*
* 2) Program the RX100 with the application, then disconnect the programming/
* debugging hardware to ensure power readings are not effected by any
* connected interfaces.
*
* 3) Start the application running. LED 0 will toggle quickly because the
* potentiometer is turned to its lowest value. LED 1 will be illuminated
* when the RX100 is not in a power saving mode, but will appear to be off
* because most execution time is spent in a sleep mode. Led 2 will be
* illuminated when the RX100 is in deep sleep mode, and will appear to be
* always on, again because most execution time is spent in deep sleep mode.
* The LEDs are turned on and off by the application defined pre and post
* sleep macros (see the definitions of configPRE_SLEEP_PROCESSING() and
* configPOST_SLEEP_PROCESSING() in FreeRTOSConfig.h).
*
* 4) Slowly turn the potentiometer in the clockwise direction. This will
* increase the value read from the potentiometer, which will increase the
* time the Tx task spends in the Blocked state, which will therefore
* decrease the frequency at which the Tx task sends data to the queue (and
* the rate at which LED 0 is toggled).
*
* 5) Keep turning the potentiometer in the clockwise direction. Eventually
* the value read from the potentiometer will go above
* mainSOFTWARE_STANDBY_DELAY, causing the Tx task to block on the semaphore
* with an infinite timeout. LED 0 will stop toggling because the Tx task is
* no longer sending to the queue. LED 1 and LED 2 will both be off because
* the RX100 is neither running or in deep sleep mode (it is in software
* standby mode).
*
* 6) Turn the potentiometer counter clockwise again to ensure its value goes
* back below mainSOFTWARE_STANDBY_DELAY.
*
* 7) Press any of the three buttons to generate an interrupt. The interrupt
* will take the RX100 out of software standby mode, and the interrupt
* service routine will unblock the Tx task by 'giving' the semaphore. LED 0
* will then start to toggle again.
*
*/
/* Hardware specific includes. */
#include "platform.h"
#include "r_switches_if.h"
/* Kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
/* Common demo includes. */
#include "partest.h"
/* Priorities at which the Rx and Tx tasks are created. */
#define configQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
#define configQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
/* The number of items the queue can hold. This is 1 as the Rx task will
remove items as they are added so the Tx task should always find the queue
empty. */
#define mainQUEUE_LENGTH ( 1 )
/* The LED used to indicate that a value has been received on the queue. */
#define mainQUEUE_LED ( 0 )
/* The LED used to indicate that full power is being used (the MCU is not in
deep sleep or software standby mode). */
#define mainFULL_POWER_LED ( 1 )
/* The LED used to indicate that deep sleep mode is being used. */
#define mainDEEP_SLEEP_LED ( 2 )
/* The Tx task sends to the queue with a frequency that is set by the value
read from the potentiometer until the value goes above that set by the
mainSOFTWARE_STANDBY_DELAY constant - at which time the Tx task instead blocks
indefinitely on a semaphore. */
#define mainSOFTWARE_STANDBY_DELAY ( 3000UL )
/* A block time of zero simply means "don't block". */
#define mainDONT_BLOCK ( 0 )
/* The value that is sent from the Tx task to the Rx task on the queue. */
#define mainQUEUED_VALUE ( 100UL )
/*-----------------------------------------------------------*/
/*
* The Rx and Tx tasks as described at the top of this file.
*/
static void prvQueueReceiveTask( void *pvParameters );
static void prvQueueSendTask( void *pvParameters );
/*
* Reads and returns the value of the ADC connected to the potentiometer built
* onto the RSK.
*/
static unsigned short prvReadPOT( void );
/*
* The handler for the interrupt generated when any of the buttons are pressed.
*/
void vButtonInterrupt( void ) __attribute__((interrupt));
/*-----------------------------------------------------------*/
/* The queue to pass data from the Tx task to the Rx task. */
static xQueueHandle xQueue = NULL;
/* The semaphore that is 'given' by interrupts generated from button pushes. */
static xSemaphoreHandle xSemaphore = NULL;
/*-----------------------------------------------------------*/
void main_low_power( void )
{
/* Create the queue. */
xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) );
configASSERT( xQueue );
/* Create the semaphore that is 'given' by an interrupt generated from a
button push. */
vSemaphoreCreateBinary( xSemaphore );
configASSERT( xSemaphore );
/* Make sure the semaphore starts in the expected state - no button pushes
have yet occurred. A block time of zero can be used as it is guaranteed
that the semaphore will be available because it has just been created. */
xSemaphoreTake( xSemaphore, mainDONT_BLOCK );
/* Start the two tasks as described at the top of this file. */
xTaskCreate( prvQueueReceiveTask, "Rx", configMINIMAL_STACK_SIZE, NULL, configQUEUE_RECEIVE_TASK_PRIORITY, NULL );
xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, NULL, configQUEUE_SEND_TASK_PRIORITY, NULL );
/* The CPU is currently running, not sleeping, so turn on the LED that
shows the CPU is not in a sleep mode. */
vParTestSetLED( mainFULL_POWER_LED, pdTRUE );
/* Start the scheduler running running. */
vTaskStartScheduler();
/* If all is well the next line of code will not be reached as the
scheduler will be running. If the next line is reached then it is likely
there was insufficient FreeRTOS heap available for the idle task and/or
timer task to be created. See http://www.freertos.org/a00111.html. */
for( ;; );
}
/*-----------------------------------------------------------*/
static void prvQueueSendTask( void *pvParameters )
{
portTickType xDelay;
const unsigned long ulValueToSend = mainQUEUED_VALUE;
/* Remove compiler warning about unused parameter. */
( void ) pvParameters;
for( ;; )
{
/* The delay period between successive sends to the queue is set by
the potentiometer reading. */
xDelay = ( portTickType ) prvReadPOT();
/* If the block time is greater than 3000 milliseconds then block
indefinitely waiting for a button push. */
if( xDelay > mainSOFTWARE_STANDBY_DELAY )
{
/* As this is an indefinite delay the kernel will place the CPU
into software standby mode the next time the idle task runs. */
xSemaphoreTake( xSemaphore, portMAX_DELAY );
}
else
{
/* Convert a time in milliseconds to a time in ticks. */
xDelay /= portTICK_RATE_MS;
/* Place this task in the blocked state until it is time to run
again. As this is not an indefinite sleep the kernel will place
the CPU into the deep sleep state when the idle task next runs. */
vTaskDelay( xDelay );
}
/* Send to the queue - causing the queue receive task to flash its LED.
It should not be necessary to block on the queue send because the Rx
task will have removed the last queued item. */
xQueueSend( xQueue, &ulValueToSend, mainDONT_BLOCK );
}
}
/*-----------------------------------------------------------*/
static void prvQueueReceiveTask( void *pvParameters )
{
unsigned long ulReceivedValue;
/* Remove compiler warning about unused parameter. */
( void ) pvParameters;
for( ;; )
{
/* Wait until something arrives in the queue - this will block
indefinitely provided INCLUDE_vTaskSuspend is set to 1 in
FreeRTOSConfig.h. */
xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
/* To get here something must have arrived, but is it the expected
value? If it is, toggle the LED. */
if( ulReceivedValue == mainQUEUED_VALUE )
{
vParTestToggleLED( mainQUEUE_LED );
}
}
}
/*-----------------------------------------------------------*/
void vPreSleepProcessing( unsigned long ulExpectedIdleTime )
{
/* Called by the kernel before it places the MCU into a sleep mode because
configPRE_SLEEP_PROCESSING() is #defined to vPreSleepProcessing().
NOTE: Additional actions can be taken here to get the power consumption
even lower. For example, the ADC input used by this demo could be turned
off here, and then back on again in the power sleep processing function.
For maximum power saving ensure all unused pins are in their lowest power
state. */
/* Avoid compiler warnings about the unused parameter. */
( void ) ulExpectedIdleTime;
/* Is the MCU about to enter deep sleep mode or software standby mode? */
if( SYSTEM.SBYCR.BIT.SSBY == 0 )
{
/* Turn on the LED that indicates deep sleep mode is being entered. */
vParTestSetLED( mainDEEP_SLEEP_LED, pdTRUE );
}
else
{
/* Software standby mode is being used, so no LEDs are illuminated to
ensure minimum power readings are obtained. Ensure the Queue LED is
also off. */
vParTestSetLED( mainQUEUE_LED, pdFALSE );
}
/* Turn off the LED that indicates full power is being used. */
vParTestSetLED( mainFULL_POWER_LED, pdFALSE );
}
/*-----------------------------------------------------------*/
void vPostSleepProcessing( unsigned long ulExpectedIdleTime )
{
/* Called by the kernel when the MCU exits a sleep mode because
configPOST_SLEEP_PROCESSING is #defined to vPostSleepProcessing(). */
/* Avoid compiler warnings about the unused parameter. */
( void ) ulExpectedIdleTime;
/* Turn off the LED that indicates deep sleep mode, and turn on the LED
that indicates full power is being used. */
vParTestSetLED( mainDEEP_SLEEP_LED, pdFALSE );
vParTestSetLED( mainFULL_POWER_LED, pdTRUE );
}
/*-----------------------------------------------------------*/
static unsigned short prvReadPOT( void )
{
unsigned short usADCValue;
const unsigned short usMinADCValue = 128;
/* Start an ADC scan. */
S12AD.ADCSR.BIT.ADST = 1;
while( S12AD.ADCSR.BIT.ADST == 1 )
{
/* Just waiting for the ADC scan to complete. Inefficient
polling! */
}
usADCValue = S12AD.ADDR4;
/* Don't let the ADC value get too small as the LED behaviour will look
erratic. */
if( usADCValue < usMinADCValue )
{
usADCValue = usMinADCValue;
}
return usADCValue;
}
/*-----------------------------------------------------------*/
void vButtonInterrupt( void )
{
long lHigherPriorityTaskWoken = pdFALSE;
/* The semaphore is only created when the build is configured to create the
low power demo. */
if( xSemaphore != NULL )
{
/* This interrupt will bring the CPU out of deep sleep and software
standby modes. Give the semaphore that was used to place the Tx task
into an indefinite sleep. */
if( uxQueueMessagesWaitingFromISR( xSemaphore ) == 0 )
{
xSemaphoreGiveFromISR( xSemaphore, &lHigherPriorityTaskWoken );
}
else
{
/* The semaphore was already available, so the task is not blocked
on it and there is no point giving it. */
}
/* If giving the semaphore caused a task to leave the Blocked state,
and the task that left the Blocked state has a priority equal to or
above the priority of the task that this interrupt interrupted, then
lHigherPriorityTaskWoken will have been set to pdTRUE inside the call
to xSemaphoreGiveFromISR(), and calling portYIELD_FROM_ISR() will cause
a context switch to the unblocked task. */
portYIELD_FROM_ISR( lHigherPriorityTaskWoken );
}
}

View File

@ -0,0 +1,293 @@
/*
Copyright 2001, 2002 Georges Menie (www.menie.org)
stdarg version contributed by Christian Ettinger
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
putchar is the only external dependency for this file,
if you have a working putchar, leave it commented out.
If not, uncomment the define below and
replace outbyte(c) by your own function call.
*/
#define putchar(c) c
#include <stdarg.h>
static void printchar(char **str, int c)
{
//extern int putchar(int c);
if (str) {
**str = (char)c;
++(*str);
}
else
{
(void)putchar(c);
}
}
#define PAD_RIGHT 1
#define PAD_ZERO 2
static int prints(char **out, const char *string, int width, int pad)
{
register int pc = 0, padchar = ' ';
if (width > 0) {
register int len = 0;
register const char *ptr;
for (ptr = string; *ptr; ++ptr) ++len;
if (len >= width) width = 0;
else width -= len;
if (pad & PAD_ZERO) padchar = '0';
}
if (!(pad & PAD_RIGHT)) {
for ( ; width > 0; --width) {
printchar (out, padchar);
++pc;
}
}
for ( ; *string ; ++string) {
printchar (out, *string);
++pc;
}
for ( ; width > 0; --width) {
printchar (out, padchar);
++pc;
}
return pc;
}
/* the following should be enough for 32 bit int */
#define PRINT_BUF_LEN 12
static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase)
{
char print_buf[PRINT_BUF_LEN];
register char *s;
register int t, neg = 0, pc = 0;
register unsigned int u = (unsigned int)i;
if (i == 0) {
print_buf[0] = '0';
print_buf[1] = '\0';
return prints (out, print_buf, width, pad);
}
if (sg && b == 10 && i < 0) {
neg = 1;
u = (unsigned int)-i;
}
s = print_buf + PRINT_BUF_LEN-1;
*s = '\0';
while (u) {
t = (unsigned int)u % b;
if( t >= 10 )
t += letbase - '0' - 10;
*--s = (char)(t + '0');
u /= b;
}
if (neg) {
if( width && (pad & PAD_ZERO) ) {
printchar (out, '-');
++pc;
--width;
}
else {
*--s = '-';
}
}
return pc + prints (out, s, width, pad);
}
static int print( char **out, const char *format, va_list args )
{
register int width, pad;
register int pc = 0;
char scr[2];
for (; *format != 0; ++format) {
if (*format == '%') {
++format;
width = pad = 0;
if (*format == '\0') break;
if (*format == '%') goto out;
if (*format == '-') {
++format;
pad = PAD_RIGHT;
}
while (*format == '0') {
++format;
pad |= PAD_ZERO;
}
for ( ; *format >= '0' && *format <= '9'; ++format) {
width *= 10;
width += *format - '0';
}
if( *format == 's' ) {
register char *s = (char *)va_arg( args, int );
pc += prints (out, s?s:"(null)", width, pad);
continue;
}
if( *format == 'd' ) {
pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a');
continue;
}
if( *format == 'x' ) {
pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a');
continue;
}
if( *format == 'X' ) {
pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A');
continue;
}
if( *format == 'u' ) {
pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a');
continue;
}
if( *format == 'c' ) {
/* char are converted to int then pushed on the stack */
scr[0] = (char)va_arg( args, int );
scr[1] = '\0';
pc += prints (out, scr, width, pad);
continue;
}
}
else {
out:
printchar (out, *format);
++pc;
}
}
if (out) **out = '\0';
va_end( args );
return pc;
}
int printf(const char *format, ...)
{
va_list args;
va_start( args, format );
return print( 0, format, args );
}
int sprintf(char *out, const char *format, ...)
{
va_list args;
va_start( args, format );
return print( &out, format, args );
}
int snprintf( char *buf, unsigned int count, const char *format, ... )
{
va_list args;
( void ) count;
va_start( args, format );
return print( &buf, format, args );
}
#ifdef TEST_PRINTF
int main(void)
{
char *ptr = "Hello world!";
char *np = 0;
int i = 5;
unsigned int bs = sizeof(int)*8;
int mi;
char buf[80];
mi = (1 << (bs-1)) + 1;
printf("%s\n", ptr);
printf("printf test\n");
printf("%s is null pointer\n", np);
printf("%d = 5\n", i);
printf("%d = - max int\n", mi);
printf("char %c = 'a'\n", 'a');
printf("hex %x = ff\n", 0xff);
printf("hex %02x = 00\n", 0);
printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3);
printf("%d %s(s)%", 0, "message");
printf("\n");
printf("%d %s(s) with %%\n", 0, "message");
sprintf(buf, "justif: \"%-10s\"\n", "left"); printf("%s", buf);
sprintf(buf, "justif: \"%10s\"\n", "right"); printf("%s", buf);
sprintf(buf, " 3: %04d zero padded\n", 3); printf("%s", buf);
sprintf(buf, " 3: %-4d left justif.\n", 3); printf("%s", buf);
sprintf(buf, " 3: %4d right justif.\n", 3); printf("%s", buf);
sprintf(buf, "-3: %04d zero padded\n", -3); printf("%s", buf);
sprintf(buf, "-3: %-4d left justif.\n", -3); printf("%s", buf);
sprintf(buf, "-3: %4d right justif.\n", -3); printf("%s", buf);
return 0;
}
/*
* if you compile this file with
* gcc -Wall $(YOUR_C_OPTIONS) -DTEST_PRINTF -c printf.c
* you will get a normal warning:
* printf.c:214: warning: spurious trailing `%' in format
* this line is testing an invalid % at the end of the format string.
*
* this should display (on 32bit int machine) :
*
* Hello world!
* printf test
* (null) is null pointer
* 5 = 5
* -2147483647 = - max int
* char a = 'a'
* hex ff = ff
* hex 00 = 00
* signed -3 = unsigned 4294967293 = hex fffffffd
* 0 message(s)
* 0 message(s) with %
* justif: "left "
* justif: " right"
* 3: 0003 zero padded
* 3: 3 left justif.
* 3: 3 right justif.
* -3: -003 zero padded
* -3: -3 left justif.
* -3: -3 right justif.
*/
#endif
/* To keep linker happy. */
int write( int i, char* c, int n)
{
(void)i;
(void)n;
(void)c;
return 0;
}

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.renesas.cdt.launch.dsf.gdbremote.launchConfigurationType">
<intAttribute key="com.renesas.cdt.core.admPortNumber" value="61236"/>
<stringAttribute key="com.renesas.cdt.core.initCommands" value=""/>
<stringAttribute key="com.renesas.cdt.core.ipAddress" value="localhost"/>
<stringAttribute key="com.renesas.cdt.core.jtagDevice" value="E1"/>
<booleanAttribute key="com.renesas.cdt.core.loadImage" value="true"/>
<stringAttribute key="com.renesas.cdt.core.optionInitCommands" value=""/>
<intAttribute key="com.renesas.cdt.core.portNumber" value="61234"/>
<stringAttribute key="com.renesas.cdt.core.runCommands" value=""/>
<stringAttribute key="com.renesas.cdt.core.serverParam" value="-g E1 -l 0 -t R5F51115 -p 61234 -d 61236 -uClockSrcHoco= 0 -uInputClock= 12.0000 -uAllowClockSourceInternal= 1 -uUseFine= 1 -uFineBaudRate= 2.00 -w 0 -z 0 -uRegisterSetting= 0 -uModePin= 0 -uDebugMode= 0 -uExecuteProgram= 0 -uIdCode= FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -n 0 -uWorkRamAddress= 1000 -uProgReWriteIRom= 0 -uProgReWriteDFlash= 0"/>
<booleanAttribute key="com.renesas.cdt.core.setResume" value="true"/>
<booleanAttribute key="com.renesas.cdt.core.setStopAt" value="true"/>
<booleanAttribute key="com.renesas.cdt.core.startServer" value="true"/>
<stringAttribute key="com.renesas.cdt.core.stopAt" value="main"/>
<stringAttribute key="com.renesas.cdt.core.targetDevice" value="R5F51115"/>
<booleanAttribute key="com.renesas.cdt.core.useRemoteTarget" value="true"/>
<booleanAttribute key="com.renesas.cdt.core.verboseMode" value="false"/>
<stringAttribute key="com.renesas.cdt.launch.dsf.IO_MAP" value="${eclipse_home}..\internal\IoFiles\RX\RX111.sfrx"/>
<booleanAttribute key="com.renesas.cdt.launch.dsf.USE_DEFAULT_IO_MAP" value="true"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.allow.clock.source.internal" value="true"/>
<intAttribute key="com.renesas.hardwaredebug.e1.clock_source" value="0"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.connection.mode" value="0"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.e1_pwr" value="false"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.execute.program" value="false"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.external_memory" value=""/>
<stringAttribute key="com.renesas.hardwaredebug.e1.fine.baud.rate" value="2.00"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.flash_overwrite_blocks" value=""/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.hw_break" value="false"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.id_code" value="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.inputclock" value="12.0000"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.jtag.clock.freq" value="16.5"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.jtag.or.fine" value="1"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.le" value="true"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.mode" value="0"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.mode_pin" value="0"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.prog_rewrite_dflash" value="false"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.prog_rewrite_irom" value="false"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.supply.voltage" value="3.3V"/>
<intAttribute key="com.renesas.hardwaredebug.e1.work_ram_start" value="4096"/>
<booleanAttribute key="com.renesas.hardwaredebug.e20.le" value="true"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.delay" value="3"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.runCommands" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${eclipse_home}../DebugComp/rx-elf-gdb"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="true"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="HardwareDebug\RTOSDemo_GCC.x"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="RTOSDemo_GCC"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value=""/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/RTOSDemo_GCC"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;&#13;&#10;"/>
</launchConfiguration>

View File

@ -0,0 +1,183 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
/* Hardware specifics. */
#include "platform.h"
/*-----------------------------------------------------------
* Application specific definitions.
*
* These definitions should be adjusted for your particular hardware and
* application requirements.
*
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
*
* See http://www.freertos.org/a00110.html.
*----------------------------------------------------------*/
/* DEMO SPECIFIC SETTING:
* Set configCREATE_LOW_POWER_DEMO to one to run the low power demo with tick
* suppression, or 0 to run the more comprehensive test and demo application.
* If configCREATE_LOW_POWER_DEMO is set to 1 then main() calls main_low_power().
* If configCREATE_LOW_POWER_DEMO is set to 0 then main() calls main_full().
*/
#define configCREATE_LOW_POWER_DEMO 1
#define configUSE_PREEMPTION 1
#define configUSE_TICKLESS_IDLE configCREATE_LOW_POWER_DEMO
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ( ICLK_HZ ) /* Set in mcu_info.h. */
#define configPERIPHERAL_CLOCK_HZ ( PCLKB_HZ ) /* Set in muc_info.h. */
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 9 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 12 )
#define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
#define configUSE_CO_ROUTINES 0
#define configUSE_MUTEXES 1
#define configGENERATE_RUN_TIME_STATS 0
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configUSE_RECURSIVE_MUTEXES 1
#define configQUEUE_REGISTRY_SIZE 0
#define configUSE_MALLOC_FAILED_HOOK 0
#define configUSE_APPLICATION_TASK_TAG 0
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 7 )
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
/* Software timer definitions - only included when the demo is configured to
build the full demo (as opposed to the low power demo). */
#if configCREATE_LOW_POWER_DEMO == 1
#define configUSE_TIMERS 0
#else
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 3 )
#define configTIMER_QUEUE_LENGTH 5
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE )
#endif /* configCREATE_LOW_POWER_DEMO */
/*
The interrupt priority used by the kernel itself for the tick interrupt and
the pended interrupt is set by configKERNEL_INTERRUPT_PRIORITY. This would
normally be the lowest priority (1 in this case). The maximum interrupt
priority from which FreeRTOS API calls can be made is set by
configMAX_SYSCALL_INTERRUPT_PRIORITY. Interrupts that use a priority above this
will not be effected by anything the kernel is doing. Interrupts at or below
this priority can use FreeRTOS API functions - but *only* those that end in
"FromISR". Both these constants are defined in 'PriorityDefinitions.h' so they
can also be included in assembly source files.
*/
#include "PriorityDefinitions.h"
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_uxTaskGetStackHighWaterMark 1
#define INCLUDE_xTaskGetSchedulerState 1
extern void vAssertCalled( void );
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled();
/* The configPRE_SLEEP_PROCESSING() and configPOST_SLEEP_PROCESSING() macros
allow the application writer to add additional code before and after the MCU is
placed into the low power state respectively. The implementations provided in
this demo can be extended to save even more power - for example the analog
input used by the low power demo could be switched off in the pre-sleep macro
and back on again in the post sleep macro. */
void vPreSleepProcessing( unsigned long xExpectedIdleTime );
void vPostSleepProcessing( unsigned long xExpectedIdleTime );
#define configPRE_SLEEP_PROCESSING( xExpectedIdleTime ) vPreSleepProcessing( xExpectedIdleTime );
#define configPOST_SLEEP_PROCESSING( xExpectedIdleTime ) vPostSleepProcessing( xExpectedIdleTime );
/* configTICK_VECTOR must be set to the interrupt vector used by the peripheral
that generates the tick interrupt. */
#define configTICK_VECTOR VECT_CMT0_CMI0
#endif /* FREERTOS_CONFIG_H */

View File

@ -0,0 +1,200 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/*-----------------------------------------------------------
* Simple IO routines to control the LEDs.
*-----------------------------------------------------------*/
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
/* Demo includes. */
#include "partest.h"
#define partestNUM_LEDS ( 4 )
long lParTestGetLEDState( unsigned long ulLED );
/*-----------------------------------------------------------*/
void vParTestInitialise( void )
{
/* Port pin configuration is done by the low level set up prior to this
function being called. */
}
/*-----------------------------------------------------------*/
void vParTestSetLED( unsigned long ulLED, signed long xValue )
{
if( ulLED < partestNUM_LEDS )
{
if( xValue != 0 )
{
/* Turn the LED on. */
taskENTER_CRITICAL();
{
switch( ulLED )
{
case 0: LED0 = LED_ON;
break;
case 1: LED1 = LED_ON;
break;
case 2: LED2 = LED_ON;
break;
case 3: LED3 = LED_ON;
break;
}
}
taskEXIT_CRITICAL();
}
else
{
/* Turn the LED off. */
taskENTER_CRITICAL();
{
switch( ulLED )
{
case 0: LED0 = LED_OFF;
break;
case 1: LED1 = LED_OFF;
break;
case 2: LED2 = LED_OFF;
break;
case 3: LED3 = LED_OFF;
break;
}
}
taskEXIT_CRITICAL();
}
}
}
/*-----------------------------------------------------------*/
void vParTestToggleLED( unsigned long ulLED )
{
if( ulLED < partestNUM_LEDS )
{
taskENTER_CRITICAL();
{
if( lParTestGetLEDState( ulLED ) != 0x00 )
{
vParTestSetLED( ulLED, 0 );
}
else
{
vParTestSetLED( ulLED, 1 );
}
}
taskEXIT_CRITICAL();
}
}
/*-----------------------------------------------------------*/
long lParTestGetLEDState( unsigned long ulLED )
{
long lReturn = pdTRUE;
if( ulLED < partestNUM_LEDS )
{
switch( ulLED )
{
case 0 : if( LED0 != 0 )
{
lReturn = pdFALSE;
}
break;
case 1 : if( LED1 != 0 )
{
lReturn = pdFALSE;
}
break;
case 2 : if( LED2 != 0 )
{
lReturn = pdFALSE;
}
break;
case 3 : if( LED3 != 0 )
{
lReturn = pdFALSE;
}
break;
}
}
return lReturn;
}
/*-----------------------------------------------------------*/

View File

@ -0,0 +1,91 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
#ifndef PRIORITY_DEFINITIONS_H
#define PRIORITY_DEFINITIONS_H
/* The interrupt priority used by the kernel itself for the tick interrupt and
the pended interrupt. This would normally be the lowest priority. */
#define configKERNEL_INTERRUPT_PRIORITY 1
/* The maximum interrupt priority from which FreeRTOS API calls can be made.
Interrupts that use a priority above this will not be effected by anything the
kernel is doing but must not make any use of FreeRTOS functionality.
interrupts that use a priority at or below configMAX_SYSCALL_INTERRUPT_PRIORITY
can make use of FreeRTOS API function but *only* functions that end in
"FromISR()". */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4
#endif /* PRIORITY_DEFINITIONS_H */

View File

@ -0,0 +1,398 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<project>
<fileVersion>2</fileVersion>
<fileChecksum>1022944783</fileChecksum>
<configuration>
<name>Debug</name>
<outputs>
<file>$PROJ_DIR$\Debug\Obj\reg_test.o</file>
<file>$PROJ_DIR$\..\..\Source\include\queue.h</file>
<file>$PROJ_DIR$\..\..\Source\include\FreeRTOS.h</file>
<file>$PROJ_DIR$\..\..\Source\include\projdefs.h</file>
<file>$PROJ_DIR$\..\..\Source\portable\IAR\RX100\port.c</file>
<file>$PROJ_DIR$\Debug\Obj\port.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\heap_4.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\blocktim.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\queue.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\port_asm.o</file>
<file>$PROJ_DIR$\Debug\Obj\ParTest.o</file>
<file>$PROJ_DIR$\Debug\Obj\GenQTest.o</file>
<file>$TOOLKIT_DIR$\inc\c\yvals.h</file>
<file>$PROJ_DIR$\Debug\Obj\main.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\lcd.o</file>
<file>$PROJ_DIR$\Debug\Obj\list.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\blocktim.o</file>
<file>$PROJ_DIR$\Debug\Obj\death.o</file>
<file>$PROJ_DIR$\Debug\Obj\hardware_setup.o</file>
<file>$PROJ_DIR$\FreeRTOSConfig.h</file>
<file>$PROJ_DIR$\main.c</file>
<file>$PROJ_DIR$\main_full.c</file>
<file>$PROJ_DIR$\main_low_power.c</file>
<file>$PROJ_DIR$\ParTest.c</file>
<file>$PROJ_DIR$\reg_test.s</file>
<file>$PROJ_DIR$\Debug\Obj\main_low_power.o</file>
<file>$PROJ_DIR$\Debug\Obj\timers.o</file>
<file>$PROJ_DIR$\Debug\Obj\list.o</file>
<file>$TOOLKIT_DIR$\inc\c\DLib_Defaults.h</file>
<file>$TOOLKIT_DIR$\inc\DLib_Product.h</file>
<file>$TOOLKIT_DIR$\inc\c\ycheck.h</file>
<file>$TOOLKIT_DIR$\inc\c\xencoding_limits.h</file>
<file>$TOOLKIT_DIR$\inc\c\DLib_Threads.h</file>
<file>$PROJ_DIR$\Renesas_Files\r_bsp\platform.h</file>
<file>$PROJ_DIR$\Renesas_Files\r_bsp\board\rskrx111\r_bsp.h</file>
<file>$TOOLKIT_DIR$\inc\c\stddef.h</file>
<file>$TOOLKIT_DIR$\inc\c\ysizet.h</file>
<file>$TOOLKIT_DIR$\inc\c\stdint.h</file>
<file>$PROJ_DIR$\Renesas_Files\r_bsp\r_bsp_config.h</file>
<file>$PROJ_DIR$\Renesas_Files\r_bsp\mcu\rx111\mcu_info.h</file>
<file>$PROJ_DIR$\Renesas_Files\r_bsp\board\rskrx111\lcd.h</file>
<file>$PROJ_DIR$\..\..\Source\include\portable.h</file>
<file>$PROJ_DIR$\Debug\Obj\tasks.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\timers.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\lcd.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\queue.o</file>
<file>$PROJ_DIR$\Debug\Obj\main_full.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\main_low_power.pbi</file>
<file>$PROJ_DIR$\Debug\Exe\templproj.out</file>
<file>$PROJ_DIR$\Debug\Obj\RTOSDemo_IAR.pbd</file>
<file>$TOOLKIT_DIR$\inc\c\limits.h</file>
<file>$PROJ_DIR$\PriorityDefinitions.h</file>
<file>$PROJ_DIR$\Renesas_Files\r_bsp\board\rskrx111\rskrx111.h</file>
<file>$PROJ_DIR$\Debug\Obj\heap_4.o</file>
<file>$TOOLKIT_DIR$\inc\intrinsics.h</file>
<file>$TOOLKIT_DIR$\inc\iorx111.h</file>
<file>$PROJ_DIR$\Debug\Obj\port.o</file>
<file>$PROJ_DIR$\Debug\Obj\hardware_setup.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\r_switches.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\death.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\GenQTest.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\recmutex.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\main_full.o</file>
<file>$PROJ_DIR$\Debug\Obj\main.o</file>
<file>$PROJ_DIR$\Debug\Obj\ParTest.pbi</file>
<file>$PROJ_DIR$\Debug\Obj\tasks.o</file>
<file>$TOOLKIT_DIR$\lib\dlrxfllsn.h</file>
<file>$PROJ_DIR$\..\..\Source\include\mpu_wrappers.h</file>
<file>$TOOLKIT_DIR$\inc\c\string.h</file>
<file>$PROJ_DIR$\..\..\Source\include\list.h</file>
<file>$PROJ_DIR$\Debug\Obj\recmutex.o</file>
<file>$TOOLKIT_DIR$\inc\c\stdlib.h</file>
<file>$TOOLKIT_DIR$\inc\machine.h</file>
<file>$PROJ_DIR$\..\..\Source\include\task.h</file>
<file>$PROJ_DIR$\..\..\Source\include\timers.h</file>
<file>$PROJ_DIR$\..\..\Source\portable\IAR\RX100\port_asm.s</file>
<file>$PROJ_DIR$\..\..\Source\portable\IAR\RX100\portmacro.h</file>
<file>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_4.c</file>
<file>$PROJ_DIR$\..\..\Source\list.c</file>
<file>$PROJ_DIR$\..\..\Source\queue.c</file>
<file>$PROJ_DIR$\..\..\Source\tasks.c</file>
<file>$PROJ_DIR$\..\..\Source\timers.c</file>
<file>$PROJ_DIR$\Renesas_Files\r_bsp\board\user\hardware_setup.c</file>
<file>$PROJ_DIR$\Renesas_Files\r_switches\src\r_switches.c</file>
<file>$PROJ_DIR$\Renesas_Files\r_bsp\board\rskrx111\lcd.c</file>
<file>$PROJ_DIR$\..\Common\Minimal\blocktim.c</file>
<file>$PROJ_DIR$\..\Common\Minimal\death.c</file>
<file>$PROJ_DIR$\..\Common\Minimal\GenQTest.c</file>
<file>$PROJ_DIR$\..\Common\Minimal\recmutex.c</file>
<file>$PROJ_DIR$\Debug\Obj\r_switches.o</file>
<file>$PROJ_DIR$\Renesas_Files\r_switches\r_switches_if.h</file>
<file>$TOOLKIT_DIR$\inc\c\ystdio.h</file>
<file>$PROJ_DIR$\..\..\Source\include\StackMacros.h</file>
<file>$TOOLKIT_DIR$\inc\c\stdio.h</file>
<file>$PROJ_DIR$\Renesas_Files\r_switches\r_switches_config.h</file>
</outputs>
<file>
<name>$PROJ_DIR$\..\..\Source\portable\IAR\RX100\port.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 56</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 5</file>
</tool>
</outputs>
<inputs>
<tool>
<name>BICOMP</name>
<file> 50 30 12 28 66 29 31 32 2 35 36 3 19 33 34 38 55 39 52 40 37 51 41 76 54 72 67 73 69 68</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\main.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 63</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 13</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\main_full.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 62</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 46</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\main_low_power.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 25</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 47</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\ParTest.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 10</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 64</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\reg_test.s</name>
<outputs>
<tool>
<name>ARX</name>
<file> 0</file>
</tool>
</outputs>
</file>
<file>
<name>[ROOT_NODE]</name>
<outputs>
<tool>
<name>ILINK</name>
<file> 48</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\portable\IAR\RX100\port_asm.s</name>
<outputs>
<tool>
<name>ARX</name>
<file> 9</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_4.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 53</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 6</file>
</tool>
</outputs>
<inputs>
<tool>
<name>BICOMP</name>
<file> 71 30 12 28 66 29 31 32 36 2 35 3 19 33 34 38 55 39 52 40 37 51 41 76 54 72 67 73 69</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\list.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 27</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 15</file>
</tool>
</outputs>
<inputs>
<tool>
<name>BICOMP</name>
<file> 71 30 12 28 66 29 31 32 36 2 35 3 19 33 34 38 55 39 52 40 37 51 41 76 54 72 67 69</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\queue.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 45</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 8</file>
</tool>
</outputs>
<inputs>
<tool>
<name>BICOMP</name>
<file> 71 30 12 28 66 29 31 32 36 68 2 35 3 19 33 34 38 55 39 52 40 37 51 41 76 54 72 67 73 69 1</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\tasks.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 65</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 42</file>
</tool>
</outputs>
<inputs>
<tool>
<name>BICOMP</name>
<file> 93 30 12 28 66 29 31 32 36 91 71 68 2 35 3 19 33 34 38 55 39 52 40 37 51 41 76 54 72 67 73 69 74 92</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\..\..\Source\timers.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 26</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 43</file>
</tool>
</outputs>
<inputs>
<tool>
<name>BICOMP</name>
<file> 2 35 30 12 28 66 29 31 32 36 3 19 33 34 38 55 39 52 40 37 51 41 76 54 72 67 73 69 1 74</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\Renesas_Files\r_bsp\board\user\hardware_setup.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 18</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 57</file>
</tool>
</outputs>
<inputs>
<tool>
<name>BICOMP</name>
<file> 33 34 38 55 39 52 40 37 30 12 28 66 29 31 32 90 94</file>
</tool>
</inputs>
</file>
<file>
<name>$PROJ_DIR$\Renesas_Files\r_switches\src\r_switches.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 89</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 58</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\Renesas_Files\r_bsp\board\rskrx111\lcd.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 14</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 44</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\..\Common\Minimal\blocktim.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 16</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 7</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\..\Common\Minimal\death.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 17</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 59</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\..\Common\Minimal\GenQTest.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 11</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 60</file>
</tool>
</outputs>
</file>
<file>
<name>$PROJ_DIR$\..\Common\Minimal\recmutex.c</name>
<outputs>
<tool>
<name>ICCRX</name>
<file> 70</file>
</tool>
<tool>
<name>BICOMP</name>
<file> 61</file>
</tool>
</outputs>
</file>
</configuration>
</project>

View File

@ -0,0 +1,312 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<project>
<fileVersion>2</fileVersion>
<configuration>
<name>Debug</name>
<toolchain>
<name>RX</name>
</toolchain>
<debug>1</debug>
<settings>
<name>C-SPY</name>
<archiveVersion>2</archiveVersion>
<data>
<version>5</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>CMandatory</name>
<state>1</state>
</option>
<option>
<name>CInput</name>
<state>1</state>
</option>
<option>
<name>DebuggerProcessorVariant</name>
<state>0</state>
</option>
<option>
<name>CRunToEnable</name>
<state>1</state>
</option>
<option>
<name>CRunToName</name>
<state>main</state>
</option>
<option>
<name>CMacOverride</name>
<state>0</state>
</option>
<option>
<name>CMacFile</name>
<state></state>
</option>
<option>
<name>DynDriver</name>
<state>RXEMUE20</state>
</option>
<option>
<name>DDFOverride</name>
<state>0</state>
</option>
<option>
<name>DDFFile</name>
<state>$TOOLKIT_DIR$\config\debugger\ior5f51115.ddf</state>
</option>
<option>
<name>DebuggerUseExtraOptions</name>
<state>0</state>
</option>
<option>
<name>DebuggerExtraOptions</name>
<state></state>
</option>
<option>
<name>ODebuggerByteOrder</name>
<state>0</state>
</option>
<option>
<name>ODebuggerDoubleSize</name>
<state>1</state>
</option>
<option>
<name>OCImagesSuppressCheck1</name>
<state>0</state>
</option>
<option>
<name>OCImagesPath1</name>
<state></state>
</option>
<option>
<name>OCImagesSuppressCheck2</name>
<state>0</state>
</option>
<option>
<name>OCImagesPath2</name>
<state></state>
</option>
<option>
<name>OCImagesSuppressCheck3</name>
<state>0</state>
</option>
<option>
<name>OCImagesPath3</name>
<state></state>
</option>
<option>
<name>ODebuggerCore</name>
<state>0</state>
</option>
<option>
<name>ODebuggerIntSize</name>
<state>1</state>
</option>
<option>
<name>OCImagesOffset1</name>
<state></state>
</option>
<option>
<name>OCImagesOffset2</name>
<state></state>
</option>
<option>
<name>OCImagesOffset3</name>
<state></state>
</option>
<option>
<name>OCImagesUse1</name>
<state>0</state>
</option>
<option>
<name>OCImagesUse2</name>
<state>0</state>
</option>
<option>
<name>OCImagesUse3</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>RXEMUE20</name>
<archiveVersion>3</archiveVersion>
<data>
<version>3</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>EmuMandatory</name>
<state>1</state>
</option>
<option>
<name>OCEmuUseUSBSerialNo</name>
<state>0</state>
</option>
<option>
<name>OCEmuUSBSerialNo</name>
<state></state>
</option>
<option>
<name>OCDownloadSuppressDownload</name>
<state>0</state>
</option>
<option>
<name>OCDownloadVerifyAll</name>
<state>0</state>
</option>
<option>
<name>OCDownloadAttach</name>
<state>0</state>
</option>
<option>
<name>OCDebuggingMode</name>
<state>0</state>
</option>
<option>
<name>OCExcecuteAfterFlash</name>
<state>0</state>
</option>
<option>
<name>OCDownloadOnlyChangedBlocks</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>RXJLINK</name>
<archiveVersion>3</archiveVersion>
<data>
<version>4</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>JlinkMandatory</name>
<state>1</state>
</option>
<option>
<name>OCJlinkDownloadSuppressDownload</name>
<state>0</state>
</option>
<option>
<name>OCJlinkDownloadVerifyAll</name>
<state>0</state>
</option>
<option>
<name>OCDownloadAttach</name>
<state>0</state>
</option>
<option>
<name>OCDebuggingMode</name>
<state>0</state>
</option>
<option>
<name>OCJlinkExcecuteAfterFlash</name>
<state>0</state>
</option>
<option>
<name>OCJlinkScanChainEnable</name>
<state>0</state>
</option>
<option>
<name>OCJlinkDevicePosition</name>
<state>0</state>
</option>
<option>
<name>OCJlinkOtherDeviceTypes</name>
<state>0</state>
</option>
<option>
<name>OCJlinkPreceedingIRBits</name>
<state>0</state>
</option>
<option>
<name>OCJlinkUseUSBSerialNo</name>
<state>0</state>
</option>
<option>
<name>OCJlinkUSBSerialNo</name>
<state></state>
</option>
</data>
</settings>
<settings>
<name>SIMRX</name>
<archiveVersion>1</archiveVersion>
<data>
<version>1</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>SimMandatory</name>
<state>1</state>
</option>
<option>
<name>SimEnablePSP</name>
<state>0</state>
</option>
<option>
<name>SimPspOverrideConfig</name>
<state>0</state>
</option>
<option>
<name>SimPspConfigFile</name>
<state>$TOOLKIT_DIR$\CONFIG\iocf.psp.config</state>
</option>
</data>
</settings>
<debuggerPlugins>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXRxPlugin.ENU.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
<loadFlag>1</loadFlag>
</plugin>
<plugin>
<file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
<plugin>
<file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
<loadFlag>1</loadFlag>
</plugin>
<plugin>
<file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
<loadFlag>0</loadFlag>
</plugin>
</debuggerPlugins>
</configuration>
</project>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<workspace>
<project>
<path>$WS_DIR$\RTOSDemo_IAR.ewp</path>
</project>
<batchBuild/>
</workspace>

View File

@ -0,0 +1,4 @@
[Sfr]
[SfrGroupInfo]

View File

@ -0,0 +1,252 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lcd.c
* Device(s) : RX
* H/W Platform : RSKRX111
* Description : Provides variable and function declarations for lcd.c file
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Standard string manipulation & formatting functions */
#include <stdio.h>
#include <string.h>
/* Defines standard variable types used in this function */
#include <stdint.h>
/* Bring in board includes. */
#include "platform.h"
/* Following header file provides function prototypes for LCD controlling functions & macro defines */
#include "lcd.h"
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
static void lcd_delay(volatile int32_t nsecs);
static void lcd_nibble_write(uint8_t data_or_ctrl, uint8_t value);
static void lcd_write(uint8_t data_or_ctrl, uint8_t value);
/***********************************************************************************************************************
* Function name : lcd_initialize
* Description : Initializes the LCD display.
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void lcd_initialize(void)
{
/* Set LCD data pins as outputs. */
PORT4.PDR.BYTE |= 0x0F;
/* Set LCD control pins as outputs. */
RS_PIN_DDR = 1;
E_PIN_DDR = 1;
/* Power Up Delay for the LCD Module */
lcd_delay(50000000);
/* Display initialises in 8 bit mode - so send one write (seen as 8 bit) to set to 4 bit mode. */
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
/* Function Set */
lcd_nibble_write(CTRL_WR, 0x02);
lcd_delay(39000);
lcd_nibble_write(CTRL_WR, 0x02);
lcd_nibble_write(CTRL_WR, (LCD_DISPLAY_ON | LCD_TWO_LINE ));
lcd_delay(39000);
/* Display ON/OFF control */
lcd_write(CTRL_WR, LCD_CURSOR_OFF);
lcd_delay(39000);
/* Display Clear */
lcd_write(CTRL_WR, LCD_CLEAR);
lcd_delay(2000000);
/* Entry Mode Set */
lcd_write(CTRL_WR, 0x06);
lcd_delay(39000);
/* Home the cursor */
lcd_write(CTRL_WR, LCD_HOME_L1);
lcd_delay(5000000);
}
/***********************************************************************************************************************
* Function name : lcd_clear
* Description : Clears the LCD
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void lcd_clear(void)
{
/* Display Clear */
lcd_write(CTRL_WR, LCD_CLEAR);
lcd_delay(2000000);
}
/***********************************************************************************************************************
* Function name : lcd_display
* Description : This function controls LCD writes to line 1 or 2 of the LCD.
* You need to use the defines LCD_LINE1 and LCD_LINE2 in order to specify the starting position.
* For example, to start at the 2nd position on line 1...
* lcd_display(LCD_LINE1 + 1, "Hello")
* Arguments : position -
* Line number of display
* string -
* Pointer to null terminated string
* Return Value : none
***********************************************************************************************************************/
void lcd_display(uint8_t position, uint8_t const * string)
{
/* Declare next position variable */
static uint8_t next_pos = 0xFF;
/* Set line position if needed. We don't want to if we don't need to because LCD control operations take longer
than LCD data operations. */
if (next_pos != position)
{
if(position < LCD_LINE2)
{
/* Display on Line 1 */
lcd_write(CTRL_WR, ((uint8_t)(LCD_HOME_L1 + position)));
}
else
{
/* Display on Line 2 */
lcd_write(CTRL_WR, ((uint8_t)((LCD_HOME_L2 + position) - LCD_LINE2)));
}
lcd_delay(39000);
/* set position index to known value */
next_pos = position;
}
do
{
/* Write character to LCD. */
lcd_write(DATA_WR,*string++);
lcd_delay(43000);
/* Increment position index */
next_pos++;
}
while(*string);
}
/***********************************************************************************************************************
* Function name : lcd_delay
* Description : Implements LCD required delays.
* Arguments : nsecs -
* Number of nanoseconds to delay. RX111 has max clock of 32MHz which gives a cycle time of 31.3ns.
* This means that nothing under 313ns should be input. 313ns would be 10 cycles which is still
* being optimistic for getting in and out of this function.
* Return Value : none
***********************************************************************************************************************/
static void lcd_delay(volatile int32_t nsecs)
{
while (0 < nsecs)
{
/* Subtract off 10 cycles per iteration. This number was obtained when using the Renesas toolchain at
optimization level 2. The number to nanoseconds to subtract off below is calculated off of the ICLK speed. */
nsecs -= (int32_t)((313.0)*(32000000.0/(float)ICLK_HZ));
}
}
/***********************************************************************************************************************
* Function name : lcd_nibble_write
* Description : Writes data to display. Sends command to display.
* Arguments : value -
* The value to write
* data_or_ctrl -
* Whether to write data or control.
* 1 = DATA
* 0 = CONTROL
* Return Value : none
***********************************************************************************************************************/
static void lcd_nibble_write(uint8_t data_or_ctrl, uint8_t value)
{
/* Set Register Select pin high for Data */
if (data_or_ctrl == DATA_WR)
{
/* Data write. */
RS_PIN = 1;
}
else
{
/* Control write. */
RS_PIN = 0;
}
/* tsu1 delay */
lcd_delay(60);
/* EN enable chip (HIGH) */
E_PIN = 1;
/* Output the data */
PORT4.PODR.BYTE = (value & 0x0F);
/* tw delay */
lcd_delay(450);
/* Latch data by dropping E */
E_PIN = 0;
/* th2 delay */
lcd_delay(10);
/* tc delay */
lcd_delay(480);
}
/***********************************************************************************************************************
* Function name : lcd_write
* Description : This function controls LCD writes to line 1 or 2 of the LCD. You need to use the defines LCD_LINE1 and
* LCD_LINE2 in order to specify the starting position.
* For example, to start at the 2nd position on line 1...
* lcd_display(LCD_LINE1 + 1, "Hello")
* Arguments : value -
* The value to write
* data_or_ctrl -
* Whether to write data or control.
* 1 = DATA
* 0 = CONTROL
* Return Value : none
***********************************************************************************************************************/
static void lcd_write(uint8_t data_or_ctrl, uint8_t value)
{
/* Write upper nibble first */
lcd_nibble_write(data_or_ctrl, (uint8_t)((value & 0xF0) >> 4));
/* Write lower nibble second */
lcd_nibble_write(data_or_ctrl, (uint8_t)(value & 0x0F));
}

View File

@ -0,0 +1,101 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lcd.h
* Device(s) : RX
* H/W Platform : RSKRX111
* Description : Provides variable and function declarations for lcd.c file
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/* Multiple inclusion prevention macro */
#ifndef LCD_H
#define LCD_H
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Defines standard integer variable types used in this file */
#include <stdint.h>
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* RS register select pin */
#define RS_PIN PORTC.PODR.BIT.B5
#define RS_PIN_DDR PORTC.PDR.BIT.B5
/* Display enable pin */
#define E_PIN PORTB.PODR.BIT.B1
#define E_PIN_DDR PORTB.PDR.BIT.B1
/* Data write/read definition */
#define DATA_WR 1
/* Control write/read definition */
#define CTRL_WR 0
/* Maximum characters per line of LCD display. */
#define NUMB_CHARS_PER_LINE 8
/* Number of lines on the LCD display */
#define MAXIMUM_LINES 2
/* Character position of LCD line 1 */
#define LCD_LINE1 0
/* Character position of LCD line 2 */
#define LCD_LINE2 16
/* Clear LCD display and home cursor */
#define LCD_CLEAR 0x01
/* Move cursor to line 1 */
#define LCD_HOME_L1 0x80
/* Move cursor to line 2 */
#define LCD_HOME_L2 0xC0
/* Cursor auto decrement after R/W */
#define CURSOR_MODE_DEC 0x04
/* Cursor auto increment after R/W */
#define CURSOR_MODE_INC 0x06
/* Setup, 4 bits,2 lines, 5X7 */
#define FUNCTION_SET 0x28
/* Display ON with Cursor */
#define LCD_CURSOR_ON 0x0E
/* Display ON with Cursor off */
#define LCD_CURSOR_OFF 0x0C
/* Display on with blinking cursor */
#define LCD_CURSOR_BLINK 0x0D
/* Move Cursor Left One Position */
#define LCD_CURSOR_LEFT 0x10
/* Move Cursor Right One Position */
#define LCD_CURSOR_RIGHT 0x14
/* Enable LCD display */
#define LCD_DISPLAY_ON 0x04
/* Enable both LCD lines */
#define LCD_TWO_LINE 0x08
/***********************************************************************************************************************
Exported global functions (to be accessed by other files)
***********************************************************************************************************************/
/* LCD initialisation function declaration */
void lcd_initialize (void);
/* Update display function declaration */
void lcd_display(uint8_t position, uint8_t const * string);
/* Clear LCD function delcaration */
void lcd_clear (void);
/* End of multiple inclusion prevention macro */
#endif

View File

@ -0,0 +1,50 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp.h
* H/W Platform : RSKRX111
* Description : Has the header files that should be included for this platform.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef PLATFORM_BOARD_RSKRX111
#define PLATFORM_BOARD_RSKRX111
/* Make sure that no other platforms have already been defined. Do not touch this! */
#ifdef PLATFORM_DEFINED
#error "Error - Multiple platforms defined in platform.h!"
#else
#define PLATFORM_DEFINED
#endif
/***********************************************************************************************************************
INCLUDE APPROPRIATE MCU AND BOARD FILES
***********************************************************************************************************************/
#include "r_bsp_config.h"
#include "iorx111.h"
#include ".\mcu\rx111\mcu_info.h"
#include ".\board\rskrx111\rskrx111.h"
#include ".\board\rskrx111\lcd.h"
#endif /* PLATFORM_BOARD_RSKRX111 */

View File

@ -0,0 +1,250 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp_config_reference.c
* Device(s) : RX111
* Description : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included
* somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)
* is just a reference file that the user can use to make their own r_bsp_config.h file.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef R_BSP_CONFIG_REF_HEADER_FILE
#define R_BSP_CONFIG_REF_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* Enter the product part number for your MCU. This information will be used to obtain information about your MCU such
as package and memory size.
To help parse this information, the part number will be defined using multiple macros.
R 5 F 51 11 5 A D FM
| | | | | | | | | Macro Name Description
| | | | | | | | |__MCU_PART_PACKAGE = Package type, number of pins, and pin pitch
| | | | | | | |____not used = Products with wide temperature range (D: -40 to 85C G: -40 to 105C)
| | | | | | |______not used = Blank
| | | | | |________MCU_PART_MEMORY_SIZE = ROM, RAM, and Data Flash Capacity
| | | | |___________MCU_PART_GROUP = Group name
| | | |______________MCU_PART_SERIES = Series name
| | |________________MCU_PART_MEMORY_TYPE = Type of memory (Flash)
| |__________________not used = Renesas MCU
|____________________not used = Renesas semiconductor product.
*/
/* Package type. Set the macro definition based on values below:
Character(s) = Value for macro = Package Type/Number of Pins/Pin Pitch
FM = 0x0 = LFQFP/64/0.50
FK = 0x1 = LQFP/64/0.80
LF = 0x2 = TFLGA/64/0.50
FL = 0x3 = LFQFP/48/0.50
NE = 0x4 = VQFN/48/0.50
NC = 0x5 = HWQFN/36/0.50
LM = 0x6 = WFLGA/36/0.50
SB = 0x7 = SSOP/36/0.80
*/
#define MCU_PART_PACKAGE (0x0)
/* ROM, RAM, and Data Flash Capacity.
Character(s) = Value for macro = ROM Size/Ram Size/Data Flash Size
5 = 0x5 = 128KB/16KB/8KB
4 = 0x4 = 96KB/16KB/8KB
3 = 0x3 = 64KB/10KB/8KB
1 = 0x1 = 32KB/10KB/8KB
J = 0x0 = 16KB/8KB/8KB
*/
#define MCU_PART_MEMORY_SIZE (0x5)
/* Group name.
Character(s) = Value for macro = Description
10 = 0x0 = RX110 Group
11 = 0x1 = RX111 Group
*/
#define MCU_PART_GROUP (0x1)
/* Series name.
Character(s) = Value for macro = Description
51 = 0x0 = RX100 Series
*/
#define MCU_PART_SERIES (0x0)
/* Memory type.
Character(s) = Value for macro = Description
F = 0x0 = Flash memory version
*/
#define MCU_PART_MEMORY_TYPE (0x0)
/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a
'#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */
#if defined(BSP_DECLARE_STACK)
/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize su=0x400
/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize si=0x100
#endif
/* Heap size in bytes. */
#define HEAP_BYTES (0x400)
/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information
on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.
0 = Stay in Supervisor mode.
1 = Switch to User mode.
*/
#define RUN_IN_USER_MODE (0)
/* This macro lets other modules no if a RTOS is being used.
0 = RTOS is not used.
1 = RTOS is used.
*/
#define RTOS_USED (0)
/* Clock source select (CKSEL).
0 = Low Speed On-Chip Oscillator (LOCO)
1 = High Speed On-Chip Oscillator (HOCO)
2 = Main Clock Oscillator
3 = Sub-Clock Oscillator
4 = PLL Circuit
*/
#define CLOCK_SOURCE (4)
/* Clock configuration options.
The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The
multiplier settings are used to set the clock registers in resetprg.c. If a 16MHz clock is used and the
ICLK is 24MHz, PCLKB is 24MHz, FCLK is 24MHz, PCLKD is 24MHz, and CKO is 1MHz then the
settings would be:
XTAL_HZ = 16000000
PLL_DIV = 2
PLL_MUL = 6 (16MHz x 3 = 48MHz)
ICK_DIV = 2 : System Clock (ICLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV) = 24MHz
PCKB_DIV = 2 : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 24MHz
PCKD_DIV = 2 : Peripheral Clock D (PCLKD) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV) = 24MHz
FCK_DIV = 2 : Flash IF Clock (FCLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV) = 24MHz
*/
/* XTAL - Input clock frequency in Hz */
#define XTAL_HZ (16000000)
/* PLL Input Frequency Divider Select (PLIDIV).
Available divisors = /1 (no division), /2, /4
*/
#define PLL_DIV (2)
/* PLL Frequency Multiplication Factor Select (STC).
Available multipliers = x6, x8
*/
#define PLL_MUL (6)
/* System Clock Divider (ICK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define ICK_DIV (2)
/* Peripheral Module Clock B Divider (PCKB).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKB_DIV (2)
/* Peripheral Module Clock D Divider (PCKD).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKD_DIV (2)
/* Flash IF Clock Divider (FCK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define FCK_DIV (2)
/* Below are callback functions that can be used for detecting MCU exceptions, undefined interrupt sources, and
bus errors. If the user wishes to be alerted of these events then they will need to define the macro as a
function to be called when the event occurs. For example, if the user wanted the function
excep_undefined_instr_isr() to be called when an undefined interrupt source ISR is triggered then they would
do the following:
#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
If the user does not wish to be alerted of these events then they should comment out the macros.
NOTE: When a callback function is called it will be called from within a ISR. This means that the function
will essentially be an interrupt and will hold off other interrupts that occur in the system while it
is executing. For this reason, it is recommended to keep these callback functions short as to not
decrease the real-time response of your system.
*/
/* Callback for Supervisor Instruction Violation Exception. */
//#define EXCEP_SUPERVISOR_ISR_CALLBACK supervisor_instr_cb
/* Callback for Undefined Instruction Exception. */
//#define EXCEP_UNDEFINED_INSTR_ISR_CALLBACK undefined_instr_cb
/* Callback for Non-maskable Interrupt. */
//#define NMI_ISR_CALLBACK nmi_cb
/* Callback for all undefined interrupt vectors. User can set a breakpoint in this function to determine which source
is creating unwanted interrupts. */
//#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
/* Callback for Bus Error Interrupt. */
//#define BUS_ERROR_ISR_CALLBACK bus_error_cb
/* The user has the option of separately choosing little or big endian for the User Application Area */
/* Endian mode for User Application.
0 = Big Endian
Else = Little Endian (Default)
*/
#define USER_APP_ENDIAN (1)
/* Configure WDT and IWDT settings.
OFS0 - Option Function Select Register 0
OFS0 - Option Function Select Register 0
b31:b15 Reserved (set to 1)
b14 IWDTSLCSTP - IWDT Sleep Mode Count Stop Control - (0=can't stop count, 1=stop w/some low power modes)
b13 Reserved (set to 1)
b12 IWDTRSTIRQS - IWDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)
b11:b10 IWDTRPSS - IWDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)
b9:b8 IWDTRPES - IWDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)
b7:b4 IWDTCKS - IWDT Clock Frequency Division Ratio - (0=none, 2=/16, 3 = /32, 4=/64, 0xF=/128, 5=/256)
b3:b2 IWDTTOPS - IWDT Timeout Period Select - (0=128 cycles, 1=512, 2=1024, 3=2048)
b1 IWDTSTRT - IWDT Start Mode Select - (0=auto-start after reset, 1=halt after reset)
b0 Reserved (set to 1) */
#define OFS0_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Configure whether voltage detection 1 circuit and HOCO are enabled after reset.
OFS1 - Option Function Select Register 1
b31:b9 Reserved (set to 1)
b8 HOCOEN - Enable/disable HOCO oscillation after a reset (0=enable, 1=disable)
b7:b4 STUPLVD1LVL - Startup Voltage Monitoring 1 Reset Detection Level Select
0 1 0 0: 3.10 V
0 1 0 1: 3.00 V
0 1 1 0: 2.90 V
0 1 1 1: 2.79 V
1 0 0 0: 2.68 V
1 0 0 1: 2.58 V
1 0 1 0: 2.48 V
1 0 1 1: 2.06 V
1 1 0 0: 1.96 V
1 1 0 1: 1.86 V
b3:b2 Reserved (set to 1)
b2 STUPLVD1REN - Startup Voltage Monitoring 1 Reset Enable (1=monitoring disabled)
b0 FASTSTUP - Power-On Fast Startup Time (1=normal; read only) */
#define OFS1_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Initializes C input & output library functions.
0 = Disable I/O library initialization in resetprg.c. If you are not using stdio then use this value.
1 = Enable I/O library initialization in resetprg.c. This is default and needed if you are using stdio. */
#define IO_LIB_ENABLE (1)
#endif /* R_BSP_CONFIG_REF_HEADER_FILE */

View File

@ -0,0 +1,63 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : rskrx111.h
* H/W Platform : RSKRX111
* Description : Board specific definitions for the RSKRX111.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef RSKRX111_H
#define RSKRX111_H
/* Local defines */
#define LED_ON (0)
#define LED_OFF (1)
#define SET_BIT_HIGH (1)
#define SET_BIT_LOW (0)
#define SET_BYTE_HIGH (0xFF)
#define SET_BYTE_LOW (0x00)
/* Switches */
#define SW_ACTIVE 0
#define SW1 PORT3.PIDR.BIT.B0
#define SW2 PORT3.PIDR.BIT.B1
#define SW3 PORTE.PIDR.BIT.B4
#define SW1_PDR PORT3.PDR.BIT.B0
#define SW2_PDR PORT3.PDR.BIT.B1
#define SW3_PDR PORTE.PDR.BIT.B4
#define SW1_PMR PORT3.PMR.BIT.B0
#define SW2_PMR PORT3.PMR.BIT.B1
#define SW3_PMR PORTE.PMR.BIT.B4
/* LEDs */
#define LED0 PORTB.PODR.BIT.B7
#define LED1 PORTA.PODR.BIT.B0
#define LED2 PORT5.PODR.BIT.B4
#define LED3 PORT1.PODR.BIT.B7
#define LED0_PDR PORTB.PDR.BIT.B7
#define LED1_PDR PORTA.PDR.BIT.B0
#define LED2_PDR PORT5.PDR.BIT.B4
#define LED3_PDR PORT1.PDR.BIT.B7
#endif /* RSKRX111_H */

View File

@ -0,0 +1,366 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : hwsetup.c
* Device(s) : RX
* H/W Platform : RSKRX210
* Description : Defines the initialization routines used each time the MCU is restarted.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* I/O Register and board definitions */
#include "platform.h"
#include "r_switches_if.h"
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
/* MCU I/O port configuration function delcaration */
static void output_ports_configure(void);
/* Interrupt configuration function delcaration */
static void interrupts_configure(void);
/* MCU peripheral module configuration function declaration */
static void peripheral_modules_enable(void);
/* Configure MCU clocks. */
static void clock_source_select (void);
void operating_frequency_set(void);
/***********************************************************************************************************************
* Function name: hardware_setup
* Description : Contains setup functions called at device restart
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void vHardwareSetup(void)
{
operating_frequency_set();
output_ports_configure();
interrupts_configure();
peripheral_modules_enable();
}
/***********************************************************************************************************************
* Function name: output_ports_configure
* Description : Configures the port and pin direction settings, and sets the pin outputs to a safe level.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void output_ports_configure(void)
{
/* Enable LEDs. */
/* Start with LEDs off. */
LED0 = LED_OFF;
LED1 = LED_OFF;
LED2 = LED_OFF;
LED3 = LED_OFF;
/* Set LED pins as outputs. */
LED0_PDR = 1;
LED1_PDR = 1;
LED2_PDR = 1;
LED3_PDR = 1;
/* Enable switches. */
/* Set pins as inputs. */
SW1_PDR = 0;
SW2_PDR = 0;
SW3_PDR = 0;
/* Set port mode registers for switches. */
SW1_PMR = 0;
SW2_PMR = 0;
SW3_PMR = 0;
/* Unlock MPC registers to enable writing to them. */
MPC.PWPR.BIT.B0WI = 0 ; /* Unlock protection register */
MPC.PWPR.BIT.PFSWE = 1 ; /* Unlock MPC registers */
/* TXD1 is output. */
PORT1.PDR.BIT.B6 = 1;
PORT1.PMR.BIT.B6 = 1;
MPC.P16PFS.BYTE = 0x0A;
/* RXD1 is input. */
PORT1.PDR.BIT.B5 = 0;
PORT1.PMR.BIT.B5 = 1;
MPC.P15PFS.BYTE = 0x0A;
/* Configure the pin connected to the ADC Pot as an input */
PORT4.PDR.BIT.B4 = 0;
/* Protect off. */
SYSTEM.PRCR.WORD = 0xA50B;
/* Turn off module stop for the A2D converter. */
SYSTEM.MSTPCRA.BIT.MSTPA17 = 0;
/* Protect on. */
SYSTEM.PRCR.WORD = 0xA500;
/* Initialise the first button to generate an interrupt. */
R_SWITCHES_Init();
}
/***********************************************************************************************************************
* Function name: interrupts_configure
* Description : Configures interrupts used
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void interrupts_configure(void)
{
/* Add code here to setup additional interrupts */
}
/***********************************************************************************************************************
* Function name: peripheral_modules_enable
* Description : Enables and configures peripheral devices on the MCU
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void peripheral_modules_enable(void)
{
/* Enable triggers to start an ADC conversion. */
S12AD.ADCSR.BIT.TRGE = 1;
/* Only channel 4 is going to be used. */
S12AD.ADANSA.BIT.ANSA4 = 1;
}
/***********************************************************************************************************************
* Function name: operating_frequency_set
* Description : Configures the clock settings for each of the device clocks
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void operating_frequency_set(void)
{
/* Used for constructing value to write to SCKCR and CKOCR registers. */
uint32_t temp_clock = 0;
/*
Clock Description Frequency
----------------------------------------
Input Clock Frequency............ 16 MHz
PLL frequency (x3)............... 48 MHz
Internal Clock Frequency......... 24 MHz
Peripheral Clock Frequency....... 24 MHz
Clock Out Frequency.............. 1 MHz */
volatile unsigned int i;
/* Protect off. */
SYSTEM.PRCR.WORD = 0xA50B;
/* Select the clock based upon user's choice. */
clock_source_select();
/* Figure out setting for FCK bits. */
#if FCK_DIV == 1
/* Do nothing since FCK bits should be 0. */
#elif FCK_DIV == 2
temp_clock |= 0x10000000;
#elif FCK_DIV == 4
temp_clock |= 0x20000000;
#elif FCK_DIV == 8
temp_clock |= 0x30000000;
#elif FCK_DIV == 16
temp_clock |= 0x40000000;
#elif FCK_DIV == 32
temp_clock |= 0x50000000;
#elif FCK_DIV == 64
temp_clock |= 0x60000000;
#else
#error "Error! Invalid setting for FCK_DIV in r_bsp_config.h"
#endif
/* Figure out setting for ICK bits. */
#if ICK_DIV == 1
/* Do nothing since ICK bits should be 0. */
#elif ICK_DIV == 2
temp_clock |= 0x01000000;
#elif ICK_DIV == 4
temp_clock |= 0x02000000;
#elif ICK_DIV == 8
temp_clock |= 0x03000000;
#elif ICK_DIV == 16
temp_clock |= 0x04000000;
#elif ICK_DIV == 32
temp_clock |= 0x05000000;
#elif ICK_DIV == 64
temp_clock |= 0x06000000;
#else
#error "Error! Invalid setting for ICK_DIV in r_bsp_config.h"
#endif
/* Figure out setting for PCKB bits. */
#if PCKB_DIV == 1
/* Do nothing since PCKB bits should be 0. */
#elif PCKB_DIV == 2
temp_clock |= 0x00000100;
#elif PCKB_DIV == 4
temp_clock |= 0x00000200;
#elif PCKB_DIV == 8
temp_clock |= 0x00000300;
#elif PCKB_DIV == 16
temp_clock |= 0x00000400;
#elif PCKB_DIV == 32
temp_clock |= 0x00000500;
#elif PCKB_DIV == 64
temp_clock |= 0x00000600;
#else
#error "Error! Invalid setting for PCKB_DIV in r_bsp_config.h"
#endif
/* Figure out setting for PCKD bits. */
#if PCKD_DIV == 1
/* Do nothing since PCKD bits should be 0. */
#elif PCKD_DIV == 2
temp_clock |= 0x00000001;
#elif PCKD_DIV == 4
temp_clock |= 0x00000002;
#elif PCKD_DIV == 8
temp_clock |= 0x00000003;
#elif PCKD_DIV == 16
temp_clock |= 0x00000004;
#elif PCKD_DIV == 32
temp_clock |= 0x00000005;
#elif PCKD_DIV == 64
temp_clock |= 0x00000006;
#else
#error "Error! Invalid setting for PCKD_DIV in r_bsp_config.h"
#endif
/* Set SCKCR register. */
SYSTEM.SCKCR.LONG = temp_clock;
/* Choose clock source. Default for r_bsp_config.h is PLL. */
SYSTEM.SCKCR3.WORD = ((uint16_t)CLOCK_SOURCE) << 8;
/* Protect on. */
SYSTEM.PRCR.WORD = 0xA500;
}
/***********************************************************************************************************************
* Function name: clock_source_select
* Description : Enables and disables clocks as chosen by the user. This function also implements the software delays
* needed for the clocks to stabilize.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
static void clock_source_select (void)
{
/* Declared volatile for software delay purposes. */
volatile unsigned int i;
/* NOTE: AS OF VERSION 0.50 OF THE RX111 HARDWARE MANUAL, ALL OF THE CLOCK
* STABILIZATION TIMES ARE TBD. FOR NOW, WHERE EVER A WAIT COUNT REGISTER
* IS AVAILABLE, THE DELAY IS SET TO THE MAX NUMBER OF CYCLES. WHERE EVER
* DELAY LOOPS ARE PRESENT, THE VALUES FROM THE 63N ARE RE-USED. KEEP IN
* MIND THAT THE 63N RUNS ON A FASTER CRYSTAL.
*/
#if (CLOCK_SOURCE == 1)
/* HOCO is chosen. Start it operating. */
SYSTEM.HOCOCR.BYTE = 0x00;
/* The delay period needed is to make sure that the HOCO has stabilized.*/
for(i = 0; i< 28; i++) // tHOCOWT2 is TBD
{
__asm volatile( "NOP" );
}
#else
/* HOCO is not chosen. Stop the HOCO. */
SYSTEM.HOCOCR.BYTE = 0x01;
#endif
#if (CLOCK_SOURCE == 2)
/* Main clock oscillator is chosen. Start it operating. */
SYSTEM.MOSCWTCR.BYTE = 0x07; // Wait 65,536 cycles
/* Set the main clock to operating. */
SYSTEM.MOSCCR.BYTE = 0x00;
/* The delay period needed is to make sure that the main clock has stabilized. */
for(i = 0; i< 140; i++) // tMAINOSCWT is TBD
{
__asm volatile( "NOT" );
}
#endif
#if (CLOCK_SOURCE == 3)
/* Sub-clock oscillator is chosen. Start it operating. */
/* In section 9.8.4, there is a reference to a SOSCWTCR register, but there is no
* description for this register in the manual nor reference for it in iorx111.h. */
/* Set the sub-clock to operating. */
SYSTEM.SOSCCR.BYTE = 0x00;
/* The delay period needed is to make sure that the sub-clock has stabilized. */
for(i = 0; i< 30233; i++) // tSUBOSCWT0 is TBD
{
__asm volatile( "NOP" );
}
#else
/* Set the sub-clock to stopped. */
SYSTEM.SOSCCR.BYTE = 0x01;
#endif
#if (CLOCK_SOURCE == 4)
/* PLL is chosen. Start it operating. Must start main clock as well since PLL uses it. */
SYSTEM.MOSCWTCR.BYTE = 0x07; // Wait 65,536 cycles
/* Set the main clock to operating. */
SYSTEM.MOSCCR.BYTE = 0x00;
/* Set PLL Input Divisor. */
SYSTEM.PLLCR.BIT.PLIDIV = PLL_DIV >> 1;
/* Set PLL Multiplier. */
SYSTEM.PLLCR.BIT.STC = (PLL_MUL * 2) - 1;
/* Set the PLL to operating. */
SYSTEM.PLLCR2.BYTE = 0x00;
/* The delay period needed is to make sure that the main clock and PLL have stabilized. */
for(i = 0; i< 140; i++) // tPLLWT2 is TBD
{
__asm volatile( "NOP" );
}
#endif
/* LOCO is saved for last since it is what is running by default out of reset. This means you do not want to turn
it off until another clock has been enabled and is ready to use. */
#if (CLOCK_SOURCE == 0)
/* LOCO is chosen. This is the default out of reset. */
SYSTEM.LOCOCR.BYTE = 0x00;
#else
/* LOCO is not chosen and another clock has already been setup. Turn off the LOCO. */
SYSTEM.LOCOCR.BYTE = 0x01;
#endif
/* Make sure a valid clock was chosen. */
#if (CLOCK_SOURCE > 4) || (CLOCK_SOURCE < 0)
#error "ERROR - Valid clock source must be chosen in r_bsp_config.h using CLOCK_SOURCE macro."
#endif
}

View File

@ -0,0 +1,54 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp.h
* Description : Has the header files that should be included for this platform.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 13.01.2012 1.00 First Release
* : 27.06.2012 1.10 Updated with new information to reflect udpated r_bsp structure.
***********************************************************************************************************************/
#ifndef PLATFORM_BOARD_USER
#define PLATFORM_BOARD_USER
/* Make sure that no other platforms have already been defined. Do not touch this! */
#ifdef PLATFORM_DEFINED
#error "Error - Multiple platforms defined in platform.h!"
#else
#define PLATFORM_DEFINED
#endif
/***********************************************************************************************************************
INCLUDE APPROPRIATE MCU AND BOARD FILES
***********************************************************************************************************************/
/* This is a user defined board. Start off by:
1)Copy and rename one of the 'board' folders that most closely matches your system (same MCU Series and Group).
2)Substitute in your MCU Group for the *MCU Group* option in the #include below for mcu_info.h.
3)Copy the other #includes from the r_bsp.h in the 'board' folder that you copied earlier.
4)Configure the BSP for your board by modifying the r_bsp_config_reference.h.
5)Copy r_bsp_config_reference.h to your project directory and rename it r_bsp_config.h.
You can also add your own include files here as well. */
#include "r_bsp_config.h"
#include ".\mcu\*MCU Group*\mcu_info.h"
#endif /* PLATFORM_BOARD_USER */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,112 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : mcu_info.h
* Device(s) : RX111
* Description : Information about the MCU on this board (RSKRX111).
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef _MCU_INFO
#define _MCU_INFO
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Gets MCU configuration information. */
#include "r_bsp_config.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* MCU Series. */
#if MCU_PART_SERIES == 0x0
#define MCU_SERIES_RX100 (1)
#else
#error "ERROR - MCU_PART_SERIES - Unknown MCU Series chosen in r_bsp_config.h"
#endif
/* MCU Group name. */
#if MCU_PART_GROUP == 0x1
#define MCU_RX111 (1)
#define MCU_RX11x (1)
#else
#error "ERROR - MCU_PART_GROUP - Unknown MCU Group chosen in r_bsp_config.h"
#endif
/* Package. */
#if MCU_PART_PACKAGE == 0x0
#define PACKAGE_LFQFP64 (1)
#elif MCU_PART_PACKAGE == 0x1
#define PACKAGE_LQFP64 (1)
#elif MCU_PART_PACKAGE == 0x2
#define PACKAGE_TFLGA64 (1)
#elif MCU_PART_PACKAGE == 0x3
#define PACKAGE_LFQFP48 (1)
#elif MCU_PART_PACKAGE == 0x4
#define PACKAGE_VQFN48 (1)
#elif MCU_PART_PACKAGE == 0x5
#define PACKAGE_HWQFN36 (1)
#elif MCU_PART_PACKAGE == 0x6
#define PACKAGE_WFLGA36 (1)
#elif MCU_PART_PACKAGE == 0x7
#define PACKAGE_SSOP36 (1)
#else
#error "ERROR - MCU_PART_PACKAGE - Unknown package chosen in r_bsp_config.h"
#endif
/* Memory size of your MCU. */
#if MCU_PART_MEMORY_SIZE == 0x0 // "J" parts
#define ROM_SIZE_BYTES (16384)
#define RAM_SIZE_BYTES (8192)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x1
#define ROM_SIZE_BYTES (32768)
#define RAM_SIZE_BYTES (10240)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x3
#define ROM_SIZE_BYTES (65536)
#define RAM_SIZE_BYTES (10240)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x4
#define ROM_SIZE_BYTES (98304)
#define RAM_SIZE_BYTES (16384)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x5
#define ROM_SIZE_BYTES (131072)
#define RAM_SIZE_BYTES (16384)
#define DF_SIZE_BYTES (8192)
#else
#error "ERROR - MCU_PART_MEMORY_SIZE - Unknown memory size chosen in r_bsp_config.h"
#endif
/* System clock speed in Hz. */
#define ICLK_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV)
/* Peripheral Module Clock B speed in Hz. */
#define PCLKB_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV)
/* Peripheral Module Clock D speed in Hz. */
#define PCLKD_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV)
/* FlashIF clock speed in Hz. */
#define FCLK_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV)
#endif /* _MCU_INFO */

View File

@ -0,0 +1,25 @@
/***********************************************************************/
/* */
/* PROJECT NAME : RTOSDemo_GCC */
/* FILE : typedefine.h */
/* DESCRIPTION : Aliases of Integer Type */
/* CPU SERIES : RX100 */
/* CPU TYPE : RX111 */
/* */
/* This file is generated by e2studio. */
/* */
/***********************************************************************/
typedef signed char _SBYTE;
typedef unsigned char _UBYTE;
typedef signed short _SWORD;
typedef unsigned short _UWORD;
typedef signed int _SINT;
typedef unsigned int _UINT;
typedef signed long _SDWORD;
typedef unsigned long _UDWORD;
typedef signed long long _SQWORD;
typedef unsigned long long _UQWORD;

View File

@ -0,0 +1,88 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : platform.h
* Description : The user chooses which MCU and board they are developing for in this file. If the board you are using
* is not listed below, please add your own or use the default 'User Board'.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 30.11.2011 1.00 First Release
* : 13.01.2012 1.10 Moved from having platform defined using macro defintion, to having platform defined
* by choosing an include path. This makes this file simpler and cleans up the issue
* where HEW shows all header files for all platforms under 'Dependencies'.
* : 14.02.2012 1.20 Added RX210 BSP.
* : 18.04.2012 1.30 Updated to v0.70 of FIT S/W Spec and v0.20 of FIT r_bsp Spec. This includes adding
* locking.c and locking.h in board folders. Also, r_bsp can now be configured through
* r_bsp_config.h.
* : 26.06.2012 1.40 Added new options such as exception callbacks and the ability to choose your MCU using
* its part number in r_bsp_config.h. Moved mcu_info.h to the 'mcu' folder. Made an effort
* to remove any extra files that the user would need to touch. Removed the flash_options.c
* file and put its contents in vecttbl.c.
* : 17.07.2012 1.50 Fixed bug with exception callback function names. Added BCLK_OUTPUT and SDCLK_OUTPUT
* macro options in r_bsp_config.h. Added some extra code to handle exceptions in
* vecttbl.c. Added vecttbl.h so that user has prototypes for exception callbacks.
* : 08.11.2012 1.60 Added RX111 BSP
***********************************************************************************************************************/
#ifndef _PLATFORM_H_
#define _PLATFORM_H_
/***********************************************************************************************************************
DEFINE YOUR SYSTEM - UNCOMMENT THE INCLUDE PATH FOR THE PLATFORM YOU ARE USING.
***********************************************************************************************************************/
/* RSKRX610 */
//#include "./board/rskrx610/r_bsp.h"
/* RSKRX62N */
//#include "./board/rskrx62n/r_bsp.h"
/* RSKRX62T */
//#include "./board/rskrx62t/r_bsp.h"
/* RDKRX62N */
//#include "./board/rdkrx62n/r_bsp.h"
/* RSKRX630 */
//#include "./board/rskrx630/r_bsp.h"
/* RSKRX63N */
//#include "./board/rskrx63n/r_bsp.h"
/* RDKRX63N */
//#include "./board/rdkrx63n/r_bsp.h"
/* RSKRX210 */
//#include "./board/rskrx210/r_bsp.h"
/* RSKRX111 */
#include "./board/rskrx111/r_bsp.h"
/* User Board - Define your own board here. */
//#include "./board/user/r_bsp.h"
/***********************************************************************************************************************
MAKE SURE AT LEAST ONE PLATFORM WAS DEFINED - DO NOT EDIT BELOW THIS POINT
***********************************************************************************************************************/
#ifndef PLATFORM_DEFINED
#error "Error - No platform defined in platform.h!"
#endif
#endif /* _PLATFORM_H_ */

View File

@ -0,0 +1,250 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp_config_reference.c
* Device(s) : RX111
* Description : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included
* somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)
* is just a reference file that the user can use to make their own r_bsp_config.h file.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef R_BSP_CONFIG_REF_HEADER_FILE
#define R_BSP_CONFIG_REF_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* Enter the product part number for your MCU. This information will be used to obtain information about your MCU such
as package and memory size.
To help parse this information, the part number will be defined using multiple macros.
R 5 F 51 11 5 A D FM
| | | | | | | | | Macro Name Description
| | | | | | | | |__MCU_PART_PACKAGE = Package type, number of pins, and pin pitch
| | | | | | | |____not used = Products with wide temperature range (D: -40 to 85C G: -40 to 105C)
| | | | | | |______not used = Blank
| | | | | |________MCU_PART_MEMORY_SIZE = ROM, RAM, and Data Flash Capacity
| | | | |___________MCU_PART_GROUP = Group name
| | | |______________MCU_PART_SERIES = Series name
| | |________________MCU_PART_MEMORY_TYPE = Type of memory (Flash)
| |__________________not used = Renesas MCU
|____________________not used = Renesas semiconductor product.
*/
/* Package type. Set the macro definition based on values below:
Character(s) = Value for macro = Package Type/Number of Pins/Pin Pitch
FM = 0x0 = LFQFP/64/0.50
FK = 0x1 = LQFP/64/0.80
LF = 0x2 = TFLGA/64/0.50
FL = 0x3 = LFQFP/48/0.50
NE = 0x4 = VQFN/48/0.50
NC = 0x5 = HWQFN/36/0.50
LM = 0x6 = WFLGA/36/0.50
SB = 0x7 = SSOP/36/0.80
*/
#define MCU_PART_PACKAGE (0x0)
/* ROM, RAM, and Data Flash Capacity.
Character(s) = Value for macro = ROM Size/Ram Size/Data Flash Size
5 = 0x5 = 128KB/16KB/8KB
4 = 0x4 = 96KB/16KB/8KB
3 = 0x3 = 64KB/10KB/8KB
1 = 0x1 = 32KB/10KB/8KB
J = 0x0 = 16KB/8KB/8KB
*/
#define MCU_PART_MEMORY_SIZE (0x5)
/* Group name.
Character(s) = Value for macro = Description
10 = 0x0 = RX110 Group
11 = 0x1 = RX111 Group
*/
#define MCU_PART_GROUP (0x1)
/* Series name.
Character(s) = Value for macro = Description
51 = 0x0 = RX100 Series
*/
#define MCU_PART_SERIES (0x0)
/* Memory type.
Character(s) = Value for macro = Description
F = 0x0 = Flash memory version
*/
#define MCU_PART_MEMORY_TYPE (0x0)
/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a
'#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */
#if defined(BSP_DECLARE_STACK)
/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize su=0x400
/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize si=0x100
#endif
/* Heap size in bytes. */
#define HEAP_BYTES (0x001)
/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information
on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.
0 = Stay in Supervisor mode.
1 = Switch to User mode.
*/
#define RUN_IN_USER_MODE (0)
/* This macro lets other modules no if a RTOS is being used.
0 = RTOS is not used.
1 = RTOS is used.
*/
#define RTOS_USED (0)
/* Clock source select (CKSEL).
0 = Low Speed On-Chip Oscillator (LOCO)
1 = High Speed On-Chip Oscillator (HOCO)
2 = Main Clock Oscillator
3 = Sub-Clock Oscillator
4 = PLL Circuit
*/
#define CLOCK_SOURCE (4) // GI org 4
/* Clock configuration options.
The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The
multiplier settings are used to set the clock registers in resetprg.c. If a 16MHz clock is used and the
ICLK is 24MHz, PCLKB is 24MHz, FCLK is 24MHz, PCLKD is 24MHz, and CKO is 1MHz then the
settings would be:
XTAL_HZ = 16000000
PLL_DIV = 2
PLL_MUL = 6 (16MHz x 3 = 48MHz)
ICK_DIV = 2 : System Clock (ICLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV) = 24MHz
PCKB_DIV = 2 : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 24MHz
PCKD_DIV = 2 : Peripheral Clock D (PCLKD) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV) = 24MHz
FCK_DIV = 2 : Flash IF Clock (FCLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV) = 24MHz
*/
/* XTAL - Input clock frequency in Hz */
#define XTAL_HZ (16000000)
/* PLL Input Frequency Divider Select (PLIDIV).
Available divisors = /1 (no division), /2, /4
*/
#define PLL_DIV (2) // GI org 2
/* PLL Frequency Multiplication Factor Select (STC).
Available multipliers = x6, x8
*/
#define PLL_MUL (6) // GI org 6
/* System Clock Divider (ICK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define ICK_DIV (2) // NOTE: ICLK CANNOT BE SLOWER THAN PCLK!
/* Peripheral Module Clock B Divider (PCKB).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKB_DIV (2) // GI org 2
/* Peripheral Module Clock D Divider (PCKD).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKD_DIV (2)
/* Flash IF Clock Divider (FCK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define FCK_DIV (2)
/* Below are callback functions that can be used for detecting MCU exceptions, undefined interrupt sources, and
bus errors. If the user wishes to be alerted of these events then they will need to define the macro as a
function to be called when the event occurs. For example, if the user wanted the function
excep_undefined_instr_isr() to be called when an undefined interrupt source ISR is triggered then they would
do the following:
#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
If the user does not wish to be alerted of these events then they should comment out the macros.
NOTE: When a callback function is called it will be called from within a ISR. This means that the function
will essentially be an interrupt and will hold off other interrupts that occur in the system while it
is executing. For this reason, it is recommended to keep these callback functions short as to not
decrease the real-time response of your system.
*/
/* Callback for Supervisor Instruction Violation Exception. */
//#define EXCEP_SUPERVISOR_ISR_CALLBACK supervisor_instr_cb
/* Callback for Undefined Instruction Exception. */
//#define EXCEP_UNDEFINED_INSTR_ISR_CALLBACK undefined_instr_cb
/* Callback for Non-maskable Interrupt. */
//#define NMI_ISR_CALLBACK nmi_cb
/* Callback for all undefined interrupt vectors. User can set a breakpoint in this function to determine which source
is creating unwanted interrupts. */
//#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
/* Callback for Bus Error Interrupt. */
//#define BUS_ERROR_ISR_CALLBACK bus_error_cb
/* The user has the option of separately choosing little or big endian for the User Application Area */
/* Endian mode for User Application.
0 = Big Endian
Else = Little Endian (Default)
*/
#define USER_APP_ENDIAN (1)
/* Configure WDT and IWDT settings.
OFS0 - Option Function Select Register 0
OFS0 - Option Function Select Register 0
b31:b15 Reserved (set to 1)
b14 IWDTSLCSTP - IWDT Sleep Mode Count Stop Control - (0=can't stop count, 1=stop w/some low power modes)
b13 Reserved (set to 1)
b12 IWDTRSTIRQS - IWDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)
b11:b10 IWDTRPSS - IWDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)
b9:b8 IWDTRPES - IWDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)
b7:b4 IWDTCKS - IWDT Clock Frequency Division Ratio - (0=none, 2=/16, 3 = /32, 4=/64, 0xF=/128, 5=/256)
b3:b2 IWDTTOPS - IWDT Timeout Period Select - (0=128 cycles, 1=512, 2=1024, 3=2048)
b1 IWDTSTRT - IWDT Start Mode Select - (0=auto-start after reset, 1=halt after reset)
b0 Reserved (set to 1) */
#define OFS0_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Configure whether voltage detection 1 circuit and HOCO are enabled after reset.
OFS1 - Option Function Select Register 1
b31:b9 Reserved (set to 1)
b8 HOCOEN - Enable/disable HOCO oscillation after a reset (0=enable, 1=disable)
b7:b4 STUPLVD1LVL - Startup Voltage Monitoring 1 Reset Detection Level Select
0 1 0 0: 3.10 V
0 1 0 1: 3.00 V
0 1 1 0: 2.90 V
0 1 1 1: 2.79 V
1 0 0 0: 2.68 V
1 0 0 1: 2.58 V
1 0 1 0: 2.48 V
1 0 1 1: 2.06 V
1 1 0 0: 1.96 V
1 1 0 1: 1.86 V
b3:b2 Reserved (set to 1)
b2 STUPLVD1REN - Startup Voltage Monitoring 1 Reset Enable (1=monitoring disabled)
b0 FASTSTUP - Power-On Fast Startup Time (1=normal; read only) */
#define OFS1_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Initializes C input & output library functions.
0 = Disable I/O library initialization in resetprg.c. If you are not using stdio then use this value.
1 = Enable I/O library initialization in resetprg.c. This is default and needed if you are using stdio. */
#define IO_LIB_ENABLE (0)
#endif /* R_BSP_CONFIG_REF_HEADER_FILE */

View File

@ -0,0 +1,100 @@
r_bsp Package
=============
Document Number
---------------
N/A
Version
-------
v1.60
Overview
--------
The r_bsp package provides a foundation for code to be built on top of. It provides startup code, iodefines, and MCU
information for different boards. There are 2 folders that make up the r_bsp package. The 'mcu' folder has iodefine
files and a file named 'mcu_info.h' for each MCU group. The 'mcu_info.h' file has information about the MCU on the board
and is configured based on the information given in r_bsp_config.h. The information in 'mcu_info.h' is used to help
configure Renesas middleware that uses the r_bsp package. The 'board' folder has a folder with startup code for each
supported board. Which MCU and board is chosen is decided by the settings in 'platform.h'. The user can choose which
board they are using by uncommenting the include path that applies to their board. For example, if you are using the
RSK+RX62N then you would uncomment the #include "./board/rskrx62n/r_bsp.h" include path. Users are encouraged to add
their own boards to the 'board' directory. BSPs are configured by using the r_bsp_config.h file. Each board will have a
reference configuration file named r_bsp_config_reference.h. The user should copy this file to their project, rename it
to r_bsp_config.h, and use the options inside the file to configure the BSP for their project.
Features
--------
* Provides foundation to build code on top of.
* Provides MCU startup code.
* Provides SFR access through iodefine.h
* Stores details of MCU in 'mcu_info.h' to help configure Renesas middleware.
* Easily configure BSP through r_bsp_config.h.
* Choose MCU easily by inputting part number details in r_bsp_config.h.
* Provides callbacks for MCU exceptions and the bus error interrupt.
Limitations
-----------
N/A
Peripherals Used Directly
-------------------------
N/A
Required Packages
-----------------
* r_glyph [required if you want to use LCD for RDK boards]
* r_rspi_rx [required if you want to use LCD for RDK boards]
How to add to your project
--------------------------
* Copy the r_bsp folder to your project.
* Add an include path to the 'r_bsp' directory.
* Add all of the source files for your board from the 'r_bsp\board\--YOUR_BOARD--' directory to your project.
* Uncomment the include path for your board in 'platform.h' which is located in the 'r_bsp' directory.
* Copy the file r_bsp_config_reference.h from the 'r_bsp\board\--YOUR_BOARD--' directory and copy it to your project's
source code directory. Rename the file r_bsp_config.h.
* Open r_bsp_config.h and use the macros to configure the BSP for your project.
File Structure
--------------
r_bsp
| platform.h (choose which board is being used)
| readme.txt
|
+---board (contains supported boards)
| +---rdkrx62n (contains BSP source and header files)
| |
| +---rdkrx63n
| |
| +---rskrx111
| |
| +---rskrx210
| |
| +---rskrx610
| |
| +---rskrx62n
| |
| +---rskrx62t
| |
| +---rskrx630
| |
| +---rskrx63n
| |
| \---user
|
\---mcu
+---rx111 (contains common files to this MCU group, e.g. iodefine.h)
|
+---rx210
|
+---rx610
|
+---rx62n
|
+---rx62t
|
+---rx630
|
\---rx63n

View File

@ -0,0 +1,47 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches_config.c
* Description : Configures the switches code
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
***********************************************************************************************************************/
#ifndef SWITCHES_CONFIG_HEADER_FILE
#define SWITCHES_CONFIG_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* This macro sets whether interrupts or polling is used for detecting switch presses. The benefit of using interrupts
is that no extra processing is used for polling and the use of a system timer tick is not a requirement. The downside
of using interrupts is that callback functions are called from within an interrupt so if your ISR is long then it can
degrade the real-time response of your system. The benefit of polling is that functions are called at the application
level and debouncing is supported. The downside to polling is that your system must call the R_SWITCHES_Update() on a
regular basis which requires extra processing.
0 = Use interrupts
1 = Use polling
*/
#define SWITCHES_DETECTION_MODE (0)
#endif /* SWITCHES_CONFIG_HEADER_FILE */

View File

@ -0,0 +1,72 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches_if.h
* Description : Functions for using switches with callback functions.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
***********************************************************************************************************************/
#ifndef SWITCHES_API_HEADER_FILE
#define SWITCHES_API_HEADER_FILE
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Fixed width integer support. */
#include <stdint.h>
/* Used for configuring the code */
#include "r_switches_config.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* Version Number of API. */
#define SWITCHES_VERSION_MAJOR (1)
#define SWITCHES_VERSION_MINOR (0)
/* The process of getting the version number is done through the macro below. The version number is encoded where the
top 2 bytes are the major version number and the bottom 2 bytes are the minor version number. For example,
Version 4.25 would be returned as 0x00040019. */
#define R_SWITCHES_GetVersion() ((((uint32_t)SWITCHES_VERSION_MAJOR) << 16) | (uint32_t)SWITCHES_VERSION_MINOR)
/***********************************************************************************************************************
Public Functions
***********************************************************************************************************************/
void R_SWITCHES_Init(void);
void R_SWITCHES_Update(void);
/* Callback prototypes. */
#if defined(SW1_CALLBACK_FUNCTION)
void SW1_CALLBACK_FUNCTION(void);
#endif
#if defined(SW2_CALLBACK_FUNCTION)
void SW2_CALLBACK_FUNCTION(void);
#endif
#if defined(SW3_CALLBACK_FUNCTION)
void SW3_CALLBACK_FUNCTION(void);
#endif
#endif /* SWITCHES_API_HEADER_FILE */

View File

@ -0,0 +1,83 @@
PLEASE REFER TO THE APPLICATION NOTE FOR THIS MIDDLEWARE FOR MORE INFORMATION
Switches
========
Document Number
---------------
N/A
Version
-------
v1.40
Overview
--------
Configures port pins for switches and calls user defined function on switch press. Switch presses can be detected using
IRQ interrupts or by polling. The benefit of using interrupts is that no extra processing is used for polling and the
use of a system timer tick is not a requirement. The downside of using interrupts is that callback functions are called
from within an interrupt so if your ISR is long then it can degrade the real-time response of your system. The benefit
of polling is that functions are called at the application level and debouncing is supported. The downside to polling is
that your system must call the R_SWITCHES_Update() on a regular basis which requires extra processing.
Features
--------
* Call one function to setup switches.
* Define function to call when switch is pressed.
* Can be configured to be interrupt or poll driven.
Supported MCUs
--------------
* RX610 Group
* RX621, RX62N Group
* RX62T Group
* RX630 Group
* RX631, RX63N Group
* RX210 Group
* RX111 Group
Boards Tested On
----------------
* RSKRX610
* RSK+RX62N
* RSKRX62T
* RDKRX62N
* RSKRX630
* RSKRX63N
* RDKRX63N
* RSKRX111
Limitations
-----------
* None
Peripherals Used Directly
-------------------------
* None
Required Packages
-----------------
* None
How to add to your project
--------------------------
* Add src\r_switches.c to your project.
* Add an include path to the 'r_switches' directory.
* Add an include path to the 'r_switches\src' directory.
* Configure middleware through r_switches_config.h.
* Add a #include for r_switches_if.h to files that need to use this package.
Toolchain(s) Used
-----------------
* Renesas RX v1.02
File Structure
--------------
r_switches
| readme.txt
| r_switches_config.h
| r_switches_if.h
|
\---src
r_switches.c

View File

@ -0,0 +1,232 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches.c
* Description : Functions for using switches with callback functions.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
* : 07.11.2012 1.40 Added support for RSKRX111
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Board and MCU support. */
#include "platform.h"
/* Switches prototypes. */
#include "r_switches_if.h"
/* Scheduler includes. */
#include "FreeRTOS.h"
typedef int bool;
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* This helps reduce the amount of unique code for each supported board. */
#define X_IRQ( x ) XX_IRQ( x )
#define XX_IRQ( x ) _ICU_IRQ##x
/* These macros define which IRQ pins are used for the switches. Note that these defintions cannot have parentheses
around them. */
#if defined(PLATFORM_BOARD_RSKRX111)
#define SW1_IRQ_NUMBER 0
#define SW2_IRQ_NUMBER 1
#define SW3_IRQ_NUMBER 4
#else
#error This file is only for use on the RX100 RSK
#endif
/* Number of switches on this board. */
#define SWITCHES_NUM (3)
/* Register definitions not yet correct in iorx111.h. */
#define MPC_P30PFS_REG ( * ( unsigned char * ) 0x0008C158 )
#define MPC_P31PFS_REG ( * ( unsigned char * ) 0x0008C159 )
#define MPC_PE4PFS_REG ( * ( unsigned char * ) 0x0008C1B4 )
/***********************************************************************************************************************
Typedef definitions
***********************************************************************************************************************/
typedef struct
{
bool active;
int32_t debounce_cnt;
} switch_t;
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
#if SWITCHES_DETECTION_MODE == 1
/* Update Hz */
static uint32_t g_sw_debounce_cnts;
/* Used for debounce. */
switch_t g_switches[SWITCHES_NUM];
#endif
/***********************************************************************************************************************
* Function Name: R_SWITCHES_Init
* Description : Initializes pins to be input and interrupt on switch presses.
* Arguments :
* Return Value : none
***********************************************************************************************************************/
void R_SWITCHES_Init (void)
{
/* Unlock protection register */
MPC.PWPR.BYTE &= 0x7F;
/* Unlock MPC registers */
MPC.PWPR.BYTE |= 0x40;
/* Make switch pins inputs. */
PORT3.PDR.BYTE &= 0xFC;
PORTE.PDR.BYTE &= 0xEF;
/* Set port mode registers for switches. */
PORT3.PMR.BYTE &= 0xFC;
PORTE.PMR.BYTE &= 0xEF;
MPC_P30PFS_REG = 0x40; /* P30 is used as IRQ pin */
MPC_P31PFS_REG = 0x40; /* P31 is used as IRQ pin */
MPC_PE4PFS_REG = 0x40; /* PE4 is used as IRQ pin */
/* Set IRQ type (falling edge) */
ICU.IRQCR[ SW1_IRQ_NUMBER ].BYTE = 0x04;
ICU.IRQCR[ SW2_IRQ_NUMBER ].BYTE = 0x04;
ICU.IRQCR[ SW3_IRQ_NUMBER ].BYTE = 0x04;
/* Set interrupt priorities, which must be below
configMAX_SYSCALL_INTERRUPT_PRIORITY. */
_IPR( X_IRQ(SW1_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
_IPR( X_IRQ(SW2_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
_IPR( X_IRQ(SW3_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
/* Clear any pending interrupts */
_IR( X_IRQ(SW1_IRQ_NUMBER) ) = 0;
_IR( X_IRQ(SW2_IRQ_NUMBER) ) = 0;
_IR( X_IRQ(SW3_IRQ_NUMBER) ) = 0;
/* Enable the interrupts */
_IEN( X_IRQ(SW1_IRQ_NUMBER) ) = 1;
_IEN( X_IRQ(SW2_IRQ_NUMBER) ) = 1;
_IEN( X_IRQ(SW3_IRQ_NUMBER) ) = 1;
}
/* If using polling then the user must call the update function. */
/***********************************************************************************************************************
* Function name: R_SWITCHES_Update
* Description : Polls switches and calls callback functions as needed. If you are using IRQ mode then this function
* is not needed and can be removed if desired. It is left in so that code will not fail when switching
* between polling or IRQ mode.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void R_SWITCHES_Update (void)
{
#if SWITCHES_DETECTION_MODE == 1
/* This code is only needed for polling mode. */
/* Check switch 1. */
if (SW1 == SW_ACTIVE)
{
if (g_switches[0].active != true)
{
if (++g_switches[0].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[0].active = true;
/* Call callback function. */
SW1_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[0].debounce_cnt)
{
g_switches[0].active = false;
}
else
{
g_switches[0].debounce_cnt--;
}
}
/* Check switch 2. */
if (SW2 == SW_ACTIVE)
{
if (g_switches[1].active != true)
{
if (++g_switches[1].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[1].active = true;
/* Call callback function. */
SW2_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[1].debounce_cnt)
{
g_switches[1].active = false;
}
else
{
g_switches[1].debounce_cnt--;
}
}
/* Check switch 3. */
if (SW3 == SW_ACTIVE)
{
if (g_switches[2].active != true)
{
if (++g_switches[2].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[2].active = true;
/* Call callback function. */
SW3_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[2].debounce_cnt)
{
g_switches[2].active = false;
}
else
{
g_switches[2].debounce_cnt--;
}
}
#endif /* SWITCHES_DETECTION_MODE */
}

View File

@ -0,0 +1,211 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/******************************************************************************
* This project provides two demo applications. A low power project that
* demonstrates the FreeRTOS tickless mode, and a more comprehensive test and
* demo application. The configCREATE_LOW_POWER_DEMO setting (defined at the
* top of FreeRTOSConfig.h) is used to select between the two. The low power
* demo is implemented and described in main_low_power.c. The more
* comprehensive test and demo application is implemented and described in
* main_full.c.
*
* This file implements the code that is not demo specific, including the
* hardware setup and FreeRTOS hook functions.
*/
/* Kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
/* Platform includes. */
#include "lcd.h"
/*-----------------------------------------------------------*/
/*
* Prepare the board of the demo.
*/
extern void vHardwareSetup( void );
/*
* main_low_power() is used when configCREATE_LOW_POWER_DEMO is set to 1.
* main_full() is used when configCREATE_LOW_POWER_DEMO is set to 0.
*/
extern void main_low_power( void );
extern void main_full( void );
/* Prototypes for the standard FreeRTOS callback/hook functions implemented
within this file. */
void vApplicationMallocFailedHook( void );
void vApplicationIdleHook( void );
void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName );
void vApplicationTickHook( void );
/*-----------------------------------------------------------*/
/* See the documentation page for this demo on the FreeRTOS.org web site for
full information - including hardware setup requirements. */
void main( void )
{
/* Call the Renesas provided setup. */
vHardwareSetup();
lcd_initialize();
lcd_display( LCD_LINE1, "FreeRTOS" );
/* The configCREATE_LOW_POWER_DEMO setting is described in FreeRTOSConfig.h. */
#if configCREATE_LOW_POWER_DEMO == 1
{
lcd_display( LCD_LINE2, "LP Demo" );
main_low_power();
}
#else
{
lcd_display( LCD_LINE2, "Ful Demo" );
main_full();
}
#endif
}
/*-----------------------------------------------------------*/
void vApplicationMallocFailedHook( void )
{
/* vApplicationMallocFailedHook() will only be called if
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
function that will get called if a call to pvPortMalloc() fails.
pvPortMalloc() is called internally by the kernel whenever a task, queue,
timer or semaphore is created. It is also called by various parts of the
demo application. If heap_1.c, heap_2.c or heap_4.c are used, then the size
of the heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE
in FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
to query the size of free heap space that remains (although it does not
provide information on how the remaining heap might be fragmented). */
taskDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationIdleHook( void )
{
/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
task. It is essential that code added to this hook function never attempts
to block in any way (for example, call xQueueReceive() with a block time
specified, or call vTaskDelay()). If the application makes use of the
vTaskDelete() API function (as this demo application does) then it is also
important that vApplicationIdleHook() is permitted to return to its calling
function, because it is the responsibility of the idle task to clean up
memory allocated by the kernel to any task that has since been deleted. */
}
/*-----------------------------------------------------------*/
void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName )
{
( void ) pcTaskName;
( void ) pxTask;
/* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
called if a stack overflow is detected. */
taskDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationTickHook( void )
{
/* This function will be called by each tick interrupt if
configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be
added here, but the tick hook is called from an interrupt context, so
code must not attempt to block, and only the interrupt safe FreeRTOS API
functions can be used (those that end in FromISR()). */
}
/*-----------------------------------------------------------*/
void vAssertCalled( void )
{
volatile unsigned long ul = 0;
taskENTER_CRITICAL();
{
/* Set ul to a non-zero value using the debugger to step out of this
function. */
while( ul == 0 )
{
__asm volatile( "NOP" );
}
}
taskEXIT_CRITICAL();
}

View File

@ -0,0 +1,346 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/* ****************************************************************************
* This project includes a lot of tasks and tests and is therefore complex.
* If you would prefer a much simpler project to get started with then select
* the 'low power' demo by setting configCREATE_LOW_POWER_DEMO to 1 in
* FreeRTOSConfig.h. When configCREATE_LOW_POWER_DEMO is set to 1 main() will
* call main_low_power() instead of main_full().
* ****************************************************************************
*
* Creates all the demo application tasks, then starts the scheduler. The web
* documentation provides more details of the standard demo application tasks,
* which provide no particular functionality but do provide a good example of
* how to use the FreeRTOS API.
*
* In addition to the standard demo tasks, the following tasks and tests are
* defined and/or created within this file:
*
* "Reg test" tasks - These fill the registers with known values, then
* repeatedly check that each register still contains its expected value for
* the lifetime of the tasks. Each task uses different values. The tasks run
* with very low priority so get preempted very frequently. A check variable
* is incremented on each iteration of the test loop. A register containing an
* unexpected value is indicative of an error in the context switching
* mechanism and will result in a branch to a null loop - which in turn will
* prevent the check variable from incrementing any further and allow the check
* timer (described below) to determine that an error has occurred. The nature
* of the reg test tasks necessitates that they are written in assembly code.
*
* "Check Timer" and Callback Function - The check timer period is initially
* set to three seconds. The check timer callback function checks that all the
* standard demo tasks are not only still executing, but are executing without
* reporting any errors. If the check timer discovers that a task has either
* stalled, or reported an error, then it changes its own period from the
* initial three seconds, to just 200ms. The check timer callback function
* also toggles LED 0 each time it is called. This provides a visual
* indication of the system status: If the LED toggles every three seconds,
* then no issues have been discovered. If the LED toggles every 200ms, then
* an issue has been discovered with at least one task.
*
* *NOTE 1* The CPU must be in Supervisor mode when the scheduler is started.
* The PowerON_Reset_PC() supplied in resetprg.c with this demo has
* Change_PSW_PM_to_UserMode() commented out to ensure this is the case.
*/
/* Standard includes. */
#include <string.h>
/* Hardware specific includes. */
#include "iorx111.h"
/* Kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#include "semphr.h"
/* Standard demo includes. */
#include "partest.h"
#include "death.h"
#include "blocktim.h"
#include "GenQTest.h"
#include "recmutex.h"
/* Variables that are incremented on each iteration of the reg test tasks are
declared outside of the #if configCREATE_LOW_POWER_DEMO conditional compilation
to prevent linker issues when configCREATE_LOW_POWER_DEMO is set to 1. The
check timer inspects these variables to ensure they are still incrementing as
expected. If a variable stops incrementing then it is likely that its associate
task has stalled. */
unsigned long volatile ulRegTest1CycleCount = 0UL, ulRegTest2CycleCount = 0UL;
/* The code in this file is only built when configCREATE_LOW_POWER_DEMO is set
to 0, otherwise the code in main_low_power.c is used. */
#if configCREATE_LOW_POWER_DEMO == 0
/* Values that are passed into the reg test tasks using the task parameter.
The tasks check that the values are passed in correctly. */
#define mainREG_TEST_1_PARAMETER ( 0x12121212UL )
#define mainREG_TEST_2_PARAMETER ( 0x12345678UL )
/* Priorities at which the standard demo tasks are created. */
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
/* The LED toggled by the check timer. */
#define mainCHECK_LED ( 0 )
/* The period at which the check timer will expire, in ms, provided no errors
have been reported by any of the standard demo tasks. ms are converted to the
equivalent in ticks using the portTICK_RATE_MS constant. */
#define mainCHECK_TIMER_PERIOD_MS ( 3000UL / portTICK_RATE_MS )
/* The period at which the check timer will expire, in ms, if an error has been
reported in one of the standard demo tasks. ms are converted to the equivalent
in ticks using the portTICK_RATE_MS constant. */
#define mainERROR_CHECK_TIMER_PERIOD_MS ( 200UL / portTICK_RATE_MS )
/* A block time of zero simple means "Don't Block". */
#define mainDONT_BLOCK ( 0UL )
/*
* The reg test tasks as described at the top of this file.
*/
static void prvRegTest1Task( void *pvParameters );
static void prvRegTest2Task( void *pvParameters );
/*
* The actual implementation of the reg test functionality, which, because of
* the direct register access, have to be in assembly.
*/
void vRegTest1Implementation( void );
void vRegTest2Implementation( void );
/*
* The check timer callback function, as described at the top of this file.
*/
static void prvCheckTimerCallback( xTimerHandle xTimer );
/*-----------------------------------------------------------*/
/* The check timer. This uses prvCheckTimerCallback() as its callback
function. */
static xTimerHandle xCheckTimer = NULL;
/*-----------------------------------------------------------*/
void main_full( void )
{
/* Start the reg test tasks which test the context switching mechanism. */
xTaskCreate( prvRegTest1Task, "RegTst1", configMINIMAL_STACK_SIZE, ( void * ) mainREG_TEST_1_PARAMETER, tskIDLE_PRIORITY, NULL );
xTaskCreate( prvRegTest2Task, "RegTst2", configMINIMAL_STACK_SIZE, ( void * ) mainREG_TEST_2_PARAMETER, tskIDLE_PRIORITY, NULL );
/* Create the standard demo tasks. */
vCreateBlockTimeTasks();
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
vStartRecursiveMutexTasks();
/* The suicide tasks must be created last as they need to know how many
tasks were running prior to their creation in order to ascertain whether
or not the correct/expected number of tasks are running at any given time. */
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
/* Create the software timer that performs the 'check' functionality,
as described at the top of this file. */
xCheckTimer = xTimerCreate( ( const signed char * ) "CheckTimer",/* A text name, purely to help debugging. */
( mainCHECK_TIMER_PERIOD_MS ), /* The timer period, in this case 5000ms (5s). */
pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */
( void * ) 0, /* The ID is not used, so can be set to anything. */
prvCheckTimerCallback /* The callback function that inspects the status of all the other tasks. */
);
configASSERT( xCheckTimer );
/* Start the check timer. It will actually start when the scheduler is
started. */
xTimerStart( xCheckTimer, mainDONT_BLOCK );
/* Start the tasks running. */
vTaskStartScheduler();
/* If all is well execution will never reach here as the scheduler will be
running. If this null loop is reached then it is likely there was
insufficient FreeRTOS heap available for the idle task and/or timer task to
be created. See http://www.freertos.org/a00111.html. */
for( ;; );
}
/*-----------------------------------------------------------*/
static void prvCheckTimerCallback( xTimerHandle xTimer )
{
static long lChangedTimerPeriodAlready = pdFALSE, lErrorStatus = pdPASS;
static volatile unsigned long ulLastRegTest1CycleCount = 0UL, ulLastRegTest2CycleCount = 0UL;
/* Remove compiler warnings about unused parameters. */
( void ) xTimer;
/* Check the standard demo tasks are running without error. */
if( xAreGenericQueueTasksStillRunning() != pdTRUE )
{
lErrorStatus = pdFAIL;
}
else if( xIsCreateTaskStillRunning() != pdTRUE )
{
lErrorStatus = pdFAIL;
}
else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
{
lErrorStatus = pdFAIL;
}
else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
{
lErrorStatus = pdFAIL;
}
/* Check the reg test tasks are still cycling. They will stop incrementing
their loop counters if they encounter an error. */
if( ulRegTest1CycleCount == ulLastRegTest1CycleCount )
{
lErrorStatus = pdFAIL;
}
if( ulRegTest2CycleCount == ulLastRegTest2CycleCount )
{
lErrorStatus = pdFAIL;
}
/* Remember the loop counter values this time around so they can be checked
again the next time this callback function executes. */
ulLastRegTest1CycleCount = ulRegTest1CycleCount;
ulLastRegTest2CycleCount = ulRegTest2CycleCount;
/* Toggle the check LED to give an indication of the system status. If
the LED toggles every three seconds then everything is ok. A faster toggle
indicates an error. */
vParTestToggleLED( mainCHECK_LED );
/* Was an error detected this time through the callback execution? */
if( lErrorStatus != pdPASS )
{
if( lChangedTimerPeriodAlready == pdFALSE )
{
lChangedTimerPeriodAlready = pdTRUE;
/* This call to xTimerChangePeriod() uses a zero block time.
Functions called from inside of a timer callback function must
*never* attempt to block. */
xTimerChangePeriod( xCheckTimer, ( mainERROR_CHECK_TIMER_PERIOD_MS ), mainDONT_BLOCK );
}
}
}
/*-----------------------------------------------------------*/
/* This function is explained in the comments at the top of this file. */
static void prvRegTest1Task( void *pvParameters )
{
if( ( ( unsigned long ) pvParameters ) != mainREG_TEST_1_PARAMETER )
{
/* The parameter did not contain the expected value. */
for( ;; )
{
/* Stop the tick interrupt so its obvious something has gone wrong. */
taskDISABLE_INTERRUPTS();
}
}
/* This is an inline asm function that never returns. */
vRegTest1Implementation();
}
/*-----------------------------------------------------------*/
/* This function is explained in the comments at the top of this file. */
static void prvRegTest2Task( void *pvParameters )
{
if( ( ( unsigned long ) pvParameters ) != mainREG_TEST_2_PARAMETER )
{
/* The parameter did not contain the expected value. */
for( ;; )
{
/* Stop the tick interrupt so its obvious something has gone wrong. */
taskDISABLE_INTERRUPTS();
}
}
/* This is an inline asm function that never returns. */
vRegTest2Implementation();
}
/*-----------------------------------------------------------*/
#endif /* configCREATE_LOW_POWER_DEMO */

View File

@ -0,0 +1,437 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/* ****************************************************************************
* When configCREATE_LOW_POWER_DEMO is set to 1 in FreeRTOSConfig.h main() will
* call main_low_power(), which is defined in this file. main_low_power()
* demonstrates FreeRTOS tick suppression being used to allow the MCU to be
* placed into both the low power deep sleep mode and the low power software
* standby mode. When configCREATE_LOW_POWER_DEMO is set to 0 main will
* instead call main_full(), which is a more comprehensive RTOS demonstration.
* ****************************************************************************
*
* This application demonstrates the FreeRTOS tickless idle mode (tick
* suppression). See http://www.freertos.org/low-power-tickless-rtos.html
* The demo is configured to execute on the Renesas RX100 RSK.
*
* Functionality:
*
* + Two tasks are created, an Rx task and a Tx task.
*
* + The Rx task repeatedly blocks on a queue to wait for data. The Rx task
* toggles LED 0 each time is receives a value from the queue.
*
* + The Tx task repeatedly enters the Blocked state for an amount of time
* that is set by the position of the potentiometer. On exiting the blocked
* state the Tx task sends a value through the queue to the Rx task (causing
* the Rx task to exit the blocked state and toggle LED 0).
*
* If the value read from the potentiometer is less than or equal to
* mainSOFTWARE_STANDBY_DELAY then the Tx task blocks for the equivalent
* number of milliseconds. For example, if the sampled analog value is
* 2000, then the Tx task blocks for 2000ms. Blocking for a finite period
* allows the kernel to stop the tick interrupt and place the RX100 into
* deep sleep mode.
*
* If the value read form the potentiometer is greater than
* mainSOFTWARE_STANDBY_DELAY then the Tx task blocks on a semaphore with
* an infinite timeout. Blocking with an infinite timeout allows the kernel
* to stop the tick interrupt and place the RX100 into software standby
* mode. Pressing a button will generate an interrupt that causes the RX100
* to exit software standby mode. The interrupt service routine 'gives' the
* semaphore to unblock the Tx task.
*
*
* Using the Demo and Observed Behaviour:
*
* 1) Turn the potentiometer completely counter clockwise.
*
* 2) Program the RX100 with the application, then disconnect the programming/
* debugging hardware to ensure power readings are not effected by any
* connected interfaces.
*
* 3) Start the application running. LED 0 will toggle quickly because the
* potentiometer is turned to its lowest value. LED 1 will be illuminated
* when the RX100 is not in a power saving mode, but will appear to be off
* because most execution time is spent in a sleep mode. Led 2 will be
* illuminated when the RX100 is in deep sleep mode, and will appear to be
* always on, again because most execution time is spent in deep sleep mode.
* The LEDs are turned on and off by the application defined pre and post
* sleep macros (see the definitions of configPRE_SLEEP_PROCESSING() and
* configPOST_SLEEP_PROCESSING() in FreeRTOSConfig.h).
*
* 4) Slowly turn the potentiometer in the clockwise direction. This will
* increase the value read from the potentiometer, which will increase the
* time the Tx task spends in the Blocked state, which will therefore
* decrease the frequency at which the Tx task sends data to the queue (and
* the rate at which LED 0 is toggled).
*
* 5) Keep turning the potentiometer in the clockwise direction. Eventually
* the value read from the potentiometer will go above
* mainSOFTWARE_STANDBY_DELAY, causing the Tx task to block on the semaphore
* with an infinite timeout. LED 0 will stop toggling because the Tx task is
* no longer sending to the queue. LED 1 and LED 2 will both be off because
* the RX100 is neither running or in deep sleep mode (it is in software
* standby mode).
*
* 6) Turn the potentiometer counter clockwise again to ensure its value goes
* back below mainSOFTWARE_STANDBY_DELAY.
*
* 7) Press any of the three buttons to generate an interrupt. The interrupt
* will take the RX100 out of software standby mode, and the interrupt
* service routine will unblock the Tx task by 'giving' the semaphore. LED 0
* will then start to toggle again.
*
*/
/* Hardware specific includes. */
#include "platform.h"
#include "r_switches_if.h"
/* Kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
/* Common demo includes. */
#include "partest.h"
/* Priorities at which the Rx and Tx tasks are created. */
#define configQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
#define configQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
/* The number of items the queue can hold. This is 1 as the Rx task will
remove items as they are added so the Tx task should always find the queue
empty. */
#define mainQUEUE_LENGTH ( 1 )
/* The LED used to indicate that a value has been received on the queue. */
#define mainQUEUE_LED ( 0 )
/* The LED used to indicate that full power is being used (the MCU is not in
deep sleep or software standby mode). */
#define mainFULL_POWER_LED ( 1 )
/* The LED used to indicate that deep sleep mode is being used. */
#define mainDEEP_SLEEP_LED ( 2 )
/* The Tx task sends to the queue with a frequency that is set by the value
read from the potentiometer until the value goes above that set by the
mainSOFTWARE_STANDBY_DELAY constant - at which time the Tx task instead blocks
indefinitely on a semaphore. */
#define mainSOFTWARE_STANDBY_DELAY ( 3000UL )
/* A block time of zero simply means "don't block". */
#define mainDONT_BLOCK ( 0 )
/* The value that is sent from the Tx task to the Rx task on the queue. */
#define mainQUEUED_VALUE ( 100UL )
/*-----------------------------------------------------------*/
/*
* The Rx and Tx tasks as described at the top of this file.
*/
static void prvQueueReceiveTask( void *pvParameters );
static void prvQueueSendTask( void *pvParameters );
/*
* Reads and returns the value of the ADC connected to the potentiometer built
* onto the RSK.
*/
static unsigned short prvReadPOT( void );
/*
* The handler for the interrupt generated when any of the buttons are pressed.
*/
__interrupt void vButtonInterrupt( void );
/*-----------------------------------------------------------*/
/* The queue to pass data from the Tx task to the Rx task. */
static xQueueHandle xQueue = NULL;
/* The semaphore that is 'given' by interrupts generated from button pushes. */
static xSemaphoreHandle xSemaphore = NULL;
/*-----------------------------------------------------------*/
void main_low_power( void )
{
/* Create the queue. */
xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) );
configASSERT( xQueue );
/* Create the semaphore that is 'given' by an interrupt generated from a
button push. */
vSemaphoreCreateBinary( xSemaphore );
configASSERT( xSemaphore );
/* Make sure the semaphore starts in the expected state - no button pushes
have yet occurred. A block time of zero can be used as it is guaranteed
that the semaphore will be available because it has just been created. */
xSemaphoreTake( xSemaphore, mainDONT_BLOCK );
/* Start the two tasks as described at the top of this file. */
xTaskCreate( prvQueueReceiveTask, "Rx", configMINIMAL_STACK_SIZE, NULL, configQUEUE_RECEIVE_TASK_PRIORITY, NULL );
xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, NULL, configQUEUE_SEND_TASK_PRIORITY, NULL );
/* The CPU is currently running, not sleeping, so turn on the LED that
shows the CPU is not in a sleep mode. */
vParTestSetLED( mainFULL_POWER_LED, pdTRUE );
/* Start the scheduler running running. */
vTaskStartScheduler();
/* If all is well the next line of code will not be reached as the
scheduler will be running. If the next line is reached then it is likely
there was insufficient FreeRTOS heap available for the idle task and/or
timer task to be created. See http://www.freertos.org/a00111.html. */
for( ;; );
}
/*-----------------------------------------------------------*/
static void prvQueueSendTask( void *pvParameters )
{
portTickType xDelay;
const unsigned long ulValueToSend = mainQUEUED_VALUE;
/* Remove compiler warning about unused parameter. */
( void ) pvParameters;
for( ;; )
{
/* The delay period between successive sends to the queue is set by
the potentiometer reading. */
xDelay = ( portTickType ) prvReadPOT();
/* If the block time is greater than 3000 milliseconds then block
indefinitely waiting for a button push. */
if( xDelay > mainSOFTWARE_STANDBY_DELAY )
{
/* As this is an indefinite delay the kernel will place the CPU
into software standby mode the next time the idle task runs. */
xSemaphoreTake( xSemaphore, portMAX_DELAY );
}
else
{
/* Convert a time in milliseconds to a time in ticks. */
xDelay /= portTICK_RATE_MS;
/* Place this task in the blocked state until it is time to run
again. As this is not an indefinite sleep the kernel will place
the CPU into the deep sleep state when the idle task next runs. */
vTaskDelay( xDelay );
}
/* Send to the queue - causing the queue receive task to flash its LED.
It should not be necessary to block on the queue send because the Rx
task will have removed the last queued item. */
xQueueSend( xQueue, &ulValueToSend, mainDONT_BLOCK );
}
}
/*-----------------------------------------------------------*/
static void prvQueueReceiveTask( void *pvParameters )
{
unsigned long ulReceivedValue;
/* Remove compiler warning about unused parameter. */
( void ) pvParameters;
for( ;; )
{
/* Wait until something arrives in the queue - this will block
indefinitely provided INCLUDE_vTaskSuspend is set to 1 in
FreeRTOSConfig.h. */
xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
/* To get here something must have arrived, but is it the expected
value? If it is, toggle the LED. */
if( ulReceivedValue == mainQUEUED_VALUE )
{
vParTestToggleLED( mainQUEUE_LED );
}
}
}
/*-----------------------------------------------------------*/
void vPreSleepProcessing( unsigned long ulExpectedIdleTime )
{
/* Called by the kernel before it places the MCU into a sleep mode because
configPRE_SLEEP_PROCESSING() is #defined to vPreSleepProcessing().
NOTE: Additional actions can be taken here to get the power consumption
even lower. For example, the ADC input used by this demo could be turned
off here, and then back on again in the post sleep processing function.
For maximum power saving ensure all unused pins are in their lowest power
state. */
/* Avoid compiler warnings about the unused parameter. */
( void ) ulExpectedIdleTime;
/* Is the MCU about to enter deep sleep mode or software standby mode? */
if( SYSTEM.SBYCR.BIT.SSBY == 0 )
{
/* Turn on the LED that indicates deep sleep mode is being entered. */
vParTestSetLED( mainDEEP_SLEEP_LED, pdTRUE );
}
else
{
/* Software standby mode is being used, so no LEDs are illuminated to
ensure minimum power readings are obtained. Ensure the Queue LED is
also off. */
vParTestSetLED( mainQUEUE_LED, pdFALSE );
}
/* Turn off the LED that indicates full power is being used. */
vParTestSetLED( mainFULL_POWER_LED, pdFALSE );
}
/*-----------------------------------------------------------*/
void vPostSleepProcessing( unsigned long ulExpectedIdleTime )
{
/* Called by the kernel when the MCU exits a sleep mode because
configPOST_SLEEP_PROCESSING is #defined to vPostSleepProcessing(). */
/* Avoid compiler warnings about the unused parameter. */
( void ) ulExpectedIdleTime;
/* Turn off the LED that indicates deep sleep mode, and turn on the LED
that indicates full power is being used. */
vParTestSetLED( mainDEEP_SLEEP_LED, pdFALSE );
vParTestSetLED( mainFULL_POWER_LED, pdTRUE );
}
/*-----------------------------------------------------------*/
static unsigned short prvReadPOT( void )
{
unsigned short usADCValue;
const unsigned short usMinADCValue = 128;
/* Start an ADC scan. */
S12AD.ADCSR.BIT.ADST = 1;
while( S12AD.ADCSR.BIT.ADST == 1 )
{
/* Just waiting for the ADC scan to complete. Inefficient
polling! */
}
usADCValue = S12AD.ADDR4;
/* Don't let the ADC value get too small as the LED behaviour will look
erratic. */
if( usADCValue < usMinADCValue )
{
usADCValue = usMinADCValue;
}
return usADCValue;
}
/*-----------------------------------------------------------*/
#pragma vector = VECT_ICU_IRQ0, VECT_ICU_IRQ1, VECT_ICU_IRQ4
__interrupt void vButtonInterrupt1( void )
{
long lHigherPriorityTaskWoken = pdFALSE;
/* The semaphore is only created when the build is configured to create the
low power demo. */
if( xSemaphore != NULL )
{
/* This interrupt will bring the CPU out of deep sleep and software
standby modes. Give the semaphore that was used to place the Tx task
into an indefinite sleep. */
if( uxQueueMessagesWaitingFromISR( xSemaphore ) == 0 )
{
xSemaphoreGiveFromISR( xSemaphore, &lHigherPriorityTaskWoken );
}
else
{
/* The semaphore was already available, so the task is not blocked
on it and there is no point giving it. */
}
/* If giving the semaphore caused a task to leave the Blocked state,
and the task that left the Blocked state has a priority equal to or
above the priority of the task that this interrupt interrupted, then
lHigherPriorityTaskWoken will have been set to pdTRUE inside the call
to xSemaphoreGiveFromISR(), and calling portYIELD_FROM_ISR() will cause
a context switch to the unblocked task. */
portYIELD_FROM_ISR( lHigherPriorityTaskWoken );
}
}

View File

@ -0,0 +1,274 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
PUBLIC _vRegTest1Implementation
PUBLIC _vRegTest2Implementation
EXTERN _ulRegTest1CycleCount
EXTERN _ulRegTest2CycleCount
RSEG CODE:CODE(4)
_vRegTest1Implementation:
/* Set each register to a known value. */
MOV.L #0x33333333, R15
MVTACHI R15
MOV.L #0x44444444, R15
MVTACLO R15
MOV.L #1, R1
MOV.L #2, R2
MOV.L #3, R3
MOV.L #4, R4
MOV.L #5, R5
MOV.L #6, R6
MOV.L #7, R7
MOV.L #8, R8
MOV.L #9, R9
MOV.L #10, R10
MOV.L #11, R11
MOV.L #12, R12
MOV.L #13, R13
MOV.L #14, R14
MOV.L #15, R15
/* Loop, checking each iteration that each register still contains the
expected value. */
TestLoop1:
/* Push the registers that are going to get clobbered. */
PUSHM R14-R15
/* Increment the loop counter to show this task is still getting CPU
time. */
MOV.L #_ulRegTest1CycleCount, R14
MOV.L [ R14 ], R15
ADD #1, R15
MOV.L R15, [ R14 ]
/* Yield to extend the text coverage. Set the bit in the ITU SWINTR
register. */
MOV.L #1, R14
MOV.L #0872E0H, R15
MOV.B R14, [R15]
NOP
NOP
/* Check the accumulator value. */
MVFACHI R15
CMP #0x33333333, R15
BNE RegTest2Error
MVFACMI R15
CMP #0x33334444, R15
BNE RegTest2Error
/* Restore the clobbered registers. */
POPM R14-R15
/* Now compare each register to ensure it still contains the value that
was set before this loop was entered. */
CMP #1, R1
BNE RegTest1Error
CMP #2, R2
BNE RegTest1Error
CMP #3, R3
BNE RegTest1Error
CMP #4, R4
BNE RegTest1Error
CMP #5, R5
BNE RegTest1Error
CMP #6, R6
BNE RegTest1Error
CMP #7, R7
BNE RegTest1Error
CMP #8, R8
BNE RegTest1Error
CMP #9, R9
BNE RegTest1Error
CMP #10, R10
BNE RegTest1Error
CMP #11, R11
BNE RegTest1Error
CMP #12, R12
BNE RegTest1Error
CMP #13, R13
BNE RegTest1Error
CMP #14, R14
BNE RegTest1Error
CMP #15, R15
BNE RegTest1Error
/* All comparisons passed, start a new iteration of this loop. */
BRA TestLoop1
/* A compare failed, just loop here so the loop counter stops
incrementing causing the check timer to indicate the error. */
RegTest1Error:
BRA RegTest1Error
/*-----------------------------------------------------------*/
_vRegTest2Implementation:
/* Set each register to a known value. */
MOV.L #0x11111111, R15
MVTACHI R15
MOV.L #0x22222222, R15
MVTACLO R15
MOV.L #100, R1
MOV.L #200, R2
MOV.L #300, R3
MOV.L #400, R4
MOV.L #500, R5
MOV.L #600, R6
MOV.L #700, R7
MOV.L #800, R8
MOV.L #900, R9
MOV.L #1000, R10
MOV.L #1001, R11
MOV.L #1002, R12
MOV.L #1003, R13
MOV.L #1004, R14
MOV.L #1005, R15
/* Loop, checking each iteration that each register still contains the
expected value. */
TestLoop2:
/* Push the registers that are going to get clobbered. */
PUSHM R14-R15
/* Increment the loop counter to show this task is still getting CPU
time. */
MOV.L #_ulRegTest2CycleCount, R14
MOV.L [ R14 ], R15
ADD #1, R15
MOV.L R15, [ R14 ]
/* Check the accumulator value. */
MVFACHI R15
CMP #0x11111111, R15
BNE RegTest2Error
MVFACMI R15
CMP #0x11112222, R15
BNE RegTest2Error
/* Restore the clobbered registers. */
POPM R14-R15
/* Now compare each register to ensure it still contains the value that
was set before this loop was entered. */
CMP #100, R1
BNE RegTest2Error
CMP #200, R2
BNE RegTest2Error
CMP #300, R3
BNE RegTest2Error
CMP #400, R4
BNE RegTest2Error
CMP #500, R5
BNE RegTest2Error
CMP #600, R6
BNE RegTest2Error
CMP #700, R7
BNE RegTest2Error
CMP #800, R8
BNE RegTest2Error
CMP #900, R9
BNE RegTest2Error
CMP #1000, R10
BNE RegTest2Error
CMP #1001, R11
BNE RegTest2Error
CMP #1002, R12
BNE RegTest2Error
CMP #1003, R13
BNE RegTest2Error
CMP #1004, R14
BNE RegTest2Error
CMP #1005, R15
BNE RegTest2Error
/* All comparisons passed, start a new iteration of this loop. */
BRA TestLoop2
/* A compare failed, just loop here so the loop counter stops
incrementing causing the check timer to indicate the error. */
RegTest2Error:
BRA RegTest2Error
/*-----------------------------------------------------------*/
END

View File

@ -0,0 +1,24 @@
@REM This batch file has been generated by the IAR Embedded Workbench
@REM C-SPY Debugger, as an aid to preparing a command line for running
@REM the cspybat command line utility using the appropriate settings.
@REM
@REM Note that this file is generated every time a new debug session
@REM is initialized, so you may want to move or rename the file before
@REM making changes.
@REM
@REM You can launch cspybat by typing the name of this batch file followed
@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
@REM
@REM Read about available command line parameters in the C-SPY Debugging
@REM Guide. Hints about additional command line parameters that may be
@REM useful in specific cases:
@REM --download_only Downloads a code image without starting a debug
@REM session afterwards.
@REM --silent Omits the sign-on message.
@REM --timeout Limits the maximum allowed execution time.
@REM
"C:\devtools\IAR Systems\Embedded Workbench 6.5\common\bin\cspybat" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rx\bin\rxproc.dll" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rx\bin\rxemue20.dll" %1 --plugin "C:\devtools\IAR Systems\Embedded Workbench 6.5\rx\bin\rxbat.dll" --backend -B "-p" "C:\devtools\IAR Systems\Embedded Workbench 6.5\rx\config\debugger\ior5f51115.ddf" "--endian" "l" "--double" "32" "--core" "RX100" "--int" "32" "-d" "emue20" "--drv_mode" "debugging" "--drv_communication" "USB"

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<Project>
<Desktop>
<Static>
<Debug-Log>
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log>
<Build>
<ColumnWidth0>20</ColumnWidth0>
<ColumnWidth1>1216</ColumnWidth1>
<ColumnWidth2>324</ColumnWidth2>
<ColumnWidth3>81</ColumnWidth3>
</Build>
<Workspace>
<ColumnWidths>
<Column0>231</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Disassembly>
<col-names>
<item>Disassembly</item><item>_I0</item></col-names>
<col-widths>
<item>599</item><item>20</item></col-widths>
<DisasmHistory/>
<PreferedWindows>
<Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows>
<ShowCodeCoverage>1</ShowCodeCoverage><ShowInstrProfiling>1</ShowInstrProfiling></Disassembly>
<Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><WATCH_1><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><expressions><item>lErrorStatus</item><item>lChangedTimerPeriodAlready</item><item/></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>200</item><item>150</item><item>100</item><item>62</item></col-widths></WATCH_1></Static>
<Windows>
<Wnd0>
<Tabs>
<Tab>
<Identity>TabID-27185-11031</Identity>
<TabName>Debug Log</TabName>
<Factory>Debug-Log</Factory>
<Session/>
</Tab>
<Tab>
<Identity>TabID-26662-11041</Identity>
<TabName>Build</TabName>
<Factory>Build</Factory>
<Session/>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd0><Wnd1>
<Tabs>
<Tab>
<Identity>TabID-5165-11034</Identity>
<TabName>Workspace</TabName>
<Factory>Workspace</Factory>
<Session>
<NodeDict><ExpandedNode>RTOSDemo_IAR</ExpandedNode><ExpandedNode>RTOSDemo_IAR/FreeRTOS Source</ExpandedNode><ExpandedNode>RTOSDemo_IAR/FreeRTOS Source/portable</ExpandedNode><ExpandedNode>RTOSDemo_IAR/FreeRTOS Source/portable/IAR</ExpandedNode><ExpandedNode>RTOSDemo_IAR/FreeRTOS Source/portable/IAR/RX100</ExpandedNode></NodeDict></Session>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd1></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>104</YPos2><SelStart2>6014</SelStart2><SelEnd2>6014</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>72</YPos2><SelStart2>5237</SelStart2><SelEnd2>5237</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-01349150><key>iaridepm.enu1</key></Toolbar-01349150></Sizes></Row0><Row1><Sizes><Toolbar-05ac2708><key>debuggergui.enu1</key></Toolbar-05ac2708></Sizes></Row1></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>716</Bottom><Right>305</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>182738</sizeVertCX><sizeVertCY>731161</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Project>

View File

@ -0,0 +1,104 @@
[Stack]
FillEnabled=0
OverflowWarningsEnabled=1
WarningThreshold=90
SpWarningsEnabled=1
WarnLogOnly=1
UseTrigger=1
TriggerName=main
LimitSize=0
ByteLimit=50
[DebugChecksum]
Checksum=222757635
[CallStack]
ShowArgs=0
[Disassembly]
MixedMode=1
[InterruptLog]
LogEnabled=0
SumEnabled=0
GraphEnabled=0
ShowTimeLog=1
ShowTimeSum=1
SumSortOrder=0
[DataLog]
LogEnabled=0
SumEnabled=0
GraphEnabled=0
ShowTimeLog=1
ShowTimeSum=1
[Breakpoints2]
Count=0
[Interrupts]
Enabled=1
[MemoryMap]
Enabled=0
Base=0
UseAuto=0
TypeViolation=1
UnspecRange=1
ActionState=1
[E1/E20 Emulator]
BlockBits=15
B0=1,0
B1=1,1024
B2=1,2048
B3=1,3072
StartEnabled=0
StartSymbol=
StopEnabled=0
StopSymbol=
TraceMode=0
TraceOutput=2
TraceCapacity=0
TraceRestart=0
OperatingFrequency=22.000000
PerfEnabled=0
PerfCondition=0,0
PerfDisplayTime=0,0
PerfOnlyOnce=0,0
PerfUse64Bit=0
ChipName=R5F51115
PinMode=0
RegMode=0
Endian=0
ExtMemBlockNum=0
InputClock=22.000000
AllowClkSrcChange=0
WorkRamStart=4096
ComunicationSelect=1
JtagClock=0
FINE=2000000
FlashOvrNum=0
DebugFlags=0,0
EmulatorMode=0
PowerTargetFromEmulator=0
Voltage=0
NeedInit=0
[Log file]
LoggingEnabled=_ 0
LogFile=_ ""
Category=_ 0
[TermIOLog]
LoggingEnabled=_ 0
LogFile=_ ""
[CallStackLog]
Enabled=0
[DriverProfiling]
Enabled=0
Mode=1
Graph=0
Symbiont=0
Exclusions=
[Breakpoints]
Bp0=_ "STD_CODE" "{$PROJ_DIR$\Renesas_Files\r_bsp\board\user\hardware_setup.c}.60.2" 0 0 0 0 "" 0 ""
Count=1
[Monitor Execution]
Leave target running=0
Release target=0
[Aliases]
Count=0
SuppressDialog=0
[Trace1]
Enabled=0
ShowSource=1

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<Workspace>
<ConfigDictionary>
<CurrentConfigs><Project>RTOSDemo_IAR/Debug</Project></CurrentConfigs></ConfigDictionary>
<Desktop>
<Static>
<Workspace>
<ColumnWidths>
<Column0>199</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Build><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1216</ColumnWidth1><ColumnWidth2>324</ColumnWidth2><ColumnWidth3>81</ColumnWidth3></Build><Select-Ambiguous-Definitions><ColumnWidth0>580</ColumnWidth0><ColumnWidth1>82</ColumnWidth1><ColumnWidth2>994</ColumnWidth2></Select-Ambiguous-Definitions><TerminalIO/><Find-in-Files><ColumnWidth0>695</ColumnWidth0><ColumnWidth1>82</ColumnWidth1><ColumnWidth2>994</ColumnWidth2></Find-in-Files></Static>
<Windows>
<Wnd0>
<Tabs>
<Tab>
<Identity>TabID-3933-19799</Identity>
<TabName>Workspace</TabName>
<Factory>Workspace</Factory>
<Session>
<NodeDict><ExpandedNode>RTOSDemo_IAR</ExpandedNode><ExpandedNode>RTOSDemo_IAR/Renesas Files</ExpandedNode></NodeDict></Session>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-4909-11467</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-18506-4030</Identity><TabName>Ambiguous Definitions</TabName><Factory>Select-Ambiguous-Definitions</Factory><Session/></Tab><Tab><Identity>TabID-16773-20028</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>74</YPos2><SelStart2>6014</SelStart2><SelEnd2>6014</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-01349150><key>iaridepm.enu1</key></Toolbar-01349150></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>648</Bottom><Right>273</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>163690</sizeVertCX><sizeVertCY>661914</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>290</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>292</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>297352</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Workspace>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="ASCII"?>
<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore">
<sections name="SU">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>
</sections>
<sections name="SI"/>
<sections name="B_1"/>
<sections name="R_1"/>
<sections name="B_2"/>
<sections name="R_2"/>
<sections name="B"/>
<sections name="R"/>
<sections name="PResetPRG">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294836224"/>
</sections>
<sections name="C_1">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294840320"/>
</sections>
<sections name="C_2"/>
<sections name="C"/>
<sections name="C$*"/>
<sections name="D*"/>
<sections name="W*"/>
<sections name="L"/>
<sections name="PIntPRG">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294860800"/>
</sections>
<sections name="P">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294868992"/>
</sections>
<sections name="FIXEDVECT">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294967248"/>
</sections>
</com.renesas.linkersection.model:SectionContainer>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="ASCII"?>
<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore">
<sections name="SU">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>
</sections>
<sections name="SI"/>
<sections name="B_1"/>
<sections name="R_1"/>
<sections name="B_2"/>
<sections name="R_2"/>
<sections name="B"/>
<sections name="R"/>
<sections name="PResetPRG">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294836224"/>
</sections>
<sections name="C_1">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294840320"/>
</sections>
<sections name="C_2"/>
<sections name="C"/>
<sections name="C$*"/>
<sections name="D*"/>
<sections name="W*"/>
<sections name="L"/>
<sections name="PIntPRG">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294860800"/>
</sections>
<sections name="P">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294868992"/>
</sections>
<sections name="FIXEDVECT">
<sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4294967248"/>
</sections>
</com.renesas.linkersection.model:SectionContainer>

View File

@ -0,0 +1,236 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?>
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189" moduleId="org.eclipse.cdt.core.settings" name="HardwareDebug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="com.renesas.cdt.core.KPITGCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.renesas.cdt.core.KPITVCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.renesas.cdt.core.KPITGASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.renesas.cdt.core.KPITMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.renesas.cdt.core.KPITGLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="mot" artifactName="RTOSDemo_Renesas" buildArtefactType="com.renesas.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=com.renesas.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf *.lst *.lis *.lpp *.map *.x *.lbp src/*.src src/*.p src/*.pp *.bls *.libelf *.lbk *.abs" description="Debug on hardware" errorParsers="com.renesas.cdt.core.KPITMakeErrorParser;com.renesas.cdt.core.KPITGCCErrorParser;com.renesas.cdt.core.KPITGASErrorParser;com.renesas.cdt.core.KPITGLDErrorParser;com.renesas.cdt.core.KPITVCErrorParser" id="com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189" name="HardwareDebug" parent="com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id">
<folderInfo id="com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189." name="/" resourcePath="">
<toolChain id="com.renesas.cdt.rxc.hardwaredebug.win32.toolChain.Id.1936925667" name="Renesas RXC Toolchain" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.toolChain.Id" targetTool="com.renesas.cdt.rxc.debug.win32.tool.convertor.Id">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rxc.hardwaredebug.win32.targetPlatform.Id.1377846111" isAbstract="false" osList="win32" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.targetPlatform.Id"/>
<builder buildPath="${workspace_loc:/BSP111/HardwareDebug}" id="com.renesas.cdt.rxc.hardwaredebug.win32.builder.Id.2044615069" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="SHC Make Builder" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.builder.Id"/>
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.compiler.Id.486948393" name="Compiler" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.compiler.Id">
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.cpuType.982467441" name="CPU type" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.cpuType" value="RX100" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.endian.1621733056" name="Data Endian" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.endian" value="Little-endian data" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.roundTo.915599060" name="Round to" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.roundTo" value="Nearest" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.precisionDouble.786447340" name="Precision of double" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.precisionDouble" value="Single precision" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.signChar.262626578" name="Sign of char" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.signChar" value="unsigned" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.signBitField.564578464" name="Sign of bit field" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.signBitField" value="unsigned" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.allocLowerBit.767627724" name="Allocate from lower bit" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.allocLowerBit" value="Lower bit" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.widthDivergence.1950840170" name="Width of divergence of function" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.widthDivergence" value="24 bit" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.patchCode.12062932" name="Patch code generation" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.patchCode" value="None" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.registerFastInterrupt.936233376" name="Fast interrupt register" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.registerFastInterrupt" value="None" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.ROM.695038388" name="ROM" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.ROM" value="None" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.RAM.1544552703" name="RAM" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.RAM" value="None" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.addressRegister.970641430" name="Address Register" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.addressRegister" value="None" valueType="enumerated"/>
<option id="com.renesas.cdt.renesas.Compiler.option.C.441900014" name="C :" superClass="com.renesas.cdt.renesas.Compiler.option.C" value="com.renesas.cdt.renesas.Compiler.option.C99" valueType="enumerated"/>
<option id="com.renesas.cdt.renesas.Compiler.option.incFileDirectories.1933791951" name="Include file directories" superClass="com.renesas.cdt.renesas.Compiler.option.incFileDirectories" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${INC_RX}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Common_Demo_Tasks/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_bsp/mcu/rx111}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/FreeRTOS_Source/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/FreeRTOS_Source/portable/Renesas/RX100}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_bsp}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_bsp/board/rskrx111}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_switches}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/RTOSDemo/Renesas_Files/r_switches/src}&quot;"/>
</option>
<option id="com.renesas.cdt.renesas.Compiler.option.CPUSeries.322057583" name="Cpu Series" superClass="com.renesas.cdt.renesas.Compiler.option.CPUSeries" value="RX111" valueType="string"/>
<option id="com.renesas.cdt.renesas.Compiler.option.UserDef.1497284878" name="User-defined options" superClass="com.renesas.cdt.renesas.Compiler.option.UserDef" valueType="stringList">
<listOptionValue builtIn="false" value="-nologo"/>
<listOptionValue builtIn="false" value="-change_message=warning"/>
</option>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.cpu.529811854" name="CPU" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.cpu" value="RX111" valueType="string"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.optimizeLevel.1070547061" name="Optimize level" superClass="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.optimizeLevel" value="com.renesas.cdt.rxc.HardwareDebug.Compiler.option.optimizeLevel.0" valueType="enumerated"/>
<inputType id="%Base.Compiler.Shc.C.Input.Id.1298690760" name="C Input" superClass="%Base.Compiler.Shc.C.Input.Id"/>
</tool>
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.assembler.Id.299640407" name="Assembler" outputFlag="-output=" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.assembler.Id">
<option id="com.renesas.cdt.rxc.HardwareDebug.Assembler.option.cpu.371490144" name="CPU" superClass="com.renesas.cdt.rxc.HardwareDebug.Assembler.option.cpu" value="RX100" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Assembler.option.endian.660114428" name="Data Endian" superClass="com.renesas.cdt.rxc.HardwareDebug.Assembler.option.endian" value="Little-endian data" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.Assembler.option.address.869973823" name="Address" superClass="com.renesas.cdt.rxc.HardwareDebug.Assembler.option.address" value="00000000" valueType="string"/>
<option id="com.renesas.cdt.renesas.Assembler.option.userDefine.1248628654" name="User-defined options" superClass="com.renesas.cdt.renesas.Assembler.option.userDefine" valueType="stringList">
<listOptionValue builtIn="false" value="-nologo"/>
<listOptionValue builtIn="false" value=""/>
<listOptionValue builtIn="false" value=""/>
</option>
<inputType id="%Base.Assembler.shcInputType.Id.1801607357" name="Assembler InputType" superClass="%Base.Assembler.shcInputType.Id"/>
</tool>
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.linker.Id.1083452385" name="Linker" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.linker.Id">
<option id="com.renesas.cdt.renesas.Linker.option.userDefined.1041569977" name="User-defined options" superClass="com.renesas.cdt.renesas.Linker.option.userDefined" valueType="stringList">
<listOptionValue builtIn="false" value="-rom=D=R,D_1=R_1,D_2=R_2"/>
<listOptionValue builtIn="false" value="-nomessage"/>
<listOptionValue builtIn="false" value="-nologo"/>
</option>
<option id="com.renesas.cdt.renesas.Linker.option.showVector.1685941890" name="Show vector" superClass="com.renesas.cdt.renesas.Linker.option.showVector" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.renesas.Linker.option.showTotalSectionSize.684296766" name="Show total section size" superClass="com.renesas.cdt.renesas.Linker.option.showTotalSectionSize" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.renesas.Linker.option.showCrossReference.1722254828" name="Show cross-reference" superClass="com.renesas.cdt.renesas.Linker.option.showCrossReference" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.renesas.Linker.option.showReference.912872658" name="Show reference" superClass="com.renesas.cdt.renesas.Linker.option.showReference" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.renesas.Linker.option.showSymbol.382153207" name="Show symbol" superClass="com.renesas.cdt.renesas.Linker.option.showSymbol" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.renesas.Linker.option.enableAll.1808678203" name="Enable all" superClass="com.renesas.cdt.renesas.Linker.option.enableAll" value="true" valueType="boolean"/>
</tool>
<tool command="lbgrx" id="%com.renesas.cdt.rxc.hardwaredebug.win32.tool.libgen.Id.1500253254" name="Standard Library" superClass="%com.renesas.cdt.rxc.hardwaredebug.win32.tool.libgen.Id">
<option id="com.renesas.cdt.rxc.HardwareDebug.StandardLibrary.option.cpu.1800175066" name="CPU" superClass="com.renesas.cdt.rxc.HardwareDebug.StandardLibrary.option.cpu" value="RX100" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.StandardLibrary.option.endian.392081833" name="Data Endian" superClass="com.renesas.cdt.rxc.HardwareDebug.StandardLibrary.option.endian" value="Little-endian data" valueType="enumerated"/>
<option id="com.renesas.cdt.rxc.HardwareDebug.StandardLibrary.option.address.1948593009" name="Address" superClass="com.renesas.cdt.rxc.HardwareDebug.StandardLibrary.option.address" value="00000000" valueType="string"/>
<option id="com.renesas.cdt.renesas.StandardLibrary.option.libConfiguration.1111135642" name="Library configuration" superClass="com.renesas.cdt.renesas.StandardLibrary.option.libConfiguration" value="C99" valueType="enumerated"/>
<option id="com.renesas.cdt.renesas.StandardLibrary.option.mathc89.624663395" name="math.h (C89/C99): Mathematical/trigonometric operations (double-precision)" superClass="com.renesas.cdt.renesas.StandardLibrary.option.mathc89" value="false" valueType="boolean"/>
</tool>
<tool command="optlnk" id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.convertor.Id.340881453" name="Converter" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.convertor.Id"/>
</toolChain>
</folderInfo>
<folderInfo id="com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189.158419194" name="/" resourcePath="RTOSDemo/Renesas_Files/r_switches">
<toolChain id="com.renesas.cdt.rxc.hardwaredebug.win32.toolChain.Id.859624060" name="Renesas RXC Toolchain" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.toolChain.Id" unusedChildren="">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rxc.hardwaredebug.win32.targetPlatform.Id" isAbstract="false" osList="win32" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.targetPlatform.Id"/>
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.compiler.Id.1029821514" name="Compiler" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.compiler.Id.486948393">
<inputType id="%Base.Compiler.Shc.C.Input.Id.43411981" name="C Input" superClass="%Base.Compiler.Shc.C.Input.Id"/>
</tool>
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.assembler.Id.1012693747" name="Assembler" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.assembler.Id.299640407">
<inputType id="%Base.Assembler.shcInputType.Id.314236670" name="Assembler InputType" superClass="%Base.Assembler.shcInputType.Id"/>
</tool>
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.linker.Id.1484775969" name="Linker" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.linker.Id.1083452385"/>
<tool id="%com.renesas.cdt.rxc.hardwaredebug.win32.tool.libgen.Id.1649982231" name="Standard Library" superClass="%com.renesas.cdt.rxc.hardwaredebug.win32.tool.libgen.Id.1500253254"/>
<tool id="com.renesas.cdt.rxc.hardwaredebug.win32.tool.convertor.Id.357794366" name="Converter" superClass="com.renesas.cdt.rxc.hardwaredebug.win32.tool.convertor.Id.340881453"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="RTOSDemo/Renesas_Files/r_sci_multi_ch|RTOSDemo/Renesas_Files/r_delay|RTOSDemo/OriginalDemo.c|r_sci_multi_ch|r_switches|src|r_bsp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<profile id="com.iar.cdt.v850.scanner.IAR_V850_PerProjectProfile">
<buildOutputProvider>
<openAction enabled="false" filePath=""/>
<parser enabled="false"/>
</buildOutputProvider>
<scannerInfoProvider id="com.iar.cdt.v850.toolchain.scannerInfoProvider1">
<runAction arguments="" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="com.iar.cdt.rl78.scanner.IAR_RL78_PerProjectProfile">
<buildOutputProvider>
<openAction enabled="false" filePath=""/>
<parser enabled="false"/>
</buildOutputProvider>
<scannerInfoProvider id="com.iar.cdt.rl78.toolchain.scannerInfoProviderRL78">
<runAction arguments="" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="com.iar.cdt.rx.scanner.IAR_RX_PerProjectProfile">
<buildOutputProvider>
<openAction enabled="false" filePath=""/>
<parser enabled="false"/>
</buildOutputProvider>
<scannerInfoProvider id="com.iar.cdt.rx.toolchain.scannerInfoProviderRX">
<runAction arguments="" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="BSP111.com.renesas.cdt.rxc.projectType.win32.Id.1210290450" name="RenesasRXC" projectType="com.renesas.cdt.rxc.projectType.win32.Id"/>
</storageModule>
</cproject>

View File

@ -0,0 +1,5 @@
TOOL_CHAIN=Renesas RXC Toolchain
VERSION=v1.02.01
TC_INSTALL=C:\Devtools\Renesas\Hew\Tools\Renesas\RX\1_2_1\
VERSION_IDE=3.06.02.080
E2STUDIO_VERSION=1.1.1.7

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>RTOSDemo_Renesas</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.renesas.cdt.core.genmakebuilder</name>
<arguments>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>make</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildLocation</key>
<value>${workspace_loc:/BSP111/HardwareDebug}</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.configurationIds</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>com.renesas.cdt.core.kpitcnature</nature>
<nature>com.renesas.cdt.core.kpitccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,69 @@
#Tue Nov 06 09:14:28 EST 2012
com.renesas.cdt.renesas.Assembler.option.userDefine=-nologo;;;
com.renesas.cdt.renesas.Compiler.option.C=com.renesas.cdt.renesas.Compiler.option.C99
com.renesas.cdt.renesas.Compiler.option.UserDef=-nologo;-change_message\=warning;
com.renesas.cdt.renesas.Compiler.option.incFileDirectories="C\:\\PROGRA~1\\Renesas\\Hew\\Tools\\Renesas\\RX\\1_2_0\\include";
com.renesas.cdt.renesas.Linker.option.userDefined=-rom\=D\=R,D_1\=R_1,D_2\=R_2;-nomessage;-nologo;
com.renesas.cdt.renesas.StandardLibrary.option.complexC99=false
com.renesas.cdt.renesas.StandardLibrary.option.ctypec89=false
com.renesas.cdt.renesas.StandardLibrary.option.fenvC99=false
com.renesas.cdt.renesas.StandardLibrary.option.inttypesC99=false
com.renesas.cdt.renesas.StandardLibrary.option.libConfiguration=C99
com.renesas.cdt.renesas.StandardLibrary.option.mathc89=false
com.renesas.cdt.renesas.StandardLibrary.option.mathfc89=false
com.renesas.cdt.renesas.StandardLibrary.option.runtime=true
com.renesas.cdt.renesas.StandardLibrary.option.rxccomplexCPP=false
com.renesas.cdt.renesas.StandardLibrary.option.rxciosCPP=false
com.renesas.cdt.renesas.StandardLibrary.option.rxcnewCPP=true
com.renesas.cdt.renesas.StandardLibrary.option.rxcstringCPP=false
com.renesas.cdt.renesas.StandardLibrary.option.stdargc89=false
com.renesas.cdt.renesas.StandardLibrary.option.stdioc89=true
com.renesas.cdt.renesas.StandardLibrary.option.stdlibc89=true
com.renesas.cdt.renesas.StandardLibrary.option.stringc89=true
com.renesas.cdt.renesas.StandardLibrary.option.wcharC99=false
com.renesas.cdt.renesas.StandardLibrary.option.wctypeC99=false
com.renesas.cdt.rxc.HardwareDebug.Assembler.option.endian=Little-endian data
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.RAM=None
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.ROM=None
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.address=00000000
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.addressRegister=None
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.allocLowerBit=Lower bit
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.cpuType=RX100
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.denormalized=false
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.endian=Little-endian data
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.enumSize=false
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.packStructures=false
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.patchCode=None
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.precisionDouble=Single precision
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.registerFastInterrupt=None
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.replaceFromIntWithShort=false
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.roundTo=Nearest
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.signBitField=unsigned
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.signChar=unsigned
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.useDynamic=false
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.useTry=false
com.renesas.cdt.rxc.HardwareDebug.Compiler.option.widthDivergence=24 bit
com.renesas.cdt.rxc.HardwareDebug.StandardLibrary.option.endian=Little-endian data
com.renesas.cdt.rxc.Release.Assembler.option.endian=Little-endian data
com.renesas.cdt.rxc.Release.Compiler.option.RAM=None
com.renesas.cdt.rxc.Release.Compiler.option.ROM=None
com.renesas.cdt.rxc.Release.Compiler.option.address=00000000
com.renesas.cdt.rxc.Release.Compiler.option.addressRegister=None
com.renesas.cdt.rxc.Release.Compiler.option.allocLowerBit=Lower bit
com.renesas.cdt.rxc.Release.Compiler.option.cpuType=RX100
com.renesas.cdt.rxc.Release.Compiler.option.denormalized=false
com.renesas.cdt.rxc.Release.Compiler.option.endian=Little-endian data
com.renesas.cdt.rxc.Release.Compiler.option.enumSize=false
com.renesas.cdt.rxc.Release.Compiler.option.packStructures=false
com.renesas.cdt.rxc.Release.Compiler.option.patchCode=None
com.renesas.cdt.rxc.Release.Compiler.option.precisionDouble=Single precision
com.renesas.cdt.rxc.Release.Compiler.option.registerFastInterrupt=None
com.renesas.cdt.rxc.Release.Compiler.option.replaceFromIntWithShort=false
com.renesas.cdt.rxc.Release.Compiler.option.roundTo=Nearest
com.renesas.cdt.rxc.Release.Compiler.option.signBitField=unsigned
com.renesas.cdt.rxc.Release.Compiler.option.signChar=unsigned
com.renesas.cdt.rxc.Release.Compiler.option.useDynamic=false
com.renesas.cdt.rxc.Release.Compiler.option.useTry=false
com.renesas.cdt.rxc.Release.Compiler.option.widthDivergence=24 bit
com.renesas.cdt.rxc.Release.StandardLibrary.option.endian=Little-endian data
eclipse.preferences.version=1

View File

@ -0,0 +1,12 @@
#Fri Nov 09 15:36:42 EST 2012
eclipse.preferences.version=1
environment/buildEnvironmentInclude/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/CPATH/delimiter=;
environment/buildEnvironmentInclude/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/CPATH/operation=remove
environment/buildEnvironmentInclude/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/C_INCLUDE_PATH/delimiter=;
environment/buildEnvironmentInclude/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/C_INCLUDE_PATH/operation=remove
environment/buildEnvironmentInclude/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/append=true
environment/buildEnvironmentInclude/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/appendContributed=true
environment/buildEnvironmentLibrary/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/LIBRARY_PATH/delimiter=;
environment/buildEnvironmentLibrary/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/LIBRARY_PATH/operation=remove
environment/buildEnvironmentLibrary/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/append=true
environment/buildEnvironmentLibrary/com.renesas.cdt.rxc.hardwaredebug.win32.configuration.Id.287456189/appendContributed=true

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.renesas.cdt.launch.dsf.gdbremote.launchConfigurationType">
<intAttribute key="com.renesas.cdt.core.admPortNumber" value="61236"/>
<stringAttribute key="com.renesas.cdt.core.initCommands" value=""/>
<stringAttribute key="com.renesas.cdt.core.ipAddress" value="localhost"/>
<stringAttribute key="com.renesas.cdt.core.jtagDevice" value="E1"/>
<booleanAttribute key="com.renesas.cdt.core.loadImage" value="true"/>
<stringAttribute key="com.renesas.cdt.core.optionInitCommands" value=""/>
<intAttribute key="com.renesas.cdt.core.portNumber" value="61234"/>
<stringAttribute key="com.renesas.cdt.core.runCommands" value=""/>
<stringAttribute key="com.renesas.cdt.core.serverParam" value="-g E1 -l 0 -t R5F51115 -p 61234 -d 61236 -uClockSrcHoco= 0 -uInputClock= 16.0000 -uAllowClockSourceInternal= 1 -uUseFine= 1 -uFineBaudRate= 2.00 -w 0 -z 0 -uRegisterSetting= 0 -uModePin= 0 -uDebugMode= 1 -uExecuteProgram= 0 -uIdCode= FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -n 0 -uWorkRamAddress= 1000 -uProgReWriteIRom= 0 -uProgReWriteDFlash= 0"/>
<booleanAttribute key="com.renesas.cdt.core.setResume" value="true"/>
<booleanAttribute key="com.renesas.cdt.core.setStopAt" value="true"/>
<booleanAttribute key="com.renesas.cdt.core.startServer" value="true"/>
<stringAttribute key="com.renesas.cdt.core.stopAt" value="main"/>
<stringAttribute key="com.renesas.cdt.core.targetDevice" value="R5F51115"/>
<booleanAttribute key="com.renesas.cdt.core.useRemoteTarget" value="true"/>
<booleanAttribute key="com.renesas.cdt.core.verboseMode" value="false"/>
<stringAttribute key="com.renesas.cdt.launch.dsf.IO_MAP" value="${eclipse_home}..\internal\IoFiles\RX\RX111.sfrx"/>
<booleanAttribute key="com.renesas.cdt.launch.dsf.USE_DEFAULT_IO_MAP" value="true"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.allow.clock.source.internal" value="true"/>
<intAttribute key="com.renesas.hardwaredebug.e1.clock_source" value="0"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.connection.mode" value="1"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.e1_pwr" value="false"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.execute.program" value="false"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.external_memory" value=""/>
<stringAttribute key="com.renesas.hardwaredebug.e1.fine.baud.rate" value="2.00"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.flash_overwrite_blocks" value=""/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.hw_break" value="false"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.id_code" value="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.inputclock" value="16.0000"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.jtag.clock.freq" value="16.5"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.jtag.or.fine" value="1"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.le" value="true"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.mode" value="0"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.mode_pin" value="0"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.prog_rewrite_dflash" value="false"/>
<booleanAttribute key="com.renesas.hardwaredebug.e1.prog_rewrite_irom" value="false"/>
<stringAttribute key="com.renesas.hardwaredebug.e1.supply.voltage" value="3.3V"/>
<intAttribute key="com.renesas.hardwaredebug.e1.work_ram_start" value="4096"/>
<booleanAttribute key="com.renesas.hardwaredebug.e20.le" value="true"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.delay" value="3"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.runCommands" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${eclipse_home}../DebugComp/rx-elf-gdb"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="true"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="HardwareDebug\BSP111.x"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="BSP111"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value=""/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/BSP111"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;&#13;&#10;"/>
</launchConfiguration>

View File

@ -0,0 +1,52 @@
REM This file should be executed from the command line prior to the first
REM build. It will be necessary to refresh the Eclipse project once the
REM .bat file has been executed (normally just press F5 to refresh).
REM Copies all the required files from their location within the standard
REM FreeRTOS directory structure to under the Eclipse project directory.
REM This permits the Eclipse project to be used in 'managed' mode and without
REM having to setup any linked resources.
REM Standard paths
SET FREERTOS_SOURCE=..\..\Source
SET COMMON_SOURCE=..\Common\minimal
SET COMMON_INCLUDE=..\Common\include
REM Have the files already been copied?
IF EXIST RTOSDemo\FreeRTOS_Source Goto END
REM Create the required directory structure.
MD RTOSDemo\FreeRTOS_Source
MD RTOSDemo\FreeRTOS_Source\include
MD RTOSDemo\FreeRTOS_Source\portable
MD RTOSDemo\FreeRTOS_Source\portable\MemMang
MD RTOSDemo\FreeRTOS_Source\portable\Renesas
MD RTOSDemo\FreeRTOS_Source\portable\Renesas\RX100
MD RTOSDemo\Common_Demo_Tasks
MD RTOSDemo\Common_Demo_Tasks\include
REM Copy the core kernel files into the project directory
copy %FREERTOS_SOURCE%\tasks.c RTOSDemo\FreeRTOS_Source
copy %FREERTOS_SOURCE%\queue.c RTOSDemo\FreeRTOS_Source
copy %FREERTOS_SOURCE%\list.c RTOSDemo\FreeRTOS_Source
copy %FREERTOS_SOURCE%\timers.c RTOSDemo\FreeRTOS_Source
REM Copy the common header files into the project directory
copy %FREERTOS_SOURCE%\include\*.* RTOSDemo\FreeRTOS_Source\include
REM Copy the portable layer files into the project directory
copy %FREERTOS_SOURCE%\portable\Renesas\RX100\*.* RTOSDemo\FreeRTOS_Source\portable\Renesas\RX100
REM Copy the memory allocation files into the project directory
copy %FREERTOS_SOURCE%\portable\MemMang\heap_4.c RTOSDemo\FreeRTOS_Source\portable\MemMang
REM Copy the files that define the common demo tasks.
copy %COMMON_SOURCE%\death.c RTOSDemo\Common_Demo_Tasks
copy %COMMON_SOURCE%\blocktim.c RTOSDemo\Common_Demo_Tasks
copy %COMMON_SOURCE%\GenQTest.c RTOSDemo\Common_Demo_Tasks
copy %COMMON_SOURCE%\recmutex.c RTOSDemo\Common_Demo_Tasks
REM Copy the common demo file headers.
copy %COMMON_INCLUDE%\*.h RTOSDemo\Common_Demo_Tasks\include
: END

View File

@ -0,0 +1,188 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/*
* The following #error directive is to remind users that a batch file must be
* executed prior to this project being built. The batch file *cannot* be
* executed from within the IDE! Once it has been executed, re-open or refresh
* the Eclipse project and remove the #error line below.
*/
//#error Ensure CreateProjectDirectoryStructure.bat has been executed before building. See comment immediately above.
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
/* Hardware specifics. */
#include "platform.h"
/*-----------------------------------------------------------
* Application specific definitions.
*
* These definitions should be adjusted for your particular hardware and
* application requirements.
*
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
*
* See http://www.freertos.org/a00110.html.
*----------------------------------------------------------*/
/* DEMO SPECIFIC SETTING:
* Set configCREATE_LOW_POWER_DEMO to one to run the low power demo with tick
* suppression, or 0 to run the more comprehensive test and demo application.
* If configCREATE_LOW_POWER_DEMO is set to 1 then main() calls main_low_power().
* If configCREATE_LOW_POWER_DEMO is set to 0 then main() calls main_full().
*/
#define configCREATE_LOW_POWER_DEMO 1
#define configUSE_PREEMPTION 1
#define configUSE_TICKLESS_IDLE configCREATE_LOW_POWER_DEMO
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ( ICLK_HZ ) /* Set in mcu_info.h. */
#define configPERIPHERAL_CLOCK_HZ ( PCLKB_HZ ) /* Set in muc_info.h. */
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 9 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 12 )
#define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
#define configUSE_CO_ROUTINES 0
#define configUSE_MUTEXES 1
#define configGENERATE_RUN_TIME_STATS 0
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configUSE_RECURSIVE_MUTEXES 1
#define configQUEUE_REGISTRY_SIZE 0
#define configUSE_MALLOC_FAILED_HOOK 0
#define configUSE_APPLICATION_TASK_TAG 0
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 7 )
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
/* Software timer definitions - only included when the demo is configured to
build the full demo (as opposed to the low power demo). */
#if configCREATE_LOW_POWER_DEMO == 1
#define configUSE_TIMERS 0
#else
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 3 )
#define configTIMER_QUEUE_LENGTH 5
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE )
#endif /* configCREATE_LOW_POWER_DEMO */
/* The interrupt priority used by the kernel itself for the tick interrupt and
the pended interrupt. This would normally be the lowest priority. */
#define configKERNEL_INTERRUPT_PRIORITY 1
/* The maximum interrupt priority from which FreeRTOS API calls can be made.
Interrupts that use a priority above this will not be effected by anything the
kernel is doing. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_uxTaskGetStackHighWaterMark 1
#define INCLUDE_xTaskGetSchedulerState 1
extern void vAssertCalled( void );
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled();
/* The configPRE_SLEEP_PROCESSING() and configPOST_SLEEP_PROCESSING() macros
allow the application writer to add additional code before and after the MCU is
placed into the low power state respectively. The implementations provided in
this demo can be extended to save even more power - for example the analog
input used by the low power demo could be switched off in the pre-sleep macro
and back on again in the post sleep macro. */
void vPreSleepProcessing( unsigned long xExpectedIdleTime );
void vPostSleepProcessing( unsigned long xExpectedIdleTime );
#define configPRE_SLEEP_PROCESSING( xExpectedIdleTime ) vPreSleepProcessing( xExpectedIdleTime );
#define configPOST_SLEEP_PROCESSING( xExpectedIdleTime ) vPostSleepProcessing( xExpectedIdleTime );
/* configTICK_VECTOR must be set to the interrupt vector used by the peripheral
that generates the tick interrupt. */
#define configTICK_VECTOR VECT_CMT0_CMI0
#endif /* FREERTOS_CONFIG_H */

View File

@ -0,0 +1,200 @@
/*
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS tutorial books are available in pdf and paperback. *
* Complete, revised, and edited pdf reference manuals are also *
* available. *
* *
* Purchasing FreeRTOS documentation will not only help you, by *
* ensuring you get running as quickly as possible and with an *
* in-depth knowledge of how to use FreeRTOS, it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade, cross platform, de facto standard solutions *
* for microcontrollers - completely free of charge! *
* *
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS, and thank you for your support! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
viewed here: http://www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd., contact details for whom are available
on the FreeRTOS WEB site.
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, and our new
fully thread aware and reentrant UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems, who sell the code with commercial support,
indemnification and middleware, under the OpenRTOS brand.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
*/
/*-----------------------------------------------------------
* Simple IO routines to control the LEDs.
*-----------------------------------------------------------*/
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
/* Demo includes. */
#include "partest.h"
#define partestNUM_LEDS ( 4 )
long lParTestGetLEDState( unsigned long ulLED );
/*-----------------------------------------------------------*/
void vParTestInitialise( void )
{
/* Port pin configuration is done by the low level set up prior to this
function being called. */
}
/*-----------------------------------------------------------*/
void vParTestSetLED( unsigned long ulLED, signed long xValue )
{
if( ulLED < partestNUM_LEDS )
{
if( xValue != 0 )
{
/* Turn the LED on. */
taskENTER_CRITICAL();
{
switch( ulLED )
{
case 0: LED0 = LED_ON;
break;
case 1: LED1 = LED_ON;
break;
case 2: LED2 = LED_ON;
break;
case 3: LED3 = LED_ON;
break;
}
}
taskEXIT_CRITICAL();
}
else
{
/* Turn the LED off. */
taskENTER_CRITICAL();
{
switch( ulLED )
{
case 0: LED0 = LED_OFF;
break;
case 1: LED1 = LED_OFF;
break;
case 2: LED2 = LED_OFF;
break;
case 3: LED3 = LED_OFF;
break;
}
}
taskEXIT_CRITICAL();
}
}
}
/*-----------------------------------------------------------*/
void vParTestToggleLED( unsigned long ulLED )
{
if( ulLED < partestNUM_LEDS )
{
taskENTER_CRITICAL();
{
if( lParTestGetLEDState( ulLED ) != 0x00 )
{
vParTestSetLED( ulLED, 0 );
}
else
{
vParTestSetLED( ulLED, 1 );
}
}
taskEXIT_CRITICAL();
}
}
/*-----------------------------------------------------------*/
long lParTestGetLEDState( unsigned long ulLED )
{
long lReturn = pdTRUE;
if( ulLED < partestNUM_LEDS )
{
switch( ulLED )
{
case 0 : if( LED0 != 0 )
{
lReturn = pdFALSE;
}
break;
case 1 : if( LED1 != 0 )
{
lReturn = pdFALSE;
}
break;
case 2 : if( LED2 != 0 )
{
lReturn = pdFALSE;
}
break;
case 3 : if( LED3 != 0 )
{
lReturn = pdFALSE;
}
break;
}
}
return lReturn;
}
/*-----------------------------------------------------------*/

View File

@ -0,0 +1,83 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : dbsct.c
* Device(s) : RX
* Description : Defines the structure of the ROM and RAM areas.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 26.10.2011 1.00 First Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Defines type structures used in this file */
#include <stdint.h>
/* Preprocessor directive */
#pragma unpack
/* Section start */
#pragma section C C$DSEC
/* MCU ROM and RAM structure definition */
extern const struct {
uint8_t *rom_s; /* Start address of the initialized data section in ROM */
uint8_t *rom_e; /* End address of the initialized data section in ROM */
uint8_t *ram_s; /* Start address of the initialized data section in RAM */
} _DTBL[] = {
{ __sectop("D"), __secend("D"), __sectop("R") },
{ __sectop("D_2"), __secend("D_2"), __sectop("R_2") },
{ __sectop("D_1"), __secend("D_1"), __sectop("R_1") }
};
/* Section start */
#pragma section C C$BSEC
/* MCU ROM and RAM structure definition */
extern const struct {
uint8_t *b_s; /* Start address of non-initialized data section */
uint8_t *b_e; /* End address of non-initialized data section */
} _BTBL[] = {
{ __sectop("B"), __secend("B") },
{ __sectop("B_2"), __secend("B_2") },
{ __sectop("B_1"), __secend("B_1") }
};
/* Section start */
#pragma section
/* CTBL prevents excessive output of L1100 messages when linking.
Even if CTBL is deleted, the operation of the program does not change. */
uint8_t * const _CTBL[] = {
__sectop("C_1"), __sectop("C_2"), __sectop("C"),
__sectop("W_1"), __sectop("W_2"), __sectop("W")
};
/* Preprocessor directive */
#pragma packoption
/* This is to ensure compatibility with new L section in version 1.1 and up of the RXC compiler. Do not remove! */
#pragma section C L
const unsigned long deadSpace = 0xDEADDEAD;
#pragma section

View File

@ -0,0 +1,149 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : hwsetup.c
* Device(s) : RX
* H/W Platform : RSKRX210
* Description : Defines the initialization routines used each time the MCU is restarted.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* I/O Register and board definitions */
#include "platform.h"
/* Contains delcarations for the functions defined in this file */
#include "hwsetup.h"
#include "r_switches_config.h"
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
/* MCU I/O port configuration function delcaration */
static void output_ports_configure(void);
/* Interrupt configuration function delcaration */
static void interrupts_configure(void);
/* MCU peripheral module configuration function declaration */
static void peripheral_modules_enable(void);
/***********************************************************************************************************************
* Function name: hardware_setup
* Description : Contains setup functions called at device restart
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void hardware_setup(void)
{
output_ports_configure();
interrupts_configure();
peripheral_modules_enable();
}
/***********************************************************************************************************************
* Function name: output_ports_configure
* Description : Configures the port and pin direction settings, and sets the pin outputs to a safe level.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void output_ports_configure(void)
{
/* Enable LEDs. */
/* Start with LEDs off. */
LED0 = LED_OFF;
LED1 = LED_OFF;
LED2 = LED_OFF;
LED3 = LED_OFF;
/* Set LED pins as outputs. */
LED0_PDR = 1;
LED1_PDR = 1;
LED2_PDR = 1;
LED3_PDR = 1;
/* Enable switches. */
/* Set pins as inputs. */
SW1_PDR = 0;
SW2_PDR = 0;
SW3_PDR = 0;
/* Set port mode registers for switches. */
SW1_PMR = 0;
SW2_PMR = 0;
SW3_PMR = 0;
/* Unlock MPC registers to enable writing to them. */
MPC.PWPR.BIT.B0WI = 0 ; /* Unlock protection register */
MPC.PWPR.BIT.PFSWE = 1 ; /* Unlock MPC registers */
/* TXD1 is output. */
PORT1.PDR.BIT.B6 = 1;
PORT1.PMR.BIT.B6 = 1;
MPC.P16PFS.BYTE = 0x0A;
/* RXD1 is input. */
PORT1.PDR.BIT.B5 = 0;
PORT1.PMR.BIT.B5 = 1;
MPC.P15PFS.BYTE = 0x0A;
/* Configure the pin connected to the ADC Pot as an input */
PORT4.PDR.BIT.B4 = 0;
/* Protect off. */
SYSTEM.PRCR.WORD = 0xA50B;
/* Turn off module stop for the A2D converter. */
SYSTEM.MSTPCRA.BIT.MSTPA17 = 0;
/* Protect on. */
SYSTEM.PRCR.WORD = 0xA500;
/* Initialise the first button to generate an interrupt. */
R_SWITCHES_Init();
}
/***********************************************************************************************************************
* Function name: interrupts_configure
* Description : Configures interrupts used
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void interrupts_configure(void)
{
/* Add code here to setup additional interrupts */
}
/***********************************************************************************************************************
* Function name: peripheral_modules_enable
* Description : Enables and configures peripheral devices on the MCU
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void peripheral_modules_enable(void)
{
/* Enable triggers to start an ADC conversion. */
S12AD.ADCSR.BIT.TRGE = 1;
/* Only channel 4 is going to be used. */
S12AD.ADANSA.BIT.ANSA4 = 1;
}

View File

@ -0,0 +1,42 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : hwsetup.h
* Description : Hardware setup header file.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 26.10.2011 1.00 First Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* Multiple inclusion prevention macro */
#ifndef HWSETUP_H
#define HWSETUP_H
/***********************************************************************************************************************
Exported global functions (to be accessed by other files)
***********************************************************************************************************************/
/* Hardware setup funtion declaration */
void hardware_setup(void);
/* End of multiple inclusion prevention macro */
#endif

View File

@ -0,0 +1,254 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lcd.c
* Device(s) : RX
* H/W Platform : RSKRX111
* Description : Provides variable and function declarations for lcd.c file
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Processor-specific details */
#include <machine.h>
/* Standard string manipulation & formatting functions */
#include <stdio.h>
#include <string.h>
/* Defines standard variable types used in this function */
#include <stdint.h>
/* Bring in board includes. */
#include "platform.h"
/* Following header file provides function prototypes for LCD controlling functions & macro defines */
#include "lcd.h"
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
static void lcd_delay(volatile int32_t nsecs);
static void lcd_nibble_write(uint8_t data_or_ctrl, uint8_t value);
static void lcd_write(uint8_t data_or_ctrl, uint8_t value);
/***********************************************************************************************************************
* Function name : lcd_initialize
* Description : Initializes the LCD display.
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void lcd_initialize(void)
{
/* Set LCD data pins as outputs. */
PORT4.PDR.BYTE |= 0x0F;
/* Set LCD control pins as outputs. */
RS_PIN_DDR = 1;
E_PIN_DDR = 1;
/* Power Up Delay for the LCD Module */
lcd_delay(50000000);
/* Display initialises in 8 bit mode - so send one write (seen as 8 bit) to set to 4 bit mode. */
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
/* Function Set */
lcd_nibble_write(CTRL_WR, 0x02);
lcd_delay(39000);
lcd_nibble_write(CTRL_WR, 0x02);
lcd_nibble_write(CTRL_WR, (LCD_DISPLAY_ON | LCD_TWO_LINE ));
lcd_delay(39000);
/* Display ON/OFF control */
lcd_write(CTRL_WR, LCD_CURSOR_OFF);
lcd_delay(39000);
/* Display Clear */
lcd_write(CTRL_WR, LCD_CLEAR);
lcd_delay(2000000);
/* Entry Mode Set */
lcd_write(CTRL_WR, 0x06);
lcd_delay(39000);
/* Home the cursor */
lcd_write(CTRL_WR, LCD_HOME_L1);
lcd_delay(5000000);
}
/***********************************************************************************************************************
* Function name : lcd_clear
* Description : Clears the LCD
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void lcd_clear(void)
{
/* Display Clear */
lcd_write(CTRL_WR, LCD_CLEAR);
lcd_delay(2000000);
}
/***********************************************************************************************************************
* Function name : lcd_display
* Description : This function controls LCD writes to line 1 or 2 of the LCD.
* You need to use the defines LCD_LINE1 and LCD_LINE2 in order to specify the starting position.
* For example, to start at the 2nd position on line 1...
* lcd_display(LCD_LINE1 + 1, "Hello")
* Arguments : position -
* Line number of display
* string -
* Pointer to null terminated string
* Return Value : none
***********************************************************************************************************************/
void lcd_display(uint8_t position, uint8_t const * string)
{
/* Declare next position variable */
static uint8_t next_pos = 0xFF;
/* Set line position if needed. We don't want to if we don't need to because LCD control operations take longer
than LCD data operations. */
if (next_pos != position)
{
if(position < LCD_LINE2)
{
/* Display on Line 1 */
lcd_write(CTRL_WR, ((uint8_t)(LCD_HOME_L1 + position)));
}
else
{
/* Display on Line 2 */
lcd_write(CTRL_WR, ((uint8_t)((LCD_HOME_L2 + position) - LCD_LINE2)));
}
lcd_delay(39000);
/* set position index to known value */
next_pos = position;
}
do
{
/* Write character to LCD. */
lcd_write(DATA_WR,*string++);
lcd_delay(43000);
/* Increment position index */
next_pos++;
}
while(*string);
}
/***********************************************************************************************************************
* Function name : lcd_delay
* Description : Implements LCD required delays.
* Arguments : nsecs -
* Number of nanoseconds to delay. RX111 has max clock of 32MHz which gives a cycle time of 31.3ns.
* This means that nothing under 313ns should be input. 313ns would be 10 cycles which is still
* being optimistic for getting in and out of this function.
* Return Value : none
***********************************************************************************************************************/
static void lcd_delay(volatile int32_t nsecs)
{
while (0 < nsecs)
{
/* Subtract off 10 cycles per iteration. This number was obtained when using the Renesas toolchain at
optimization level 2. The number to nanoseconds to subtract off below is calculated off of the ICLK speed. */
nsecs -= (int32_t)((313.0)*(32000000.0/(float)ICLK_HZ));
}
}
/***********************************************************************************************************************
* Function name : lcd_nibble_write
* Description : Writes data to display. Sends command to display.
* Arguments : value -
* The value to write
* data_or_ctrl -
* Whether to write data or control.
* 1 = DATA
* 0 = CONTROL
* Return Value : none
***********************************************************************************************************************/
static void lcd_nibble_write(uint8_t data_or_ctrl, uint8_t value)
{
/* Set Register Select pin high for Data */
if (data_or_ctrl == DATA_WR)
{
/* Data write. */
RS_PIN = 1;
}
else
{
/* Control write. */
RS_PIN = 0;
}
/* tsu1 delay */
lcd_delay(60);
/* EN enable chip (HIGH) */
E_PIN = 1;
/* Output the data */
PORT4.PODR.BYTE = (value & 0x0F);
/* tw delay */
lcd_delay(450);
/* Latch data by dropping E */
E_PIN = 0;
/* th2 delay */
lcd_delay(10);
/* tc delay */
lcd_delay(480);
}
/***********************************************************************************************************************
* Function name : lcd_write
* Description : This function controls LCD writes to line 1 or 2 of the LCD. You need to use the defines LCD_LINE1 and
* LCD_LINE2 in order to specify the starting position.
* For example, to start at the 2nd position on line 1...
* lcd_display(LCD_LINE1 + 1, "Hello")
* Arguments : value -
* The value to write
* data_or_ctrl -
* Whether to write data or control.
* 1 = DATA
* 0 = CONTROL
* Return Value : none
***********************************************************************************************************************/
static void lcd_write(uint8_t data_or_ctrl, uint8_t value)
{
/* Write upper nibble first */
lcd_nibble_write(data_or_ctrl, (uint8_t)((value & 0xF0) >> 4));
/* Write lower nibble second */
lcd_nibble_write(data_or_ctrl, (uint8_t)(value & 0x0F));
}

View File

@ -0,0 +1,101 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lcd.h
* Device(s) : RX
* H/W Platform : RSKRX111
* Description : Provides variable and function declarations for lcd.c file
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/* Multiple inclusion prevention macro */
#ifndef LCD_H
#define LCD_H
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Defines standard integer variable types used in this file */
#include <stdint.h>
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* RS register select pin */
#define RS_PIN PORTC.PODR.BIT.B5
#define RS_PIN_DDR PORTC.PDR.BIT.B5
/* Display enable pin */
#define E_PIN PORTB.PODR.BIT.B1
#define E_PIN_DDR PORTB.PDR.BIT.B1
/* Data write/read definition */
#define DATA_WR 1
/* Control write/read definition */
#define CTRL_WR 0
/* Maximum characters per line of LCD display. */
#define NUMB_CHARS_PER_LINE 8
/* Number of lines on the LCD display */
#define MAXIMUM_LINES 2
/* Character position of LCD line 1 */
#define LCD_LINE1 0
/* Character position of LCD line 2 */
#define LCD_LINE2 16
/* Clear LCD display and home cursor */
#define LCD_CLEAR 0x01
/* Move cursor to line 1 */
#define LCD_HOME_L1 0x80
/* Move cursor to line 2 */
#define LCD_HOME_L2 0xC0
/* Cursor auto decrement after R/W */
#define CURSOR_MODE_DEC 0x04
/* Cursor auto increment after R/W */
#define CURSOR_MODE_INC 0x06
/* Setup, 4 bits,2 lines, 5X7 */
#define FUNCTION_SET 0x28
/* Display ON with Cursor */
#define LCD_CURSOR_ON 0x0E
/* Display ON with Cursor off */
#define LCD_CURSOR_OFF 0x0C
/* Display on with blinking cursor */
#define LCD_CURSOR_BLINK 0x0D
/* Move Cursor Left One Position */
#define LCD_CURSOR_LEFT 0x10
/* Move Cursor Right One Position */
#define LCD_CURSOR_RIGHT 0x14
/* Enable LCD display */
#define LCD_DISPLAY_ON 0x04
/* Enable both LCD lines */
#define LCD_TWO_LINE 0x08
/***********************************************************************************************************************
Exported global functions (to be accessed by other files)
***********************************************************************************************************************/
/* LCD initialisation function declaration */
void lcd_initialize (void);
/* Update display function declaration */
void lcd_display(uint8_t position, uint8_t const * string);
/* Clear LCD function delcaration */
void lcd_clear (void);
/* End of multiple inclusion prevention macro */
#endif

View File

@ -0,0 +1,118 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : locking.c
* Description : This implements a locking mechanism that can be used by all code. The locking is done atomically so
* common resources can be accessed safely.
***********************************************************************************************************************/
/**********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.03.2012 1.00 First Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Fixed-size integer typedefs. */
#include <stdint.h>
/* bool support. */
#include <stdbool.h>
/* Has intrinsic support. Includes xchg() which is used in this code. */
#include <machine.h>
/* Includes board and MCU related header files. */
#include "platform.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/***********************************************************************************************************************
Typedef definitions
***********************************************************************************************************************/
/***********************************************************************************************************************
Exported global variables (to be accessed by other files)
***********************************************************************************************************************/
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
/***********************************************************************************************************************
* Function Name: R_BSP_Lock
* Description : Attempt to acquire the lock that has been sent in.
* Arguments : plock -
* Pointer to lock structure with lock to try and acquire.
* Return Value : true -
* Lock was acquired.
* false -
* Lock was not acquired.
***********************************************************************************************************************/
bool R_BSP_Lock(bsp_lock_t * plock)
{
bool ret = false;
/* Variable used in trying to acquire lock. Using the xchg instruction makes this atomic */
int32_t is_locked = true;
/* This example uses the RX MCU's atomic xchg() instruction. plock->lock is the lock we are trying to reserve.
The way this works is that 'is_locked' gets the value of the plock->lock and plock->lock gets the value of
'is_locked' which we just set to 'true'. Basically this is an atomic 'swap' command. If the lock had not yet been
reserved then its value would be 'false' and after the xchg() instruction finished 'is_locked' would have
'false'. If it had already been reserved then 'is_locked' would have 'true' after the xchg() instruction. Since
plock->lock was already 'true' and we just set it back to 'true' everything is ok. To see if we reserved the lock
we just need to check the value of 'is_locked' after this instruction finishes. */
/* Try to acquire semaphore to obtain lock */
xchg(&is_locked, &plock->lock);
/* Check to see if semaphore was successfully taken */
if (is_locked == false)
{
/* Lock obtained, return success. */
ret = true;
}
else
{
/* Lock was not obtained, another task already has it. */
}
return ret;
} /* End of function R_BSP_Lock() */
/***********************************************************************************************************************
* Function Name: R_BSP_Unlock
* Description : Release hold on lock.
* Arguments : plock -
* Pointer to lock structure with lock to release.
* Return Value : true -
* Lock was released.
* false -
* Lock was not released.
***********************************************************************************************************************/
bool R_BSP_Unlock(bsp_lock_t * plock)
{
/* Set lock back to unlocked. */
plock->lock = false;
return true;
} /* End of function R_BSP_Unlock() */

View File

@ -0,0 +1,63 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : locking.h
* Description : This implements a locking mechanism that can be used by all code. The locking is done atomically so
* common resources can be accessed safely.
***********************************************************************************************************************/
/**********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.03.2012 1.00 First Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Fixed-size integer typedefs. */
#include <stdint.h>
/* bool support. */
#include <stdbool.h>
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/***********************************************************************************************************************
Typedef definitions
***********************************************************************************************************************/
typedef struct
{
/* The actual lock. int32_t is used because this is what the xchg() instruction takes as parameters. */
int32_t lock;
/* Could add a ID for locking and unlocking. In this could protect against any function being able to unlock. */
} bsp_lock_t;
/***********************************************************************************************************************
Exported global variables
***********************************************************************************************************************/
/***********************************************************************************************************************
Exported global functions (to be accessed by other files)
***********************************************************************************************************************/
bool R_BSP_Lock(bsp_lock_t * plock);
bool R_BSP_Unlock(bsp_lock_t * plock);

View File

@ -0,0 +1,54 @@
;-----------------------------------------------------------------------
;
; FILE :lowlvl.src
; DATE :Wed, Jul 01, 2009
; DESCRIPTION :Program of Low level
; CPU TYPE :RX
;
;-----------------------------------------------------------------------
.GLB _charput
.GLB _charget
FC2E0 .EQU 00084080h
FE2C0 .EQU 00084090h
DBGSTAT .EQU 000840C0h
RXFL0EN .EQU 00001000h
TXFL0EN .EQU 00000100h
.SECTION P,CODE
;-----------------------------------------------------------------------
; _charput:
;-----------------------------------------------------------------------
_charput:
.STACK _charput = 00000000h
__C2ESTART: MOV.L #TXFL0EN,R3
MOV.L #DBGSTAT,R4
__TXLOOP: MOV.L [R4],R5
AND R3,R5
BNZ __TXLOOP
__WRITEFC2E0: MOV.L #FC2E0,R2
MOV.L R1,[R2]
__CHARPUTEXIT: RTS
;-----------------------------------------------------------------------
; _charget:
;-----------------------------------------------------------------------
_charget:
.STACK _charget = 00000000h
__E2CSTART: MOV.L #RXFL0EN,R3
MOV.L #DBGSTAT,R4
__RXLOOP: MOV.L [R4],R5
AND R3,R5
BZ __RXLOOP
__READFE2C0: MOV.L #FE2C0,R2
MOV.L [R2],R1
__CHARGETEXIT: RTS
;-----------------------------------------------------------------------
; End of conditional code
.END

View File

@ -0,0 +1,332 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lowsrc.c
* Description : Functions to support stream I/O
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 26.10.2011 1.00 First Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
#include <string.h>
#include <stdio.h>
#include <stddef.h>
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/*Number of I/O Stream*/
#define IOSTREAM 20
/* file number */
#define STDIN 0 /* Standard input (console) */
#define STDOUT 1 /* Standard output (console) */
#define STDERR 2 /* Standard error output (console) */
#define FLMIN 0 /* Minimum file number */
#define _MOPENR 0x1
#define _MOPENW 0x2
#define _MOPENA 0x4
#define _MTRUNC 0x8
#define _MCREAT 0x10
#define _MBIN 0x20
#define _MEXCL 0x40
#define _MALBUF 0x40
#define _MALFIL 0x80
#define _MEOF 0x100
#define _MERR 0x200
#define _MLBF 0x400
#define _MNBF 0x800
#define _MREAD 0x1000
#define _MWRITE 0x2000
#define _MBYTE 0x4000
#define _MWIDE 0x8000
/* File Flags */
#define O_RDONLY 0x0001 /* Read only */
#define O_WRONLY 0x0002 /* Write only */
#define O_RDWR 0x0004 /* Both read and Write */
#define O_CREAT 0x0008 /* A file is created if it is not existed */
#define O_TRUNC 0x0010 /* The file size is changed to 0 if it is existed. */
#define O_APPEND 0x0020 /* The position is set for next reading/writing */
/* 0: Top of the file 1: End of file */
/* Special character code */
#define CR 0x0d /* Carriage return */
#define LF 0x0a /* Line feed */
#if defined( __RX )
const long _nfiles = IOSTREAM; /* The number of files for input/output files */
#else
const int _nfiles = IOSTREAM; /* The number of files for input/output files */
#endif
char flmod[IOSTREAM]; /* The location for the mode of opened file. */
unsigned char sml_buf[IOSTREAM];
#define FPATH_STDIN "C:\\stdin"
#define FPATH_STDOUT "C:\\stdout"
#define FPATH_STDERR "C:\\stderr"
/* H8 Normal mode ,SH and RX */
#if defined( __2000N__ ) || defined( __2600N__ ) || defined( __300HN__ ) || defined( _SH )
/* Output one character to standard output */
extern void charput(char);
/* Input one character from standard input */
extern char charget(void);
/* Output one character to the file */
extern char fcharput(char, unsigned char);
/* Input one character from the file */
extern char fcharget(char*, unsigned char);
/* Open the file */
extern char fileopen(char*, unsigned char, unsigned char*);
/* Close the file */
extern char fileclose(unsigned char);
/* Move the file offset */
extern char fpseek(unsigned char, long, unsigned char);
/* Get the file offset */
extern char fptell(unsigned char, long*);
/* RX */
#elif defined( __RX )
/* Output one character to standard output */
extern void charput(unsigned char);
/* Input one character from standard input */
extern unsigned char charget(void);
/* H8 Advanced mode */
#elif defined( __2000A__ ) || defined( __2600A__ ) || defined( __300HA__ ) || defined( __H8SXN__ ) || defined( __H8SXA__ ) || defined( __H8SXM__ ) || defined( __H8SXX__ )
/* Output one character to standard output */
extern void charput(char);
/* Input one character from standard input */
extern char charget(void);
/* Output one character to the file */
extern char fcharput(char, unsigned char);
/* Input one character from the file */
extern char fcharget(char*, unsigned char);
/* Open the file */
/* Specified as the number of register which stored paramter is 3 */
extern char __regparam3 fileopen(char*, unsigned char, unsigned char*);
/* Close the file */
extern char fileclose(unsigned char);
/* Move the file offset */
extern char fpseek(unsigned char, long, unsigned char);
/* Get the file offset */
extern char fptell(unsigned char, long*);
/* H8300 and H8300L */
#elif defined( __300__ ) || defined( __300L__ )
/* Output one character to standard output */
extern void charput(char);
/* Input one character from standard input */
extern char charget(void);
/* Output one character to the file */
extern char fcharput(char, unsigned char);
/* Input one character from the file */
extern char fcharget(char*, unsigned char);
/* Open the file */
/* Specified as the number of register which stored paramter is 3 */
extern char __regparam3 fileopen(char*, unsigned char, unsigned char*);
/* Close the file */
extern char fileclose(unsigned char);
/* Move the file offset */
/* Move the file offset */
extern char __regparam3 fpseek(unsigned char, long, unsigned char);
/* Get the file offset */
extern char fptell(unsigned char, long*);
#endif
#include <stdio.h>
FILE *_Files[IOSTREAM]; // structure for FILE
char *env_list[] = { // Array for environment variables(**environ)
"ENV1=temp01",
"ENV2=temp02",
"ENV9=end",
'\0' // Terminal for environment variables
};
char **environ = env_list;
/****************************************************************************/
/* _INIT_IOLIB */
/* Initialize C library Functions, if necessary. */
/* Define USES_SIMIO on Assembler Option. */
/****************************************************************************/
void _INIT_IOLIB( void )
{
/* A file for standard input/output is opened or created. Each FILE */
/* structure members are initialized by the library. Each _Buf member */
/* in it is re-set the end of buffer pointer. */
/* Standard Input File */
if( freopen( FPATH_STDIN, "r", stdin ) == NULL )
stdin->_Mode = 0xffff; /* Not allow the access if it fails to open */
stdin->_Mode = _MOPENR; /* Read only attribute */
stdin->_Mode |= _MNBF; /* Non-buffering for data */
stdin->_Bend = stdin->_Buf + 1; /* Re-set pointer to the end of buffer */
/* Standard Output File */
if( freopen( FPATH_STDOUT, "w", stdout ) == NULL )
stdout->_Mode = 0xffff; /* Not allow the access if it fails to open */
stdout->_Mode |= _MNBF; /* Non-buffering for data */
stdout->_Bend = stdout->_Buf + 1;/* Re-set pointer to the end of buffer */
/* Standard Error File */
if( freopen( FPATH_STDERR, "w", stderr ) == NULL )
stderr->_Mode = 0xffff; /* Not allow the access if it fails to open */
stderr->_Mode |= _MNBF; /* Non-buffering for data */
stderr->_Bend = stderr->_Buf + 1;/* Re-set pointer to the end of buffer */
}
/****************************************************************************/
/* _CLOSEALL */
/****************************************************************************/
void _CLOSEALL( void )
{
long i;
for( i=0; i < _nfiles; i++ )
{
/* Checks if the file is opened or not */
if( _Files[i]->_Mode & (_MOPENR | _MOPENW | _MOPENA ) )
fclose( _Files[i] ); /* Closes the file */
}
}
/**************************************************************************/
/* open:file open */
/* Return value:File number (Pass) */
/* -1 (Failure) */
/**************************************************************************/
#if defined( __RX )
long open(const char *name, /* File name */
long mode, /* Open mode */
long flg) /* Open flag */
#else
int open(char *name, /* File name */
int mode, /* Open mode */
int flg) /* Open flag */
#endif
{
if( strcmp( name, FPATH_STDIN ) == 0 ) /* Standard Input file? */
{
if( ( mode & O_RDONLY ) == 0 ) return -1;
flmod[STDIN] = mode;
return STDIN;
}
else if( strcmp( name, FPATH_STDOUT ) == 0 )/* Standard Output file? */
{
if( ( mode & O_WRONLY ) == 0 ) return -1;
flmod[STDOUT] = mode;
return STDOUT;
}
else if(strcmp(name, FPATH_STDERR ) == 0 ) /* Standard Error file? */
{
if( ( mode & O_WRONLY ) == 0 ) return -1;
flmod[STDERR] = mode;
return STDERR;
}
else return -1; /*Others */
}
#if defined( __RX )
long close( long fileno )
#else
int close( int fileno )
#endif
{
return 1;
}
/**************************************************************************/
/* write:Data write */
/* Return value:Number of write characters (Pass) */
/* -1 (Failure) */
/**************************************************************************/
#if defined( __RX )
long write(long fileno, /* File number */
const unsigned char *buf, /* The address of destination buffer */
long count) /* The number of chacter to write */
#else
int write(int fileno, /* File number */
char *buf, /* The address of destination buffer */
int count) /* The number of chacter to write */
#endif
{
long i; /* A variable for counter */
unsigned char c; /* An output character */
/* Checking the mode of file , output each character */
/* Checking the attribute for Write-Only, Read-Only or Read-Write */
if(flmod[fileno]&O_WRONLY || flmod[fileno]&O_RDWR)
{
if( fileno == STDIN ) return -1; /* Standard Input */
else if( (fileno == STDOUT) || (fileno == STDERR) )
/* Standard Error/output */
{
for( i = count; i > 0; --i )
{
c = *buf++;
charput(c);
}
return count; /*Return the number of written characters */
}
else return -1; /* Incorrect file number */
}
else return -1; /* An error */
}
#if defined( __RX )
long read( long fileno, unsigned char *buf, long count )
#else
int read( int fileno, char *buf, unsigned int count )
#endif
{
long i;
/* Checking the file mode with the file number, each character is input and stored the buffer */
if((flmod[fileno]&_MOPENR) || (flmod[fileno]&O_RDWR)){
for(i = count; i > 0; i--){
*buf = charget();
if(*buf==CR){ /* Replace the new line character */
*buf = LF;
}
buf++;
}
return count;
}
else {
return -1;
}
}
#if defined( __RX )
long lseek( long fileno, long offset, long base )
#else
long lseek( int fileno, long offset, int base )
#endif
{
return -1L;
}

View File

@ -0,0 +1,53 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp.h
* H/W Platform : RSKRX111
* Description : Has the header files that should be included for this platform.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef PLATFORM_BOARD_RSKRX111
#define PLATFORM_BOARD_RSKRX111
/* Make sure that no other platforms have already been defined. Do not touch this! */
#ifdef PLATFORM_DEFINED
#error "Error - Multiple platforms defined in platform.h!"
#else
#define PLATFORM_DEFINED
#endif
/***********************************************************************************************************************
INCLUDE APPROPRIATE MCU AND BOARD FILES
***********************************************************************************************************************/
#include "r_bsp_config.h"
#include ".\mcu\rx111\iodefine.h"
#include ".\mcu\rx111\mcu_info.h"
#include ".\board\rskrx111\rskrx111.h"
#include ".\board\rskrx111\hwsetup.h"
#include ".\board\rskrx111\lcd.h"
#include ".\board\rskrx111\locking.h"
#include ".\board\rskrx111\vecttbl.h"
#endif /* PLATFORM_BOARD_RSKRX111 */

View File

@ -0,0 +1,250 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp_config_reference.c
* Device(s) : RX111
* Description : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included
* somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)
* is just a reference file that the user can use to make their own r_bsp_config.h file.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef R_BSP_CONFIG_REF_HEADER_FILE
#define R_BSP_CONFIG_REF_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* Enter the product part number for your MCU. This information will be used to obtain information about your MCU such
as package and memory size.
To help parse this information, the part number will be defined using multiple macros.
R 5 F 51 11 5 A D FM
| | | | | | | | | Macro Name Description
| | | | | | | | |__MCU_PART_PACKAGE = Package type, number of pins, and pin pitch
| | | | | | | |____not used = Products with wide temperature range (D: -40 to 85C G: -40 to 105C)
| | | | | | |______not used = Blank
| | | | | |________MCU_PART_MEMORY_SIZE = ROM, RAM, and Data Flash Capacity
| | | | |___________MCU_PART_GROUP = Group name
| | | |______________MCU_PART_SERIES = Series name
| | |________________MCU_PART_MEMORY_TYPE = Type of memory (Flash)
| |__________________not used = Renesas MCU
|____________________not used = Renesas semiconductor product.
*/
/* Package type. Set the macro definition based on values below:
Character(s) = Value for macro = Package Type/Number of Pins/Pin Pitch
FM = 0x0 = LFQFP/64/0.50
FK = 0x1 = LQFP/64/0.80
LF = 0x2 = TFLGA/64/0.50
FL = 0x3 = LFQFP/48/0.50
NE = 0x4 = VQFN/48/0.50
NC = 0x5 = HWQFN/36/0.50
LM = 0x6 = WFLGA/36/0.50
SB = 0x7 = SSOP/36/0.80
*/
#define MCU_PART_PACKAGE (0x0)
/* ROM, RAM, and Data Flash Capacity.
Character(s) = Value for macro = ROM Size/Ram Size/Data Flash Size
5 = 0x5 = 128KB/16KB/8KB
4 = 0x4 = 96KB/16KB/8KB
3 = 0x3 = 64KB/10KB/8KB
1 = 0x1 = 32KB/10KB/8KB
J = 0x0 = 16KB/8KB/8KB
*/
#define MCU_PART_MEMORY_SIZE (0x5)
/* Group name.
Character(s) = Value for macro = Description
10 = 0x0 = RX110 Group
11 = 0x1 = RX111 Group
*/
#define MCU_PART_GROUP (0x1)
/* Series name.
Character(s) = Value for macro = Description
51 = 0x0 = RX100 Series
*/
#define MCU_PART_SERIES (0x0)
/* Memory type.
Character(s) = Value for macro = Description
F = 0x0 = Flash memory version
*/
#define MCU_PART_MEMORY_TYPE (0x0)
/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a
'#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */
#if defined(BSP_DECLARE_STACK)
/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize su=0x400
/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize si=0x100
#endif
/* Heap size in bytes. */
#define HEAP_BYTES (0x400)
/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information
on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.
0 = Stay in Supervisor mode.
1 = Switch to User mode.
*/
#define RUN_IN_USER_MODE (0)
/* This macro lets other modules no if a RTOS is being used.
0 = RTOS is not used.
1 = RTOS is used.
*/
#define RTOS_USED (0)
/* Clock source select (CKSEL).
0 = Low Speed On-Chip Oscillator (LOCO)
1 = High Speed On-Chip Oscillator (HOCO)
2 = Main Clock Oscillator
3 = Sub-Clock Oscillator
4 = PLL Circuit
*/
#define CLOCK_SOURCE (4)
/* Clock configuration options.
The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The
multiplier settings are used to set the clock registers in resetprg.c. If a 16MHz clock is used and the
ICLK is 24MHz, PCLKB is 24MHz, FCLK is 24MHz, PCLKD is 24MHz, and CKO is 1MHz then the
settings would be:
XTAL_HZ = 16000000
PLL_DIV = 2
PLL_MUL = 6 (16MHz x 3 = 48MHz)
ICK_DIV = 2 : System Clock (ICLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV) = 24MHz
PCKB_DIV = 2 : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 24MHz
PCKD_DIV = 2 : Peripheral Clock D (PCLKD) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV) = 24MHz
FCK_DIV = 2 : Flash IF Clock (FCLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV) = 24MHz
*/
/* XTAL - Input clock frequency in Hz */
#define XTAL_HZ (16000000)
/* PLL Input Frequency Divider Select (PLIDIV).
Available divisors = /1 (no division), /2, /4
*/
#define PLL_DIV (2)
/* PLL Frequency Multiplication Factor Select (STC).
Available multipliers = x6, x8
*/
#define PLL_MUL (6)
/* System Clock Divider (ICK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define ICK_DIV (2)
/* Peripheral Module Clock B Divider (PCKB).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKB_DIV (2)
/* Peripheral Module Clock D Divider (PCKD).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKD_DIV (2)
/* Flash IF Clock Divider (FCK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define FCK_DIV (2)
/* Below are callback functions that can be used for detecting MCU exceptions, undefined interrupt sources, and
bus errors. If the user wishes to be alerted of these events then they will need to define the macro as a
function to be called when the event occurs. For example, if the user wanted the function
excep_undefined_instr_isr() to be called when an undefined interrupt source ISR is triggered then they would
do the following:
#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
If the user does not wish to be alerted of these events then they should comment out the macros.
NOTE: When a callback function is called it will be called from within a ISR. This means that the function
will essentially be an interrupt and will hold off other interrupts that occur in the system while it
is executing. For this reason, it is recommended to keep these callback functions short as to not
decrease the real-time response of your system.
*/
/* Callback for Supervisor Instruction Violation Exception. */
//#define EXCEP_SUPERVISOR_ISR_CALLBACK supervisor_instr_cb
/* Callback for Undefined Instruction Exception. */
//#define EXCEP_UNDEFINED_INSTR_ISR_CALLBACK undefined_instr_cb
/* Callback for Non-maskable Interrupt. */
//#define NMI_ISR_CALLBACK nmi_cb
/* Callback for all undefined interrupt vectors. User can set a breakpoint in this function to determine which source
is creating unwanted interrupts. */
//#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
/* Callback for Bus Error Interrupt. */
//#define BUS_ERROR_ISR_CALLBACK bus_error_cb
/* The user has the option of separately choosing little or big endian for the User Application Area */
/* Endian mode for User Application.
0 = Big Endian
Else = Little Endian (Default)
*/
#define USER_APP_ENDIAN (1)
/* Configure WDT and IWDT settings.
OFS0 - Option Function Select Register 0
OFS0 - Option Function Select Register 0
b31:b15 Reserved (set to 1)
b14 IWDTSLCSTP - IWDT Sleep Mode Count Stop Control - (0=can't stop count, 1=stop w/some low power modes)
b13 Reserved (set to 1)
b12 IWDTRSTIRQS - IWDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)
b11:b10 IWDTRPSS - IWDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)
b9:b8 IWDTRPES - IWDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)
b7:b4 IWDTCKS - IWDT Clock Frequency Division Ratio - (0=none, 2=/16, 3 = /32, 4=/64, 0xF=/128, 5=/256)
b3:b2 IWDTTOPS - IWDT Timeout Period Select - (0=128 cycles, 1=512, 2=1024, 3=2048)
b1 IWDTSTRT - IWDT Start Mode Select - (0=auto-start after reset, 1=halt after reset)
b0 Reserved (set to 1) */
#define OFS0_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Configure whether voltage detection 1 circuit and HOCO are enabled after reset.
OFS1 - Option Function Select Register 1
b31:b9 Reserved (set to 1)
b8 HOCOEN - Enable/disable HOCO oscillation after a reset (0=enable, 1=disable)
b7:b4 STUPLVD1LVL - Startup Voltage Monitoring 1 Reset Detection Level Select
0 1 0 0: 3.10 V
0 1 0 1: 3.00 V
0 1 1 0: 2.90 V
0 1 1 1: 2.79 V
1 0 0 0: 2.68 V
1 0 0 1: 2.58 V
1 0 1 0: 2.48 V
1 0 1 1: 2.06 V
1 1 0 0: 1.96 V
1 1 0 1: 1.86 V
b3:b2 Reserved (set to 1)
b2 STUPLVD1REN - Startup Voltage Monitoring 1 Reset Enable (1=monitoring disabled)
b0 FASTSTUP - Power-On Fast Startup Time (1=normal; read only) */
#define OFS1_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Initializes C input & output library functions.
0 = Disable I/O library initialization in resetprg.c. If you are not using stdio then use this value.
1 = Enable I/O library initialization in resetprg.c. This is default and needed if you are using stdio. */
#define IO_LIB_ENABLE (1)
#endif /* R_BSP_CONFIG_REF_HEADER_FILE */

View File

@ -0,0 +1,416 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : resetprg.c
* Device(s) : RX111
* Description : Defines post-reset routines that are used to configure the MCU prior to the main program starting.
* This is were the program counter starts on power-up or reset.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Defines machine level functions used in this file */
#include <machine.h>
/* Defines MCU configuration functions used in this file */
#include <_h_c_lib.h>
/* Defines standard variable types used in this file */
#include <stdbool.h>
#include <stdint.h>
/* This macro is here so that the stack will be declared here. This is used to prevent multiplication of stack size. */
#define BSP_DECLARE_STACK
/* Define the target platform */
#include "platform.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
#define PSW_init (0x00030000)
/***********************************************************************************************************************
Pre-processor Directives
***********************************************************************************************************************/
/* Declare the contents of the function 'Change_PSW_PM_to_UserMode' as assembler to the compiler */
#pragma inline_asm Change_PSW_PM_to_UserMode
/* Set this as the entry point from a power-on reset */
#pragma entry PowerON_Reset_PC
/***********************************************************************************************************************
External function Prototypes
***********************************************************************************************************************/
/* Functions to setup I/O library */
extern void _INIT_IOLIB(void);
extern void _CLOSEALL(void);
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
/* Power-on reset function declaration */
void PowerON_Reset_PC(void);
#if RUN_IN_USER_MODE==1
#if __RENESAS_VERSION__ < 0x01010000
/* MCU usermode switcher function declaration */
static void Change_PSW_PM_to_UserMode(void);
#endif
#endif
/* Main program function delcaration */
void main(void);
static void operating_frequency_set(void);
static void clock_source_select(void);
/***********************************************************************************************************************
* Function name: PowerON_Reset_PC
* Description : This function is the MCU's entry point from a power-on reset.
* The following steps are taken in the startup code:
* 1. The User Stack Pointer (USP) and Interrupt Stack Pointer (ISP) are both set immediately after entry
* to this function. The USP and ISP stack sizes are set in the file stacksct.h.
* Default sizes are USP=4K and ISP=1K.
* 2. The interrupt vector base register is set to point to the beginning of the relocatable interrupt
* vector table.
* 3. The MCU is setup for floating point operations by setting the initial value of the Floating Point
* Status Word (FPSW).
* 4. The MCU operating frequency is set by configuring the Clock Generation Circuit (CGC) in
* operating_frequency_set.
* 5. Calls are made to functions to setup the C runtime environment which involves initializing all
* initialed data, zeroing all uninitialized variables, and configuring STDIO if used
* (calls to _INITSCT and _INIT_IOLIB).
* 6. Board-specific hardware setup, including configuring I/O pins on the MCU, in hardware_setup.
* 7. Global interrupts are enabled by setting the I bit in the Program Status Word (PSW), and the stack
* is switched from the ISP to the USP. The initial Interrupt Priority Level is set to zero, enabling
* any interrupts with a priority greater than zero to be serviced.
* 8. The processor is optionally switched to user mode. To run in user mode, set the macro
* RUN_IN_USER_MODE above to a 1.
* 9. The bus error interrupt is enabled to catch any accesses to invalid or reserved areas of memory.
*
* Once this initialization is complete, the user's main() function is called. It should not return.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
#pragma section ResetPRG // output PowerON_Reset to PResetPRG section
void PowerON_Reset_PC(void)
{
/* Stack pointers are setup prior to calling this function - see comments above */
/* Initialise the MCU processor word */
#if __RENESAS_VERSION__ >= 0x01010000
set_intb((void *)__sectop("C$VECT"));
#else
set_intb((unsigned long)__sectop("C$VECT"));
#endif
#ifdef NMI_ISR_CALLBACK
/* Enable NMI interrupt if callback is configured in r_bsp_config.h */
ICU.NMIER.BIT.NMIEN = 1;
#endif
/* Switch to high-speed operation */
operating_frequency_set();
/* Initialize C runtime environment */
_INITSCT();
#if IO_LIB_ENABLE == 1
/* Comment this out if not using I/O lib */
_INIT_IOLIB();
#endif
/* Configure the MCU and YRDK hardware */
hardware_setup();
/* Change the MCU's usermode from supervisor to user */
nop();
set_psw(PSW_init);
#if RUN_IN_USER_MODE==1
/* Use chg_pmusr() intrinsic if possible. */
#if __RENESAS_VERSION__ >= 0x01010000
chg_pmusr() ;
#else
Change_PSW_PM_to_UserMode();
#endif
#endif
/* Enable the bus error interrupt to catch accesses to illegal/reserved areas of memory */
/* The ISR for this interrupt can be found in vecttbl.c in the function "bus_error_isr" */
/* Clear any pending interrupts */
IR(BSC,BUSERR) = 0;
/* Make this the highest priority interrupt (adjust as necessary for your application */
IPR(BSC,BUSERR) = 0x0F;
/* Enable the interrupt in the ICU*/
IEN(BSC,BUSERR) = 1;
/* Enable illegal address interrupt in the BSC */
BSC.BEREN.BIT.IGAEN = 1;
/* Call the main program function (should not return) */
main();
#if IO_LIB_ENABLE == 1
/* Comment this out if not using I/O lib - cleans up open files */
_CLOSEALL();
#endif
while(1)
{
/* Infinite loop. Put a breakpoint here if you want to catch an exit of main(). */
}
}
/***********************************************************************************************************************
* Function name: operating_frequency_set
* Description : Configures the clock settings for each of the device clocks
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void operating_frequency_set(void)
{
/* Used for constructing value to write to SCKCR and CKOCR registers. */
uint32_t temp_clock = 0;
/*
Clock Description Frequency
----------------------------------------
Input Clock Frequency............ 16 MHz
PLL frequency (x3)............... 48 MHz
Internal Clock Frequency......... 24 MHz
Peripheral Clock Frequency....... 24 MHz
Clock Out Frequency.............. 1 MHz */
volatile unsigned int i;
/* Protect off. */
SYSTEM.PRCR.WORD = 0xA50B;
/* Select the clock based upon user's choice. */
clock_source_select();
/* Figure out setting for FCK bits. */
#if FCK_DIV == 1
/* Do nothing since FCK bits should be 0. */
#elif FCK_DIV == 2
temp_clock |= 0x10000000;
#elif FCK_DIV == 4
temp_clock |= 0x20000000;
#elif FCK_DIV == 8
temp_clock |= 0x30000000;
#elif FCK_DIV == 16
temp_clock |= 0x40000000;
#elif FCK_DIV == 32
temp_clock |= 0x50000000;
#elif FCK_DIV == 64
temp_clock |= 0x60000000;
#else
#error "Error! Invalid setting for FCK_DIV in r_bsp_config.h"
#endif
/* Figure out setting for ICK bits. */
#if ICK_DIV == 1
/* Do nothing since ICK bits should be 0. */
#elif ICK_DIV == 2
temp_clock |= 0x01000000;
#elif ICK_DIV == 4
temp_clock |= 0x02000000;
#elif ICK_DIV == 8
temp_clock |= 0x03000000;
#elif ICK_DIV == 16
temp_clock |= 0x04000000;
#elif ICK_DIV == 32
temp_clock |= 0x05000000;
#elif ICK_DIV == 64
temp_clock |= 0x06000000;
#else
#error "Error! Invalid setting for ICK_DIV in r_bsp_config.h"
#endif
/* Figure out setting for PCKB bits. */
#if PCKB_DIV == 1
/* Do nothing since PCKB bits should be 0. */
#elif PCKB_DIV == 2
temp_clock |= 0x00000100;
#elif PCKB_DIV == 4
temp_clock |= 0x00000200;
#elif PCKB_DIV == 8
temp_clock |= 0x00000300;
#elif PCKB_DIV == 16
temp_clock |= 0x00000400;
#elif PCKB_DIV == 32
temp_clock |= 0x00000500;
#elif PCKB_DIV == 64
temp_clock |= 0x00000600;
#else
#error "Error! Invalid setting for PCKB_DIV in r_bsp_config.h"
#endif
/* Figure out setting for PCKD bits. */
#if PCKD_DIV == 1
/* Do nothing since PCKD bits should be 0. */
#elif PCKD_DIV == 2
temp_clock |= 0x00000001;
#elif PCKD_DIV == 4
temp_clock |= 0x00000002;
#elif PCKD_DIV == 8
temp_clock |= 0x00000003;
#elif PCKD_DIV == 16
temp_clock |= 0x00000004;
#elif PCKD_DIV == 32
temp_clock |= 0x00000005;
#elif PCKD_DIV == 64
temp_clock |= 0x00000006;
#else
#error "Error! Invalid setting for PCKD_DIV in r_bsp_config.h"
#endif
/* Set SCKCR register. */
SYSTEM.SCKCR.LONG = temp_clock;
/* Choose clock source. Default for r_bsp_config.h is PLL. */
SYSTEM.SCKCR3.WORD = ((uint16_t)CLOCK_SOURCE) << 8;
/* Protect on. */
SYSTEM.PRCR.WORD = 0xA500;
}
/***********************************************************************************************************************
* Function name: clock_source_select
* Description : Enables and disables clocks as chosen by the user. This function also implements the software delays
* needed for the clocks to stabilize.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
static void clock_source_select (void)
{
/* Declared volatile for software delay purposes. */
volatile unsigned int i;
/* NOTE: AS OF VERSION 0.50 OF THE RX111 HARDWARE MANUAL, ALL OF THE CLOCK
* STABILIZATION TIMES ARE TBD. FOR NOW, WHERE EVER A WAIT COUNT REGISTER
* IS AVAILABLE, THE DELAY IS SET TO THE MAX NUMBER OF CYCLES. WHERE EVER
* DELAY LOOPS ARE PRESENT, THE VALUES FROM THE 63N ARE RE-USED. KEEP IN
* MIND THAT THE 63N RUNS ON A FASTER CRYSTAL.
*/
#if (CLOCK_SOURCE == 1)
/* HOCO is chosen. Start it operating. */
SYSTEM.HOCOCR.BYTE = 0x00;
/* The delay period needed is to make sure that the HOCO has stabilized.*/
for(i = 0; i< 28; i++) // tHOCOWT2 is TBD
{
nop() ;
}
#else
/* HOCO is not chosen. Stop the HOCO. */
SYSTEM.HOCOCR.BYTE = 0x01;
#endif
#if (CLOCK_SOURCE == 2)
/* Main clock oscillator is chosen. Start it operating. */
SYSTEM.MOSCWTCR.BYTE = 0x07; // Wait 65,536 cycles
/* Set the main clock to operating. */
SYSTEM.MOSCCR.BYTE = 0x00;
/* The delay period needed is to make sure that the main clock has stabilized. */
for(i = 0; i< 140; i++) // tMAINOSCWT is TBD
{
nop() ;
}
#endif
#if (CLOCK_SOURCE == 3)
/* Sub-clock oscillator is chosen. Start it operating. */
/* In section 9.8.4, there is a reference to a SOSCWTCR register, but there is no
* description for this register in the manual nor reference for it in iodefine.h. */
/* Set the sub-clock to operating. */
SYSTEM.SOSCCR.BYTE = 0x00;
/* The delay period needed is to make sure that the sub-clock has stabilized. */
for(i = 0; i< 30233; i++) // tSUBOSCWT0 is TBD
{
nop() ;
}
#else
/* Set the sub-clock to stopped. */
SYSTEM.SOSCCR.BYTE = 0x01;
#endif
#if (CLOCK_SOURCE == 4)
/* PLL is chosen. Start it operating. Must start main clock as well since PLL uses it. */
SYSTEM.MOSCWTCR.BYTE = 0x07; // Wait 65,536 cycles
/* Set the main clock to operating. */
SYSTEM.MOSCCR.BYTE = 0x00;
/* Set PLL Input Divisor. */
SYSTEM.PLLCR.BIT.PLIDIV = PLL_DIV >> 1;
/* Set PLL Multiplier. */
SYSTEM.PLLCR.BIT.STC = (PLL_MUL * 2) - 1;
/* Set the PLL to operating. */
SYSTEM.PLLCR2.BYTE = 0x00;
/* The delay period needed is to make sure that the main clock and PLL have stabilized. */
for(i = 0; i< 140; i++) // tPLLWT2 is TBD
{
nop() ;
}
#endif
/* LOCO is saved for last since it is what is running by default out of reset. This means you do not want to turn
it off until another clock has been enabled and is ready to use. */
#if (CLOCK_SOURCE == 0)
/* LOCO is chosen. This is the default out of reset. */
SYSTEM.LOCOCR.BYTE = 0x00;
#else
/* LOCO is not chosen and another clock has already been setup. Turn off the LOCO. */
SYSTEM.LOCOCR.BYTE = 0x01;
#endif
/* Make sure a valid clock was chosen. */
#if (CLOCK_SOURCE > 4) || (CLOCK_SOURCE < 0)
#error "ERROR - Valid clock source must be chosen in r_bsp_config.h using CLOCK_SOURCE macro."
#endif
}
/***********************************************************************************************************************
* Function name: Change_PSW_PM_to_UserMode
* Description : Assembler function, used to change the MCU's usermode from supervisor to user.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
#if RUN_IN_USER_MODE==1
#if __RENESAS_VERSION__ < 0x01010000
static void Change_PSW_PM_to_UserMode(void)
{
MVFC PSW,R1
OR #00100000h,R1
PUSH.L R1
MVFC PC,R1
ADD #10,R1
PUSH.L R1
RTE
NOP
NOP
}
#endif
#endif

View File

@ -0,0 +1,63 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : rskrx111.h
* H/W Platform : RSKRX111
* Description : Board specific definitions for the RSKRX111.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef RSKRX111_H
#define RSKRX111_H
/* Local defines */
#define LED_ON (0)
#define LED_OFF (1)
#define SET_BIT_HIGH (1)
#define SET_BIT_LOW (0)
#define SET_BYTE_HIGH (0xFF)
#define SET_BYTE_LOW (0x00)
/* Switches */
#define SW_ACTIVE 0
#define SW1 PORT3.PIDR.BIT.B0
#define SW2 PORT3.PIDR.BIT.B1
#define SW3 PORTE.PIDR.BIT.B4
#define SW1_PDR PORT3.PDR.BIT.B0
#define SW2_PDR PORT3.PDR.BIT.B1
#define SW3_PDR PORTE.PDR.BIT.B4
#define SW1_PMR PORT3.PMR.BIT.B0
#define SW2_PMR PORT3.PMR.BIT.B1
#define SW3_PMR PORTE.PMR.BIT.B4
/* LEDs */
#define LED0 PORTB.PODR.BIT.B7
#define LED1 PORTA.PODR.BIT.B0
#define LED2 PORT5.PODR.BIT.B4
#define LED3 PORT1.PODR.BIT.B7
#define LED0_PDR PORTB.PDR.BIT.B7
#define LED1_PDR PORTA.PDR.BIT.B0
#define LED2_PDR PORT5.PDR.BIT.B4
#define LED3_PDR PORT1.PDR.BIT.B7
#endif /* RSKRX111_H */

View File

@ -0,0 +1,96 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : sbrk.c
* Device(s) : RX
* Description : Configures the MCU heap memory. The size of the heap is defined by the macro HEAPSIZE below.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 26.10.2011 1.00 First Release
* : 12.03.2012 1.10 Heap size is now defined in r_bsp_config.h, not sbrk.h.
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Provides standard definitions used in this file */
#include <stddef.h>
/* Defines standard input/output functions used in this file */
#include <stdio.h>
/* Defines standard variable types used in this file */
#include <stdint.h>
/* Used for getting HEAP_BYTES macro. */
#include "platform.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/***********************************************************************************************************************
Function Prototypes
***********************************************************************************************************************/
/* Memory allocation function prototype declaration */
int8_t *sbrk(size_t size);
/***********************************************************************************************************************
Global Variables
***********************************************************************************************************************/
//const size_t _sbrk_size= /* Specifies the minimum unit of */
/* the defined heap area */
extern int8_t *_s1ptr;
union HEAP_TYPE
{
int32_t dummy; /* Dummy for 4-byte boundary */
int8_t heap[HEAP_BYTES]; /* Declaration of the area managed by sbrk*/
};
/* Declare memory heap area */
static union HEAP_TYPE heap_area;
/* End address allocated by sbrk */
static int8_t *brk=(int8_t *)&heap_area;
/***********************************************************************************************************************
* Function name: sbrk
* Description : This function configures MCU memory area allocation.
* Arguments : size -
* assigned area size
* Return value : Start address of allocated area (pass)
* -1 (failure)
***********************************************************************************************************************/
int8_t *sbrk(size_t size)
{
int8_t *p;
if (brk+size > heap_area.heap+HEAP_BYTES)
{
/* Empty area size */
p = (int8_t *)-1;
}
else
{
/* Area assignment */
p = brk;
/* End address update */
brk += size;
}
/* Return result */
return p;
}

View File

@ -0,0 +1,206 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : vecttbl.c
* Device(s) : RX11x
* Description : Definition of the fixed vector table and option setting memory.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Fixed size integers. */
#include <stdint.h>
/* Used for nop(). */
#include <machine.h>
/* BSP configuration. */
#include "platform.h"
#pragma section IntPRG
/***********************************************************************************************************************
* Function name: PowerON_Reset_PC
* Description : The reset vector points to this function. Code execution starts in this function after reset.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
extern void PowerON_Reset_PC(void);
/***********************************************************************************************************************
* Function name: excep_supervisor_inst_isr
* Description : Supervisor Instruction Violation ISR
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
#pragma interrupt (excep_supervisor_inst_isr)
void excep_supervisor_inst_isr(void)
{
/* If the user defined a callback function in r_bsp_config.h then it will be called here. */
#if defined(EXCEP_SUPERVISOR_ISR_CALLBACK)
EXCEP_SUPERVISOR_ISR_CALLBACK();
/* If you do not put the MCU in Supervisor mode before returning then it will just execute the same violating
instruction again and come back in here. Since the PSW is restored from the stack when returning from the
exception, you would need to alter the saved PSW on the stack to change to Supervisor mode. We do not do this
here because the only 'safe' way to do this would be to write this function in assembly. Even then most users
would probably want to handle this someway instead of just going back to the application. */
#else
brk();
#endif
}
/***********************************************************************************************************************
* Function name: excep_undefined_inst_isr
* Description : Undefined instruction exception ISR
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
#pragma interrupt (excep_undefined_inst_isr)
void excep_undefined_inst_isr(void)
{
/* If the user defined a callback function in r_bsp_config.h then it will be called here. */
#if defined(EXCEP_UNDEFINED_INSTR_ISR_CALLBACK)
EXCEP_UNDEFINED_INSTR_ISR_CALLBACK();
#else
brk();
#endif
}
/***********************************************************************************************************************
* Function name: non_maskable_isr
* Description : Non-maskable interrupt ISR
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
#pragma interrupt (non_maskable_isr)
void non_maskable_isr(void)
{
/* If the user defined a callback function in r_bsp_config.h then it will be called here. */
#if defined(NMI_ISR_CALLBACK)
NMI_ISR_CALLBACK();
/* Clear NMI flag. */
ICU.NMICLR.BIT.NMICLR = 1;
#else
brk();
#endif
}
/***********************************************************************************************************************
* Function name: undefined_interrupt_source_isr
* Description : All undefined interrupt vectors point to this function.
* Set a breakpoint in this function to determine which source is creating unwanted interrupts.
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
#pragma interrupt (undefined_interrupt_source_isr)
void undefined_interrupt_source_isr(void)
{
/* If the user defined a callback function in r_bsp_config.h then it will be called here. */
#if defined(UNDEFINED_INT_ISR_CALLBACK)
UNDEFINED_INT_ISR_CALLBACK();
#else
brk();
#endif
}
/***********************************************************************************************************************
* Function name: bus_error_isr
* Description : By default, this demo code enables the Bus Error Interrupt. This interrupt will fire if the user tries
* to access code or data from one of the reserved areas in the memory map, including the areas covered
* by disabled chip selects. A nop() statement is included here as a convenient place to set a breakpoint
* during debugging and development, and further handling should be added by the user for their
* application.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
#pragma interrupt (bus_error_isr(vect=VECT(BSC,BUSERR)))
void bus_error_isr (void)
{
/* Clear the bus error */
BSC.BERCLR.BIT.STSCLR = 1;
/*
To find the address that was accessed when the bus error occurred, read the register BSC.BERSR2.WORD. The upper
13 bits of this register contain the upper 13-bits of the offending address (in 512K byte units)
*/
/* If the user defined a callback function in r_bsp_config.h then it will be called here. */
#if defined(BUS_ERROR_ISR_CALLBACK)
BUS_ERROR_ISR_CALLBACK();
#else
nop();
#endif
}
void Dummy( void )
{
brk();
}
/***********************************************************************************************************************
* The following array fills in the endian and option function select registers, and the fixed vector table
* bytes.
***********************************************************************************************************************/
#pragma section C FIXEDVECT
void (*const Fixed_Vectors[])(void) = {
//;0xffffffd0 Exception(Supervisor Instruction)
excep_supervisor_inst_isr,
//;0xffffffd4 Reserved
Dummy,
//;0xffffffd8 Reserved
Dummy,
//;0xffffffdc Exception(Undefined Instruction)
undefined_interrupt_source_isr,
//;0xffffffe0 Reserved
Dummy,
//;0xffffffe4 Reserved
Dummy,
//;0xffffffe8 Reserved
Dummy,
//;0xffffffec Reserved
Dummy,
//;0xfffffff0 Reserved
Dummy,
//;0xfffffff4 Reserved
Dummy,
//;0xfffffff8 NMI
non_maskable_isr,
//;0xfffffffc RESET
//;<<VECTOR DATA START (POWER ON RESET)>>
//;Power On Reset PC
PowerON_Reset_PC
//;<<VECTOR DATA END (POWER ON RESET)>>
};
#pragma address _MDEreg=0xffffff80 // MDE register (Single Chip Mode)
#ifdef __BIG
const unsigned long _MDEreg = 0xfffffff8; // big
#else
const unsigned long _MDEreg = 0xffffffff; // little
#endif

View File

@ -0,0 +1,65 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : vecttbl.h
* Device(s) : RX111
* Description : Has function prototypes for exception callback functions.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 1.20 Beta Release.
***********************************************************************************************************************/
#ifndef VECTTBL_HEADER_INC
#define VECTTBL_HEADER_INC
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Fixed size integers. */
#include <stdint.h>
/* Used for nop(). */
#include <machine.h>
/* BSP configuration. */
#include "platform.h"
/***********************************************************************************************************************
Exported global functions (to be accessed by other files)
***********************************************************************************************************************/
#if defined(EXCEP_SUPERVISOR_ISR_CALLBACK)
void EXCEP_SUPERVISOR_ISR_CALLBACK(void);
#endif
#if defined(EXCEP_UNDEFINED_INSTR_ISR_CALLBACK)
void EXCEP_UNDEFINED_INSTR_ISR_CALLBACK(void);
#endif
#if defined(NMI_ISR_CALLBACK)
void NMI_ISR_CALLBACK(void);
#endif
#if defined(UNDEFINED_INT_ISR_CALLBACK)
void UNDEFINED_INT_ISR_CALLBACK(void);
#endif
#if defined(BUS_ERROR_ISR_CALLBACK)
void BUS_ERROR_ISR_CALLBACK(void);
#endif
#endif /* VECTTBL_HEADER_INC */

View File

@ -0,0 +1,54 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp.h
* Description : Has the header files that should be included for this platform.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 13.01.2012 1.00 First Release
* : 27.06.2012 1.10 Updated with new information to reflect udpated r_bsp structure.
***********************************************************************************************************************/
#ifndef PLATFORM_BOARD_USER
#define PLATFORM_BOARD_USER
/* Make sure that no other platforms have already been defined. Do not touch this! */
#ifdef PLATFORM_DEFINED
#error "Error - Multiple platforms defined in platform.h!"
#else
#define PLATFORM_DEFINED
#endif
/***********************************************************************************************************************
INCLUDE APPROPRIATE MCU AND BOARD FILES
***********************************************************************************************************************/
/* This is a user defined board. Start off by:
1)Copy and rename one of the 'board' folders that most closely matches your system (same MCU Series and Group).
2)Substitute in your MCU Group for the *MCU Group* option in the #include below for mcu_info.h.
3)Copy the other #includes from the r_bsp.h in the 'board' folder that you copied earlier.
4)Configure the BSP for your board by modifying the r_bsp_config_reference.h.
5)Copy r_bsp_config_reference.h to your project directory and rename it r_bsp_config.h.
You can also add your own include files here as well. */
#include "r_bsp_config.h"
#include ".\mcu\*MCU Group*\mcu_info.h"
#endif /* PLATFORM_BOARD_USER */

View File

@ -0,0 +1,112 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : mcu_info.h
* Device(s) : RX111
* Description : Information about the MCU on this board (RSKRX111).
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef _MCU_INFO
#define _MCU_INFO
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Gets MCU configuration information. */
#include "r_bsp_config.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* MCU Series. */
#if MCU_PART_SERIES == 0x0
#define MCU_SERIES_RX100 (1)
#else
#error "ERROR - MCU_PART_SERIES - Unknown MCU Series chosen in r_bsp_config.h"
#endif
/* MCU Group name. */
#if MCU_PART_GROUP == 0x1
#define MCU_RX111 (1)
#define MCU_RX11x (1)
#else
#error "ERROR - MCU_PART_GROUP - Unknown MCU Group chosen in r_bsp_config.h"
#endif
/* Package. */
#if MCU_PART_PACKAGE == 0x0
#define PACKAGE_LFQFP64 (1)
#elif MCU_PART_PACKAGE == 0x1
#define PACKAGE_LQFP64 (1)
#elif MCU_PART_PACKAGE == 0x2
#define PACKAGE_TFLGA64 (1)
#elif MCU_PART_PACKAGE == 0x3
#define PACKAGE_LFQFP48 (1)
#elif MCU_PART_PACKAGE == 0x4
#define PACKAGE_VQFN48 (1)
#elif MCU_PART_PACKAGE == 0x5
#define PACKAGE_HWQFN36 (1)
#elif MCU_PART_PACKAGE == 0x6
#define PACKAGE_WFLGA36 (1)
#elif MCU_PART_PACKAGE == 0x7
#define PACKAGE_SSOP36 (1)
#else
#error "ERROR - MCU_PART_PACKAGE - Unknown package chosen in r_bsp_config.h"
#endif
/* Memory size of your MCU. */
#if MCU_PART_MEMORY_SIZE == 0x0 // "J" parts
#define ROM_SIZE_BYTES (16384)
#define RAM_SIZE_BYTES (8192)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x1
#define ROM_SIZE_BYTES (32768)
#define RAM_SIZE_BYTES (10240)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x3
#define ROM_SIZE_BYTES (65536)
#define RAM_SIZE_BYTES (10240)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x4
#define ROM_SIZE_BYTES (98304)
#define RAM_SIZE_BYTES (16384)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x5
#define ROM_SIZE_BYTES (131072)
#define RAM_SIZE_BYTES (16384)
#define DF_SIZE_BYTES (8192)
#else
#error "ERROR - MCU_PART_MEMORY_SIZE - Unknown memory size chosen in r_bsp_config.h"
#endif
/* System clock speed in Hz. */
#define ICLK_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV)
/* Peripheral Module Clock B speed in Hz. */
#define PCLKB_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV)
/* Peripheral Module Clock D speed in Hz. */
#define PCLKD_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV)
/* FlashIF clock speed in Hz. */
#define FCLK_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV)
#endif /* _MCU_INFO */

Some files were not shown because too many files have changed in this diff Show More