- added 3rd party uart lib
- added measurements for voltage and current
This commit is contained in:
parent
6d0e569a3f
commit
b8402e32fc
|
@ -0,0 +1,6 @@
|
|||
.lst
|
||||
.eep
|
||||
.hex
|
||||
.lss
|
||||
.map
|
||||
.sym
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="" />
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
|
||||
|
|
|
@ -1,10 +1,24 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="9fad4545-a424-4a82-86dc-76602cf3eef3" name="Default" comment="" />
|
||||
<list default="true" id="9fad4545-a424-4a82-86dc-76602cf3eef3" name="Default" comment="- added 3rd party uart lib - added measurements for voltage and current">
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/../.gitignore" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/powerboard/src/uart.c" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/powerboard/src/uart.h" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/powerboard/main.elf" afterPath="$PROJECT_DIR$/powerboard/main.elf" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/powerboard/.dep/main.o.d" afterPath="$PROJECT_DIR$/powerboard/.dep/main.o.d" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/powerboard/Makefile" afterPath="$PROJECT_DIR$/powerboard/Makefile" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/powerboard/src/main.c" afterPath="$PROJECT_DIR$/powerboard/src/main.c" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/powerboard/main.hex" afterPath="$PROJECT_DIR$/powerboard/main.hex" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/powerboard/src/main.lst" afterPath="$PROJECT_DIR$/powerboard/src/main.lst" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/powerboard/main.map" afterPath="$PROJECT_DIR$/powerboard/main.map" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vcs.xml" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
</list>
|
||||
<ignored path="bikegenerator.iws" />
|
||||
<ignored path=".idea/workspace.xml" />
|
||||
<file path="/Makefile" changelist="9fad4545-a424-4a82-86dc-76602cf3eef3" time="1370954497482" ignored="false" />
|
||||
<file path="/Makefile" changelist="9fad4545-a424-4a82-86dc-76602cf3eef3" time="1370979337668" ignored="false" />
|
||||
<file path="/Dummy.txt" changelist="9fad4545-a424-4a82-86dc-76602cf3eef3" time="1370989786703" ignored="false" />
|
||||
<option name="TRACKING_ENABLED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
@ -65,28 +79,10 @@
|
|||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf>
|
||||
<file leaf-file-name="Makefile" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/displayboard/Makefile">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="19" column="28" selection-start="429" selection-end="429" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="Makefile" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/Makefile">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="54" column="43" selection-start="1446" selection-end="1446" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="adc.h" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/adc.h">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="3" column="22" selection-start="52" selection-end="52" vertical-scroll-proportion="0.0">
|
||||
<state line="44" column="5" selection-start="1201" selection-end="1201" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
|
@ -95,16 +91,7 @@
|
|||
<file leaf-file-name="main.c" pinned="false" current="true" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/main.c">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="51" column="42" selection-start="1125" selection-end="1125" vertical-scroll-proportion="0.5403088">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="adc.c" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/adc.c">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="2" column="0" selection-start="21" selection-end="21" vertical-scroll-proportion="0.0">
|
||||
<state line="14" column="53" selection-start="265" selection-end="265" vertical-scroll-proportion="-1.0426009">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
|
@ -117,22 +104,31 @@
|
|||
<setting name="OPEN_NEW_TAB" value="false" />
|
||||
</FindUsagesManager>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." />
|
||||
</component>
|
||||
<component name="GitLogSettings">
|
||||
<option name="myDateState">
|
||||
<MyDateState />
|
||||
</option>
|
||||
</component>
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="changedFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/powerboard/src/adc.h" />
|
||||
<option value="$PROJECT_DIR$/powerboard/Makefile" />
|
||||
<option value="$PROJECT_DIR$/powerboard/src/adc.c" />
|
||||
<option value="$PROJECT_DIR$/powerboard/Makefile" />
|
||||
<option value="$PROJECT_DIR$/powerboard/src/main.c" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds">
|
||||
<option name="x" value="1596" />
|
||||
<option name="width" value="1928" />
|
||||
<option name="height" value="1058" />
|
||||
<option name="x" value="-4" />
|
||||
<option name="y" value="25" />
|
||||
<option name="width" value="1608" />
|
||||
<option name="height" value="853" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
|
||||
<OptionsSetting value="true" id="Add" />
|
||||
<OptionsSetting value="true" id="Remove" />
|
||||
<OptionsSetting value="true" id="Checkout" />
|
||||
|
@ -208,14 +204,19 @@
|
|||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="GoToFile.includeJavaFiles" value="false" />
|
||||
<property name="options.splitter.main.proportions" value="0.3" />
|
||||
<property name="MemberChooser.sorted" value="false" />
|
||||
<property name="recentsLimit" value="5" />
|
||||
<property name="options.lastSelected" value="project.propVCSSupport.Mappings" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/../.." />
|
||||
<property name="MemberChooser.copyJavadoc" value="false" />
|
||||
<property name="GoToClass.toSaveIncludeLibraries" value="false" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="recentsLimit" value="5" />
|
||||
<property name="MemberChooser.sorted" value="false" />
|
||||
<property name="restartRequiresConfirmation" value="true" />
|
||||
<property name="MemberChooser.showClasses" value="true" />
|
||||
<property name="GoToClass.includeLibraries" value="false" />
|
||||
<property name="MemberChooser.copyJavadoc" value="false" />
|
||||
<property name="options.searchVisible" value="true" />
|
||||
<property name="options.splitter.details.proportions" value="0.2" />
|
||||
</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
|
@ -324,6 +325,23 @@
|
|||
</configuration>
|
||||
</component>
|
||||
<component name="ShelveChangesManager" show_recycled="false" />
|
||||
<component name="SvnConfiguration" maxAnnotateRevisions="500" myUseAcceleration="nothing" myAutoUpdateAfterCommit="false" cleanupOnStartRun="false" SSL_PROTOCOLS="all">
|
||||
<option name="USER" value="" />
|
||||
<option name="PASSWORD" value="" />
|
||||
<option name="mySSHConnectionTimeout" value="30000" />
|
||||
<option name="mySSHReadTimeout" value="30000" />
|
||||
<option name="LAST_MERGED_REVISION" />
|
||||
<option name="MERGE_DRY_RUN" value="false" />
|
||||
<option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
|
||||
<option name="UPDATE_LOCK_ON_DEMAND" value="false" />
|
||||
<option name="IGNORE_SPACES_IN_MERGE" value="false" />
|
||||
<option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
|
||||
<option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
|
||||
<option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
|
||||
<option name="FORCE_UPDATE" value="false" />
|
||||
<option name="IGNORE_EXTERNALS" value="false" />
|
||||
<myIsUseDefaultProxy>false</myIsUseDefaultProxy>
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="9fad4545-a424-4a82-86dc-76602cf3eef3" name="Default" comment="" />
|
||||
|
@ -333,31 +351,31 @@
|
|||
<servers />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="1596" y="0" width="1928" height="1058" extended-state="6" />
|
||||
<editor active="true" />
|
||||
<frame x="-4" y="25" width="1608" height="853" extended-state="6" />
|
||||
<editor active="false" />
|
||||
<layout>
|
||||
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Changes" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.328125" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32893288" sideWeight="0.5" order="8" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32893288" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="CDI" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32893288" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="CDI" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2497332" sideWeight="0.6710671" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.3011583" sideWeight="0.671875" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||
</layout>
|
||||
</component>
|
||||
<component name="VcsContentAnnotationSettings">
|
||||
|
@ -446,13 +464,57 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/adc.h">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="3" column="22" selection-start="52" selection-end="52" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/utils.h">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/displayboard/Makefile">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="19" column="28" selection-start="429" selection-end="429" vertical-scroll-proportion="0.0">
|
||||
<state line="19" column="28" selection-start="429" selection-end="429" vertical-scroll-proportion="0.06942393">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/Makefile">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="44" column="5" selection-start="1201" selection-end="1201" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/utils.c">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/uart.h">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="63" column="24" selection-start="2405" selection-end="2421" vertical-scroll-proportion="-1.971935">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/uart.c">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="233" column="37" selection-start="8699" selection-end="8700" vertical-scroll-proportion="-0.38403615">
|
||||
<folding>
|
||||
<element signature="n#!!doc" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/adc.c">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="2" column="0" selection-start="21" selection-end="21" vertical-scroll-proportion="0.0">
|
||||
|
@ -460,23 +522,9 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/adc.h">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="3" column="22" selection-start="52" selection-end="52" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/Makefile">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="54" column="43" selection-start="1446" selection-end="1446" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/main.c">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="51" column="42" selection-start="1125" selection-end="1125" vertical-scroll-proportion="0.5403088">
|
||||
<state line="14" column="53" selection-start="265" selection-end="265" vertical-scroll-proportion="-1.0426009">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
|
|
|
@ -12,7 +12,7 @@ src/main.o: src/main.c \
|
|||
/usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/lock.h \
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/interrupt.h \
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/pgmspace.h \
|
||||
/usr/lib/gcc/avr/4.5.3/include/stddef.h src/utils.h src/adc.h
|
||||
/usr/lib/gcc/avr/4.5.3/include/stddef.h src/utils.h src/adc.h src/uart.h
|
||||
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/io.h:
|
||||
|
||||
|
@ -45,3 +45,5 @@ src/main.o: src/main.c \
|
|||
src/utils.h:
|
||||
|
||||
src/adc.h:
|
||||
|
||||
src/uart.h:
|
||||
|
|
|
@ -52,7 +52,7 @@ TARGET = main
|
|||
|
||||
|
||||
# List C source files here. (C dependencies are automatically generated.)
|
||||
SRC = src/$(TARGET).c src/adc.c src/utils.c
|
||||
SRC = src/$(TARGET).c src/adc.c src/utils.c src/uart.c
|
||||
|
||||
|
||||
# List Assembler source files here.
|
||||
|
@ -180,7 +180,7 @@ LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
|
|||
AVRDUDE_PROGRAMMER = usbasp
|
||||
|
||||
# com1 = serial port. Use lpt1 to connect to parallel port.
|
||||
AVRDUDE_PORT =
|
||||
AVRDUDE_PORT = usb
|
||||
|
||||
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
|
||||
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
|
||||
|
|
Binary file not shown.
|
@ -1,27 +1,126 @@
|
|||
:1000000012C021C020C01FC01EC01DC03EC01BC0EA
|
||||
:100010001AC019C018C017C016C015C014C013C02C
|
||||
:1000200012C011C010C011241FBECFE5D4E0DEBF46
|
||||
:10003000CDBF10E0A0E6B0E001C01D92A236B1072E
|
||||
:10004000E1F71FD0ABC0DCCF8EB58B608EBD82EEEA
|
||||
:1000500094E09BBD8ABD80E189BF7894089587B301
|
||||
:10006000876087BB88B3887F88BB089580E0089548
|
||||
:10007000882311F481E001C080E064E034D080E0A6
|
||||
:100080000895EDDF19D0E0DFFFCF1F920F920FB67A
|
||||
:100090000F9211248F939F93809160009091610043
|
||||
:1000A000019690936100809360009F918F910F90D3
|
||||
:1000B0000FBE0F901F90189580E487B983E086B932
|
||||
:1000C000379A369A3699FECF84B195B1089597B193
|
||||
:1000D0008F71907E892B87B9369A3699FECF24B1DD
|
||||
:1000E00035B1C9010895BF92CF92DF92EF92FF928E
|
||||
:1000F0000F931F93D82EB62ECC24EE24FF24870115
|
||||
:100100000AC08D2DE4DFAC0160E070E0E40EF51E66
|
||||
:10011000061F171FC394CB14A0F32B2D30E040E033
|
||||
:1001200050E0C801B70118D0C9011F910F91FF908D
|
||||
:10013000EF90DF90CF90BF900895882309F484E674
|
||||
:1001400090E007C0E3ECF9E03197F1F700C0000060
|
||||
:100150009F5F9817B8F30895A1E21A2EAA1BBB1B44
|
||||
:10016000FD010DC0AA1FBB1FEE1FFF1FA217B30783
|
||||
:10017000E407F50720F0A21BB30BE40BF50B661F99
|
||||
:10018000771F881F991F1A9469F76095709580955D
|
||||
:1001900090959B01AC01BD01CF010895F894FFCF6C
|
||||
:1000000030C03FC03EC03DC03CC03BC02AC139C02B
|
||||
:1000100038C037C036C08CC1B7C133C032C031C060
|
||||
:1000200030C02FC02EC0570D0A006D412020004760
|
||||
:10003000656E657261746F723A2000570D0A006D2B
|
||||
:10004000412020004C6F61643A20202020202000B5
|
||||
:1000500064560D0A00566F6C746167653A20202063
|
||||
:10006000000011241FBECFE5D4E0DEBFCDBF10E0FD
|
||||
:10007000A0E6B0E001C01D92AD3AB107E1F75FD054
|
||||
:10008000A1C3BECF8EB58B608EBD82EE94E09BBDCA
|
||||
:100090008ABD80E189BF7894089587B3876087BB64
|
||||
:1000A00088B3887F88BB0895CF93DF9382E064E0B4
|
||||
:1000B00006D1BC0180E090E07FD223E333E343ED3F
|
||||
:1000C00050E4E6D14DD2709363006093620081E00A
|
||||
:1000D00064E0F5D09C012E5F3140C8E4D0E02C9F55
|
||||
:1000E000C0012D9F900D3C9F900D112490936500B1
|
||||
:1000F0008093640080E064E0E2D09C012F5F314097
|
||||
:100100002C9FC0012D9F900D3C9F900D112490932A
|
||||
:10011000670080936600DF91CF910895FC01CB01C9
|
||||
:1001200024E630E0B901EAD26E9FC0016F9F900DC6
|
||||
:100130007E9F900D1124B901CDD2862F0895EF92A4
|
||||
:10014000FF920F931F93DF93CF93CDB7DEB72A971C
|
||||
:100150000FB6F894DEBF0FBECDBF9FDF99D092DF00
|
||||
:1001600083E390E036D1C09AC19AC2988E010F5FA6
|
||||
:100170001F4F84E6E82EF12C97DF85E590E07BD1D8
|
||||
:100180008091620090916300B8014AE050E0EBD2A8
|
||||
:100190005FD180E590E06FD184E490E06CD18091F4
|
||||
:1001A000660090916700B8014AE050E0DCD250D17F
|
||||
:1001B0008FE390E060D18091660090916700B70175
|
||||
:1001C0009DD22091620030916300629FC001639FC5
|
||||
:1001D000900D729F900D1124B7017CD2862F90E074
|
||||
:1001E000B8014AE050E0BFD233D18BE390E043D175
|
||||
:1001F0008FE290E040D18091640090916500B80159
|
||||
:100200004AE050E0B0D224D18AE290E034D180912B
|
||||
:10021000640090916500B70171D220916200309125
|
||||
:100220006300629FC001639F900D729F900D112427
|
||||
:10023000B70150D2862F90E0B8014AE050E093D247
|
||||
:1002400007D186E290E017D184E663D084E661D0DE
|
||||
:1002500084E65FD084E65DD084E65BD084E659D046
|
||||
:100260008BCF1F920F920FB60F9211248F939F93F3
|
||||
:10027000809160009091610001969093610080935D
|
||||
:1002800060009F918F910F900FBE0F901F90189557
|
||||
:1002900080E487B983E086B9379A369A3699FECFDB
|
||||
:1002A00084B195B1089597B18F71907E892B87B9EC
|
||||
:1002B000369A3699FECF24B135B1C9010895BF925F
|
||||
:1002C000CF92DF92EF92FF920F931F93D82EB62E0C
|
||||
:1002D000CC24EE24FF2487010AC08D2DE4DFAC017D
|
||||
:1002E00060E070E0E40EF51E061F171FC394CB14E8
|
||||
:1002F000A0F32B2D30E040E050E0C801B70111D24F
|
||||
:10030000C9011F910F91FF90EF90DF90CF90BF90A8
|
||||
:100310000895882309F484E690E007C0E3ECF9E04F
|
||||
:100320003197F1F700C000009F5F9817B8F3089568
|
||||
:100330001F920F920FB60F9211242F938F939F93BA
|
||||
:10034000EF93FF939BB18CB1E0918A00EF5FEF7167
|
||||
:1003500020918B00E21741F09871E0938A00F0E061
|
||||
:10036000E457FF4F808301C092E08091AC00892B5D
|
||||
:100370008093AC00FF91EF919F918F912F910F90FF
|
||||
:100380000FBE0F901F9018951F920F920FB60F92ED
|
||||
:1003900011248F939F93EF93FF9390916800809126
|
||||
:1003A0006900981761F0E0916900EF5FEF71E093E9
|
||||
:1003B0006900F0E0E659FF4F80818CB901C0559883
|
||||
:1003C000FF91EF919F918F910F900FBE0F901F9013
|
||||
:1003D0001895109268001092690010928A0010928D
|
||||
:1003E0008B0097FF03C022E02BB99F7790BD89B99E
|
||||
:1003F00088E98AB986E880BD089590918A00809145
|
||||
:100400008B00981781F0E0918B00EF5FEF71E09324
|
||||
:100410008B00F0E0E457FF4F20818091AC001092F8
|
||||
:10042000AC0030E002C020E031E0C90108959091B5
|
||||
:1004300068009F5F9F71209169009217E1F3E92F97
|
||||
:10044000F0E0E659FF4F808390936800559A089535
|
||||
:10045000EF92FF92CF93DF93E82EE7017E01F92E12
|
||||
:10046000E70101C0E4DF89918823E1F7DF91CF91B3
|
||||
:10047000FF90EF900895CF93DF93EC0101C0D7DF99
|
||||
:10048000FE01219684918823D1F7DF91CF910895C1
|
||||
:100490000CD0E6C0DED040F0D5D030F021F45F3F84
|
||||
:1004A00019F0C7C0511110C1CAC0EBD098F39923FD
|
||||
:1004B000C9F35523B1F3951B550BBB27AA27621728
|
||||
:1004C0007307840738F09F5F5F4F220F331F441F6D
|
||||
:1004D000AA1FA9F333D00E2E3AF0E0E830D09150A5
|
||||
:1004E0005040E695001CCAF729D0FE2F27D0660F92
|
||||
:1004F000771F881FBB1F261737074807AB07B0E8D1
|
||||
:1005000009F0BB0B802DBF01FF2793585F4F2AF0E6
|
||||
:100510009E3F510568F08DC0D7C05F3FECF3983E19
|
||||
:10052000DCF3869577956795B795F7959F5FC9F743
|
||||
:10053000880F911D9695879597F90895E1E0660FCC
|
||||
:10054000771F881FBB1F621773078407BA0720F045
|
||||
:10055000621B730B840BBA0BEE1F88F7E0950895AE
|
||||
:1005600098D088F09F5790F0B92F9927B751A0F0F5
|
||||
:10057000D1F0660F771F881F991F1AF0BA95C9F737
|
||||
:1005800012C0B13081F09FD0B1E008959CC0672FB8
|
||||
:10059000782F8827B85F39F0B93FCCF386957795E7
|
||||
:1005A0006795B395D9F73EF49095809570956195D0
|
||||
:1005B0007F4F8F4F9F4F0895E89409C097FB3EF4FB
|
||||
:1005C00090958095709561957F4F8F4F9F4F9923A0
|
||||
:1005D000A9F0F92F96E9BB279395F695879577951E
|
||||
:1005E0006795B795F111F8CFFAF4BB0F11F460FFDE
|
||||
:1005F0001BC06F5F7F4F8F4F9F4F16C0882311F036
|
||||
:1006000096E911C0772321F09EE8872F762F05C049
|
||||
:10061000662371F096E8862F70E060E02AF09A95E4
|
||||
:10062000660F771F881FDAF7880F9695879597F9D9
|
||||
:10063000089597F99F6780E870E060E008959FEF64
|
||||
:1006400080EC089500240A94161617061806090669
|
||||
:10065000089500240A941216130614060506089538
|
||||
:10066000092E0394000C11F4882352F0BB0F40F4C0
|
||||
:10067000BF2B11F460FF04C06F5F7F4F8F4F9F4F00
|
||||
:10068000089557FD9058440F551F59F05F3F71F082
|
||||
:100690004795880F97FB991F61F09F3F79F08795E9
|
||||
:1006A0000895121613061406551FF2CF4695F1DF72
|
||||
:1006B00008C0161617061806991FF1CF8695710502
|
||||
:1006C000610508940895E894BB2766277727CB0136
|
||||
:1006D00097F90895AA1BBB1B51E107C0AA1FBB1FB6
|
||||
:1006E000A617B70710F0A61BB70B881F991F5A95BE
|
||||
:1006F000A9F780959095BC01CD01089597FB092E2F
|
||||
:1007000007260AD077FD04D0E5DF06D000201AF4D2
|
||||
:10071000709561957F4F0895F6F7909581959F4F5D
|
||||
:100720000895A1E21A2EAA1BBB1BFD010DC0AA1F32
|
||||
:10073000BB1FEE1FFF1FA217B307E407F50720F04A
|
||||
:10074000A21BB30BE40BF50B661F771F881F991FC5
|
||||
:100750001A9469F760957095809590959B01AC010E
|
||||
:10076000BD01CF010895FB019F01E8944230BCF028
|
||||
:100770004532ACF44A3029F497FB1EF490958195EC
|
||||
:100780009F4F642F7727A6DF805D8A330CF0895D49
|
||||
:100790008193CB010097A9F716F45DE25193108283
|
||||
:1007A000C90100C0DC01FC01672F71917723E1F7DB
|
||||
:1007B000329704C07C916D9370836291AE17BF072E
|
||||
:0807C000C8F30895F894FFCF7F
|
||||
:00000001FF
|
||||
|
|
|
@ -1,11 +1,41 @@
|
|||
Archive member included because of file (symbol)
|
||||
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
src/main.o (__divsf3)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o) (__divsf3x)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
src/main.o (__fixunssfsi)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(floatsisf.o)
|
||||
src/main.o (__floatunsisf)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_inf.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o) (__fp_inf)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_nan.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o) (__fp_nan)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscA.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o) (__fp_pscA)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscB.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o) (__fp_pscB)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_round.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o) (__fp_round)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_split3.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o) (__fp_split3)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_zero.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o) (__fp_zero)
|
||||
/usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodhi4.o)
|
||||
src/main.o (__udivmodhi4)
|
||||
/usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_divmodhi4.o)
|
||||
src/main.o (__divmodhi4)
|
||||
/usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
src/adc.o (__udivmodsi4)
|
||||
/usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o (exit)
|
||||
/usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
src/main.o (__do_clear_bss)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
src/main.o (itoa)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(strrev.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o) (strrev)
|
||||
|
||||
Memory Configuration
|
||||
|
||||
|
@ -24,6 +54,7 @@ LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
|||
LOAD src/main.o
|
||||
LOAD src/adc.o
|
||||
LOAD src/utils.o
|
||||
LOAD src/uart.o
|
||||
LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a
|
||||
LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
||||
LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a
|
||||
|
@ -119,7 +150,7 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
|||
.rela.plt
|
||||
*(.rela.plt)
|
||||
|
||||
.text 0x0000000000000000 0x1a0
|
||||
.text 0x0000000000000000 0x7c8
|
||||
*(.vectors)
|
||||
.vectors 0x0000000000000000 0x26 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
0x0000000000000000 __vectors
|
||||
|
@ -127,38 +158,40 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
|||
*(.vectors)
|
||||
*(.progmem.gcc*)
|
||||
*(.progmem*)
|
||||
0x0000000000000026 . = ALIGN (0x2)
|
||||
0x0000000000000026 __trampolines_start = .
|
||||
.progmem.data 0x0000000000000026 0x3b src/main.o
|
||||
0x0000000000000062 . = ALIGN (0x2)
|
||||
*fill* 0x0000000000000061 0x1 00
|
||||
0x0000000000000062 __trampolines_start = .
|
||||
*(.trampolines)
|
||||
.trampolines 0x0000000000000026 0x0 linker stubs
|
||||
.trampolines 0x0000000000000062 0x0 linker stubs
|
||||
*(.trampolines*)
|
||||
0x0000000000000026 __trampolines_end = .
|
||||
0x0000000000000062 __trampolines_end = .
|
||||
*(.jumptables)
|
||||
*(.jumptables*)
|
||||
*(.lowtext)
|
||||
*(.lowtext*)
|
||||
0x0000000000000026 __ctors_start = .
|
||||
0x0000000000000062 __ctors_start = .
|
||||
*(.ctors)
|
||||
0x0000000000000026 __ctors_end = .
|
||||
0x0000000000000026 __dtors_start = .
|
||||
0x0000000000000062 __ctors_end = .
|
||||
0x0000000000000062 __dtors_start = .
|
||||
*(.dtors)
|
||||
0x0000000000000026 __dtors_end = .
|
||||
0x0000000000000062 __dtors_end = .
|
||||
SORT(*)(.ctors)
|
||||
SORT(*)(.dtors)
|
||||
*(.init0)
|
||||
.init0 0x0000000000000026 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
0x0000000000000026 __init
|
||||
.init0 0x0000000000000062 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
0x0000000000000062 __init
|
||||
*(.init0)
|
||||
*(.init1)
|
||||
*(.init1)
|
||||
*(.init2)
|
||||
.init2 0x0000000000000026 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
.init2 0x0000000000000062 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
*(.init2)
|
||||
*(.init3)
|
||||
*(.init3)
|
||||
*(.init4)
|
||||
.init4 0x0000000000000032 0x10 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
0x0000000000000032 __do_clear_bss
|
||||
.init4 0x000000000000006e 0x10 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
0x000000000000006e __do_clear_bss
|
||||
*(.init4)
|
||||
*(.init5)
|
||||
*(.init5)
|
||||
|
@ -169,55 +202,124 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
|||
*(.init8)
|
||||
*(.init8)
|
||||
*(.init9)
|
||||
.init9 0x0000000000000042 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
.init9 0x000000000000007e 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
*(.init9)
|
||||
*(.text)
|
||||
.text 0x0000000000000046 0x2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
0x0000000000000046 __vector_1
|
||||
0x0000000000000046 __vector_12
|
||||
0x0000000000000046 __bad_interrupt
|
||||
0x0000000000000046 __vector_3
|
||||
0x0000000000000046 __vector_11
|
||||
0x0000000000000046 __vector_13
|
||||
0x0000000000000046 __vector_17
|
||||
0x0000000000000046 __vector_7
|
||||
0x0000000000000046 __vector_5
|
||||
0x0000000000000046 __vector_4
|
||||
0x0000000000000046 __vector_9
|
||||
0x0000000000000046 __vector_2
|
||||
0x0000000000000046 __vector_15
|
||||
0x0000000000000046 __vector_8
|
||||
0x0000000000000046 __vector_14
|
||||
0x0000000000000046 __vector_10
|
||||
0x0000000000000046 __vector_16
|
||||
0x0000000000000046 __vector_18
|
||||
.text 0x0000000000000048 0x70 src/main.o
|
||||
0x0000000000000048 timer_init
|
||||
0x000000000000005e ports_init
|
||||
0x000000000000006c get_voltage
|
||||
0x0000000000000070 get_power
|
||||
0x0000000000000082 main
|
||||
0x000000000000008a __vector_6
|
||||
.text 0x00000000000000b8 0x82 src/adc.o
|
||||
0x00000000000000b8 adc_init
|
||||
0x00000000000000ce adc_read_single
|
||||
0x00000000000000e6 adc_read_avg
|
||||
.text 0x000000000000013a 0x1e src/utils.o
|
||||
0x000000000000013a wait
|
||||
.text 0x0000000000000158 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
.text 0x0000000000000158 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
.text 0x0000000000000158 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
0x0000000000000158 . = ALIGN (0x2)
|
||||
.text 0x0000000000000082 0x2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
0x0000000000000082 __vector_1
|
||||
0x0000000000000082 __bad_interrupt
|
||||
0x0000000000000082 __vector_3
|
||||
0x0000000000000082 __vector_13
|
||||
0x0000000000000082 __vector_17
|
||||
0x0000000000000082 __vector_7
|
||||
0x0000000000000082 __vector_5
|
||||
0x0000000000000082 __vector_4
|
||||
0x0000000000000082 __vector_9
|
||||
0x0000000000000082 __vector_2
|
||||
0x0000000000000082 __vector_15
|
||||
0x0000000000000082 __vector_8
|
||||
0x0000000000000082 __vector_14
|
||||
0x0000000000000082 __vector_10
|
||||
0x0000000000000082 __vector_16
|
||||
0x0000000000000082 __vector_18
|
||||
.text 0x0000000000000084 0x20c src/main.o
|
||||
0x0000000000000084 timer_init
|
||||
0x000000000000009a ports_init
|
||||
0x00000000000000a8 measure
|
||||
0x000000000000011c get_power
|
||||
0x000000000000013e main
|
||||
0x0000000000000262 __vector_6
|
||||
.text 0x0000000000000290 0x82 src/adc.o
|
||||
0x0000000000000290 adc_init
|
||||
0x00000000000002a6 adc_read_single
|
||||
0x00000000000002be adc_read_avg
|
||||
.text 0x0000000000000312 0x1e src/utils.o
|
||||
0x0000000000000312 wait
|
||||
.text 0x0000000000000330 0x160 src/uart.o
|
||||
0x0000000000000330 __vector_11
|
||||
0x0000000000000388 __vector_12
|
||||
0x00000000000003d2 uart_init
|
||||
0x00000000000003fa uart_getc
|
||||
0x000000000000042e uart_putc
|
||||
0x0000000000000450 uart_puts
|
||||
0x0000000000000476 uart_puts_p
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(floatsisf.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_inf.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_nan.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscA.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscB.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_round.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_split3.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_zero.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodhi4.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_divmodhi4.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
.text 0x0000000000000490 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(strrev.o)
|
||||
0x0000000000000490 . = ALIGN (0x2)
|
||||
*(.text.*)
|
||||
.text.libgcc 0x0000000000000158 0x44 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
0x0000000000000158 __udivmodsi4
|
||||
.text.libgcc 0x000000000000019c 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
.text.libgcc 0x000000000000019c 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
0x000000000000019c . = ALIGN (0x2)
|
||||
.text.avr-libc.fplib
|
||||
0x0000000000000490 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
0x0000000000000490 __divsf3
|
||||
.text.avr-libc.fplib
|
||||
0x0000000000000494 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
0x00000000000004aa __divsf3x
|
||||
0x00000000000004ae __divsf3_pse
|
||||
.text.avr-libc.fplib
|
||||
0x0000000000000560 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
0x0000000000000560 __fixunssfsi
|
||||
.text.avr-libc.fplib
|
||||
0x00000000000005b8 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(floatsisf.o)
|
||||
0x00000000000005b8 __floatunsisf
|
||||
0x00000000000005bc __floatsisf
|
||||
.text.avr-libc.fplib
|
||||
0x0000000000000632 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_inf.o)
|
||||
0x0000000000000632 __fp_inf
|
||||
.text.avr-libc.fplib
|
||||
0x000000000000063e 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_nan.o)
|
||||
0x000000000000063e __fp_nan
|
||||
.text.avr-libc.fplib
|
||||
0x0000000000000644 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscA.o)
|
||||
0x0000000000000644 __fp_pscA
|
||||
.text.avr-libc.fplib
|
||||
0x0000000000000652 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscB.o)
|
||||
0x0000000000000652 __fp_pscB
|
||||
.text.avr-libc.fplib
|
||||
0x0000000000000660 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_round.o)
|
||||
0x0000000000000660 __fp_round
|
||||
.text.avr-libc.fplib
|
||||
0x0000000000000682 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_split3.o)
|
||||
0x0000000000000682 __fp_split3
|
||||
0x0000000000000692 __fp_splitA
|
||||
.text.avr-libc.fplib
|
||||
0x00000000000006c6 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_zero.o)
|
||||
0x00000000000006c6 __fp_zero
|
||||
0x00000000000006c8 __fp_szero
|
||||
.text.libgcc 0x00000000000006d4 0x28 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodhi4.o)
|
||||
0x00000000000006d4 __udivmodhi4
|
||||
.text.libgcc 0x00000000000006fc 0x26 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_divmodhi4.o)
|
||||
0x00000000000006fc __divmodhi4
|
||||
0x00000000000006fc _div
|
||||
.text.libgcc 0x0000000000000722 0x44 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
0x0000000000000722 __udivmodsi4
|
||||
.text.libgcc 0x0000000000000766 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
.text.libgcc 0x0000000000000766 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
.text.avr-libc
|
||||
0x0000000000000766 0x3e /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
0x0000000000000766 itoa
|
||||
.text.avr-libc
|
||||
0x00000000000007a4 0x20 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(strrev.o)
|
||||
0x00000000000007a4 strrev
|
||||
0x00000000000007c4 . = ALIGN (0x2)
|
||||
*(.fini9)
|
||||
.fini9 0x000000000000019c 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
0x000000000000019c exit
|
||||
0x000000000000019c _exit
|
||||
.fini9 0x00000000000007c4 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
0x00000000000007c4 exit
|
||||
0x00000000000007c4 _exit
|
||||
*(.fini9)
|
||||
*(.fini8)
|
||||
*(.fini8)
|
||||
|
@ -236,20 +338,36 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
|||
*(.fini1)
|
||||
*(.fini1)
|
||||
*(.fini0)
|
||||
.fini0 0x000000000000019c 0x4 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
.fini0 0x00000000000007c4 0x4 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
*(.fini0)
|
||||
0x00000000000001a0 _etext = .
|
||||
0x00000000000007c8 _etext = .
|
||||
|
||||
.data 0x0000000000800060 0x0 load address 0x00000000000001a0
|
||||
.data 0x0000000000800060 0x0 load address 0x00000000000007c8
|
||||
0x0000000000800060 PROVIDE (__data_start, .)
|
||||
*(.data)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
.data 0x0000000000800060 0x0 src/main.o
|
||||
.data 0x0000000000800060 0x0 src/adc.o
|
||||
.data 0x0000000000800060 0x0 src/utils.o
|
||||
.data 0x0000000000800060 0x0 src/uart.o
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(floatsisf.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_inf.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_nan.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscA.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscB.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_round.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_split3.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_zero.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodhi4.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_divmodhi4.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(strrev.o)
|
||||
*(.data*)
|
||||
*(.rodata)
|
||||
*(.rodata*)
|
||||
|
@ -258,29 +376,48 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
|||
0x0000000000800060 _edata = .
|
||||
0x0000000000800060 PROVIDE (__data_end, .)
|
||||
|
||||
.bss 0x0000000000800060 0x2
|
||||
.bss 0x0000000000800060 0x4d
|
||||
0x0000000000800060 PROVIDE (__bss_start, .)
|
||||
*(.bss)
|
||||
.bss 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
.bss 0x0000000000800060 0x2 src/main.o
|
||||
.bss 0x0000000000800060 0x8 src/main.o
|
||||
0x0000000000800060 syscounter
|
||||
.bss 0x0000000000800062 0x0 src/adc.o
|
||||
.bss 0x0000000000800062 0x0 src/utils.o
|
||||
.bss 0x0000000000800062 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
.bss 0x0000000000800062 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
.bss 0x0000000000800062 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
0x0000000000800062 voltage
|
||||
0x0000000000800064 ampere_in
|
||||
0x0000000000800066 ampere_out
|
||||
.bss 0x0000000000800068 0x0 src/adc.o
|
||||
.bss 0x0000000000800068 0x0 src/utils.o
|
||||
.bss 0x0000000000800068 0x45 src/uart.o
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(floatsisf.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_inf.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_nan.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscA.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscB.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_round.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_split3.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_zero.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodhi4.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_divmodhi4.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
.bss 0x00000000008000ad 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(strrev.o)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
0x0000000000800062 PROVIDE (__bss_end, .)
|
||||
0x00000000000001a0 __data_load_start = LOADADDR (.data)
|
||||
0x00000000000001a0 __data_load_end = (__data_load_start + SIZEOF (.data))
|
||||
0x00000000008000ad PROVIDE (__bss_end, .)
|
||||
0x00000000000007c8 __data_load_start = LOADADDR (.data)
|
||||
0x00000000000007c8 __data_load_end = (__data_load_start + SIZEOF (.data))
|
||||
|
||||
.noinit 0x0000000000800062 0x0
|
||||
0x0000000000800062 PROVIDE (__noinit_start, .)
|
||||
.noinit 0x00000000008000ad 0x0
|
||||
0x00000000008000ad PROVIDE (__noinit_start, .)
|
||||
*(.noinit*)
|
||||
0x0000000000800062 PROVIDE (__noinit_end, .)
|
||||
0x0000000000800062 _end = .
|
||||
0x0000000000800062 PROVIDE (__heap_start, .)
|
||||
0x00000000008000ad PROVIDE (__noinit_end, .)
|
||||
0x00000000008000ad _end = .
|
||||
0x00000000008000ad PROVIDE (__heap_start, .)
|
||||
|
||||
.eeprom 0x0000000000810000 0x0
|
||||
*(.eeprom*)
|
||||
|
@ -298,13 +435,39 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
|||
.signature
|
||||
*(.signature*)
|
||||
|
||||
.stab 0x0000000000000000 0x6cc
|
||||
.stab 0x0000000000000000 0x1938
|
||||
*(.stab)
|
||||
.stab 0x0000000000000000 0x6cc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
.stab 0x00000000000006cc 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
0x54 (size before relaxing)
|
||||
.stab 0x0000000000000714 0x510 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
0x51c (size before relaxing)
|
||||
.stab 0x0000000000000c24 0x240 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
0x24c (size before relaxing)
|
||||
.stab 0x0000000000000e64 0x318 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(floatsisf.o)
|
||||
0x324 (size before relaxing)
|
||||
.stab 0x000000000000117c 0x78 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_inf.o)
|
||||
0x84 (size before relaxing)
|
||||
.stab 0x00000000000011f4 0x54 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_nan.o)
|
||||
0x60 (size before relaxing)
|
||||
.stab 0x0000000000001248 0x84 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscA.o)
|
||||
0x90 (size before relaxing)
|
||||
.stab 0x00000000000012cc 0x84 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscB.o)
|
||||
0x90 (size before relaxing)
|
||||
.stab 0x0000000000001350 0xfc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_round.o)
|
||||
0x108 (size before relaxing)
|
||||
.stab 0x000000000000144c 0x1d4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_split3.o)
|
||||
0x1e0 (size before relaxing)
|
||||
.stab 0x0000000000001620 0x90 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_zero.o)
|
||||
0x9c (size before relaxing)
|
||||
.stab 0x00000000000016b0 0x1b0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
0x1bc (size before relaxing)
|
||||
.stab 0x0000000000001860 0xd8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(strrev.o)
|
||||
0xe4 (size before relaxing)
|
||||
|
||||
.stabstr 0x0000000000000000 0x54
|
||||
.stabstr 0x0000000000000000 0x2b3
|
||||
*(.stabstr)
|
||||
.stabstr 0x0000000000000000 0x54 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
.stabstr 0x0000000000000000 0x2b3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
|
||||
.stab.excl
|
||||
*(.stab.excl)
|
||||
|
@ -333,7 +496,7 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
|||
.debug_sfnames
|
||||
*(.debug_sfnames)
|
||||
|
||||
.debug_aranges 0x0000000000000000 0x60
|
||||
.debug_aranges 0x0000000000000000 0x80
|
||||
*(.debug_aranges)
|
||||
.debug_aranges
|
||||
0x0000000000000000 0x20 src/main.o
|
||||
|
@ -341,56 +504,67 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a
|
|||
0x0000000000000020 0x20 src/adc.o
|
||||
.debug_aranges
|
||||
0x0000000000000040 0x20 src/utils.o
|
||||
.debug_aranges
|
||||
0x0000000000000060 0x20 src/uart.o
|
||||
|
||||
.debug_pubnames
|
||||
0x0000000000000000 0xd4
|
||||
0x0000000000000000 0x173
|
||||
*(.debug_pubnames)
|
||||
.debug_pubnames
|
||||
0x0000000000000000 0x75 src/main.o
|
||||
0x0000000000000000 0x9a src/main.o
|
||||
.debug_pubnames
|
||||
0x0000000000000075 0x44 src/adc.o
|
||||
0x000000000000009a 0x44 src/adc.o
|
||||
.debug_pubnames
|
||||
0x00000000000000b9 0x1b src/utils.o
|
||||
0x00000000000000de 0x1b src/utils.o
|
||||
.debug_pubnames
|
||||
0x00000000000000f9 0x7a src/uart.o
|
||||
|
||||
.debug_info 0x0000000000000000 0x40e
|
||||
.debug_info 0x0000000000000000 0x7a7
|
||||
*(.debug_info)
|
||||
.debug_info 0x0000000000000000 0x19c src/main.o
|
||||
.debug_info 0x000000000000019c 0x136 src/adc.o
|
||||
.debug_info 0x00000000000002d2 0x13c src/utils.o
|
||||
.debug_info 0x0000000000000000 0x259 src/main.o
|
||||
.debug_info 0x0000000000000259 0x136 src/adc.o
|
||||
.debug_info 0x000000000000038f 0x13c src/utils.o
|
||||
.debug_info 0x00000000000004cb 0x2dc src/uart.o
|
||||
*(.gnu.linkonce.wi.*)
|
||||
|
||||
.debug_abbrev 0x0000000000000000 0x2a5
|
||||
.debug_abbrev 0x0000000000000000 0x3d5
|
||||
*(.debug_abbrev)
|
||||
.debug_abbrev 0x0000000000000000 0x113 src/main.o
|
||||
.debug_abbrev 0x0000000000000113 0xb4 src/adc.o
|
||||
.debug_abbrev 0x00000000000001c7 0xde src/utils.o
|
||||
.debug_abbrev 0x0000000000000000 0x12a src/main.o
|
||||
.debug_abbrev 0x000000000000012a 0xb4 src/adc.o
|
||||
.debug_abbrev 0x00000000000001de 0xde src/utils.o
|
||||
.debug_abbrev 0x00000000000002bc 0x119 src/uart.o
|
||||
|
||||
.debug_line 0x0000000000000000 0x384
|
||||
.debug_line 0x0000000000000000 0x6fb
|
||||
*(.debug_line)
|
||||
.debug_line 0x0000000000000000 0x144 src/main.o
|
||||
.debug_line 0x0000000000000144 0x13b src/adc.o
|
||||
.debug_line 0x000000000000027f 0x105 src/utils.o
|
||||
.debug_line 0x0000000000000000 0x252 src/main.o
|
||||
.debug_line 0x0000000000000252 0x13b src/adc.o
|
||||
.debug_line 0x000000000000038d 0x105 src/utils.o
|
||||
.debug_line 0x0000000000000492 0x269 src/uart.o
|
||||
|
||||
.debug_frame 0x0000000000000000 0xd0
|
||||
.debug_frame 0x0000000000000000 0x150
|
||||
*(.debug_frame)
|
||||
.debug_frame 0x0000000000000000 0x70 src/main.o
|
||||
.debug_frame 0x0000000000000070 0x40 src/adc.o
|
||||
.debug_frame 0x00000000000000b0 0x20 src/utils.o
|
||||
.debug_frame 0x00000000000000d0 0x80 src/uart.o
|
||||
|
||||
.debug_str 0x0000000000000000 0x1cd
|
||||
.debug_str 0x0000000000000000 0x2bf
|
||||
*(.debug_str)
|
||||
.debug_str 0x0000000000000000 0x116 src/main.o
|
||||
0x159 (size before relaxing)
|
||||
.debug_str 0x0000000000000116 0x56 src/adc.o
|
||||
.debug_str 0x0000000000000000 0x114 src/main.o
|
||||
0x155 (size before relaxing)
|
||||
.debug_str 0x0000000000000114 0x56 src/adc.o
|
||||
0x11a (size before relaxing)
|
||||
.debug_str 0x000000000000016c 0x61 src/utils.o
|
||||
.debug_str 0x000000000000016a 0x61 src/utils.o
|
||||
0x12e (size before relaxing)
|
||||
.debug_str 0x00000000000001cb 0xf4 src/uart.o
|
||||
0x1c9 (size before relaxing)
|
||||
|
||||
.debug_loc 0x0000000000000000 0x17b
|
||||
.debug_loc 0x0000000000000000 0x3f3
|
||||
*(.debug_loc)
|
||||
.debug_loc 0x0000000000000000 0x1e src/main.o
|
||||
.debug_loc 0x000000000000001e 0xcf src/adc.o
|
||||
.debug_loc 0x00000000000000ed 0x8e src/utils.o
|
||||
.debug_loc 0x0000000000000000 0xac src/main.o
|
||||
.debug_loc 0x00000000000000ac 0xcf src/adc.o
|
||||
.debug_loc 0x000000000000017b 0x8e src/utils.o
|
||||
.debug_loc 0x0000000000000209 0x1ea src/uart.o
|
||||
|
||||
.debug_macinfo
|
||||
*(.debug_macinfo)
|
||||
|
@ -398,13 +572,18 @@ OUTPUT(main.elf elf32-avr)
|
|||
LOAD linker stubs
|
||||
|
||||
.debug_pubtypes
|
||||
0x0000000000000000 0xac
|
||||
0x0000000000000000 0xd2
|
||||
.debug_pubtypes
|
||||
0x0000000000000000 0x3c src/main.o
|
||||
0x0000000000000000 0x37 src/main.o
|
||||
.debug_pubtypes
|
||||
0x000000000000003c 0x38 src/adc.o
|
||||
0x0000000000000037 0x38 src/adc.o
|
||||
.debug_pubtypes
|
||||
0x0000000000000074 0x38 src/utils.o
|
||||
0x000000000000006f 0x38 src/utils.o
|
||||
.debug_pubtypes
|
||||
0x00000000000000a7 0x2b src/uart.o
|
||||
|
||||
.debug_ranges 0x0000000000000000 0x18
|
||||
.debug_ranges 0x0000000000000000 0x18 src/main.o
|
||||
|
||||
Cross Reference Table
|
||||
|
||||
|
@ -412,17 +591,54 @@ Symbol File
|
|||
__bad_interrupt /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__bss_end /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
__bss_start /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
__do_clear_bss /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
__divmodhi4 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_divmodhi4.o)
|
||||
src/main.o
|
||||
__divsf3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
src/main.o
|
||||
__divsf3_pse /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
__divsf3x /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
__do_clear_bss /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_clear_bss.o)
|
||||
src/uart.o
|
||||
src/main.o
|
||||
__fixunssfsi /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
src/main.o
|
||||
__floatsisf /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(floatsisf.o)
|
||||
__floatunsisf /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(floatsisf.o)
|
||||
src/main.o
|
||||
__fp_inf /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_inf.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
__fp_nan /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_nan.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
__fp_pscA /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscA.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
__fp_pscB /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_pscB.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
__fp_round /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_round.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3.o)
|
||||
__fp_split3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_split3.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
__fp_splitA /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_split3.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
__fp_szero /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_zero.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(divsf3x.o)
|
||||
__fp_zero /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fp_zero.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libm.a(fixunssfsi.o)
|
||||
__heap_end /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__init /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__stack /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__udivmodhi4 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodhi4.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
/usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_divmodhi4.o)
|
||||
src/main.o
|
||||
__udivmodsi4 /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_udivmodsi4.o)
|
||||
src/adc.o
|
||||
__vector_1 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_10 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_11 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_12 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_11 src/uart.o
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_12 src/uart.o
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_13 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_14 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_15 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
|
@ -440,19 +656,36 @@ __vector_8 /usr/lib/gcc/avr/4.5.3/../../.
|
|||
__vector_9 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vector_default /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
__vectors /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
_div /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_divmodhi4.o)
|
||||
_exit /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
adc_init src/adc.o
|
||||
src/main.o
|
||||
adc_read_avg src/adc.o
|
||||
src/main.o
|
||||
adc_read_single src/adc.o
|
||||
ampere_in src/main.o
|
||||
ampere_out src/main.o
|
||||
exit /usr/lib/gcc/avr/4.5.3/avr4/libgcc.a(_exit.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
get_power src/main.o
|
||||
get_voltage src/main.o
|
||||
itoa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
src/main.o
|
||||
main src/main.o
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/crtm8.o
|
||||
measure src/main.o
|
||||
ports_init src/main.o
|
||||
strrev /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(strrev.o)
|
||||
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr4/libc.a(itoa.o)
|
||||
syscounter src/main.o
|
||||
timer_init src/main.o
|
||||
uart_getc src/uart.o
|
||||
uart_init src/uart.o
|
||||
src/main.o
|
||||
uart_putc src/uart.o
|
||||
uart_puts src/uart.o
|
||||
src/main.o
|
||||
uart_puts_p src/uart.o
|
||||
src/main.o
|
||||
voltage src/main.o
|
||||
wait src/utils.o
|
||||
src/main.o
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <avr/pgmspace.h>
|
||||
#include <utils.h>
|
||||
#include "adc.h"
|
||||
#include "uart.h"
|
||||
|
||||
#define AD_I_LOAD 0
|
||||
#define AD_I_GEN 1
|
||||
|
@ -28,6 +29,9 @@ typedef enum {
|
|||
|
||||
|
||||
volatile uint16_t syscounter = 0;
|
||||
uint16_t voltage = 0;
|
||||
int16_t current_in = 0;
|
||||
int16_t current_out = 0;
|
||||
|
||||
void timer_init(void) {
|
||||
// clock is 8MHz
|
||||
|
@ -42,38 +46,73 @@ void ports_init(void) {
|
|||
PORT_SW &= ~(_BV(LOADSW) | _BV(GENSW) | _BV(DUMPSW));
|
||||
}
|
||||
|
||||
uint8_t get_voltage(void) {
|
||||
// voltage has a divider (12V - 56k - ADC - 27k - GND)
|
||||
// so
|
||||
uint8_t voltage = 0;
|
||||
void measure(void) {
|
||||
voltage = adc_read_avg(AD_V, 4) / 6.6;
|
||||
|
||||
return voltage;
|
||||
current_in = adc_read_avg(AD_I_GEN, 4);
|
||||
current_in -= 510;
|
||||
current_in *= 72;
|
||||
|
||||
current_out = adc_read_avg(AD_I_LOAD, 4);
|
||||
current_out -= 511;
|
||||
current_out *= 72;
|
||||
}
|
||||
|
||||
uint8_t get_power(power_source source) {
|
||||
|
||||
uint16_t voltage = get_voltage();
|
||||
uint16_t amperes;
|
||||
|
||||
if(source == generated) {
|
||||
amperes = adc_read_avg(AD_I_GEN, 4);
|
||||
} else {
|
||||
amperes = adc_read_avg(AD_I_LOAD, 4);
|
||||
}
|
||||
|
||||
return 0;
|
||||
uint8_t get_power(uint16_t voltage, int16_t currents) {
|
||||
return (voltage * (currents/100)) / 100;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main(void) {
|
||||
ports_init();
|
||||
adc_init();
|
||||
adc_init();
|
||||
timer_init();
|
||||
|
||||
uart_init(UART_BAUD_SELECT(9600,F_OSC));
|
||||
|
||||
char s[10];
|
||||
|
||||
LOAD_ON;
|
||||
GEN_ON;
|
||||
DUMP_OFF;
|
||||
|
||||
while(1) {
|
||||
|
||||
measure();
|
||||
|
||||
uart_puts_P("Voltage: ");
|
||||
uart_puts ( itoa ( voltage, s, 10 ) );
|
||||
uart_puts_P("dV\r\n");
|
||||
|
||||
uart_puts_P("Load: ");
|
||||
uart_puts ( itoa ( current_out, s, 10 ) );
|
||||
uart_puts_P("mA ");
|
||||
|
||||
uart_puts ( itoa ( get_power(voltage, current_out), s, 10 ) );
|
||||
uart_puts_P("W\r\n");
|
||||
|
||||
|
||||
uart_puts_P("Generator: ");
|
||||
uart_puts ( itoa ( current_in, s, 10 ) );
|
||||
uart_puts_P("mA ");
|
||||
|
||||
uart_puts ( itoa ( get_power(voltage, current_in), s, 10 ) );
|
||||
uart_puts_P("W\r\n");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
wait(100);
|
||||
wait(100);
|
||||
wait(100);
|
||||
wait(100);
|
||||
//wait(100);
|
||||
//wait(100);
|
||||
wait(100);
|
||||
wait(100);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
36 0010 89BF out 89-32,r24
|
||||
37 .LM5:
|
||||
38 /* #APP */
|
||||
39 ; 37 "src/main.c" 1
|
||||
39 ; 41 "src/main.c" 1
|
||||
40 0012 7894 sei
|
||||
41 ; 0 "" 2
|
||||
42 /* epilogue start */
|
||||
|
@ -56,120 +56,413 @@
|
|||
66 .LM10:
|
||||
67 0022 0895 ret
|
||||
68 .LFE1:
|
||||
70 .global get_voltage
|
||||
72 get_voltage:
|
||||
70 .global measure
|
||||
72 measure:
|
||||
73 .LFB2:
|
||||
74 .LM11:
|
||||
75 /* prologue: function */
|
||||
76 /* frame size = 0 */
|
||||
77 /* stack size = 0 */
|
||||
78 .L__stack_usage = 0
|
||||
79 .LVL0:
|
||||
80 .LM12:
|
||||
81 0024 80E0 ldi r24,lo8(0)
|
||||
82 /* epilogue start */
|
||||
83 0026 0895 ret
|
||||
84 .LFE2:
|
||||
86 .global get_power
|
||||
88 get_power:
|
||||
89 .LFB3:
|
||||
90 .LM13:
|
||||
91 .LVL1:
|
||||
92 /* prologue: function */
|
||||
93 /* frame size = 0 */
|
||||
94 /* stack size = 0 */
|
||||
95 .L__stack_usage = 0
|
||||
96 .LM14:
|
||||
97 0028 8823 tst r24
|
||||
98 002a 01F4 brne .L5
|
||||
99 .LM15:
|
||||
100 002c 81E0 ldi r24,lo8(1)
|
||||
101 .LVL2:
|
||||
102 002e 00C0 rjmp .L7
|
||||
103 .LVL3:
|
||||
104 .L5:
|
||||
105 .LM16:
|
||||
106 0030 80E0 ldi r24,lo8(0)
|
||||
107 .LVL4:
|
||||
108 .L7:
|
||||
109 0032 64E0 ldi r22,lo8(4)
|
||||
110 0034 00D0 rcall adc_read_avg
|
||||
111 .LM17:
|
||||
112 0036 80E0 ldi r24,lo8(0)
|
||||
113 /* epilogue start */
|
||||
114 0038 0895 ret
|
||||
115 .LFE3:
|
||||
117 .global main
|
||||
119 main:
|
||||
120 .LFB4:
|
||||
121 .LM18:
|
||||
122 /* prologue: function */
|
||||
123 /* frame size = 0 */
|
||||
124 /* stack size = 0 */
|
||||
125 .L__stack_usage = 0
|
||||
126 .LM19:
|
||||
127 003a 00D0 rcall ports_init
|
||||
128 .LM20:
|
||||
129 003c 00D0 rcall adc_init
|
||||
130 .LM21:
|
||||
131 003e 00D0 rcall timer_init
|
||||
132 .L9:
|
||||
133 0040 00C0 rjmp .L9
|
||||
134 .LFE4:
|
||||
136 .global __vector_6
|
||||
138 __vector_6:
|
||||
139 .LFB5:
|
||||
140 .LM22:
|
||||
141 0042 1F92 push __zero_reg__
|
||||
142 0044 0F92 push r0
|
||||
143 0046 0FB6 in r0,__SREG__
|
||||
144 0048 0F92 push r0
|
||||
145 004a 1124 clr __zero_reg__
|
||||
146 004c 8F93 push r24
|
||||
147 004e 9F93 push r25
|
||||
148 /* prologue: Signal */
|
||||
75 0024 CF93 push r28
|
||||
76 0026 DF93 push r29
|
||||
77 /* prologue: function */
|
||||
78 /* frame size = 0 */
|
||||
79 /* stack size = 2 */
|
||||
80 .L__stack_usage = 2
|
||||
81 .LM12:
|
||||
82 0028 82E0 ldi r24,lo8(2)
|
||||
83 002a 64E0 ldi r22,lo8(4)
|
||||
84 002c 00D0 rcall adc_read_avg
|
||||
85 002e BC01 movw r22,r24
|
||||
86 0030 80E0 ldi r24,lo8(0)
|
||||
87 0032 90E0 ldi r25,hi8(0)
|
||||
88 0034 00D0 rcall __floatunsisf
|
||||
89 0036 23E3 ldi r18,lo8(0x40d33333)
|
||||
90 0038 33E3 ldi r19,hi8(0x40d33333)
|
||||
91 003a 43ED ldi r20,hlo8(0x40d33333)
|
||||
92 003c 50E4 ldi r21,hhi8(0x40d33333)
|
||||
93 003e 00D0 rcall __divsf3
|
||||
94 0040 00D0 rcall __fixunssfsi
|
||||
95 0042 7093 0000 sts voltage+1,r23
|
||||
96 0046 6093 0000 sts voltage,r22
|
||||
97 .LM13:
|
||||
98 004a 81E0 ldi r24,lo8(1)
|
||||
99 004c 64E0 ldi r22,lo8(4)
|
||||
100 004e 00D0 rcall adc_read_avg
|
||||
101 .LM14:
|
||||
102 0050 9C01 movw r18,r24
|
||||
103 0052 2E5F subi r18,lo8(-(-510))
|
||||
104 0054 3140 sbci r19,hi8(-(-510))
|
||||
105 .LM15:
|
||||
106 0056 C8E4 ldi r28,lo8(72)
|
||||
107 0058 D0E0 ldi r29,hi8(72)
|
||||
108 005a 2C9F mul r18,r28
|
||||
109 005c C001 movw r24,r0
|
||||
110 005e 2D9F mul r18,r29
|
||||
111 0060 900D add r25,r0
|
||||
112 0062 3C9F mul r19,r28
|
||||
113 0064 900D add r25,r0
|
||||
114 0066 1124 clr r1
|
||||
115 0068 9093 0000 sts ampere_in+1,r25
|
||||
116 006c 8093 0000 sts ampere_in,r24
|
||||
117 .LM16:
|
||||
118 0070 80E0 ldi r24,lo8(0)
|
||||
119 0072 64E0 ldi r22,lo8(4)
|
||||
120 0074 00D0 rcall adc_read_avg
|
||||
121 .LM17:
|
||||
122 0076 9C01 movw r18,r24
|
||||
123 0078 2F5F subi r18,lo8(-(-511))
|
||||
124 007a 3140 sbci r19,hi8(-(-511))
|
||||
125 .LM18:
|
||||
126 007c 2C9F mul r18,r28
|
||||
127 007e C001 movw r24,r0
|
||||
128 0080 2D9F mul r18,r29
|
||||
129 0082 900D add r25,r0
|
||||
130 0084 3C9F mul r19,r28
|
||||
131 0086 900D add r25,r0
|
||||
132 0088 1124 clr r1
|
||||
133 008a 9093 0000 sts ampere_out+1,r25
|
||||
134 008e 8093 0000 sts ampere_out,r24
|
||||
135 /* epilogue start */
|
||||
136 .LM19:
|
||||
137 0092 DF91 pop r29
|
||||
138 0094 CF91 pop r28
|
||||
139 0096 0895 ret
|
||||
140 .LFE2:
|
||||
142 .global get_power
|
||||
144 get_power:
|
||||
145 .LFB3:
|
||||
146 .LM20:
|
||||
147 .LVL0:
|
||||
148 /* prologue: function */
|
||||
149 /* frame size = 0 */
|
||||
150 /* stack size = 5 */
|
||||
151 .L__stack_usage = 5
|
||||
152 .LM23:
|
||||
153 0050 8091 0000 lds r24,syscounter
|
||||
154 0054 9091 0000 lds r25,syscounter+1
|
||||
155 0058 0196 adiw r24,1
|
||||
156 005a 9093 0000 sts syscounter+1,r25
|
||||
157 005e 8093 0000 sts syscounter,r24
|
||||
158 /* epilogue start */
|
||||
159 .LM24:
|
||||
160 0062 9F91 pop r25
|
||||
161 0064 8F91 pop r24
|
||||
162 0066 0F90 pop r0
|
||||
163 0068 0FBE out __SREG__,r0
|
||||
164 006a 0F90 pop r0
|
||||
165 006c 1F90 pop __zero_reg__
|
||||
166 006e 1895 reti
|
||||
167 .LFE5:
|
||||
169 .global syscounter
|
||||
170 .global syscounter
|
||||
171 .section .bss
|
||||
174 syscounter:
|
||||
175 0000 0000 .skip 2,0
|
||||
240 .Letext0:
|
||||
150 /* stack size = 0 */
|
||||
151 .L__stack_usage = 0
|
||||
152 0098 FC01 movw r30,r24
|
||||
153 009a CB01 movw r24,r22
|
||||
154 .LVL1:
|
||||
155 .LM21:
|
||||
156 009c 24E6 ldi r18,lo8(100)
|
||||
157 009e 30E0 ldi r19,hi8(100)
|
||||
158 00a0 B901 movw r22,r18
|
||||
159 .LVL2:
|
||||
160 00a2 00D0 rcall __divmodhi4
|
||||
161 .LVL3:
|
||||
162 00a4 6E9F mul r22,r30
|
||||
163 00a6 C001 movw r24,r0
|
||||
164 00a8 6F9F mul r22,r31
|
||||
165 00aa 900D add r25,r0
|
||||
166 00ac 7E9F mul r23,r30
|
||||
167 00ae 900D add r25,r0
|
||||
168 00b0 1124 clr r1
|
||||
169 00b2 B901 movw r22,r18
|
||||
170 00b4 00D0 rcall __udivmodhi4
|
||||
171 .LM22:
|
||||
172 00b6 862F mov r24,r22
|
||||
173 /* epilogue start */
|
||||
174 00b8 0895 ret
|
||||
175 .LFE3:
|
||||
177 .global main
|
||||
179 main:
|
||||
180 .LFB4:
|
||||
181 .LM23:
|
||||
182 00ba EF92 push r14
|
||||
183 00bc FF92 push r15
|
||||
184 00be 0F93 push r16
|
||||
185 00c0 1F93 push r17
|
||||
186 00c2 DF93 push r29
|
||||
187 00c4 CF93 push r28
|
||||
188 00c6 CDB7 in r28,__SP_L__
|
||||
189 00c8 DEB7 in r29,__SP_H__
|
||||
190 00ca 2A97 sbiw r28,10
|
||||
191 00cc 0FB6 in __tmp_reg__,__SREG__
|
||||
192 00ce F894 cli
|
||||
193 00d0 DEBF out __SP_H__,r29
|
||||
194 00d2 0FBE out __SREG__,__tmp_reg__
|
||||
195 00d4 CDBF out __SP_L__,r28
|
||||
196 /* prologue: function */
|
||||
197 /* frame size = 10 */
|
||||
198 /* stack size = 16 */
|
||||
199 .L__stack_usage = 16
|
||||
200 .LM24:
|
||||
201 00d6 00D0 rcall ports_init
|
||||
202 .LM25:
|
||||
203 00d8 00D0 rcall adc_init
|
||||
204 .LM26:
|
||||
205 00da 00D0 rcall timer_init
|
||||
206 .LM27:
|
||||
207 00dc 83E3 ldi r24,lo8(51)
|
||||
208 00de 90E0 ldi r25,hi8(51)
|
||||
209 00e0 00D0 rcall uart_init
|
||||
210 .LM28:
|
||||
211 00e2 C09A sbi 56-32,0
|
||||
212 .LM29:
|
||||
213 00e4 C19A sbi 56-32,1
|
||||
214 .LM30:
|
||||
215 00e6 C298 cbi 56-32,2
|
||||
216 .LBB15:
|
||||
217 .LM31:
|
||||
218 00e8 8E01 movw r16,r28
|
||||
219 00ea 0F5F subi r16,lo8(-(1))
|
||||
220 00ec 1F4F sbci r17,hi8(-(1))
|
||||
221 .LBB16:
|
||||
222 .LBB17:
|
||||
223 .LM32:
|
||||
224 00ee 84E6 ldi r24,lo8(100)
|
||||
225 00f0 E82E mov r14,r24
|
||||
226 00f2 F12C mov r15,__zero_reg__
|
||||
227 .L6:
|
||||
228 .LBE17:
|
||||
229 .LBE16:
|
||||
230 .LM33:
|
||||
231 00f4 00D0 rcall measure
|
||||
232 .LM34:
|
||||
233 00f6 80E0 ldi r24,lo8(__c.1470)
|
||||
234 00f8 90E0 ldi r25,hi8(__c.1470)
|
||||
235 00fa 00D0 rcall uart_puts_p
|
||||
236 .LM35:
|
||||
237 00fc 8091 0000 lds r24,voltage
|
||||
238 0100 9091 0000 lds r25,voltage+1
|
||||
239 0104 B801 movw r22,r16
|
||||
240 0106 4AE0 ldi r20,lo8(10)
|
||||
241 0108 50E0 ldi r21,hi8(10)
|
||||
242 010a 00D0 rcall itoa
|
||||
243 010c 00D0 rcall uart_puts
|
||||
244 .LM36:
|
||||
245 010e 80E0 ldi r24,lo8(__c.1473)
|
||||
246 0110 90E0 ldi r25,hi8(__c.1473)
|
||||
247 0112 00D0 rcall uart_puts_p
|
||||
248 .LM37:
|
||||
249 0114 80E0 ldi r24,lo8(__c.1475)
|
||||
250 0116 90E0 ldi r25,hi8(__c.1475)
|
||||
251 0118 00D0 rcall uart_puts_p
|
||||
252 .LM38:
|
||||
253 011a 8091 0000 lds r24,ampere_out
|
||||
254 011e 9091 0000 lds r25,ampere_out+1
|
||||
255 0122 B801 movw r22,r16
|
||||
256 0124 4AE0 ldi r20,lo8(10)
|
||||
257 0126 50E0 ldi r21,hi8(10)
|
||||
258 0128 00D0 rcall itoa
|
||||
259 012a 00D0 rcall uart_puts
|
||||
260 .LM39:
|
||||
261 012c 80E0 ldi r24,lo8(__c.1477)
|
||||
262 012e 90E0 ldi r25,hi8(__c.1477)
|
||||
263 0130 00D0 rcall uart_puts_p
|
||||
264 .LVL4:
|
||||
265 .LBB19:
|
||||
266 .LBB18:
|
||||
267 .LM40:
|
||||
268 0132 8091 0000 lds r24,ampere_out
|
||||
269 0136 9091 0000 lds r25,ampere_out+1
|
||||
270 013a B701 movw r22,r14
|
||||
271 013c 00D0 rcall __divmodhi4
|
||||
272 013e 2091 0000 lds r18,voltage
|
||||
273 0142 3091 0000 lds r19,voltage+1
|
||||
274 0146 629F mul r22,r18
|
||||
275 0148 C001 movw r24,r0
|
||||
276 014a 639F mul r22,r19
|
||||
277 014c 900D add r25,r0
|
||||
278 014e 729F mul r23,r18
|
||||
279 0150 900D add r25,r0
|
||||
280 0152 1124 clr r1
|
||||
281 0154 B701 movw r22,r14
|
||||
282 0156 00D0 rcall __udivmodhi4
|
||||
283 .LBE18:
|
||||
284 .LBE19:
|
||||
285 .LM41:
|
||||
286 0158 862F mov r24,r22
|
||||
287 015a 90E0 ldi r25,lo8(0)
|
||||
288 015c B801 movw r22,r16
|
||||
289 015e 4AE0 ldi r20,lo8(10)
|
||||
290 0160 50E0 ldi r21,hi8(10)
|
||||
291 0162 00D0 rcall itoa
|
||||
292 .LVL5:
|
||||
293 0164 00D0 rcall uart_puts
|
||||
294 .LM42:
|
||||
295 0166 80E0 ldi r24,lo8(__c.1479)
|
||||
296 0168 90E0 ldi r25,hi8(__c.1479)
|
||||
297 016a 00D0 rcall uart_puts_p
|
||||
298 .LM43:
|
||||
299 016c 80E0 ldi r24,lo8(__c.1481)
|
||||
300 016e 90E0 ldi r25,hi8(__c.1481)
|
||||
301 0170 00D0 rcall uart_puts_p
|
||||
302 .LM44:
|
||||
303 0172 8091 0000 lds r24,ampere_in
|
||||
304 0176 9091 0000 lds r25,ampere_in+1
|
||||
305 017a B801 movw r22,r16
|
||||
306 017c 4AE0 ldi r20,lo8(10)
|
||||
307 017e 50E0 ldi r21,hi8(10)
|
||||
308 0180 00D0 rcall itoa
|
||||
309 0182 00D0 rcall uart_puts
|
||||
310 .LM45:
|
||||
311 0184 80E0 ldi r24,lo8(__c.1483)
|
||||
312 0186 90E0 ldi r25,hi8(__c.1483)
|
||||
313 0188 00D0 rcall uart_puts_p
|
||||
314 .LVL6:
|
||||
315 .LBB20:
|
||||
316 .LBB21:
|
||||
317 .LM46:
|
||||
318 018a 8091 0000 lds r24,ampere_in
|
||||
319 018e 9091 0000 lds r25,ampere_in+1
|
||||
320 0192 B701 movw r22,r14
|
||||
321 0194 00D0 rcall __divmodhi4
|
||||
322 0196 2091 0000 lds r18,voltage
|
||||
323 019a 3091 0000 lds r19,voltage+1
|
||||
324 019e 629F mul r22,r18
|
||||
325 01a0 C001 movw r24,r0
|
||||
326 01a2 639F mul r22,r19
|
||||
327 01a4 900D add r25,r0
|
||||
328 01a6 729F mul r23,r18
|
||||
329 01a8 900D add r25,r0
|
||||
330 01aa 1124 clr r1
|
||||
331 01ac B701 movw r22,r14
|
||||
332 01ae 00D0 rcall __udivmodhi4
|
||||
333 .LBE21:
|
||||
334 .LBE20:
|
||||
335 .LM47:
|
||||
336 01b0 862F mov r24,r22
|
||||
337 01b2 90E0 ldi r25,lo8(0)
|
||||
338 01b4 B801 movw r22,r16
|
||||
339 01b6 4AE0 ldi r20,lo8(10)
|
||||
340 01b8 50E0 ldi r21,hi8(10)
|
||||
341 01ba 00D0 rcall itoa
|
||||
342 .LVL7:
|
||||
343 01bc 00D0 rcall uart_puts
|
||||
344 .LM48:
|
||||
345 01be 80E0 ldi r24,lo8(__c.1485)
|
||||
346 01c0 90E0 ldi r25,hi8(__c.1485)
|
||||
347 01c2 00D0 rcall uart_puts_p
|
||||
348 .LM49:
|
||||
349 01c4 84E6 ldi r24,lo8(100)
|
||||
350 01c6 00D0 rcall wait
|
||||
351 .LM50:
|
||||
352 01c8 84E6 ldi r24,lo8(100)
|
||||
353 01ca 00D0 rcall wait
|
||||
354 .LM51:
|
||||
355 01cc 84E6 ldi r24,lo8(100)
|
||||
356 01ce 00D0 rcall wait
|
||||
357 .LM52:
|
||||
358 01d0 84E6 ldi r24,lo8(100)
|
||||
359 01d2 00D0 rcall wait
|
||||
360 .LM53:
|
||||
361 01d4 84E6 ldi r24,lo8(100)
|
||||
362 01d6 00D0 rcall wait
|
||||
363 .LM54:
|
||||
364 01d8 84E6 ldi r24,lo8(100)
|
||||
365 01da 00D0 rcall wait
|
||||
366 01dc 00C0 rjmp .L6
|
||||
367 .LBE15:
|
||||
368 .LFE4:
|
||||
370 .global __vector_6
|
||||
372 __vector_6:
|
||||
373 .LFB5:
|
||||
374 .LM55:
|
||||
375 01de 1F92 push __zero_reg__
|
||||
376 01e0 0F92 push r0
|
||||
377 01e2 0FB6 in r0,__SREG__
|
||||
378 01e4 0F92 push r0
|
||||
379 01e6 1124 clr __zero_reg__
|
||||
380 01e8 8F93 push r24
|
||||
381 01ea 9F93 push r25
|
||||
382 /* prologue: Signal */
|
||||
383 /* frame size = 0 */
|
||||
384 /* stack size = 5 */
|
||||
385 .L__stack_usage = 5
|
||||
386 .LM56:
|
||||
387 01ec 8091 0000 lds r24,syscounter
|
||||
388 01f0 9091 0000 lds r25,syscounter+1
|
||||
389 01f4 0196 adiw r24,1
|
||||
390 01f6 9093 0000 sts syscounter+1,r25
|
||||
391 01fa 8093 0000 sts syscounter,r24
|
||||
392 /* epilogue start */
|
||||
393 .LM57:
|
||||
394 01fe 9F91 pop r25
|
||||
395 0200 8F91 pop r24
|
||||
396 0202 0F90 pop r0
|
||||
397 0204 0FBE out __SREG__,r0
|
||||
398 0206 0F90 pop r0
|
||||
399 0208 1F90 pop __zero_reg__
|
||||
400 020a 1895 reti
|
||||
401 .LFE5:
|
||||
403 .global syscounter
|
||||
404 .global syscounter
|
||||
405 .section .bss
|
||||
408 syscounter:
|
||||
409 0000 0000 .skip 2,0
|
||||
410 .global voltage
|
||||
411 .global voltage
|
||||
414 voltage:
|
||||
415 0002 0000 .skip 2,0
|
||||
416 .global ampere_in
|
||||
417 .global ampere_in
|
||||
420 ampere_in:
|
||||
421 0004 0000 .skip 2,0
|
||||
422 .global ampere_out
|
||||
423 .global ampere_out
|
||||
426 ampere_out:
|
||||
427 0006 0000 .skip 2,0
|
||||
428 .section .progmem.data,"a",@progbits
|
||||
431 __c.1485:
|
||||
432 0000 570D 0A00 .string "W\r\n"
|
||||
435 __c.1483:
|
||||
436 0004 6D41 2020 .string "mA "
|
||||
436 00
|
||||
439 __c.1481:
|
||||
440 0009 4765 6E65 .string "Generator: "
|
||||
440 7261 746F
|
||||
440 723A 2000
|
||||
443 __c.1479:
|
||||
444 0015 570D 0A00 .string "W\r\n"
|
||||
447 __c.1477:
|
||||
448 0019 6D41 2020 .string "mA "
|
||||
448 00
|
||||
451 __c.1475:
|
||||
452 001e 4C6F 6164 .string "Load: "
|
||||
452 3A20 2020
|
||||
452 2020 2000
|
||||
455 __c.1473:
|
||||
456 002a 6456 0D0A .string "dV\r\n"
|
||||
456 00
|
||||
459 __c.1470:
|
||||
460 002f 566F 6C74 .string "Voltage: "
|
||||
460 6167 653A
|
||||
460 2020 2000
|
||||
525 .Letext0:
|
||||
DEFINED SYMBOLS
|
||||
*ABS*:0000000000000000 main.c
|
||||
/tmp/cc5sOhJc.s:2 *ABS*:000000000000003f __SREG__
|
||||
/tmp/cc5sOhJc.s:3 *ABS*:000000000000003e __SP_H__
|
||||
/tmp/cc5sOhJc.s:4 *ABS*:000000000000003d __SP_L__
|
||||
/tmp/cc5sOhJc.s:5 *ABS*:0000000000000034 __CCP__
|
||||
/tmp/cc5sOhJc.s:6 *ABS*:0000000000000000 __tmp_reg__
|
||||
/tmp/cc5sOhJc.s:7 *ABS*:0000000000000001 __zero_reg__
|
||||
/tmp/cc5sOhJc.s:18 .text:0000000000000000 timer_init
|
||||
/tmp/cc5sOhJc.s:50 .text:0000000000000016 ports_init
|
||||
/tmp/cc5sOhJc.s:72 .text:0000000000000024 get_voltage
|
||||
/tmp/cc5sOhJc.s:88 .text:0000000000000028 get_power
|
||||
/tmp/cc5sOhJc.s:119 .text:000000000000003a main
|
||||
/tmp/cc5sOhJc.s:138 .text:0000000000000042 __vector_6
|
||||
/tmp/cc5sOhJc.s:174 .bss:0000000000000000 syscounter
|
||||
/tmp/ccTFX6lH.s:2 *ABS*:000000000000003f __SREG__
|
||||
/tmp/ccTFX6lH.s:3 *ABS*:000000000000003e __SP_H__
|
||||
/tmp/ccTFX6lH.s:4 *ABS*:000000000000003d __SP_L__
|
||||
/tmp/ccTFX6lH.s:5 *ABS*:0000000000000034 __CCP__
|
||||
/tmp/ccTFX6lH.s:6 *ABS*:0000000000000000 __tmp_reg__
|
||||
/tmp/ccTFX6lH.s:7 *ABS*:0000000000000001 __zero_reg__
|
||||
/tmp/ccTFX6lH.s:18 .text:0000000000000000 timer_init
|
||||
/tmp/ccTFX6lH.s:50 .text:0000000000000016 ports_init
|
||||
/tmp/ccTFX6lH.s:72 .text:0000000000000024 measure
|
||||
/tmp/ccTFX6lH.s:414 .bss:0000000000000002 voltage
|
||||
/tmp/ccTFX6lH.s:420 .bss:0000000000000004 ampere_in
|
||||
/tmp/ccTFX6lH.s:426 .bss:0000000000000006 ampere_out
|
||||
/tmp/ccTFX6lH.s:144 .text:0000000000000098 get_power
|
||||
/tmp/ccTFX6lH.s:179 .text:00000000000000ba main
|
||||
/tmp/ccTFX6lH.s:459 .progmem.data:000000000000002f __c.1470
|
||||
/tmp/ccTFX6lH.s:455 .progmem.data:000000000000002a __c.1473
|
||||
/tmp/ccTFX6lH.s:451 .progmem.data:000000000000001e __c.1475
|
||||
/tmp/ccTFX6lH.s:447 .progmem.data:0000000000000019 __c.1477
|
||||
/tmp/ccTFX6lH.s:443 .progmem.data:0000000000000015 __c.1479
|
||||
/tmp/ccTFX6lH.s:439 .progmem.data:0000000000000009 __c.1481
|
||||
/tmp/ccTFX6lH.s:435 .progmem.data:0000000000000004 __c.1483
|
||||
/tmp/ccTFX6lH.s:431 .progmem.data:0000000000000000 __c.1485
|
||||
/tmp/ccTFX6lH.s:372 .text:00000000000001de __vector_6
|
||||
/tmp/ccTFX6lH.s:408 .bss:0000000000000000 syscounter
|
||||
|
||||
UNDEFINED SYMBOLS
|
||||
adc_read_avg
|
||||
__floatunsisf
|
||||
__divsf3
|
||||
__fixunssfsi
|
||||
__divmodhi4
|
||||
__udivmodhi4
|
||||
adc_init
|
||||
uart_init
|
||||
uart_puts_p
|
||||
itoa
|
||||
uart_puts
|
||||
wait
|
||||
__do_clear_bss
|
||||
|
|
|
@ -0,0 +1,663 @@
|
|||
/*************************************************************************
|
||||
Title: Interrupt UART library with receive/transmit circular buffers
|
||||
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
|
||||
File: $Id: uart.c,v 1.10 2013/06/02 07:27:04 peter Exp $
|
||||
Software: AVR-GCC 4.1, AVR Libc 1.4.6 or higher
|
||||
Hardware: any AVR with built-in UART,
|
||||
License: GNU General Public License
|
||||
|
||||
DESCRIPTION:
|
||||
An interrupt is generated when the UART has finished transmitting or
|
||||
receiving a byte. The interrupt handling routines use circular buffers
|
||||
for buffering received and transmitted data.
|
||||
|
||||
The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE variables define
|
||||
the buffer size in bytes. Note that these variables must be a
|
||||
power of 2.
|
||||
|
||||
USAGE:
|
||||
Refere to the header file uart.h for a description of the routines.
|
||||
See also example test_uart.c.
|
||||
|
||||
NOTES:
|
||||
Based on Atmel Application Note AVR306
|
||||
|
||||
LICENSE:
|
||||
Copyright (C) 2006 Peter Fleury
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
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 General Public License for more details.
|
||||
|
||||
*************************************************************************/
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include "uart.h"
|
||||
|
||||
|
||||
/*
|
||||
* constants and macros
|
||||
*/
|
||||
|
||||
/* size of RX/TX buffers */
|
||||
#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1)
|
||||
#define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1)
|
||||
|
||||
#if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK )
|
||||
#error RX buffer size is not a power of 2
|
||||
#endif
|
||||
#if ( UART_TX_BUFFER_SIZE & UART_TX_BUFFER_MASK )
|
||||
#error TX buffer size is not a power of 2
|
||||
#endif
|
||||
|
||||
#if defined(__AVR_AT90S2313__) \
|
||||
|| defined(__AVR_AT90S4414__) || defined(__AVR_AT90S4434__) \
|
||||
|| defined(__AVR_AT90S8515__) || defined(__AVR_AT90S8535__) \
|
||||
|| defined(__AVR_ATmega103__)
|
||||
/* old AVR classic or ATmega103 with one UART */
|
||||
#define AT90_UART
|
||||
#define UART0_RECEIVE_INTERRUPT UART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
|
||||
#define UART0_STATUS USR
|
||||
#define UART0_CONTROL UCR
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__)
|
||||
/* old AVR classic with one UART */
|
||||
#define AT90_UART
|
||||
#define UART0_RECEIVE_INTERRUPT UART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \
|
||||
|| defined(__AVR_ATmega323__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART_RXC_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined (__AVR_ATmega8515__) || defined(__AVR_ATmega8535__)
|
||||
#define ATMEGA_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega163__)
|
||||
/* ATmega163 with one UART */
|
||||
#define ATMEGA_UART
|
||||
#define UART0_RECEIVE_INTERRUPT UART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega162__)
|
||||
/* ATmega with two USART */
|
||||
#define ATMEGA_USART0
|
||||
#define ATMEGA_USART1
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RXC_vect
|
||||
#define UART1_RECEIVE_INTERRUPT USART1_RXC_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#define UART1_STATUS UCSR1A
|
||||
#define UART1_CONTROL UCSR1B
|
||||
#define UART1_DATA UDR1
|
||||
#define UART1_UDRIE UDRIE1
|
||||
#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
|
||||
/* ATmega with two USART */
|
||||
#define ATMEGA_USART0
|
||||
#define ATMEGA_USART1
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART1_RECEIVE_INTERRUPT USART1_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#define UART1_STATUS UCSR1A
|
||||
#define UART1_CONTROL UCSR1B
|
||||
#define UART1_DATA UDR1
|
||||
#define UART1_UDRIE UDRIE1
|
||||
#elif defined(__AVR_ATmega161__)
|
||||
/* ATmega with UART */
|
||||
#error "AVR ATmega161 currently not supported by this libaray !"
|
||||
#elif defined(__AVR_ATmega169__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega48P__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__) \
|
||||
|| defined(__AVR_ATmega3250__) || defined(__AVR_ATmega3290__) ||defined(__AVR_ATmega6450__) || defined(__AVR_ATmega6490__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART0
|
||||
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#elif defined(__AVR_ATtiny2313__)
|
||||
#define ATMEGA_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega329__) || \
|
||||
defined(__AVR_ATmega649__) || \
|
||||
defined(__AVR_ATmega325__) || \
|
||||
defined(__AVR_ATmega645__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART0
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega640__)
|
||||
/* ATmega with two USART */
|
||||
#define ATMEGA_USART0
|
||||
#define ATMEGA_USART1
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART1_RECEIVE_INTERRUPT USART1_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#define UART1_STATUS UCSR1A
|
||||
#define UART1_CONTROL UCSR1B
|
||||
#define UART1_DATA UDR1
|
||||
#define UART1_UDRIE UDRIE1
|
||||
#elif defined(__AVR_ATmega644__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART0
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#elif defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__)
|
||||
/* ATmega with two USART */
|
||||
#define ATMEGA_USART0
|
||||
#define ATMEGA_USART1
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART1_RECEIVE_INTERRUPT USART1_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#define UART1_STATUS UCSR1A
|
||||
#define UART1_CONTROL UCSR1B
|
||||
#define UART1_DATA UDR1
|
||||
#define UART1_UDRIE UDRIE1
|
||||
#else
|
||||
#error "no UART definition for MCU available"
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* module global variables
|
||||
*/
|
||||
static volatile unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART_TxHead;
|
||||
static volatile unsigned char UART_TxTail;
|
||||
static volatile unsigned char UART_RxHead;
|
||||
static volatile unsigned char UART_RxTail;
|
||||
static volatile unsigned char UART_LastRxError;
|
||||
|
||||
#if defined( ATMEGA_USART1 )
|
||||
static volatile unsigned char UART1_TxBuf[UART_TX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART1_RxBuf[UART_RX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART1_TxHead;
|
||||
static volatile unsigned char UART1_TxTail;
|
||||
static volatile unsigned char UART1_RxHead;
|
||||
static volatile unsigned char UART1_RxTail;
|
||||
static volatile unsigned char UART1_LastRxError;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
ISR (UART0_RECEIVE_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART Receive Complete interrupt
|
||||
Purpose: called when the UART has received a character
|
||||
**************************************************************************/
|
||||
{
|
||||
unsigned char tmphead;
|
||||
unsigned char data;
|
||||
unsigned char usr;
|
||||
unsigned char lastRxError;
|
||||
|
||||
|
||||
/* read UART status register and UART data register */
|
||||
usr = UART0_STATUS;
|
||||
data = UART0_DATA;
|
||||
|
||||
/* */
|
||||
#if defined( AT90_UART )
|
||||
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
|
||||
#elif defined( ATMEGA_USART )
|
||||
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
|
||||
#elif defined( ATMEGA_USART0 )
|
||||
lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) );
|
||||
#elif defined ( ATMEGA_UART )
|
||||
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
|
||||
#endif
|
||||
|
||||
/* calculate buffer index */
|
||||
tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK;
|
||||
|
||||
if ( tmphead == UART_RxTail ) {
|
||||
/* error: receive buffer overflow */
|
||||
lastRxError = UART_BUFFER_OVERFLOW >> 8;
|
||||
}else{
|
||||
/* store new index */
|
||||
UART_RxHead = tmphead;
|
||||
/* store received data in buffer */
|
||||
UART_RxBuf[tmphead] = data;
|
||||
}
|
||||
UART_LastRxError |= lastRxError;
|
||||
}
|
||||
|
||||
|
||||
ISR (UART0_TRANSMIT_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART Data Register Empty interrupt
|
||||
Purpose: called when the UART is ready to transmit the next byte
|
||||
**************************************************************************/
|
||||
{
|
||||
unsigned char tmptail;
|
||||
|
||||
|
||||
if ( UART_TxHead != UART_TxTail) {
|
||||
/* calculate and store new buffer index */
|
||||
tmptail = (UART_TxTail + 1) & UART_TX_BUFFER_MASK;
|
||||
UART_TxTail = tmptail;
|
||||
/* get one byte from buffer and write it to UART */
|
||||
UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */
|
||||
}else{
|
||||
/* tx buffer empty, disable UDRE interrupt */
|
||||
UART0_CONTROL &= ~_BV(UART0_UDRIE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_init()
|
||||
Purpose: initialize UART and set baudrate
|
||||
Input: baudrate using macro UART_BAUD_SELECT()
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart_init(unsigned int baudrate)
|
||||
{
|
||||
UART_TxHead = 0;
|
||||
UART_TxTail = 0;
|
||||
UART_RxHead = 0;
|
||||
UART_RxTail = 0;
|
||||
|
||||
#if defined( AT90_UART )
|
||||
/* set baud rate */
|
||||
UBRR = (unsigned char)baudrate;
|
||||
|
||||
/* enable UART receiver and transmmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE)|_BV(RXEN)|_BV(TXEN);
|
||||
|
||||
#elif defined (ATMEGA_USART)
|
||||
/* Set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART0_STATUS = (1<<U2X); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRRH = (unsigned char)(baudrate>>8);
|
||||
UBRRL = (unsigned char) baudrate;
|
||||
|
||||
/* Enable USART receiver and transmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
|
||||
|
||||
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
||||
#ifdef URSEL
|
||||
UCSRC = (1<<URSEL)|(3<<UCSZ0);
|
||||
#else
|
||||
UCSRC = (3<<UCSZ0);
|
||||
#endif
|
||||
|
||||
#elif defined (ATMEGA_USART0 )
|
||||
/* Set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART0_STATUS = (1<<U2X0); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRR0H = (unsigned char)(baudrate>>8);
|
||||
UBRR0L = (unsigned char) baudrate;
|
||||
|
||||
/* Enable USART receiver and transmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
|
||||
|
||||
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
||||
#ifdef URSEL0
|
||||
UCSR0C = (1<<URSEL0)|(3<<UCSZ00);
|
||||
#else
|
||||
UCSR0C = (3<<UCSZ00);
|
||||
#endif
|
||||
|
||||
#elif defined ( ATMEGA_UART )
|
||||
/* set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART0_STATUS = (1<<U2X); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRRHI = (unsigned char)(baudrate>>8);
|
||||
UBRR = (unsigned char) baudrate;
|
||||
|
||||
/* Enable UART receiver and transmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
|
||||
|
||||
#endif
|
||||
|
||||
}/* uart_init */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_getc()
|
||||
Purpose: return byte from ringbuffer
|
||||
Returns: lower byte: received byte from ringbuffer
|
||||
higher byte: last receive error
|
||||
**************************************************************************/
|
||||
unsigned int uart_getc(void)
|
||||
{
|
||||
unsigned char tmptail;
|
||||
unsigned char data;
|
||||
|
||||
|
||||
if ( UART_RxHead == UART_RxTail ) {
|
||||
return UART_NO_DATA; /* no data available */
|
||||
}
|
||||
|
||||
/* calculate /store buffer index */
|
||||
tmptail = (UART_RxTail + 1) & UART_RX_BUFFER_MASK;
|
||||
UART_RxTail = tmptail;
|
||||
|
||||
/* get data from receive buffer */
|
||||
data = UART_RxBuf[tmptail];
|
||||
|
||||
data = (UART_LastRxError << 8) + data;
|
||||
UART_LastRxError = 0;
|
||||
return data;
|
||||
|
||||
}/* uart_getc */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_putc()
|
||||
Purpose: write byte to ringbuffer for transmitting via UART
|
||||
Input: byte to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart_putc(unsigned char data)
|
||||
{
|
||||
unsigned char tmphead;
|
||||
|
||||
|
||||
tmphead = (UART_TxHead + 1) & UART_TX_BUFFER_MASK;
|
||||
|
||||
while ( tmphead == UART_TxTail ){
|
||||
;/* wait for free space in buffer */
|
||||
}
|
||||
|
||||
UART_TxBuf[tmphead] = data;
|
||||
UART_TxHead = tmphead;
|
||||
|
||||
/* enable UDRE interrupt */
|
||||
UART0_CONTROL |= _BV(UART0_UDRIE);
|
||||
|
||||
}/* uart_putc */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_puts()
|
||||
Purpose: transmit string to UART
|
||||
Input: string to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart_puts(const char *s )
|
||||
{
|
||||
while (*s)
|
||||
uart_putc(*s++);
|
||||
|
||||
}/* uart_puts */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_puts_p()
|
||||
Purpose: transmit string from program memory to UART
|
||||
Input: program memory string to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart_puts_p(const char *progmem_s )
|
||||
{
|
||||
register char c;
|
||||
|
||||
while ( (c = pgm_read_byte(progmem_s++)) )
|
||||
uart_putc(c);
|
||||
|
||||
}/* uart_puts_p */
|
||||
|
||||
|
||||
/*
|
||||
* these functions are only for ATmegas with two USART
|
||||
*/
|
||||
#if defined( ATMEGA_USART1 )
|
||||
|
||||
ISR(UART1_RECEIVE_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART1 Receive Complete interrupt
|
||||
Purpose: called when the UART1 has received a character
|
||||
**************************************************************************/
|
||||
{
|
||||
unsigned char tmphead;
|
||||
unsigned char data;
|
||||
unsigned char usr;
|
||||
unsigned char lastRxError;
|
||||
|
||||
|
||||
/* read UART status register and UART data register */
|
||||
usr = UART1_STATUS;
|
||||
data = UART1_DATA;
|
||||
|
||||
/* */
|
||||
lastRxError = (usr & (_BV(FE1)|_BV(DOR1)) );
|
||||
|
||||
/* calculate buffer index */
|
||||
tmphead = ( UART1_RxHead + 1) & UART_RX_BUFFER_MASK;
|
||||
|
||||
if ( tmphead == UART1_RxTail ) {
|
||||
/* error: receive buffer overflow */
|
||||
lastRxError = UART_BUFFER_OVERFLOW >> 8;
|
||||
}else{
|
||||
/* store new index */
|
||||
UART1_RxHead = tmphead;
|
||||
/* store received data in buffer */
|
||||
UART1_RxBuf[tmphead] = data;
|
||||
}
|
||||
UART1_LastRxError |= lastRxError;
|
||||
}
|
||||
|
||||
|
||||
ISR(UART1_TRANSMIT_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART1 Data Register Empty interrupt
|
||||
Purpose: called when the UART1 is ready to transmit the next byte
|
||||
**************************************************************************/
|
||||
{
|
||||
unsigned char tmptail;
|
||||
|
||||
|
||||
if ( UART1_TxHead != UART1_TxTail) {
|
||||
/* calculate and store new buffer index */
|
||||
tmptail = (UART1_TxTail + 1) & UART_TX_BUFFER_MASK;
|
||||
UART1_TxTail = tmptail;
|
||||
/* get one byte from buffer and write it to UART */
|
||||
UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */
|
||||
}else{
|
||||
/* tx buffer empty, disable UDRE interrupt */
|
||||
UART1_CONTROL &= ~_BV(UART1_UDRIE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_init()
|
||||
Purpose: initialize UART1 and set baudrate
|
||||
Input: baudrate using macro UART_BAUD_SELECT()
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart1_init(unsigned int baudrate)
|
||||
{
|
||||
UART1_TxHead = 0;
|
||||
UART1_TxTail = 0;
|
||||
UART1_RxHead = 0;
|
||||
UART1_RxTail = 0;
|
||||
|
||||
|
||||
/* Set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART1_STATUS = (1<<U2X1); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRR1H = (unsigned char)(baudrate>>8);
|
||||
UBRR1L = (unsigned char) baudrate;
|
||||
|
||||
/* Enable USART receiver and transmitter and receive complete interrupt */
|
||||
UART1_CONTROL = _BV(RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
|
||||
|
||||
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
||||
#ifdef URSEL1
|
||||
UCSR1C = (1<<URSEL1)|(3<<UCSZ10);
|
||||
#else
|
||||
UCSR1C = (3<<UCSZ10);
|
||||
#endif
|
||||
}/* uart_init */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_getc()
|
||||
Purpose: return byte from ringbuffer
|
||||
Returns: lower byte: received byte from ringbuffer
|
||||
higher byte: last receive error
|
||||
**************************************************************************/
|
||||
unsigned int uart1_getc(void)
|
||||
{
|
||||
unsigned char tmptail;
|
||||
unsigned char data;
|
||||
|
||||
|
||||
if ( UART1_RxHead == UART1_RxTail ) {
|
||||
return UART_NO_DATA; /* no data available */
|
||||
}
|
||||
|
||||
/* calculate /store buffer index */
|
||||
tmptail = (UART1_RxTail + 1) & UART_RX_BUFFER_MASK;
|
||||
UART1_RxTail = tmptail;
|
||||
|
||||
/* get data from receive buffer */
|
||||
data = UART1_RxBuf[tmptail];
|
||||
|
||||
data = (UART1_LastRxError << 8) + data;
|
||||
UART1_LastRxError = 0;
|
||||
return data;
|
||||
|
||||
}/* uart1_getc */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_putc()
|
||||
Purpose: write byte to ringbuffer for transmitting via UART
|
||||
Input: byte to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart1_putc(unsigned char data)
|
||||
{
|
||||
unsigned char tmphead;
|
||||
|
||||
|
||||
tmphead = (UART1_TxHead + 1) & UART_TX_BUFFER_MASK;
|
||||
|
||||
while ( tmphead == UART1_TxTail ){
|
||||
;/* wait for free space in buffer */
|
||||
}
|
||||
|
||||
UART1_TxBuf[tmphead] = data;
|
||||
UART1_TxHead = tmphead;
|
||||
|
||||
/* enable UDRE interrupt */
|
||||
UART1_CONTROL |= _BV(UART1_UDRIE);
|
||||
|
||||
}/* uart1_putc */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_puts()
|
||||
Purpose: transmit string to UART1
|
||||
Input: string to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart1_puts(const char *s )
|
||||
{
|
||||
while (*s)
|
||||
uart1_putc(*s++);
|
||||
|
||||
}/* uart1_puts */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_puts_p()
|
||||
Purpose: transmit string from program memory to UART1
|
||||
Input: program memory string to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart1_puts_p(const char *progmem_s )
|
||||
{
|
||||
register char c;
|
||||
|
||||
while ( (c = pgm_read_byte(progmem_s++)) )
|
||||
uart1_putc(c);
|
||||
|
||||
}/* uart1_puts_p */
|
||||
|
||||
|
||||
#endif
|
|
@ -0,0 +1,195 @@
|
|||
#ifndef UART_H
|
||||
#define UART_H
|
||||
/************************************************************************
|
||||
Title: Interrupt UART library with receive/transmit circular buffers
|
||||
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
|
||||
File: $Id: uart.h,v 1.12 2012/11/19 19:52:27 peter Exp $
|
||||
Software: AVR-GCC 4.1, AVR Libc 1.4
|
||||
Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz
|
||||
License: GNU General Public License
|
||||
Usage: see Doxygen manual
|
||||
|
||||
LICENSE:
|
||||
Copyright (C) 2006 Peter Fleury
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
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 General Public License for more details.
|
||||
|
||||
************************************************************************/
|
||||
|
||||
/**
|
||||
* @defgroup pfleury_uart UART Library
|
||||
* @code #include <uart.h> @endcode
|
||||
*
|
||||
* @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers.
|
||||
*
|
||||
* This library can be used to transmit and receive data through the built in UART.
|
||||
*
|
||||
* An interrupt is generated when the UART has finished transmitting or
|
||||
* receiving a byte. The interrupt handling routines use circular buffers
|
||||
* for buffering received and transmitted data.
|
||||
*
|
||||
* The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define
|
||||
* the size of the circular buffers in bytes. Note that these constants must be a power of 2.
|
||||
* You may need to adapt this constants to your target and your application by adding
|
||||
* CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_RX_BUFFER_SIZE=nn to your Makefile.
|
||||
*
|
||||
* @note Based on Atmel Application Note AVR306
|
||||
* @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury
|
||||
*/
|
||||
|
||||
/**@{*/
|
||||
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
|
||||
#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
** constants and macros
|
||||
*/
|
||||
|
||||
/** @brief UART Baudrate Expression
|
||||
* @param xtalcpu system clock in Mhz, e.g. 4000000UL for 4Mhz
|
||||
* @param baudrate baudrate in bps, e.g. 1200, 2400, 9600
|
||||
*/
|
||||
#define UART_BAUD_SELECT(baudRate,xtalCpu) (((xtalCpu) + 8UL * (baudRate)) / (16UL * (baudRate)) -1UL)
|
||||
|
||||
/** @brief UART Baudrate Expression for ATmega double speed mode
|
||||
* @param xtalcpu system clock in Mhz, e.g. 4000000UL for 4Mhz
|
||||
* @param baudrate baudrate in bps, e.g. 1200, 2400, 9600
|
||||
*/
|
||||
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) ( ((((xtalCpu) + 4UL * (baudRate)) / (8UL * (baudRate)) -1UL)) | 0x8000)
|
||||
|
||||
|
||||
/** Size of the circular receive buffer, must be power of 2 */
|
||||
#ifndef UART_RX_BUFFER_SIZE
|
||||
#define UART_RX_BUFFER_SIZE 32
|
||||
#endif
|
||||
/** Size of the circular transmit buffer, must be power of 2 */
|
||||
#ifndef UART_TX_BUFFER_SIZE
|
||||
#define UART_TX_BUFFER_SIZE 32
|
||||
#endif
|
||||
|
||||
/* test if the size of the circular buffers fits into SRAM */
|
||||
#if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) )
|
||||
#error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than size of SRAM"
|
||||
#endif
|
||||
|
||||
/*
|
||||
** high byte error return code of uart_getc()
|
||||
*/
|
||||
#define UART_FRAME_ERROR 0x1000 /* Framing Error by UART */
|
||||
#define UART_OVERRUN_ERROR 0x0800 /* Overrun condition by UART */
|
||||
#define UART_PARITY_ERROR 0x0400 /* Parity Error by UART */
|
||||
#define UART_BUFFER_OVERFLOW 0x0200 /* receive ringbuffer overflow */
|
||||
#define UART_NO_DATA 0x0100 /* no receive data available */
|
||||
|
||||
|
||||
/*
|
||||
** function prototypes
|
||||
*/
|
||||
|
||||
/**
|
||||
@brief Initialize UART and set baudrate
|
||||
@param baudrate Specify baudrate using macro UART_BAUD_SELECT()
|
||||
@return none
|
||||
*/
|
||||
extern void uart_init(unsigned int baudrate);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get received byte from ringbuffer
|
||||
*
|
||||
* Returns in the lower byte the received character and in the
|
||||
* higher byte the last receive error.
|
||||
* UART_NO_DATA is returned when no data is available.
|
||||
*
|
||||
* @param void
|
||||
* @return lower byte: received byte from ringbuffer
|
||||
* @return higher byte: last receive status
|
||||
* - \b 0 successfully received data from UART
|
||||
* - \b UART_NO_DATA
|
||||
* <br>no receive data available
|
||||
* - \b UART_BUFFER_OVERFLOW
|
||||
* <br>Receive ringbuffer overflow.
|
||||
* We are not reading the receive buffer fast enough,
|
||||
* one or more received character have been dropped
|
||||
* - \b UART_OVERRUN_ERROR
|
||||
* <br>Overrun condition by UART.
|
||||
* A character already present in the UART UDR register was
|
||||
* not read by the interrupt handler before the next character arrived,
|
||||
* one or more received characters have been dropped.
|
||||
* - \b UART_FRAME_ERROR
|
||||
* <br>Framing Error by UART
|
||||
*/
|
||||
extern unsigned int uart_getc(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put byte to ringbuffer for transmitting via UART
|
||||
* @param data byte to be transmitted
|
||||
* @return none
|
||||
*/
|
||||
extern void uart_putc(unsigned char data);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put string to ringbuffer for transmitting via UART
|
||||
*
|
||||
* The string is buffered by the uart library in a circular buffer
|
||||
* and one character at a time is transmitted to the UART using interrupts.
|
||||
* Blocks if it can not write the whole string into the circular buffer.
|
||||
*
|
||||
* @param s string to be transmitted
|
||||
* @return none
|
||||
*/
|
||||
extern void uart_puts(const char *s );
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put string from program memory to ringbuffer for transmitting via UART.
|
||||
*
|
||||
* The string is buffered by the uart library in a circular buffer
|
||||
* and one character at a time is transmitted to the UART using interrupts.
|
||||
* Blocks if it can not write the whole string into the circular buffer.
|
||||
*
|
||||
* @param s program memory string to be transmitted
|
||||
* @return none
|
||||
* @see uart_puts_P
|
||||
*/
|
||||
extern void uart_puts_p(const char *s );
|
||||
|
||||
/**
|
||||
* @brief Macro to automatically put a string constant into program memory
|
||||
*/
|
||||
#define uart_puts_P(__s) uart_puts_p(PSTR(__s))
|
||||
|
||||
|
||||
|
||||
/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */
|
||||
extern void uart1_init(unsigned int baudrate);
|
||||
/** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */
|
||||
extern unsigned int uart1_getc(void);
|
||||
/** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */
|
||||
extern void uart1_putc(unsigned char data);
|
||||
/** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */
|
||||
extern void uart1_puts(const char *s );
|
||||
/** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */
|
||||
extern void uart1_puts_p(const char *s );
|
||||
/** @brief Macro to automatically put a string constant into program memory */
|
||||
#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))
|
||||
|
||||
/**@}*/
|
||||
|
||||
|
||||
#endif // UART_H
|
||||
|
Loading…
Reference in New Issue