Subversion Repositories BL-Ctrl

Compare Revisions

Ignore whitespace Rev 65 → Rev 66

/branches/V0.37_neueStruktur/makefile
0,0 → 1,393
#--------------------------------------------------------------------
# MCU name
MCU = atmega8
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 37
#-------------------------------------------------------------------
 
#Output dir
OUT = ./out
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
TARGET = BrushLess-Ctrl_V$(HAUPT_VERSION)_$(NEBEN_VERSION)
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = $(wildcard src/*.c)
#printf_P.c
##########################################################################################################
 
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c
 
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c
 
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION)
 
ifeq ($(AVR_CTRL_PLATINE), 1)
CFLAGS += -DAVR_CTRL_PLATINE=$(AVR_CTRL_PLATINE)
endif
 
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
 
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
 
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = stk200
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_FLAGS += -V -E noreset
 
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
 
 
 
# ---------------------------------------------------------------------------
 
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
 
REMOVE = rm -f
COPY = cp
MOVE = mv
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
 
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter tooutdir finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) ./out/*
 
tooutdir:
-$(MOVE) $(TARGET).hex $(OUT)
# -$(MOVE) $(TARGET).eep $(OUT)
# -$(MOVE) $(TARGET).obj $(OUT)
# -$(MOVE) $(TARGET).cof $(OUT)
-$(MOVE) $(TARGET).elf $(OUT)
-$(MOVE) $(TARGET).map $(OUT)
# -$(MOVE) $(TARGET).a90 $(OUT)
-$(MOVE) $(TARGET).sym $(OUT)
# -$(MOVE) $(TARGET).lnk $(OUT)
-$(MOVE) $(TARGET).lss $(OUT)
-$(MOVE) $(OBJ) $(OUT)
-$(MOVE) $(LST) $(OUT)
# -$(MOVE) $(SRC:.c=.s) $(OUT)
-$(MOVE) $(SRC:.c=.d) $(OUT)
 
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
#%.d: %.c
# set -e; $(CC) -MM $(ALL_CFLAGS) $< \
# | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
# [ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/V0.37_neueStruktur/out/BLMC.lst
0,0 → 1,774
1 .file "BLMC.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
11 .text
12 .Ltext0:
100 .global __vector_4
102 __vector_4:
103 .stabd 46,0,0
1:src/BLMC.c **** /*#######################################################################################
2:src/BLMC.c **** Flight Control
3:src/BLMC.c **** #######################################################################################*/
4:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5:src/BLMC.c **** // + Regler für Brushless-Motoren
6:src/BLMC.c **** // + ATMEGA8 mit 8MHz
7:src/BLMC.c **** // + Nur für den privaten Gebrauch
8:src/BLMC.c **** // + Copyright (c) 12.2007 Holger Buss
9:src/BLMC.c **** // + www.MikroKopter.com
10:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11:src/BLMC.c **** // + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation)
12:src/BLMC.c **** // + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulä
13:src/BLMC.c **** // + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikro
14:src/BLMC.c **** // + bzgl. der Nutzungsbedingungen aufzunehmen.
15:src/BLMC.c **** // + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platine
16:src/BLMC.c **** // + Verkauf von Luftbildaufnahmen, usw.
17:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18:src/BLMC.c **** // + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
19:src/BLMC.c **** // + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright
20:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21:src/BLMC.c **** // + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
22:src/BLMC.c **** // + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http:
23:src/BLMC.c **** // + eindeutig als Ursprung verlinkt werden
24:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
25:src/BLMC.c **** // + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
26:src/BLMC.c **** // + Benutzung auf eigene Gefahr
27:src/BLMC.c **** // + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
28:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
29:src/BLMC.c **** // + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www
30:src/BLMC.c **** // + mit unserer Zustimmung zulässig
31:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32:src/BLMC.c **** // + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
33:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
34:src/BLMC.c **** // + Redistributions of source code (with or without modifications) must retain the above copyright
35:src/BLMC.c **** // + this list of conditions and the following disclaimer.
36:src/BLMC.c **** // + * Neither the name of the copyright holders nor the names of contributors may be used to end
37:src/BLMC.c **** // + from this software without specific prior written permission.
38:src/BLMC.c **** // + * The use of this project (hardware, software, binary files, sources and documentation) is o
39:src/BLMC.c **** // + for non-commercial use (directly or indirectly)
40:src/BLMC.c **** // + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is
41:src/BLMC.c **** // + with our written permission
42:src/BLMC.c **** // + * If sources or documentations are redistributet on other webpages, out webpage (http://www.
43:src/BLMC.c **** // + clearly linked as origin
44:src/BLMC.c **** // + * porting to systems other than hardware from www.mikrokopter.de is not allowed
45:src/BLMC.c **** // + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
46:src/BLMC.c **** // + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47:src/BLMC.c **** // + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48:src/BLMC.c **** // + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
49:src/BLMC.c **** // + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
50:src/BLMC.c **** // + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51:src/BLMC.c **** // + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52:src/BLMC.c **** // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT
53:src/BLMC.c **** // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
54:src/BLMC.c **** // + POSSIBILITY OF SUCH DAMAGE.
55:src/BLMC.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
56:src/BLMC.c **** #include "main.h"
57:src/BLMC.c ****
58:src/BLMC.c **** volatile unsigned char Phase = 0,ShadowTCCR1A = 0;
59:src/BLMC.c **** volatile unsigned char CompFreigabeTimer = 100;
60:src/BLMC.c **** volatile unsigned char CompInterruptFreigabe = 0;
61:src/BLMC.c ****
62:src/BLMC.c ****
63:src/BLMC.c **** //############################################################################
64:src/BLMC.c **** //
65:src/BLMC.c **** SIGNAL(SIG_OVERFLOW2)
66:src/BLMC.c **** //############################################################################
67:src/BLMC.c **** {
105 .LM0:
106 .LFBB1:
107 /* prologue: frame size=0 */
108 0000 1F92 push __zero_reg__
109 0002 0F92 push __tmp_reg__
110 0004 0FB6 in __tmp_reg__,__SREG__
111 0006 0F92 push __tmp_reg__
112 0008 1124 clr __zero_reg__
113 /* prologue end (size=5) */
114 /* epilogue: frame size=0 */
115 000a 0F90 pop __tmp_reg__
116 000c 0FBE out __SREG__,__tmp_reg__
117 000e 0F90 pop __tmp_reg__
118 0010 1F90 pop __zero_reg__
119 0012 1895 reti
120 /* epilogue end (size=5) */
121 /* function __vector_4 size 10 (0) */
123 .Lscope1:
125 .stabd 78,0,0
127 .global Manuell
129 Manuell:
130 .stabd 46,0,0
68:src/BLMC.c **** }
69:src/BLMC.c ****
70:src/BLMC.c **** //############################################################################
71:src/BLMC.c **** // + Interruptroutine
72:src/BLMC.c **** // + Wird durch den Analogkomperator ausgelöst
73:src/BLMC.c **** // + Dadurch wird das Kommutieren erzeugt
74:src/BLMC.c **** SIGNAL(SIG_COMPARATOR)
75:src/BLMC.c **** //############################################################################
76:src/BLMC.c **** {
77:src/BLMC.c **** unsigned char sense = 0;
78:src/BLMC.c **** do
79:src/BLMC.c **** {
80:src/BLMC.c **** if(SENSE_H) sense = 1; else sense = 0;
81:src/BLMC.c **** switch(Phase)
82:src/BLMC.c **** {
83:src/BLMC.c **** case 0:
84:src/BLMC.c **** STEUER_A_H;
85:src/BLMC.c **** if(sense)
86:src/BLMC.c **** {
87:src/BLMC.c **** STEUER_C_L;
88:src/BLMC.c **** if(ZeitZumAdWandeln) AdConvert();
89:src/BLMC.c **** SENSE_FALLING_INT;
90:src/BLMC.c **** SENSE_B;
91:src/BLMC.c **** Phase++;
92:src/BLMC.c **** CntKommutierungen++;
93:src/BLMC.c **** }
94:src/BLMC.c **** else
95:src/BLMC.c **** {
96:src/BLMC.c **** STEUER_B_L;
97:src/BLMC.c **** }
98:src/BLMC.c **** break;
99:src/BLMC.c **** case 1:
100:src/BLMC.c **** STEUER_C_L;
101:src/BLMC.c **** if(!sense)
102:src/BLMC.c **** {
103:src/BLMC.c **** STEUER_B_H;
104:src/BLMC.c **** if(ZeitZumAdWandeln) AdConvert();
105:src/BLMC.c **** SENSE_A;
106:src/BLMC.c **** SENSE_RISING_INT;
107:src/BLMC.c **** Phase++;
108:src/BLMC.c **** CntKommutierungen++;
109:src/BLMC.c **** }
110:src/BLMC.c **** else
111:src/BLMC.c **** {
112:src/BLMC.c **** STEUER_A_H;
113:src/BLMC.c **** }
114:src/BLMC.c ****
115:src/BLMC.c **** break;
116:src/BLMC.c **** case 2:
117:src/BLMC.c **** STEUER_B_H;
118:src/BLMC.c **** if(sense)
119:src/BLMC.c **** {
120:src/BLMC.c **** STEUER_A_L;
121:src/BLMC.c **** if(ZeitZumAdWandeln) AdConvert();
122:src/BLMC.c **** SENSE_C;
123:src/BLMC.c **** SENSE_FALLING_INT;
124:src/BLMC.c **** Phase++;
125:src/BLMC.c **** CntKommutierungen++;
126:src/BLMC.c **** }
127:src/BLMC.c **** else
128:src/BLMC.c **** {
129:src/BLMC.c **** STEUER_C_L;
130:src/BLMC.c **** }
131:src/BLMC.c ****
132:src/BLMC.c **** break;
133:src/BLMC.c **** case 3:
134:src/BLMC.c **** STEUER_A_L;
135:src/BLMC.c **** if(!sense)
136:src/BLMC.c **** {
137:src/BLMC.c **** STEUER_C_H;
138:src/BLMC.c **** if(ZeitZumAdWandeln) AdConvert();
139:src/BLMC.c **** SENSE_B;
140:src/BLMC.c **** SENSE_RISING_INT;
141:src/BLMC.c **** Phase++;
142:src/BLMC.c **** CntKommutierungen++;
143:src/BLMC.c **** }
144:src/BLMC.c **** else
145:src/BLMC.c **** {
146:src/BLMC.c **** STEUER_B_H;
147:src/BLMC.c **** }
148:src/BLMC.c ****
149:src/BLMC.c ****
150:src/BLMC.c **** break;
151:src/BLMC.c **** case 4:
152:src/BLMC.c **** STEUER_C_H;
153:src/BLMC.c **** if(sense)
154:src/BLMC.c **** {
155:src/BLMC.c **** STEUER_B_L;
156:src/BLMC.c **** if(ZeitZumAdWandeln) AdConvert();
157:src/BLMC.c **** SENSE_A;
158:src/BLMC.c **** SENSE_FALLING_INT;
159:src/BLMC.c **** Phase++;
160:src/BLMC.c **** CntKommutierungen++;
161:src/BLMC.c **** }
162:src/BLMC.c **** else
163:src/BLMC.c **** {
164:src/BLMC.c **** STEUER_A_L;
165:src/BLMC.c **** }
166:src/BLMC.c ****
167:src/BLMC.c **** break;
168:src/BLMC.c **** case 5:
169:src/BLMC.c **** STEUER_B_L;
170:src/BLMC.c **** if(!sense)
171:src/BLMC.c **** {
172:src/BLMC.c **** STEUER_A_H;
173:src/BLMC.c **** if(ZeitZumAdWandeln) AdConvert();
174:src/BLMC.c **** SENSE_C;
175:src/BLMC.c **** SENSE_RISING_INT;
176:src/BLMC.c **** Phase = 0;
177:src/BLMC.c **** CntKommutierungen++;
178:src/BLMC.c **** }
179:src/BLMC.c **** else
180:src/BLMC.c **** {
181:src/BLMC.c **** STEUER_C_H;
182:src/BLMC.c **** }
183:src/BLMC.c **** break;
184:src/BLMC.c **** }
185:src/BLMC.c **** }
186:src/BLMC.c **** while((SENSE_L && sense) || (SENSE_H && !sense));
187:src/BLMC.c **** ZeitZumAdWandeln = 0;
188:src/BLMC.c **** }
189:src/BLMC.c ****
190:src/BLMC.c **** //############################################################################
191:src/BLMC.c **** //
192:src/BLMC.c **** void Manuell(void)
193:src/BLMC.c **** //############################################################################
194:src/BLMC.c **** {
132 .LM1:
133 .LFBB2:
134 /* prologue: frame size=0 */
135 /* prologue end (size=0) */
195:src/BLMC.c **** switch(Phase)
137 .LM2:
138 0014 9091 0000 lds r25,Phase
139 0018 9230 cpi r25,lo8(2)
140 001a 01F0 breq .L7
142 .LM3:
143 001c 9330 cpi r25,lo8(3)
144 001e 00F4 brsh .L11
145 0020 9923 tst r25
146 0022 01F0 breq .L5
147 0024 9130 cpi r25,lo8(1)
148 0026 01F0 breq .+2
149 0028 00C0 rjmp .L12
150 002a 00C0 rjmp .L6
151 .L11:
152 002c 9430 cpi r25,lo8(4)
153 002e 01F0 breq .L9
154 0030 9430 cpi r25,lo8(4)
155 0032 00F0 brlo .L8
156 0034 9530 cpi r25,lo8(5)
157 0036 01F0 breq .+2
158 0038 00C0 rjmp .L12
159 003a 00C0 rjmp .L10
160 .L5:
196:src/BLMC.c **** {
197:src/BLMC.c **** case 0:
198:src/BLMC.c **** STEUER_A_H;
162 .LM4:
163 003c 81EA ldi r24,lo8(-95)
164 003e 8FBD out 79-0x20,r24
165 0040 81E6 ldi r24,lo8(97)
166 0042 85BD out 69-0x20,r24
167 0044 88E0 ldi r24,lo8(8)
168 0046 87BB out 55-0x20,r24
199:src/BLMC.c **** STEUER_B_L;
170 .LM5:
171 0048 82B3 in r24,50-0x20
172 004a 877D andi r24,lo8(-41)
173 004c 82BB out 50-0x20,r24
174 004e 949A sbi 50-0x20,4
200:src/BLMC.c **** SENSE_C;
176 .LM6:
177 0050 82E0 ldi r24,lo8(2)
178 0052 00C0 rjmp .L15
179 .L6:
201:src/BLMC.c **** SENSE_RISING_INT;
202:src/BLMC.c **** break;
203:src/BLMC.c **** case 1:
204:src/BLMC.c **** STEUER_A_H;
181 .LM7:
182 0054 81EA ldi r24,lo8(-95)
183 0056 8FBD out 79-0x20,r24
184 0058 81E6 ldi r24,lo8(97)
185 005a 85BD out 69-0x20,r24
186 005c 88E0 ldi r24,lo8(8)
187 005e 87BB out 55-0x20,r24
205:src/BLMC.c **** STEUER_C_L;
189 .LM8:
190 0060 82B3 in r24,50-0x20
191 0062 877E andi r24,lo8(-25)
192 0064 82BB out 50-0x20,r24
193 0066 959A sbi 50-0x20,5
206:src/BLMC.c **** SENSE_B;
195 .LM9:
196 0068 97B9 out 39-0x20,r25
197 006a 00C0 rjmp .L14
198 .L7:
207:src/BLMC.c **** SENSE_FALLING_INT;
208:src/BLMC.c **** break;
209:src/BLMC.c **** case 2:
210:src/BLMC.c **** STEUER_B_H;
200 .LM10:
201 006c 81EA ldi r24,lo8(-95)
202 006e 8FBD out 79-0x20,r24
203 0070 81E6 ldi r24,lo8(97)
204 0072 85BD out 69-0x20,r24
205 0074 84E0 ldi r24,lo8(4)
206 0076 87BB out 55-0x20,r24
211:src/BLMC.c **** STEUER_C_L;
208 .LM11:
209 0078 82B3 in r24,50-0x20
210 007a 877E andi r24,lo8(-25)
211 007c 82BB out 50-0x20,r24
212 007e 959A sbi 50-0x20,5
212:src/BLMC.c **** SENSE_A;
214 .LM12:
215 0080 17B8 out 39-0x20,__zero_reg__
216 0082 00C0 rjmp .L13
217 .L8:
213:src/BLMC.c **** SENSE_RISING_INT;
214:src/BLMC.c **** break;
215:src/BLMC.c **** case 3:
216:src/BLMC.c **** STEUER_B_H;
219 .LM13:
220 0084 81EA ldi r24,lo8(-95)
221 0086 8FBD out 79-0x20,r24
222 0088 81E6 ldi r24,lo8(97)
223 008a 85BD out 69-0x20,r24
224 008c 84E0 ldi r24,lo8(4)
225 008e 87BB out 55-0x20,r24
217:src/BLMC.c **** STEUER_A_L;
227 .LM14:
228 0090 82B3 in r24,50-0x20
229 0092 8F7C andi r24,lo8(-49)
230 0094 82BB out 50-0x20,r24
231 0096 939A sbi 50-0x20,3
218:src/BLMC.c **** SENSE_C;
233 .LM15:
234 0098 82E0 ldi r24,lo8(2)
235 009a 87B9 out 39-0x20,r24
236 .L14:
219:src/BLMC.c **** SENSE_FALLING_INT;
238 .LM16:
239 009c 4098 cbi 40-0x20,0
240 009e 0895 ret
241 .L9:
220:src/BLMC.c **** break;
221:src/BLMC.c **** case 4:
222:src/BLMC.c **** STEUER_C_H;
243 .LM17:
244 00a0 81EA ldi r24,lo8(-95)
245 00a2 8FBD out 79-0x20,r24
246 00a4 81E6 ldi r24,lo8(97)
247 00a6 85BD out 69-0x20,r24
248 00a8 82E0 ldi r24,lo8(2)
249 00aa 87BB out 55-0x20,r24
223:src/BLMC.c **** STEUER_A_L;
251 .LM18:
252 00ac 82B3 in r24,50-0x20
253 00ae 8F7C andi r24,lo8(-49)
254 00b0 82BB out 50-0x20,r24
255 00b2 939A sbi 50-0x20,3
224:src/BLMC.c **** SENSE_B;
257 .LM19:
258 00b4 81E0 ldi r24,lo8(1)
259 .L15:
260 00b6 87B9 out 39-0x20,r24
261 .L13:
225:src/BLMC.c **** SENSE_RISING_INT;
263 .LM20:
264 00b8 88B1 in r24,40-0x20
265 00ba 8360 ori r24,lo8(3)
266 00bc 88B9 out 40-0x20,r24
267 00be 0895 ret
268 .L10:
226:src/BLMC.c **** break;
227:src/BLMC.c **** case 5:
228:src/BLMC.c **** STEUER_C_H;
270 .LM21:
271 00c0 81EA ldi r24,lo8(-95)
272 00c2 8FBD out 79-0x20,r24
273 00c4 81E6 ldi r24,lo8(97)
274 00c6 85BD out 69-0x20,r24
275 00c8 82E0 ldi r24,lo8(2)
276 00ca 87BB out 55-0x20,r24
229:src/BLMC.c **** STEUER_B_L;
278 .LM22:
279 00cc 82B3 in r24,50-0x20
280 00ce 877D andi r24,lo8(-41)
281 00d0 82BB out 50-0x20,r24
282 00d2 949A sbi 50-0x20,4
230:src/BLMC.c **** SENSE_A;
284 .LM23:
285 00d4 17B8 out 39-0x20,__zero_reg__
231:src/BLMC.c **** SENSE_FALLING_INT;
287 .LM24:
288 00d6 4098 cbi 40-0x20,0
289 .L12:
290 00d8 0895 ret
291 /* epilogue: frame size=0 */
292 /* epilogue: noreturn */
293 /* epilogue end (size=0) */
294 /* function Manuell size 99 (99) */
296 .Lscope2:
298 .stabd 78,0,0
300 .global __vector_16
302 __vector_16:
303 .stabd 46,0,0
305 .LM25:
306 .LFBB3:
307 /* prologue: frame size=0 */
308 00da 1F92 push __zero_reg__
309 00dc 0F92 push __tmp_reg__
310 00de 0FB6 in __tmp_reg__,__SREG__
311 00e0 0F92 push __tmp_reg__
312 00e2 1124 clr __zero_reg__
313 00e4 0F93 push r16
314 00e6 1F93 push r17
315 00e8 2F93 push r18
316 00ea 3F93 push r19
317 00ec 4F93 push r20
318 00ee 5F93 push r21
319 00f0 6F93 push r22
320 00f2 7F93 push r23
321 00f4 8F93 push r24
322 00f6 9F93 push r25
323 00f8 AF93 push r26
324 00fa BF93 push r27
325 00fc EF93 push r30
326 00fe FF93 push r31
327 /* prologue end (size=19) */
328 .L63:
330 .LM26:
331 0100 88B1 in r24,40-0x20
332 0102 9927 clr r25
333 0104 6894 set
334 0106 14F8 bld __zero_reg__,5-1
335 0108 9695 1: lsr r25
336 010a 8795 ror r24
337 010c 1694 lsr __zero_reg__
338 010e 01F4 brne 1b
339 0110 082F mov r16,r24
340 0112 0170 andi r16,lo8(1)
342 .LM27:
343 0114 1091 0000 lds r17,Phase
344 0118 1230 cpi r17,lo8(2)
345 011a 01F4 brne .+2
346 011c 00C0 rjmp .L21
348 .LM28:
349 011e 1330 cpi r17,lo8(3)
350 0120 00F4 brsh .L25
351 0122 1123 tst r17
352 0124 01F0 breq .L19
353 0126 1130 cpi r17,lo8(1)
354 0128 01F0 breq .+2
355 012a 00C0 rjmp .L18
356 012c 00C0 rjmp .L20
357 .L25:
358 012e 1430 cpi r17,lo8(4)
359 0130 01F4 brne .+2
360 0132 00C0 rjmp .L23
361 0134 1430 cpi r17,lo8(4)
362 0136 00F4 brsh .+2
363 0138 00C0 rjmp .L22
364 013a 1530 cpi r17,lo8(5)
365 013c 01F0 breq .+2
366 013e 00C0 rjmp .L18
367 0140 00C0 rjmp .L24
368 .L19:
370 .LM29:
371 0142 81EA ldi r24,lo8(-95)
372 0144 8FBD out 79-0x20,r24
373 0146 81E6 ldi r24,lo8(97)
374 0148 85BD out 69-0x20,r24
375 014a 88E0 ldi r24,lo8(8)
376 014c 87BB out 55-0x20,r24
378 .LM30:
379 014e 0023 tst r16
380 0150 01F0 breq .L26
382 .LM31:
383 0152 82B3 in r24,50-0x20
384 0154 877E andi r24,lo8(-25)
385 0156 82BB out 50-0x20,r24
386 0158 959A sbi 50-0x20,5
388 .LM32:
389 015a 8091 0000 lds r24,ZeitZumAdWandeln
390 015e 8111 cpse r24,__zero_reg__
391 0160 00D0 rcall AdConvert
392 .L28:
394 .LM33:
395 0162 4098 cbi 40-0x20,0
397 .LM34:
398 0164 81E0 ldi r24,lo8(1)
399 0166 87B9 out 39-0x20,r24
400 0168 00C0 rjmp .L58
401 .L26:
403 .LM35:
404 016a 82B3 in r24,50-0x20
405 016c 877D andi r24,lo8(-41)
406 016e 82BB out 50-0x20,r24
407 0170 949A sbi 50-0x20,4
408 0172 00C0 rjmp .L18
409 .L20:
411 .LM36:
412 0174 82B3 in r24,50-0x20
413 0176 877E andi r24,lo8(-25)
414 0178 82BB out 50-0x20,r24
415 017a 959A sbi 50-0x20,5
417 .LM37:
418 017c 0023 tst r16
419 017e 01F4 brne .L30
421 .LM38:
422 0180 81EA ldi r24,lo8(-95)
423 0182 8FBD out 79-0x20,r24
424 0184 81E6 ldi r24,lo8(97)
425 0186 85BD out 69-0x20,r24
426 0188 84E0 ldi r24,lo8(4)
427 018a 87BB out 55-0x20,r24
429 .LM39:
430 018c 8091 0000 lds r24,ZeitZumAdWandeln
431 0190 8111 cpse r24,__zero_reg__
432 0192 00D0 rcall AdConvert
433 .L32:
435 .LM40:
436 0194 17B8 out 39-0x20,__zero_reg__
437 .L62:
439 .LM41:
440 0196 88B1 in r24,40-0x20
441 0198 8360 ori r24,lo8(3)
442 019a 88B9 out 40-0x20,r24
443 .L58:
445 .LM42:
446 019c 8091 0000 lds r24,Phase
447 01a0 8F5F subi r24,lo8(-(1))
448 01a2 8093 0000 sts Phase,r24
449 .L59:
451 .LM43:
452 01a6 8091 0000 lds r24,CntKommutierungen
453 01aa 9091 0000 lds r25,(CntKommutierungen)+1
454 01ae 0196 adiw r24,1
455 01b0 9093 0000 sts (CntKommutierungen)+1,r25
456 01b4 8093 0000 sts CntKommutierungen,r24
457 01b8 00C0 rjmp .L18
458 .L30:
460 .LM44:
461 01ba 81EA ldi r24,lo8(-95)
462 01bc 8FBD out 79-0x20,r24
463 01be 81E6 ldi r24,lo8(97)
464 01c0 85BD out 69-0x20,r24
465 01c2 88E0 ldi r24,lo8(8)
466 01c4 00C0 rjmp .L60
467 .L21:
469 .LM45:
470 01c6 81EA ldi r24,lo8(-95)
471 01c8 8FBD out 79-0x20,r24
472 01ca 81E6 ldi r24,lo8(97)
473 01cc 85BD out 69-0x20,r24
474 01ce 84E0 ldi r24,lo8(4)
475 01d0 87BB out 55-0x20,r24
477 .LM46:
478 01d2 0023 tst r16
479 01d4 01F0 breq .L34
481 .LM47:
482 01d6 82B3 in r24,50-0x20
483 01d8 8F7C andi r24,lo8(-49)
484 01da 82BB out 50-0x20,r24
485 01dc 939A sbi 50-0x20,3
487 .LM48:
488 01de 8091 0000 lds r24,ZeitZumAdWandeln
489 01e2 8111 cpse r24,__zero_reg__
490 01e4 00D0 rcall AdConvert
491 .L36:
493 .LM49:
494 01e6 17B9 out 39-0x20,r17
495 01e8 00C0 rjmp .L61
496 .L34:
498 .LM50:
499 01ea 82B3 in r24,50-0x20
500 01ec 877E andi r24,lo8(-25)
501 01ee 82BB out 50-0x20,r24
502 01f0 959A sbi 50-0x20,5
503 01f2 00C0 rjmp .L18
504 .L22:
506 .LM51:
507 01f4 82B3 in r24,50-0x20
508 01f6 8F7C andi r24,lo8(-49)
509 01f8 82BB out 50-0x20,r24
510 01fa 939A sbi 50-0x20,3
512 .LM52:
513 01fc 0023 tst r16
514 01fe 01F4 brne .L38
516 .LM53:
517 0200 81EA ldi r24,lo8(-95)
518 0202 8FBD out 79-0x20,r24
519 0204 81E6 ldi r24,lo8(97)
520 0206 85BD out 69-0x20,r24
521 0208 82E0 ldi r24,lo8(2)
522 020a 87BB out 55-0x20,r24
524 .LM54:
525 020c 8091 0000 lds r24,ZeitZumAdWandeln
526 0210 8111 cpse r24,__zero_reg__
527 0212 00D0 rcall AdConvert
528 .L40:
530 .LM55:
531 0214 81E0 ldi r24,lo8(1)
532 0216 87B9 out 39-0x20,r24
533 0218 00C0 rjmp .L62
534 .L38:
536 .LM56:
537 021a 81EA ldi r24,lo8(-95)
538 021c 8FBD out 79-0x20,r24
539 021e 81E6 ldi r24,lo8(97)
540 0220 85BD out 69-0x20,r24
541 0222 84E0 ldi r24,lo8(4)
542 0224 00C0 rjmp .L60
543 .L23:
545 .LM57:
546 0226 81EA ldi r24,lo8(-95)
547 0228 8FBD out 79-0x20,r24
548 022a 81E6 ldi r24,lo8(97)
549 022c 85BD out 69-0x20,r24
550 022e 82E0 ldi r24,lo8(2)
551 0230 87BB out 55-0x20,r24
553 .LM58:
554 0232 0023 tst r16
555 0234 01F0 breq .L42
557 .LM59:
558 0236 82B3 in r24,50-0x20
559 0238 877D andi r24,lo8(-41)
560 023a 82BB out 50-0x20,r24
561 023c 949A sbi 50-0x20,4
563 .LM60:
564 023e 8091 0000 lds r24,ZeitZumAdWandeln
565 0242 8111 cpse r24,__zero_reg__
566 0244 00D0 rcall AdConvert
567 .L44:
569 .LM61:
570 0246 17B8 out 39-0x20,__zero_reg__
571 .L61:
573 .LM62:
574 0248 4098 cbi 40-0x20,0
575 024a 00C0 rjmp .L58
576 .L42:
578 .LM63:
579 024c 82B3 in r24,50-0x20
580 024e 8F7C andi r24,lo8(-49)
581 0250 82BB out 50-0x20,r24
582 0252 939A sbi 50-0x20,3
583 0254 00C0 rjmp .L18
584 .L24:
586 .LM64:
587 0256 82B3 in r24,50-0x20
588 0258 877D andi r24,lo8(-41)
589 025a 82BB out 50-0x20,r24
590 025c 949A sbi 50-0x20,4
592 .LM65:
593 025e 0023 tst r16
594 0260 01F4 brne .L46
596 .LM66:
597 0262 81EA ldi r24,lo8(-95)
598 0264 8FBD out 79-0x20,r24
599 0266 81E6 ldi r24,lo8(97)
600 0268 85BD out 69-0x20,r24
601 026a 88E0 ldi r24,lo8(8)
602 026c 87BB out 55-0x20,r24
604 .LM67:
605 026e 8091 0000 lds r24,ZeitZumAdWandeln
606 0272 8111 cpse r24,__zero_reg__
607 0274 00D0 rcall AdConvert
608 .L48:
610 .LM68:
611 0276 82E0 ldi r24,lo8(2)
612 0278 87B9 out 39-0x20,r24
614 .LM69:
615 027a 88B1 in r24,40-0x20
616 027c 8360 ori r24,lo8(3)
617 027e 88B9 out 40-0x20,r24
619 .LM70:
620 0280 1092 0000 sts Phase,__zero_reg__
621 0284 00C0 rjmp .L59
622 .L46:
624 .LM71:
625 0286 81EA ldi r24,lo8(-95)
626 0288 8FBD out 79-0x20,r24
627 028a 81E6 ldi r24,lo8(97)
628 028c 85BD out 69-0x20,r24
629 028e 82E0 ldi r24,lo8(2)
630 .L60:
631 0290 87BB out 55-0x20,r24
632 .L18:
634 .LM72:
635 0292 4599 sbic 40-0x20,5
636 0294 00C0 rjmp .L50
637 0296 0023 tst r16
638 0298 01F0 breq .+2
639 029a 00C0 rjmp .L63
640 .L50:
641 029c 459B sbis 40-0x20,5
642 029e 00C0 rjmp .L52
643 02a0 0023 tst r16
644 02a2 01F4 brne .+2
645 02a4 00C0 rjmp .L63
646 .L52:
648 .LM73:
649 02a6 1092 0000 sts ZeitZumAdWandeln,__zero_reg__
650 /* epilogue: frame size=0 */
651 02aa FF91 pop r31
652 02ac EF91 pop r30
653 02ae BF91 pop r27
654 02b0 AF91 pop r26
655 02b2 9F91 pop r25
656 02b4 8F91 pop r24
657 02b6 7F91 pop r23
658 02b8 6F91 pop r22
659 02ba 5F91 pop r21
660 02bc 4F91 pop r20
661 02be 3F91 pop r19
662 02c0 2F91 pop r18
663 02c2 1F91 pop r17
664 02c4 0F91 pop r16
665 02c6 0F90 pop __tmp_reg__
666 02c8 0FBE out __SREG__,__tmp_reg__
667 02ca 0F90 pop __tmp_reg__
668 02cc 1F90 pop __zero_reg__
669 02ce 1895 reti
670 /* epilogue end (size=19) */
671 /* function __vector_16 size 257 (219) */
673 .Lscope3:
675 .stabd 78,0,0
676 .global Phase
677 .global Phase
678 .section .bss
681 Phase:
682 0000 00 .skip 1,0
683 .global ShadowTCCR1A
684 .global ShadowTCCR1A
687 ShadowTCCR1A:
688 0001 00 .skip 1,0
689 .global CompFreigabeTimer
690 .data
693 CompFreigabeTimer:
694 0000 64 .byte 100
695 .global CompInterruptFreigabe
696 .global CompInterruptFreigabe
697 .section .bss
700 CompInterruptFreigabe:
701 0002 00 .skip 1,0
706 .text
708 .Letext0:
709 /* File "src/BLMC.c": code 366 = 0x016e ( 318), prologues 24, epilogues 24 */
DEFINED SYMBOLS
*ABS*:00000000 BLMC.c
/tmp/ccDcOot8.s:2 *ABS*:0000003f __SREG__
/tmp/ccDcOot8.s:3 *ABS*:0000003e __SP_H__
/tmp/ccDcOot8.s:4 *ABS*:0000003d __SP_L__
/tmp/ccDcOot8.s:5 *ABS*:00000000 __tmp_reg__
/tmp/ccDcOot8.s:6 *ABS*:00000001 __zero_reg__
/tmp/ccDcOot8.s:102 .text:00000000 __vector_4
/tmp/ccDcOot8.s:129 .text:00000014 Manuell
/tmp/ccDcOot8.s:681 .bss:00000000 Phase
/tmp/ccDcOot8.s:302 .text:000000da __vector_16
/tmp/ccDcOot8.s:687 .bss:00000001 ShadowTCCR1A
/tmp/ccDcOot8.s:693 .data:00000000 CompFreigabeTimer
/tmp/ccDcOot8.s:700 .bss:00000002 CompInterruptFreigabe
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
ZeitZumAdWandeln
AdConvert
CntKommutierungen
/branches/V0.37_neueStruktur/out/BrushLess-Ctrl_V0_37.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:executable
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/V0.37_neueStruktur/out/BrushLess-Ctrl_V0_37.hex
0,0 → 1,418
:1000000012C0F3C72AC029C091C056C726C025C058
:1000100042C7FAC722C0FAC920C0CCC81EC01DC042
:10002000F2C077C81AC011241FBECFE5D4E0DEBFEE
:10003000CDBF10E0A0E6B0E0EEEEF9E102C0059021
:100040000D92A637B107D9F713E0A6E7B0E001C0DB
:100050001D92A83AB107E1F7ADC5D2CF86EA86B9BD
:1000600087E087B9369A089527B196E097B910BE10
:1000700083ED86B9349A97B9369A349BFECF27B967
:1000800084B195B120917B0030917C00A90163E09F
:10009000440F551F6A95E1F7421B530B880F991FB8
:1000A000880F991F480F591F83E0569547958A95E9
:1000B000E1F750937C0040937B0080917D0099276D
:1000C0008417950710F440937D0016B888E080BF30
:1000D000089527B187B910BE93ED96B9349A87B9C0
:1000E000369A349BFECF27B916B888E080BF84B11A
:1000F00095B1089586E0EDDF9C01220F331F220F9A
:10010000331F293C310510F028EC30E030937C009F
:1001100020937B0080917D0099278217930710F42C
:1001200020937D0016B888E080BF08951F920F923B
:100130000FB60F9211240F900FBE0F901F901895BD
:1001400090917600923041F1933030F4992361F030
:10015000913009F057C014C09430C1F1943040F18F
:10016000953009F04FC042C081EA8FBD81E685BD60
:1001700088E087BB82B3877D82BB949A82E031C0DE
:1001800081EA8FBD81E685BD88E087BB82B3877E2B
:1001900082BB959A97B918C081EA8FBD81E685BD6B
:1001A00084E087BB82B3877E82BB959A17B81AC05A
:1001B00081EA8FBD81E685BD84E087BB82B38F7CF9
:1001C00082BB939A82E087B94098089581EA8FBDF7
:1001D00081E685BD82E087BB82B38F7C82BB939A28
:1001E00081E087B988B1836088B9089581EA8FBDBD
:1001F00081E685BD82E087BB82B3877D82BB949A0E
:1002000017B8409808951F920F920FB60F921124BD
:100210000F931F932F933F934F935F936F937F930E
:100220008F939F93AF93BF93EF93FF9388B19927D9
:10023000689414F8969587951694E1F7082F017045
:1002400010917600123009F454C0133030F41123A9
:1002500071F0113009F0B3C023C0143009F479C033
:10026000143008F45DC0153009F0A9C08AC081EAD5
:100270008FBD81E685BD88E087BB002361F082B336
:10028000877E82BB959A809166008111EDDE409851
:1002900081E087B919C082B3877D82BB949A8FC0F1
:1002A00082B3877E82BB959A0023E9F481EA8FBDF1
:1002B00081E685BD84E087BB809166008111D4DE34
:1002C00017B888B1836088B9809176008F5F80937A
:1002D000760080918A0090918B00019690938B001C
:1002E00080938A006CC081EA8FBD81E685BD88E07D
:1002F00065C081EA8FBD81E685BD84E087BB0023B0
:1003000051F082B38F7C82BB939A809166008111F9
:10031000ABDE17B92FC082B3877E82BB959A4FC0E0
:1003200082B38F7C82BB939A002369F481EA8FBDEC
:1003300081E685BD82E087BB80916600811194DEF5
:1003400081E087B9BECF81EA8FBD81E685BD84E0BB
:1003500035C081EA8FBD81E685BD82E087BB002381
:1003600059F082B3877D82BB949A80916600811197
:100370007BDE17B84098A8CF82B38F7C82BB939A5C
:100380001EC082B3877D82BB949A002391F481EAD8
:100390008FBD81E685BD88E087BB809166008111B5
:1003A00063DE82E087B988B1836088B910927600F5
:1003B00090CF81EA8FBD81E685BD82E087BB4599FC
:1003C00003C0002309F032CF459B03C0002309F48A
:1003D0002DCF10926600FF91EF91BF91AF919F9149
:1003E0008F917F916F915F914F913F912F911F91CD
:1003F0000F910F900FBE0F901F90189520917900CC
:1004000080916500821710F4AB9A282F80917B00B1
:1004100090917C00893C910560F01BBC1ABC19BC12
:1004200018BC13BCAB9A019790937C0080937B001F
:100430000895822F99279BBD8ABD99BD88BD23BD94
:10044000089591E09FBD81E485BD8EE087BB88B3B0
:10045000817F88BB9EBD089592B7980F292F3327BF
:1004600082B7821B87FDFCCF089580E090E008955D
:100470008091810090918200892B09F059C0809170
:10048000830090918400892B99F090919D008FEFCB
:10049000989FC001112468EC70E058DA70938F00C7
:1004A00060938E001092680089B78F7D89BF31C03C
:1004B00080919400853178F181E0809368002091EB
:1004C00090003091910041E02D32340730F4293C06
:1004D000310540F42B30310538F410928F00109222
:1004E0008E0017C028EC30E08CEF90E0AC01249F28
:1004F000C001259F900D349F900D1124885D994077
:1005000064EB70E023DA6D5F7F4F70938F00609330
:100510008E00AB981AC080918E0090918F0000974A
:1005200029F0019790938F0080938E00AB9A0DC0B5
:100530008091B002992790938F0080938E00109243
:100540006800AB9889B78F7D89BF80918E009091AC
:100550008F008F3F910539F030F08FEF90E090934E
:100560008F0080938E0080918E009927089580914E
:100570007B0090917C0090938F0380938E038091F9
:100580007E009927909391038093900380918C0033
:1005900090918D00909393038093920380919000AB
:1005A00090919100909395038093940308951F93E5
:1005B000182F789408C0AB9A8CE291E08AD5AB985A
:1005C0008CE291E086D51150B0F788EE93E081D5AA
:1005D0001F910895CF93DF93EC0117C08BDD8091BD
:1005E000AD029091AE0288589F4F20917B003091D0
:1005F0007C008217930748F482B3877C82BB88B360
:10060000817F88BB81E090E007C021978FEFCF3FCB
:10061000D80721F780E090E0DF91CF9108958F9285
:100620009F92BF92CF92DF92EF92FF920F931F9310
:10063000CF93DF93CDB7DEB725970FB6F894DEBF23
:100640000FBECDBFDE011196E9E6F0E085E0019036
:100650000D928150E1F7AB9880916700FE01E80FA1
:10066000F11D818199272CE231E0AC01429FC0014C
:10067000439F900D529F900D11242BD5109278001E
:100680004398F8948AE0B5D682B3877C82BB81E038
:100690008FBD81E485BD8EE087BB88B3817F88BB39
:1006A00010927D0082E390E095DF80917D00992794
:1006B0009093AE028093AD0210927C0010927B006A
:1006C000949AC39A83E090E085DF882311F4BB24D9
:1006D00004C081E38ED6BB24B39482B3877C82BBF3
:1006E00088B3817F88BB10927C0010927B00939A24
:1006F000C29A83E090E06EDF882321F082E379D60E
:10070000B2E0BB2E82B3877C82BB88B3817F88BB7B
:1007100010927C0010927B00949AC19A83E090E042
:1007200059DF882321F083E364D6A3E0BA2E82B395
:10073000877C82BB88B3817F88BB939AC19A83E010
:1007400090E048DF882321F087E353D6F3E0BF2E03
:1007500082B3877C82BB88B3817F88BB80E197E2CC
:1007600039DFBB2019F08B2D22DFFDCF8CB1803219
:1007700031F0E8EE8E2EE3E09E2E82E306C08FE598
:1007800038D688248A94982C88E210927C001092A3
:100790007B0000E010E0C82EDD24939A81E090E019
:1007A00019DF82B3877C82BB88B3817F88BBC39A01
:1007B00081E090E00FDF82B3877C82BB88B3817FCA
:1007C00088BB76018091AD029091AE028C0D9D1D8B
:1007D00020917B0030917C008217930728F484E3FA
:1007E00008D674E0B72E05C00F5F1F4F0815190516
:1007F000A1F610927C0010927B0000E010E0949A29
:1008000081E090E0E7DE82B3877C82BB88B3817FA2
:1008100088BBC29A81E090E0DDDE82B3877C82BB38
:1008200088B3817F88BB8091AD029091AE028E0D1E
:100830009F1D20917B0030917C008217930728F444
:1008400085E3D7D565E0B62E05C00F5F1F4F0815AD
:100850001905A9F610927C0010927B0000E010E0D0
:10086000959A81E090E0B6DE82B3877C82BB88B344
:10087000817F88BBC19A81E090E0ACDE82B3877C47
:1008800082BB88B3817F88BB8091AD029091AE021C
:100890008E0D9F1D20917B0030917C008217930765
:1008A00028F486E3A6D556E0B52E05C00F5F1F4F8E
:1008B00008151905A9F617B882B3877C82BB88B3DF
:1008C000817F88BB949A959A10927C0010927B004D
:1008D00000E010E0FF24C39A80E090E0FADBC397C9
:1008E0001CF051E0F52A02C08EEFF82218BA0F5F13
:1008F0001F4F0937110579F782B3877C82BB88B314
:10090000817F88BB939A959A00E010E0C29A81E0BB
:1009100090E0DFDBC3971CF042E0F42A02C05DEFF9
:10092000F52218BA0F5F1F4F0538110579F782B30A
:10093000877C82BB88B3817F88BB939A949A00E0BE
:1009400010E0C19A82E090E0C4DBC3971CF084E021
:10095000F82A02C04BEFF42218BA0F5F1F4F0F3670
:10096000110579F782B3877C82BB88B3817F88BB0E
:1009700081E087B9939A00E010E0C29A80E090E0AD
:10098000A8DBC3971CF057EFF52202C088E0F82AD5
:1009900018BA0F5F1F4F0937110579F7959A00E0D4
:1009A00010E0C29A82E090E094DBC3971CF04FED18
:1009B000F42202C050E2F52A18BA0F5F1F4F053823
:1009C000110579F782B3877C82BB88B3817F88BBAE
:1009D00082B3877C82BB88B3817F88BB949A00E016
:1009E00010E0C19A81E090E074DBC3971CF08FEEB9
:1009F000F82202C040E1F42A18BA0F5F1F4F0F36E9
:100A0000110579F782B3877C82BB88B3817F88BB6D
:100A1000789480916700FE01E80FF11D218184E048
:100A200090E0821B91092CE231E0AC01429FC001B1
:100A3000439F900D529F900D11244BD38F2D9927DA
:100A400080FD05C081E48CB9BB24B39425C081FD31
:100A500005C082E48CB942E0B42E1EC082FD05C000
:100A600083E48CB933E0B32E17C083FD05C081E663
:100A70008CB924E0B22E10C084FD05C082E68CB98A
:100A800095E0B92E09C085FD05C083E68CB986E0E6
:100A9000B82E02C0BB2019F088EE93E01AD38B2D3C
:100AA00086DD8EE2A6D425960FB6F894DEBF0FBE83
:100AB000CDBFDF91CF911F910F91FF90EF90DF900D
:100AC000CF90BF909F908F900895AF92BF92CF929A
:100AD000DF92EF92FF920F931F93CF93DF93182F24
:100AE00010927800439885E090E090937A0080938C
:100AF000790084DC25DB88EC90E0EBD2C12FDD2788
:100B0000D0937A00C09379001CE2A12E11E0B12E9F
:100B1000C12CD12CEE24FF2487010EC080916E00E1
:100B2000882311F451D301C052D584E695DC089492
:100B3000E11CF11C011D111DEA14FB040C051D052F
:100B400069F7C601B5012FE030E040E050E012D770
:100B5000A21AB30AC40AD50A0894A108B108C108A8
:100B6000D10889E1A816B104C104D104C0F0E8DAC3
:100B7000809176008F5F809376008091760066E0AA
:100B8000D9D69093760070DAD0937A00C09379002A
:100B900035DC449BBFCF82B3805882BBBBCFDF9193
:100BA000CF911F910F91FF90EF90DF90CF90BF906A
:100BB000AF900895CFE5D4E0DEBFCDBF88E084BB21
:100BC00085BB8AEB81BB12BA8EE087BB81E388BB11
:100BD00088B3806C88BBB69B06C0B79B02C081E01F
:100BE00007C082E005C0B79B02C083E001C084E07B
:100BF0008093670006D550D2789423DC80E581D2BB
:100C00003DD185E690E051D286E690E04ED287E66F
:100C100090E04BD2EC018EEF90E047D26C018DEE6C
:100C200093E043D28C018EEE93E03FD203C020DCF0
:100C3000882321F4CE0142D28823C9F3979A1092D7
:100C40007A0010927900DADB88E080BF81E087B912
:100C50008AE090E02AD2EC0181E090E09093910349
:100C600080939003109291001092900001DC8823F1
:100C700009F4D5DC81E388BBEE24FADB9927909355
:100C80007A0080937900809176008E1551F0109251
:100C90006400109263008AEF90E007D2EC01E090CC
:100CA00076008091790090917A00892BD1F410928E
:100CB000890010926300C50101D28823E9F01092E7
:100CC0007800439891E09093640082B3877C82BB64
:100CD0009FBD81E485BD8EE087BB88B3817F88BBE3
:100CE0000BC080916400882319F081E08093890013
:100CF0008CED95E0DAD15C0180916400882321F0CD
:100D000010927A001092790079DB809163008F5FF6
:100D100080936300813009F0B0CF8091640081112D
:100D2000979AC601CBD18823A9F182E390E0BDD187
:100D30006C0180917E00482F552720917B003091D7
:100D40007C004217530710F48F5F04C02417350747
:100D500018F4815080937E00293C310548F0809141
:100D60006500982F929596959770891B80936500E2
:100D700080917E0090916500893738F0992319F0B1
:100D8000915090936500AB9A05C09F3F19F09F5F0B
:100D900090936500C80192D18823B9F08AE090E071
:100DA00084D18C0180918A0090918B0090938D006A
:100DB00080938C0010928B0010928A008091930097
:100DC000882319F481E080936600CE0177D18823CF
:100DD00031F080918C0090918D00892B29F08091C9
:100DE0008900882309F449CFFF24F394F09264002A
:100DF00010927800439884E690E057D1EC018091FE
:100E00008900882309F439CFAB98109289008AE0D1
:100E10005CDE979A109264008091760081508093F6
:100E2000760081E090E090937A0080937900E6DA92
:100E300088B18C7F88B9F092780088B18A6088B9CF
:100E400084E190E032D1EC01CE0138D18823E1F386
:100E50008FE090E090937A0080937900CFDA8CE273
:100E600091E023D1EC01CE0129D18823E1F382E383
:100E700090E01BD18C0187E0E82EFFCE8EB5806C10
:100E80008EBD8EB580648EBD89B7806289BF89B7FB
:100E9000846089BF08951F920F920FB60F9211249C
:100EA0008F93809192008F5F809392008F910F902B
:100EB0000FBE0F901F9018951F920F920FB60F92B2
:100EC00011242F933F934F935F938F939F930EB46F
:100ED00006FE0FC01092920086B597B590939800C9
:100EE000809397008EB58F7B8EBD84E680939300B0
:100EF00071C08EB580648EBD86B597B52091920085
:100F00004091970050919800841B950B3327322F06
:100F10002227330F820F931F689414F896958795B4
:100F20001694E1F790939600809395008851914034
:100F300030F488E191E09093960080939500409181
:100F400095005091960048515140809190009091A9
:100F500091008417950730F4809190009091910052
:100F600001960CC08091900090919100481759070C
:100F700048F4809190009091910001979093910096
:100F80008093900080919000909191009C01220F9D
:100F9000331F220F331F220F331F281B390B240F3F
:100FA000351F83E0369527958A95E1F730939600B3
:100FB00020939500309391002093900080919400AD
:100FC0008F3F29F0809194008F5F8093940081E09F
:100FD000809366009F918F915F914F913F912F91E8
:100FE0000F900FBE0F901F9018951F920F920FB683
:100FF0000F9211248F938AB78F7B8ABF8F910F90A6
:101000000FBE0F901F9018951F920F920FB60F9260
:1010100011248F939F938091AF028F5F8093AF02D3
:1010200080919B00815080939B008F3F71F583E0FE
:1010300080939B008091990090919A0001969093E3
:101040009A0080939900809181009091820000978E
:1010500029F0019790938200809381008091930002
:10106000882331F08091930081508093930002C0D7
:10107000109294008091830090918400009729F051
:10108000019790938400809383009F918F910F909C
:101090000FBE0F901F90189582E083BF89B78160C3
:1010A00089BF89B7806489BF0895209199003091E4
:1010B0009A0021503040820F931F0895209199008B
:1010C00030919A00821B930B892F9927807899275A
:1010D0000895AC012091990030919A002150304040
:1010E0008091990090919A00B901681B790BCB010E
:1010F000840F951F80709078892F9927882381F31A
:10110000089590916700990F980F92B985EC86BF6A
:1011100008951F920F920FB60F9211248F939F93F1
:1011200081B19927887F907080389105C9F0813806
:10113000910534F4009791F18036910591F50AC03C
:10114000883B9105B9F0883F910529F1883A9105CE
:1011500041F510C086B7806886BF10929C0023C0FE
:1011600083B18093B00284EF91E0909382008093EA
:1011700081000EC080919C00882339F480917E000C
:1011800083B981E080939C0003C08091650083B99E
:1011900086B7806807C086B7806986BF86B78069D2
:1011A00086BF85EC86BF9F918F910F900FBE0F90E9
:1011B0001F9018951F920F920FB60F9211240F9047
:1011C0000FBE0F901F9018955E9B24C080916E00FB
:1011D0008823E1F48091AB009091AC00019690934C
:1011E000AC008093AB00FC01EE54FD4FE081ED308C
:1011F00019F08436910539F41092AC001092AB00CE
:1012000081E080936E00589AECB908951092AC007A
:101210001092AB0008951F93CF93DF93EC0170E021
:10122000A22FBB27129748C0E42FFF27E85EFC4F90
:1012300030814F5FE42FFF27E85EFC4F50814F5F06
:10124000E42FFF27E85EFC4F10814F5FE42FFF275C
:10125000E85EFC4F20814F5F842F9927A817B907BC
:1012600074F15D53FE01E70FF11D852F82958F709C
:101270003D53330F330F382B3083613001F1912F01
:101280009D537F5FFE01E70FF11D71505295507F16
:10129000892F86958695582B508363506F3F79F040
:1012A0007E5FFE01E70FF11D9295990F990F907CDB
:1012B0002D53922B90837F5F662309F0B5CFDF918A
:1012C000CF911F910895DC0120E030E040E050E034
:1012D00008C0FA01EE54FD4F8081280F311D4F5F89
:1012E0005F4F4A175B07A9F73F70C90136E0969533
:1012F00087953A95E1F7835CFD01EE54FD4F8083BD
:1013000011962F73235CFD01EE54FD4F2083AD54E5
:10131000BD4F8DE08C9310926E008091B2028CB91B
:1013200008951F93CF93DF93EA01722F93E2909376
:10133000B2026093B3028093B402A3E0B0E060E035
:101340004FC0FE01E60FF11D90816F5F715019F4DF
:1013500010E040E00FC0FE01E60FF11D40816F5F1D
:10136000715011F410E006C0FE01E60FF11D10816E
:101370006F5F7150892F86958695835CFD01EE54D1
:10138000FD4F808355279A0184E0369527958A95ED
:10139000E1F7892F992783709070F4E0880F991FE7
:1013A000FA95E1F7282B235CFD01ED54FD4F2083D6
:1013B000812F82958695869583704F705070440F6B
:1013C000551F440F551F842B835CFD01EC54FD4FCA
:1013D00080831F73135CFD01EB54FD4F1083149643
:1013E000772309F0AECFCD016EDFDF91CF911F9152
:1013F00008951F93182F8A3011F48DE0FADF5D9B5A
:10140000FECF1CB980E090E01F9108951F920F92CB
:101410000FB60F9211242F933F934F935F936F93C7
:101420007F938F939F93AF93BF93CF93DF93EF936C
:10143000FF938CB180939E004091A600443610F03B
:101440001092A50050919E005D3009F064C080911B
:10145000A500823009F05FC01092A500A42FBB2721
:10146000FD01EA5EFC4F3081ED01C95EDC4F288151
:101470008091A9009091AA00831B9109821B910978
:101480009F709093AA008093A9009C0196E03695E6
:1014900027959A95E1F7235C2093A800982F9F73D6
:1014A000935C9093A7008081281709F07CC0888105
:1014B000981709F078C04093A400A85EBC4F5C93D5
:1014C00080911A03823549F488E190E02CE00FB650
:1014D000F894A89581BD0FBE21BD80911A0389DFC4
:1014E00080911A03843709F05EC02091A40043E084
:1014F00064E080EA90E08FDEE0916700FF27E1562C
:10150000FF4F808180939D0084EF91E09093840051
:101510008093830048C08091A5008130D9F081304C
:1015200018F08230F1F521C080919E00833239F4A9
:1015300080919F00882319F481E08093A500809119
:101540009E008093180381E08093A60080919E0006
:10155000992722C082E08093A500E42FFF27809185
:101560009E00E85EFC4F808309C0E42FFF27809136
:101570009E00E85EFC4F8083443620F44F5F40932A
:10158000A60002C01092A50020919E008091A900A3
:101590009091AA00820F911D9093AA008093A900B8
:1015A00002C01092A500FF91EF91DF91CF91BF9102
:1015B000AF919F918F917F916F915F914F913F91EB
:1015C0002F910F900FBE0F901F9018950895809146
:1015D00016039091170372DD882391F080916E00BD
:1015E000882371F06091B10222E24CE753E084E479
:1015F00098DE82E390E059DD909317038093160301
:10160000089588E18AB9599A579A80E189B960E0CA
:1016100070E089EF99E028D088EC90E046DD909367
:101620001703809316038AE0E4DE82E4E2DE8CE4B2
:10163000E0DE8AE3DEDE86E5DCDE80E3DADE8EE213
:10164000D8DE83E3D6DE87E3D4DE8AE0D2DE81E42F
:10165000D0DE84E4CEDE82E5CCDE8AE3CADE809191
:101660006700805DC6DE0895EF92FF920F931F938F
:10167000CF93DF938C017B01892B11F4672BC9F188
:101680006EE070E081E090E03BD0FC01009789F1D2
:10169000DC0180E88383E114F10471F0F386E286D3
:1016A00081E8838380919E0390919F03892B21F48D
:1016B000F0939F03E0939E0301151105E1F011875C
:1016C00000878381826083838091A0039091A1032E
:1016D000892B89F4F093A103E093A0038091A203E6
:1016E0009091A303892B39F4F093A303E093A20311
:1016F00002C0A0E0B0E0CD01E6E0CDB7DEB768C142
:101700000F931F93CF93DF93869F8001879F100DC8
:10171000969F100D1124C8010DD0EC01009721F007
:10172000A80160E070E0FFD0CE01DF91CF911F9162
:101730000F910895CF93DF93AC01029710F442E02C
:1017400050E0A091A603B091A703FD01C0E0D0E056
:1017500020E030E020C0808191818417950769F4F2
:1017600082819381209719F09B838A8304C0909390
:10177000A7038093A603CF0132C04817590738F456
:101780002115310519F08217930708F49C01EF0128
:101790000280F381E02D3097F1F62115310589F1B2
:1017A000C901841B950B049708F4A901E0E0F0E05F
:1017B00026C08D919C91119782179307E9F44817E1
:1017C000590779F4ED018A819B81309719F0938351
:1017D000828304C09093A7038093A603CD01029651
:1017E00049C0841B950BFD01E80FF91F41935193EC
:1017F00002978D939C933AC0FD01A281B38110970B
:10180000C1F68091A4039091A503892B41F48091A6
:101810007100909172009093A5038093A40320918E
:101820007300309174002115310541F42DB73EB796
:1018300080916F0090917000281B390BE091A403F8
:10184000F091A5032E1B3F0B2417350788F0CA0122
:1018500002962817390760F0CF01840F951F029672
:101860009093A5038093A40341935193CF0102C0A9
:1018700080E090E0DF91CF910895CF93DF930097C0
:1018800009F44EC0EC0122971B821A82A091A60394
:10189000B091A703109711F140E050E001C0DC01C6
:1018A000AC17BD0700F1BB83AA83FE0121913191E2
:1018B000E20FF31FEA17FB0771F42E5F3F4F8D9184
:1018C0009C911197820F931F99838883FD018281D8
:1018D00093819B838A834115510559F4D093A703C3
:1018E000C093A6031DC0FD0182819381AD010097C5
:1018F000B1F6FA01D383C28321913191E20FF31F34
:10190000EC17FD0769F42E5F3F4F88819981820FA4
:10191000931FFA01918380838A819B8193838283C1
:10192000DF91CF910895DC0101C06D93415050408B
:10193000E0F70895991B79E004C0991F961708F005
:10194000961B881F7A95C9F780950895AA1BBB1B23
:1019500051E107C0AA1FBB1FA617B70710F0A61BAF
:10196000B70B881F991F5A95A9F780959095BC01D0
:10197000CD010895A1E21A2EAA1BBB1BFD010DC0CB
:10198000AA1FBB1FEE1FFF1FA217B307E407F5072F
:1019900020F0A21BB30BE40BF50B661F771F881F0B
:1019A000991F1A9469F760957095809590959B01A1
:1019B000AC01BD01CF0108952A88398848885F8429
:1019C0006E847D848C849B84AA84B984C884DF80DF
:1019D000EE80FD800C811B81AA81B981CE0FD11DC3
:0E19E0000FB6F894DEBF0FBECDBFED01089527
:1019EE00640A000101FF0101010000020103012050
:0619FE0000A80300000038
:00000001FF
/branches/V0.37_neueStruktur/out/BrushLess-Ctrl_V0_37.lss
0,0 → 1,3446
 
BrushLess-Ctrl_V0_37.elf: Dateiformat elf32-avr
 
Sektionen:
Idx Name Größe VMA LMA Datei-Off Ausr.
0 .text 000019ee 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000016 00800060 000019ee 00001a82 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000332 00800076 00800076 00001a98 2**0
ALLOC
3 .stab 000045d8 00000000 00000000 00001a98 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 00001ed5 00000000 00000000 00006070 2**0
CONTENTS, READONLY, DEBUGGING
Disassemblierung der Sektion .text:
 
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
2: f3 c7 rjmp .+4070 ; 0xfea <__vector_1>
4: 2a c0 rjmp .+84 ; 0x5a <__bad_interrupt>
6: 29 c0 rjmp .+82 ; 0x5a <__bad_interrupt>
8: 91 c0 rjmp .+290 ; 0x12c <__vector_4>
a: 56 c7 rjmp .+3756 ; 0xeb8 <__vector_5>
c: 26 c0 rjmp .+76 ; 0x5a <__bad_interrupt>
e: 25 c0 rjmp .+74 ; 0x5a <__bad_interrupt>
10: 42 c7 rjmp .+3716 ; 0xe96 <__vector_8>
12: fa c7 rjmp .+4084 ; 0x1008 <__vector_9>
14: 22 c0 rjmp .+68 ; 0x5a <__bad_interrupt>
16: fa c9 rjmp .-3084 ; 0xfffff40c <__eeprom_end+0xff7ef40c>
18: 20 c0 rjmp .+64 ; 0x5a <__bad_interrupt>
1a: cc c8 rjmp .-3688 ; 0xfffff1b4 <__eeprom_end+0xff7ef1b4>
1c: 1e c0 rjmp .+60 ; 0x5a <__bad_interrupt>
1e: 1d c0 rjmp .+58 ; 0x5a <__bad_interrupt>
20: f2 c0 rjmp .+484 ; 0x206 <__vector_16>
22: 77 c8 rjmp .-3858 ; 0xfffff112 <__eeprom_end+0xff7ef112>
24: 1a c0 rjmp .+52 ; 0x5a <__bad_interrupt>
 
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
 
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: ee ee ldi r30, 0xEE ; 238
3a: f9 e1 ldi r31, 0x19 ; 25
3c: 02 c0 rjmp .+4 ; 0x42 <.do_copy_data_start>
 
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
 
00000042 <.do_copy_data_start>:
42: a6 37 cpi r26, 0x76 ; 118
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e <__SP_H__>
 
00000048 <__do_clear_bss>:
48: 13 e0 ldi r17, 0x03 ; 3
4a: a6 e7 ldi r26, 0x76 ; 118
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52 <.do_clear_bss_start>
 
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
 
00000052 <.do_clear_bss_start>:
52: a8 3a cpi r26, 0xA8 ; 168
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50 <.do_clear_bss_loop>
58: ad c5 rjmp .+2906 ; 0xbb4 <main>
 
0000005a <__bad_interrupt>:
5a: d2 cf rjmp .-92 ; 0x0 <__heap_end>
 
0000005c <ADC_Init>:
//Init ADC
void ADC_Init(void)
//############################################################################
{
ADCSRA = 0xA6; // Free Run & 1MHZ
5c: 86 ea ldi r24, 0xA6 ; 166
5e: 86 b9 out 0x06, r24 ; 6
ADMUX = 7; // Kanal 7
60: 87 e0 ldi r24, 0x07 ; 7
62: 87 b9 out 0x07, r24 ; 7
ADCSRA |= 0x40; // Start
64: 36 9a sbi 0x06, 6 ; 6
66: 08 95 ret
 
00000068 <AdConvert>:
}
 
//############################################################################
//Strom Analogwerte lesen
void AdConvert(void)
//############################################################################
{
unsigned int i=0;
unsigned char sense;
sense = ADMUX; // Sense-Kanal merken
68: 27 b1 in r18, 0x07 ; 7
ADMUX = 0x06; // Kanal 6
6a: 96 e0 ldi r25, 0x06 ; 6
6c: 97 b9 out 0x07, r25 ; 7
SFIOR = 0x00; // Analog Comperator aus
6e: 10 be out 0x30, r1 ; 48
ADCSRA = 0xD3; // Converter ein, single
70: 83 ed ldi r24, 0xD3 ; 211
72: 86 b9 out 0x06, r24 ; 6
ADCSRA |= 0x10; // Ready löschen
74: 34 9a sbi 0x06, 4 ; 6
ADMUX = 0x06; // Kanal 6
76: 97 b9 out 0x07, r25 ; 7
ADCSRA |= 0x40; // Start
78: 36 9a sbi 0x06, 6 ; 6
while (((ADCSRA & 0x10) == 0));
7a: 34 9b sbis 0x06, 4 ; 6
7c: fe cf rjmp .-4 ; 0x7a <AdConvert+0x12>
ADMUX = sense; // zurück auf den Sense-Kanal
7e: 27 b9 out 0x07, r18 ; 7
i = ADCW * 4;
80: 84 b1 in r24, 0x04 ; 4
82: 95 b1 in r25, 0x05 ; 5
// if(i > 300) i = 300;
Strom = (i + Strom * 7) / 8;
84: 20 91 7b 00 lds r18, 0x007B
88: 30 91 7c 00 lds r19, 0x007C
8c: a9 01 movw r20, r18
8e: 63 e0 ldi r22, 0x03 ; 3
90: 44 0f add r20, r20
92: 55 1f adc r21, r21
94: 6a 95 dec r22
96: e1 f7 brne .-8 ; 0x90 <AdConvert+0x28>
98: 42 1b sub r20, r18
9a: 53 0b sbc r21, r19
9c: 88 0f add r24, r24
9e: 99 1f adc r25, r25
a0: 88 0f add r24, r24
a2: 99 1f adc r25, r25
a4: 48 0f add r20, r24
a6: 59 1f adc r21, r25
a8: 83 e0 ldi r24, 0x03 ; 3
aa: 56 95 lsr r21
ac: 47 95 ror r20
ae: 8a 95 dec r24
b0: e1 f7 brne .-8 ; 0xaa <AdConvert+0x42>
b2: 50 93 7c 00 sts 0x007C, r21
b6: 40 93 7b 00 sts 0x007B, r20
if (Strom_max < Strom) Strom_max = Strom;
ba: 80 91 7d 00 lds r24, 0x007D
be: 99 27 eor r25, r25
c0: 84 17 cp r24, r20
c2: 95 07 cpc r25, r21
c4: 10 f4 brcc .+4 ; 0xca <AdConvert+0x62>
c6: 40 93 7d 00 sts 0x007D, r20
ADCSRA = 0x00;
ca: 16 b8 out 0x06, r1 ; 6
SFIOR = 0x08; // Analog Comperator ein
cc: 88 e0 ldi r24, 0x08 ; 8
ce: 80 bf out 0x30, r24 ; 48
d0: 08 95 ret
 
000000d2 <MessAD>:
}
 
 
 
//############################################################################
//Strom Analogwerte lesen
unsigned int MessAD(unsigned char channel)
//############################################################################
{
unsigned char sense;
sense = ADMUX; // Sense-Kanal merken
d2: 27 b1 in r18, 0x07 ; 7
ADMUX = channel; // Kanal 6
d4: 87 b9 out 0x07, r24 ; 7
SFIOR = 0x00; // Analog Comperator aus
d6: 10 be out 0x30, r1 ; 48
ADCSRA = 0xD3; // Converter ein, single
d8: 93 ed ldi r25, 0xD3 ; 211
da: 96 b9 out 0x06, r25 ; 6
ADCSRA |= 0x10; // Ready löschen
dc: 34 9a sbi 0x06, 4 ; 6
ADMUX = channel; // Kanal 6
de: 87 b9 out 0x07, r24 ; 7
ADCSRA |= 0x40; // Start
e0: 36 9a sbi 0x06, 6 ; 6
while (((ADCSRA & 0x10) == 0));
e2: 34 9b sbis 0x06, 4 ; 6
e4: fe cf rjmp .-4 ; 0xe2 <MessAD+0x10>
ADMUX = sense; // zurück auf den Sense-Kanal
e6: 27 b9 out 0x07, r18 ; 7
ADCSRA = 0x00;
e8: 16 b8 out 0x06, r1 ; 6
SFIOR = 0x08; // Analog Comperator ein
ea: 88 e0 ldi r24, 0x08 ; 8
ec: 80 bf out 0x30, r24 ; 48
return(ADCW);
ee: 84 b1 in r24, 0x04 ; 4
f0: 95 b1 in r25, 0x05 ; 5
f2: 08 95 ret
 
000000f4 <FastADConvert>:
}
 
//############################################################################
//Strom Analogwerte lesen
void FastADConvert(void)
//############################################################################
{
unsigned int i=0;
i = MessAD(6) * 4;
f4: 86 e0 ldi r24, 0x06 ; 6
f6: ed df rcall .-38 ; 0xd2 <MessAD>
f8: 9c 01 movw r18, r24
fa: 22 0f add r18, r18
fc: 33 1f adc r19, r19
fe: 22 0f add r18, r18
100: 33 1f adc r19, r19
102: 29 3c cpi r18, 0xC9 ; 201
104: 31 05 cpc r19, r1
106: 10 f0 brcs .+4 ; 0x10c <FastADConvert+0x18>
108: 28 ec ldi r18, 0xC8 ; 200
10a: 30 e0 ldi r19, 0x00 ; 0
// i = ADCW * 4;
if(i > 200) i = 200;
Strom = i;//(i + Strom * 1) / 2;
10c: 30 93 7c 00 sts 0x007C, r19
110: 20 93 7b 00 sts 0x007B, r18
if (Strom_max < Strom) Strom_max = Strom;
114: 80 91 7d 00 lds r24, 0x007D
118: 99 27 eor r25, r25
11a: 82 17 cp r24, r18
11c: 93 07 cpc r25, r19
11e: 10 f4 brcc .+4 ; 0x124 <FastADConvert+0x30>
120: 20 93 7d 00 sts 0x007D, r18
ADCSRA = 0x00;
124: 16 b8 out 0x06, r1 ; 6
SFIOR = 0x08; // Analog Comperator ein
126: 88 e0 ldi r24, 0x08 ; 8
128: 80 bf out 0x30, r24 ; 48
12a: 08 95 ret
 
0000012c <__vector_4>:
12c: 1f 92 push r1
12e: 0f 92 push r0
130: 0f b6 in r0, 0x3f ; 63
132: 0f 92 push r0
134: 11 24 eor r1, r1
136: 0f 90 pop r0
138: 0f be out 0x3f, r0 ; 63
13a: 0f 90 pop r0
13c: 1f 90 pop r1
13e: 18 95 reti
 
00000140 <Manuell>:
}
140: 90 91 76 00 lds r25, 0x0076
144: 92 30 cpi r25, 0x02 ; 2
146: 41 f1 breq .+80 ; 0x198 <Manuell+0x58>
148: 93 30 cpi r25, 0x03 ; 3
14a: 30 f4 brcc .+12 ; 0x158 <Manuell+0x18>
14c: 99 23 and r25, r25
14e: 61 f0 breq .+24 ; 0x168 <Manuell+0x28>
150: 91 30 cpi r25, 0x01 ; 1
152: 09 f0 breq .+2 ; 0x156 <Manuell+0x16>
154: 57 c0 rjmp .+174 ; 0x204 <Manuell+0xc4>
156: 14 c0 rjmp .+40 ; 0x180 <Manuell+0x40>
158: 94 30 cpi r25, 0x04 ; 4
15a: c1 f1 breq .+112 ; 0x1cc <Manuell+0x8c>
15c: 94 30 cpi r25, 0x04 ; 4
15e: 40 f1 brcs .+80 ; 0x1b0 <Manuell+0x70>
160: 95 30 cpi r25, 0x05 ; 5
162: 09 f0 breq .+2 ; 0x166 <Manuell+0x26>
164: 4f c0 rjmp .+158 ; 0x204 <Manuell+0xc4>
166: 42 c0 rjmp .+132 ; 0x1ec <Manuell+0xac>
168: 81 ea ldi r24, 0xA1 ; 161
16a: 8f bd out 0x2f, r24 ; 47
16c: 81 e6 ldi r24, 0x61 ; 97
16e: 85 bd out 0x25, r24 ; 37
170: 88 e0 ldi r24, 0x08 ; 8
172: 87 bb out 0x17, r24 ; 23
174: 82 b3 in r24, 0x12 ; 18
176: 87 7d andi r24, 0xD7 ; 215
178: 82 bb out 0x12, r24 ; 18
17a: 94 9a sbi 0x12, 4 ; 18
17c: 82 e0 ldi r24, 0x02 ; 2
17e: 31 c0 rjmp .+98 ; 0x1e2 <Manuell+0xa2>
180: 81 ea ldi r24, 0xA1 ; 161
182: 8f bd out 0x2f, r24 ; 47
184: 81 e6 ldi r24, 0x61 ; 97
186: 85 bd out 0x25, r24 ; 37
188: 88 e0 ldi r24, 0x08 ; 8
18a: 87 bb out 0x17, r24 ; 23
18c: 82 b3 in r24, 0x12 ; 18
18e: 87 7e andi r24, 0xE7 ; 231
190: 82 bb out 0x12, r24 ; 18
192: 95 9a sbi 0x12, 5 ; 18
194: 97 b9 out 0x07, r25 ; 7
196: 18 c0 rjmp .+48 ; 0x1c8 <Manuell+0x88>
198: 81 ea ldi r24, 0xA1 ; 161
19a: 8f bd out 0x2f, r24 ; 47
19c: 81 e6 ldi r24, 0x61 ; 97
19e: 85 bd out 0x25, r24 ; 37
1a0: 84 e0 ldi r24, 0x04 ; 4
1a2: 87 bb out 0x17, r24 ; 23
1a4: 82 b3 in r24, 0x12 ; 18
1a6: 87 7e andi r24, 0xE7 ; 231
1a8: 82 bb out 0x12, r24 ; 18
1aa: 95 9a sbi 0x12, 5 ; 18
1ac: 17 b8 out 0x07, r1 ; 7
1ae: 1a c0 rjmp .+52 ; 0x1e4 <Manuell+0xa4>
1b0: 81 ea ldi r24, 0xA1 ; 161
1b2: 8f bd out 0x2f, r24 ; 47
1b4: 81 e6 ldi r24, 0x61 ; 97
1b6: 85 bd out 0x25, r24 ; 37
1b8: 84 e0 ldi r24, 0x04 ; 4
1ba: 87 bb out 0x17, r24 ; 23
1bc: 82 b3 in r24, 0x12 ; 18
1be: 8f 7c andi r24, 0xCF ; 207
1c0: 82 bb out 0x12, r24 ; 18
1c2: 93 9a sbi 0x12, 3 ; 18
1c4: 82 e0 ldi r24, 0x02 ; 2
1c6: 87 b9 out 0x07, r24 ; 7
1c8: 40 98 cbi 0x08, 0 ; 8
1ca: 08 95 ret
1cc: 81 ea ldi r24, 0xA1 ; 161
1ce: 8f bd out 0x2f, r24 ; 47
1d0: 81 e6 ldi r24, 0x61 ; 97
1d2: 85 bd out 0x25, r24 ; 37
1d4: 82 e0 ldi r24, 0x02 ; 2
1d6: 87 bb out 0x17, r24 ; 23
1d8: 82 b3 in r24, 0x12 ; 18
1da: 8f 7c andi r24, 0xCF ; 207
1dc: 82 bb out 0x12, r24 ; 18
1de: 93 9a sbi 0x12, 3 ; 18
1e0: 81 e0 ldi r24, 0x01 ; 1
1e2: 87 b9 out 0x07, r24 ; 7
1e4: 88 b1 in r24, 0x08 ; 8
1e6: 83 60 ori r24, 0x03 ; 3
1e8: 88 b9 out 0x08, r24 ; 8
1ea: 08 95 ret
1ec: 81 ea ldi r24, 0xA1 ; 161
1ee: 8f bd out 0x2f, r24 ; 47
1f0: 81 e6 ldi r24, 0x61 ; 97
1f2: 85 bd out 0x25, r24 ; 37
1f4: 82 e0 ldi r24, 0x02 ; 2
1f6: 87 bb out 0x17, r24 ; 23
1f8: 82 b3 in r24, 0x12 ; 18
1fa: 87 7d andi r24, 0xD7 ; 215
1fc: 82 bb out 0x12, r24 ; 18
1fe: 94 9a sbi 0x12, 4 ; 18
200: 17 b8 out 0x07, r1 ; 7
202: 40 98 cbi 0x08, 0 ; 8
204: 08 95 ret
 
00000206 <__vector_16>:
206: 1f 92 push r1
208: 0f 92 push r0
20a: 0f b6 in r0, 0x3f ; 63
20c: 0f 92 push r0
20e: 11 24 eor r1, r1
210: 0f 93 push r16
212: 1f 93 push r17
214: 2f 93 push r18
216: 3f 93 push r19
218: 4f 93 push r20
21a: 5f 93 push r21
21c: 6f 93 push r22
21e: 7f 93 push r23
220: 8f 93 push r24
222: 9f 93 push r25
224: af 93 push r26
226: bf 93 push r27
228: ef 93 push r30
22a: ff 93 push r31
22c: 88 b1 in r24, 0x08 ; 8
22e: 99 27 eor r25, r25
230: 68 94 set
232: 14 f8 bld r1, 4
234: 96 95 lsr r25
236: 87 95 ror r24
238: 16 94 lsr r1
23a: e1 f7 brne .-8 ; 0x234 <__vector_16+0x2e>
23c: 08 2f mov r16, r24
23e: 01 70 andi r16, 0x01 ; 1
240: 10 91 76 00 lds r17, 0x0076
244: 12 30 cpi r17, 0x02 ; 2
246: 09 f4 brne .+2 ; 0x24a <__vector_16+0x44>
248: 54 c0 rjmp .+168 ; 0x2f2 <__vector_16+0xec>
24a: 13 30 cpi r17, 0x03 ; 3
24c: 30 f4 brcc .+12 ; 0x25a <__vector_16+0x54>
24e: 11 23 and r17, r17
250: 71 f0 breq .+28 ; 0x26e <__vector_16+0x68>
252: 11 30 cpi r17, 0x01 ; 1
254: 09 f0 breq .+2 ; 0x258 <__vector_16+0x52>
256: b3 c0 rjmp .+358 ; 0x3be <__vector_16+0x1b8>
258: 23 c0 rjmp .+70 ; 0x2a0 <__vector_16+0x9a>
25a: 14 30 cpi r17, 0x04 ; 4
25c: 09 f4 brne .+2 ; 0x260 <__vector_16+0x5a>
25e: 79 c0 rjmp .+242 ; 0x352 <__vector_16+0x14c>
260: 14 30 cpi r17, 0x04 ; 4
262: 08 f4 brcc .+2 ; 0x266 <__vector_16+0x60>
264: 5d c0 rjmp .+186 ; 0x320 <__vector_16+0x11a>
266: 15 30 cpi r17, 0x05 ; 5
268: 09 f0 breq .+2 ; 0x26c <__vector_16+0x66>
26a: a9 c0 rjmp .+338 ; 0x3be <__vector_16+0x1b8>
26c: 8a c0 rjmp .+276 ; 0x382 <__vector_16+0x17c>
26e: 81 ea ldi r24, 0xA1 ; 161
270: 8f bd out 0x2f, r24 ; 47
272: 81 e6 ldi r24, 0x61 ; 97
274: 85 bd out 0x25, r24 ; 37
276: 88 e0 ldi r24, 0x08 ; 8
278: 87 bb out 0x17, r24 ; 23
27a: 00 23 and r16, r16
27c: 61 f0 breq .+24 ; 0x296 <__vector_16+0x90>
27e: 82 b3 in r24, 0x12 ; 18
280: 87 7e andi r24, 0xE7 ; 231
282: 82 bb out 0x12, r24 ; 18
284: 95 9a sbi 0x12, 5 ; 18
286: 80 91 66 00 lds r24, 0x0066
28a: 81 11 cpse r24, r1
28c: ed de rcall .-550 ; 0x68 <AdConvert>
28e: 40 98 cbi 0x08, 0 ; 8
290: 81 e0 ldi r24, 0x01 ; 1
292: 87 b9 out 0x07, r24 ; 7
294: 19 c0 rjmp .+50 ; 0x2c8 <__vector_16+0xc2>
296: 82 b3 in r24, 0x12 ; 18
298: 87 7d andi r24, 0xD7 ; 215
29a: 82 bb out 0x12, r24 ; 18
29c: 94 9a sbi 0x12, 4 ; 18
29e: 8f c0 rjmp .+286 ; 0x3be <__vector_16+0x1b8>
2a0: 82 b3 in r24, 0x12 ; 18
2a2: 87 7e andi r24, 0xE7 ; 231
2a4: 82 bb out 0x12, r24 ; 18
2a6: 95 9a sbi 0x12, 5 ; 18
2a8: 00 23 and r16, r16
2aa: e9 f4 brne .+58 ; 0x2e6 <__vector_16+0xe0>
2ac: 81 ea ldi r24, 0xA1 ; 161
2ae: 8f bd out 0x2f, r24 ; 47
2b0: 81 e6 ldi r24, 0x61 ; 97
2b2: 85 bd out 0x25, r24 ; 37
2b4: 84 e0 ldi r24, 0x04 ; 4
2b6: 87 bb out 0x17, r24 ; 23
2b8: 80 91 66 00 lds r24, 0x0066
2bc: 81 11 cpse r24, r1
2be: d4 de rcall .-600 ; 0x68 <AdConvert>
2c0: 17 b8 out 0x07, r1 ; 7
2c2: 88 b1 in r24, 0x08 ; 8
2c4: 83 60 ori r24, 0x03 ; 3
2c6: 88 b9 out 0x08, r24 ; 8
2c8: 80 91 76 00 lds r24, 0x0076
2cc: 8f 5f subi r24, 0xFF ; 255
2ce: 80 93 76 00 sts 0x0076, r24
2d2: 80 91 8a 00 lds r24, 0x008A
2d6: 90 91 8b 00 lds r25, 0x008B
2da: 01 96 adiw r24, 0x01 ; 1
2dc: 90 93 8b 00 sts 0x008B, r25
2e0: 80 93 8a 00 sts 0x008A, r24
2e4: 6c c0 rjmp .+216 ; 0x3be <__vector_16+0x1b8>
2e6: 81 ea ldi r24, 0xA1 ; 161
2e8: 8f bd out 0x2f, r24 ; 47
2ea: 81 e6 ldi r24, 0x61 ; 97
2ec: 85 bd out 0x25, r24 ; 37
2ee: 88 e0 ldi r24, 0x08 ; 8
2f0: 65 c0 rjmp .+202 ; 0x3bc <__vector_16+0x1b6>
2f2: 81 ea ldi r24, 0xA1 ; 161
2f4: 8f bd out 0x2f, r24 ; 47
2f6: 81 e6 ldi r24, 0x61 ; 97
2f8: 85 bd out 0x25, r24 ; 37
2fa: 84 e0 ldi r24, 0x04 ; 4
2fc: 87 bb out 0x17, r24 ; 23
2fe: 00 23 and r16, r16
300: 51 f0 breq .+20 ; 0x316 <__vector_16+0x110>
302: 82 b3 in r24, 0x12 ; 18
304: 8f 7c andi r24, 0xCF ; 207
306: 82 bb out 0x12, r24 ; 18
308: 93 9a sbi 0x12, 3 ; 18
30a: 80 91 66 00 lds r24, 0x0066
30e: 81 11 cpse r24, r1
310: ab de rcall .-682 ; 0x68 <AdConvert>
312: 17 b9 out 0x07, r17 ; 7
314: 2f c0 rjmp .+94 ; 0x374 <__vector_16+0x16e>
316: 82 b3 in r24, 0x12 ; 18
318: 87 7e andi r24, 0xE7 ; 231
31a: 82 bb out 0x12, r24 ; 18
31c: 95 9a sbi 0x12, 5 ; 18
31e: 4f c0 rjmp .+158 ; 0x3be <__vector_16+0x1b8>
320: 82 b3 in r24, 0x12 ; 18
322: 8f 7c andi r24, 0xCF ; 207
324: 82 bb out 0x12, r24 ; 18
326: 93 9a sbi 0x12, 3 ; 18
328: 00 23 and r16, r16
32a: 69 f4 brne .+26 ; 0x346 <__vector_16+0x140>
32c: 81 ea ldi r24, 0xA1 ; 161
32e: 8f bd out 0x2f, r24 ; 47
330: 81 e6 ldi r24, 0x61 ; 97
332: 85 bd out 0x25, r24 ; 37
334: 82 e0 ldi r24, 0x02 ; 2
336: 87 bb out 0x17, r24 ; 23
338: 80 91 66 00 lds r24, 0x0066
33c: 81 11 cpse r24, r1
33e: 94 de rcall .-728 ; 0x68 <AdConvert>
340: 81 e0 ldi r24, 0x01 ; 1
342: 87 b9 out 0x07, r24 ; 7
344: be cf rjmp .-132 ; 0x2c2 <__vector_16+0xbc>
346: 81 ea ldi r24, 0xA1 ; 161
348: 8f bd out 0x2f, r24 ; 47
34a: 81 e6 ldi r24, 0x61 ; 97
34c: 85 bd out 0x25, r24 ; 37
34e: 84 e0 ldi r24, 0x04 ; 4
350: 35 c0 rjmp .+106 ; 0x3bc <__vector_16+0x1b6>
352: 81 ea ldi r24, 0xA1 ; 161
354: 8f bd out 0x2f, r24 ; 47
356: 81 e6 ldi r24, 0x61 ; 97
358: 85 bd out 0x25, r24 ; 37
35a: 82 e0 ldi r24, 0x02 ; 2
35c: 87 bb out 0x17, r24 ; 23
35e: 00 23 and r16, r16
360: 59 f0 breq .+22 ; 0x378 <__vector_16+0x172>
362: 82 b3 in r24, 0x12 ; 18
364: 87 7d andi r24, 0xD7 ; 215
366: 82 bb out 0x12, r24 ; 18
368: 94 9a sbi 0x12, 4 ; 18
36a: 80 91 66 00 lds r24, 0x0066
36e: 81 11 cpse r24, r1
370: 7b de rcall .-778 ; 0x68 <AdConvert>
372: 17 b8 out 0x07, r1 ; 7
374: 40 98 cbi 0x08, 0 ; 8
376: a8 cf rjmp .-176 ; 0x2c8 <__vector_16+0xc2>
378: 82 b3 in r24, 0x12 ; 18
37a: 8f 7c andi r24, 0xCF ; 207
37c: 82 bb out 0x12, r24 ; 18
37e: 93 9a sbi 0x12, 3 ; 18
380: 1e c0 rjmp .+60 ; 0x3be <__vector_16+0x1b8>
382: 82 b3 in r24, 0x12 ; 18
384: 87 7d andi r24, 0xD7 ; 215
386: 82 bb out 0x12, r24 ; 18
388: 94 9a sbi 0x12, 4 ; 18
38a: 00 23 and r16, r16
38c: 91 f4 brne .+36 ; 0x3b2 <__vector_16+0x1ac>
38e: 81 ea ldi r24, 0xA1 ; 161
390: 8f bd out 0x2f, r24 ; 47
392: 81 e6 ldi r24, 0x61 ; 97
394: 85 bd out 0x25, r24 ; 37
396: 88 e0 ldi r24, 0x08 ; 8
398: 87 bb out 0x17, r24 ; 23
39a: 80 91 66 00 lds r24, 0x0066
39e: 81 11 cpse r24, r1
3a0: 63 de rcall .-826 ; 0x68 <AdConvert>
3a2: 82 e0 ldi r24, 0x02 ; 2
3a4: 87 b9 out 0x07, r24 ; 7
3a6: 88 b1 in r24, 0x08 ; 8
3a8: 83 60 ori r24, 0x03 ; 3
3aa: 88 b9 out 0x08, r24 ; 8
3ac: 10 92 76 00 sts 0x0076, r1
3b0: 90 cf rjmp .-224 ; 0x2d2 <__vector_16+0xcc>
3b2: 81 ea ldi r24, 0xA1 ; 161
3b4: 8f bd out 0x2f, r24 ; 47
3b6: 81 e6 ldi r24, 0x61 ; 97
3b8: 85 bd out 0x25, r24 ; 37
3ba: 82 e0 ldi r24, 0x02 ; 2
3bc: 87 bb out 0x17, r24 ; 23
3be: 45 99 sbic 0x08, 5 ; 8
3c0: 03 c0 rjmp .+6 ; 0x3c8 <__vector_16+0x1c2>
3c2: 00 23 and r16, r16
3c4: 09 f0 breq .+2 ; 0x3c8 <__vector_16+0x1c2>
3c6: 32 cf rjmp .-412 ; 0x22c <__vector_16+0x26>
3c8: 45 9b sbis 0x08, 5 ; 8
3ca: 03 c0 rjmp .+6 ; 0x3d2 <__vector_16+0x1cc>
3cc: 00 23 and r16, r16
3ce: 09 f4 brne .+2 ; 0x3d2 <__vector_16+0x1cc>
3d0: 2d cf rjmp .-422 ; 0x22c <__vector_16+0x26>
3d2: 10 92 66 00 sts 0x0066, r1
3d6: ff 91 pop r31
3d8: ef 91 pop r30
3da: bf 91 pop r27
3dc: af 91 pop r26
3de: 9f 91 pop r25
3e0: 8f 91 pop r24
3e2: 7f 91 pop r23
3e4: 6f 91 pop r22
3e6: 5f 91 pop r21
3e8: 4f 91 pop r20
3ea: 3f 91 pop r19
3ec: 2f 91 pop r18
3ee: 1f 91 pop r17
3f0: 0f 91 pop r16
3f2: 0f 90 pop r0
3f4: 0f be out 0x3f, r0 ; 63
3f6: 0f 90 pop r0
3f8: 1f 90 pop r1
3fa: 18 95 reti
 
000003fc <SetPWM>:
3fc: 20 91 79 00 lds r18, 0x0079
400: 80 91 65 00 lds r24, 0x0065
404: 82 17 cp r24, r18
406: 10 f4 brcc .+4 ; 0x40c <SetPWM+0x10>
408: ab 9a sbi 0x15, 3 ; 21
40a: 28 2f mov r18, r24
40c: 80 91 7b 00 lds r24, 0x007B
410: 90 91 7c 00 lds r25, 0x007C
414: 89 3c cpi r24, 0xC9 ; 201
416: 91 05 cpc r25, r1
418: 60 f0 brcs .+24 ; 0x432 <SetPWM+0x36>
41a: 1b bc out 0x2b, r1 ; 43
41c: 1a bc out 0x2a, r1 ; 42
41e: 19 bc out 0x29, r1 ; 41
420: 18 bc out 0x28, r1 ; 40
422: 13 bc out 0x23, r1 ; 35
424: ab 9a sbi 0x15, 3 ; 21
426: 01 97 sbiw r24, 0x01 ; 1
428: 90 93 7c 00 sts 0x007C, r25
42c: 80 93 7b 00 sts 0x007B, r24
430: 08 95 ret
432: 82 2f mov r24, r18
434: 99 27 eor r25, r25
436: 9b bd out 0x2b, r25 ; 43
438: 8a bd out 0x2a, r24 ; 42
43a: 99 bd out 0x29, r25 ; 41
43c: 88 bd out 0x28, r24 ; 40
43e: 23 bd out 0x23, r18 ; 35
440: 08 95 ret
 
00000442 <PWM_Init>:
442: 91 e0 ldi r25, 0x01 ; 1
444: 9f bd out 0x2f, r25 ; 47
446: 81 e4 ldi r24, 0x41 ; 65
448: 85 bd out 0x25, r24 ; 37
44a: 8e e0 ldi r24, 0x0E ; 14
44c: 87 bb out 0x17, r24 ; 23
44e: 88 b3 in r24, 0x18 ; 24
450: 81 7f andi r24, 0xF1 ; 241
452: 88 bb out 0x18, r24 ; 24
454: 9e bd out 0x2e, r25 ; 46
456: 08 95 ret
 
00000458 <Wait>:
458: 92 b7 in r25, 0x32 ; 50
45a: 98 0f add r25, r24
45c: 29 2f mov r18, r25
45e: 33 27 eor r19, r19
460: 82 b7 in r24, 0x32 ; 50
462: 82 1b sub r24, r18
464: 87 fd sbrc r24, 7
466: fc cf rjmp .-8 ; 0x460 <__stack+0x1>
468: 08 95 ret
 
0000046a <Delay>:
46a: 80 e0 ldi r24, 0x00 ; 0
46c: 90 e0 ldi r25, 0x00 ; 0
46e: 08 95 ret
 
00000470 <SollwertErmittlung>:
470: 80 91 81 00 lds r24, 0x0081
474: 90 91 82 00 lds r25, 0x0082
478: 89 2b or r24, r25
47a: 09 f0 breq .+2 ; 0x47e <SollwertErmittlung+0xe>
47c: 59 c0 rjmp .+178 ; 0x530 <SollwertErmittlung+0xc0>
47e: 80 91 83 00 lds r24, 0x0083
482: 90 91 84 00 lds r25, 0x0084
486: 89 2b or r24, r25
488: 99 f0 breq .+38 ; 0x4b0 <SollwertErmittlung+0x40>
48a: 90 91 9d 00 lds r25, 0x009D
48e: 8f ef ldi r24, 0xFF ; 255
490: 98 9f mul r25, r24
492: c0 01 movw r24, r0
494: 11 24 eor r1, r1
496: 68 ec ldi r22, 0xC8 ; 200
498: 70 e0 ldi r23, 0x00 ; 0
49a: 58 da rcall .-2896 ; 0xfffff94c <__eeprom_end+0xff7ef94c>
49c: 70 93 8f 00 sts 0x008F, r23
4a0: 60 93 8e 00 sts 0x008E, r22
4a4: 10 92 68 00 sts 0x0068, r1
4a8: 89 b7 in r24, 0x39 ; 57
4aa: 8f 7d andi r24, 0xDF ; 223
4ac: 89 bf out 0x39, r24 ; 57
4ae: 31 c0 rjmp .+98 ; 0x512 <SollwertErmittlung+0xa2>
4b0: 80 91 94 00 lds r24, 0x0094
4b4: 85 31 cpi r24, 0x15 ; 21
4b6: 78 f1 brcs .+94 ; 0x516 <SollwertErmittlung+0xa6>
4b8: 81 e0 ldi r24, 0x01 ; 1
4ba: 80 93 68 00 sts 0x0068, r24
4be: 20 91 90 00 lds r18, 0x0090
4c2: 30 91 91 00 lds r19, 0x0091
4c6: 41 e0 ldi r20, 0x01 ; 1
4c8: 2d 32 cpi r18, 0x2D ; 45
4ca: 34 07 cpc r19, r20
4cc: 30 f4 brcc .+12 ; 0x4da <SollwertErmittlung+0x6a>
4ce: 29 3c cpi r18, 0xC9 ; 201
4d0: 31 05 cpc r19, r1
4d2: 40 f4 brcc .+16 ; 0x4e4 <SollwertErmittlung+0x74>
4d4: 2b 30 cpi r18, 0x0B ; 11
4d6: 31 05 cpc r19, r1
4d8: 38 f4 brcc .+14 ; 0x4e8 <SollwertErmittlung+0x78>
4da: 10 92 8f 00 sts 0x008F, r1
4de: 10 92 8e 00 sts 0x008E, r1
4e2: 17 c0 rjmp .+46 ; 0x512 <SollwertErmittlung+0xa2>
4e4: 28 ec ldi r18, 0xC8 ; 200
4e6: 30 e0 ldi r19, 0x00 ; 0
4e8: 8c ef ldi r24, 0xFC ; 252
4ea: 90 e0 ldi r25, 0x00 ; 0
4ec: ac 01 movw r20, r24
4ee: 24 9f mul r18, r20
4f0: c0 01 movw r24, r0
4f2: 25 9f mul r18, r21
4f4: 90 0d add r25, r0
4f6: 34 9f mul r19, r20
4f8: 90 0d add r25, r0
4fa: 11 24 eor r1, r1
4fc: 88 5d subi r24, 0xD8 ; 216
4fe: 99 40 sbci r25, 0x09 ; 9
500: 64 eb ldi r22, 0xB4 ; 180
502: 70 e0 ldi r23, 0x00 ; 0
504: 23 da rcall .-3002 ; 0xfffff94c <__eeprom_end+0xff7ef94c>
506: 6d 5f subi r22, 0xFD ; 253
508: 7f 4f sbci r23, 0xFF ; 255
50a: 70 93 8f 00 sts 0x008F, r23
50e: 60 93 8e 00 sts 0x008E, r22
512: ab 98 cbi 0x15, 3 ; 21
514: 1a c0 rjmp .+52 ; 0x54a <SollwertErmittlung+0xda>
516: 80 91 8e 00 lds r24, 0x008E
51a: 90 91 8f 00 lds r25, 0x008F
51e: 00 97 sbiw r24, 0x00 ; 0
520: 29 f0 breq .+10 ; 0x52c <SollwertErmittlung+0xbc>
522: 01 97 sbiw r24, 0x01 ; 1
524: 90 93 8f 00 sts 0x008F, r25
528: 80 93 8e 00 sts 0x008E, r24
52c: ab 9a sbi 0x15, 3 ; 21
52e: 0d c0 rjmp .+26 ; 0x54a <SollwertErmittlung+0xda>
530: 80 91 b0 02 lds r24, 0x02B0
534: 99 27 eor r25, r25
536: 90 93 8f 00 sts 0x008F, r25
53a: 80 93 8e 00 sts 0x008E, r24
53e: 10 92 68 00 sts 0x0068, r1
542: ab 98 cbi 0x15, 3 ; 21
544: 89 b7 in r24, 0x39 ; 57
546: 8f 7d andi r24, 0xDF ; 223
548: 89 bf out 0x39, r24 ; 57
54a: 80 91 8e 00 lds r24, 0x008E
54e: 90 91 8f 00 lds r25, 0x008F
552: 8f 3f cpi r24, 0xFF ; 255
554: 91 05 cpc r25, r1
556: 39 f0 breq .+14 ; 0x566 <SollwertErmittlung+0xf6>
558: 30 f0 brcs .+12 ; 0x566 <SollwertErmittlung+0xf6>
55a: 8f ef ldi r24, 0xFF ; 255
55c: 90 e0 ldi r25, 0x00 ; 0
55e: 90 93 8f 00 sts 0x008F, r25
562: 80 93 8e 00 sts 0x008E, r24
566: 80 91 8e 00 lds r24, 0x008E
56a: 99 27 eor r25, r25
56c: 08 95 ret
 
0000056e <DebugAusgaben>:
56e: 80 91 7b 00 lds r24, 0x007B
572: 90 91 7c 00 lds r25, 0x007C
576: 90 93 8f 03 sts 0x038F, r25
57a: 80 93 8e 03 sts 0x038E, r24
57e: 80 91 7e 00 lds r24, 0x007E
582: 99 27 eor r25, r25
584: 90 93 91 03 sts 0x0391, r25
588: 80 93 90 03 sts 0x0390, r24
58c: 80 91 8c 00 lds r24, 0x008C
590: 90 91 8d 00 lds r25, 0x008D
594: 90 93 93 03 sts 0x0393, r25
598: 80 93 92 03 sts 0x0392, r24
59c: 80 91 90 00 lds r24, 0x0090
5a0: 90 91 91 00 lds r25, 0x0091
5a4: 90 93 95 03 sts 0x0395, r25
5a8: 80 93 94 03 sts 0x0394, r24
5ac: 08 95 ret
 
000005ae <RotBlink>:
5ae: 1f 93 push r17
5b0: 18 2f mov r17, r24
5b2: 78 94 sei
5b4: 08 c0 rjmp .+16 ; 0x5c6 <RotBlink+0x18>
5b6: ab 9a sbi 0x15, 3 ; 21
5b8: 8c e2 ldi r24, 0x2C ; 44
5ba: 91 e0 ldi r25, 0x01 ; 1
5bc: 8a d5 rcall .+2836 ; 0x10d2 <Delay_ms>
5be: ab 98 cbi 0x15, 3 ; 21
5c0: 8c e2 ldi r24, 0x2C ; 44
5c2: 91 e0 ldi r25, 0x01 ; 1
5c4: 86 d5 rcall .+2828 ; 0x10d2 <Delay_ms>
5c6: 11 50 subi r17, 0x01 ; 1
5c8: b0 f7 brcc .-20 ; 0x5b6 <RotBlink+0x8>
5ca: 88 ee ldi r24, 0xE8 ; 232
5cc: 93 e0 ldi r25, 0x03 ; 3
5ce: 81 d5 rcall .+2818 ; 0x10d2 <Delay_ms>
5d0: 1f 91 pop r17
5d2: 08 95 ret
 
000005d4 <DelayM>:
5d4: cf 93 push r28
5d6: df 93 push r29
5d8: ec 01 movw r28, r24
5da: 17 c0 rjmp .+46 ; 0x60a <DelayM+0x36>
5dc: 8b dd rcall .-1258 ; 0xf4 <FastADConvert>
5de: 80 91 ad 02 lds r24, 0x02AD
5e2: 90 91 ae 02 lds r25, 0x02AE
5e6: 88 58 subi r24, 0x88 ; 136
5e8: 9f 4f sbci r25, 0xFF ; 255
5ea: 20 91 7b 00 lds r18, 0x007B
5ee: 30 91 7c 00 lds r19, 0x007C
5f2: 82 17 cp r24, r18
5f4: 93 07 cpc r25, r19
5f6: 48 f4 brcc .+18 ; 0x60a <DelayM+0x36>
5f8: 82 b3 in r24, 0x12 ; 18
5fa: 87 7c andi r24, 0xC7 ; 199
5fc: 82 bb out 0x12, r24 ; 18
5fe: 88 b3 in r24, 0x18 ; 24
600: 81 7f andi r24, 0xF1 ; 241
602: 88 bb out 0x18, r24 ; 24
604: 81 e0 ldi r24, 0x01 ; 1
606: 90 e0 ldi r25, 0x00 ; 0
608: 07 c0 rjmp .+14 ; 0x618 <DelayM+0x44>
60a: 21 97 sbiw r28, 0x01 ; 1
60c: 8f ef ldi r24, 0xFF ; 255
60e: cf 3f cpi r28, 0xFF ; 255
610: d8 07 cpc r29, r24
612: 21 f7 brne .-56 ; 0x5dc <DelayM+0x8>
614: 80 e0 ldi r24, 0x00 ; 0
616: 90 e0 ldi r25, 0x00 ; 0
618: df 91 pop r29
61a: cf 91 pop r28
61c: 08 95 ret
 
0000061e <MotorTon>:
61e: 8f 92 push r8
620: 9f 92 push r9
622: bf 92 push r11
624: cf 92 push r12
626: df 92 push r13
628: ef 92 push r14
62a: ff 92 push r15
62c: 0f 93 push r16
62e: 1f 93 push r17
630: cf 93 push r28
632: df 93 push r29
634: cd b7 in r28, 0x3d ; 61
636: de b7 in r29, 0x3e ; 62
638: 25 97 sbiw r28, 0x05 ; 5
63a: 0f b6 in r0, 0x3f ; 63
63c: f8 94 cli
63e: de bf out 0x3e, r29 ; 62
640: 0f be out 0x3f, r0 ; 63
642: cd bf out 0x3d, r28 ; 61
644: de 01 movw r26, r28
646: 11 96 adiw r26, 0x01 ; 1
648: e9 e6 ldi r30, 0x69 ; 105
64a: f0 e0 ldi r31, 0x00 ; 0
64c: 85 e0 ldi r24, 0x05 ; 5
64e: 01 90 ld r0, Z+
650: 0d 92 st X+, r0
652: 81 50 subi r24, 0x01 ; 1
654: e1 f7 brne .-8 ; 0x64e <MotorTon+0x30>
656: ab 98 cbi 0x15, 3 ; 21
658: 80 91 67 00 lds r24, 0x0067
65c: fe 01 movw r30, r28
65e: e8 0f add r30, r24
660: f1 1d adc r31, r1
662: 81 81 ldd r24, Z+1 ; 0x01
664: 99 27 eor r25, r25
666: 2c e2 ldi r18, 0x2C ; 44
668: 31 e0 ldi r19, 0x01 ; 1
66a: ac 01 movw r20, r24
66c: 42 9f mul r20, r18
66e: c0 01 movw r24, r0
670: 43 9f mul r20, r19
672: 90 0d add r25, r0
674: 52 9f mul r21, r18
676: 90 0d add r25, r0
678: 11 24 eor r1, r1
67a: 2b d5 rcall .+2646 ; 0x10d2 <Delay_ms>
67c: 10 92 78 00 sts 0x0078, r1
680: 43 98 cbi 0x08, 3 ; 8
682: f8 94 cli
684: 8a e0 ldi r24, 0x0A ; 10
686: b5 d6 rcall .+3434 ; 0x13f2 <uart_putchar>
688: 82 b3 in r24, 0x12 ; 18
68a: 87 7c andi r24, 0xC7 ; 199
68c: 82 bb out 0x12, r24 ; 18
68e: 81 e0 ldi r24, 0x01 ; 1
690: 8f bd out 0x2f, r24 ; 47
692: 81 e4 ldi r24, 0x41 ; 65
694: 85 bd out 0x25, r24 ; 37
696: 8e e0 ldi r24, 0x0E ; 14
698: 87 bb out 0x17, r24 ; 23
69a: 88 b3 in r24, 0x18 ; 24
69c: 81 7f andi r24, 0xF1 ; 241
69e: 88 bb out 0x18, r24 ; 24
6a0: 10 92 7d 00 sts 0x007D, r1
6a4: 82 e3 ldi r24, 0x32 ; 50
6a6: 90 e0 ldi r25, 0x00 ; 0
6a8: 95 df rcall .-214 ; 0x5d4 <DelayM>
6aa: 80 91 7d 00 lds r24, 0x007D
6ae: 99 27 eor r25, r25
6b0: 90 93 ae 02 sts 0x02AE, r25
6b4: 80 93 ad 02 sts 0x02AD, r24
6b8: 10 92 7c 00 sts 0x007C, r1
6bc: 10 92 7b 00 sts 0x007B, r1
6c0: 94 9a sbi 0x12, 4 ; 18
6c2: c3 9a sbi 0x18, 3 ; 24
6c4: 83 e0 ldi r24, 0x03 ; 3
6c6: 90 e0 ldi r25, 0x00 ; 0
6c8: 85 df rcall .-246 ; 0x5d4 <DelayM>
6ca: 88 23 and r24, r24
6cc: 11 f4 brne .+4 ; 0x6d2 <MotorTon+0xb4>
6ce: bb 24 eor r11, r11
6d0: 04 c0 rjmp .+8 ; 0x6da <MotorTon+0xbc>
6d2: 81 e3 ldi r24, 0x31 ; 49
6d4: 8e d6 rcall .+3356 ; 0x13f2 <uart_putchar>
6d6: bb 24 eor r11, r11
6d8: b3 94 inc r11
6da: 82 b3 in r24, 0x12 ; 18
6dc: 87 7c andi r24, 0xC7 ; 199
6de: 82 bb out 0x12, r24 ; 18
6e0: 88 b3 in r24, 0x18 ; 24
6e2: 81 7f andi r24, 0xF1 ; 241
6e4: 88 bb out 0x18, r24 ; 24
6e6: 10 92 7c 00 sts 0x007C, r1
6ea: 10 92 7b 00 sts 0x007B, r1
6ee: 93 9a sbi 0x12, 3 ; 18
6f0: c2 9a sbi 0x18, 2 ; 24
6f2: 83 e0 ldi r24, 0x03 ; 3
6f4: 90 e0 ldi r25, 0x00 ; 0
6f6: 6e df rcall .-292 ; 0x5d4 <DelayM>
6f8: 88 23 and r24, r24
6fa: 21 f0 breq .+8 ; 0x704 <MotorTon+0xe6>
6fc: 82 e3 ldi r24, 0x32 ; 50
6fe: 79 d6 rcall .+3314 ; 0x13f2 <uart_putchar>
700: b2 e0 ldi r27, 0x02 ; 2
702: bb 2e mov r11, r27
704: 82 b3 in r24, 0x12 ; 18
706: 87 7c andi r24, 0xC7 ; 199
708: 82 bb out 0x12, r24 ; 18
70a: 88 b3 in r24, 0x18 ; 24
70c: 81 7f andi r24, 0xF1 ; 241
70e: 88 bb out 0x18, r24 ; 24
710: 10 92 7c 00 sts 0x007C, r1
714: 10 92 7b 00 sts 0x007B, r1
718: 94 9a sbi 0x12, 4 ; 18
71a: c1 9a sbi 0x18, 1 ; 24
71c: 83 e0 ldi r24, 0x03 ; 3
71e: 90 e0 ldi r25, 0x00 ; 0
720: 59 df rcall .-334 ; 0x5d4 <DelayM>
722: 88 23 and r24, r24
724: 21 f0 breq .+8 ; 0x72e <MotorTon+0x110>
726: 83 e3 ldi r24, 0x33 ; 51
728: 64 d6 rcall .+3272 ; 0x13f2 <uart_putchar>
72a: a3 e0 ldi r26, 0x03 ; 3
72c: ba 2e mov r11, r26
72e: 82 b3 in r24, 0x12 ; 18
730: 87 7c andi r24, 0xC7 ; 199
732: 82 bb out 0x12, r24 ; 18
734: 88 b3 in r24, 0x18 ; 24
736: 81 7f andi r24, 0xF1 ; 241
738: 88 bb out 0x18, r24 ; 24
73a: 93 9a sbi 0x12, 3 ; 18
73c: c1 9a sbi 0x18, 1 ; 24
73e: 83 e0 ldi r24, 0x03 ; 3
740: 90 e0 ldi r25, 0x00 ; 0
742: 48 df rcall .-368 ; 0x5d4 <DelayM>
744: 88 23 and r24, r24
746: 21 f0 breq .+8 ; 0x750 <MotorTon+0x132>
748: 87 e3 ldi r24, 0x37 ; 55
74a: 53 d6 rcall .+3238 ; 0x13f2 <uart_putchar>
74c: f3 e0 ldi r31, 0x03 ; 3
74e: bf 2e mov r11, r31
750: 82 b3 in r24, 0x12 ; 18
752: 87 7c andi r24, 0xC7 ; 199
754: 82 bb out 0x12, r24 ; 18
756: 88 b3 in r24, 0x18 ; 24
758: 81 7f andi r24, 0xF1 ; 241
75a: 88 bb out 0x18, r24 ; 24
75c: 80 e1 ldi r24, 0x10 ; 16
75e: 97 e2 ldi r25, 0x27 ; 39
760: 39 df rcall .-398 ; 0x5d4 <DelayM>
762: bb 20 and r11, r11
764: 19 f0 breq .+6 ; 0x76c <MotorTon+0x14e>
766: 8b 2d mov r24, r11
768: 22 df rcall .-444 ; 0x5ae <RotBlink>
76a: fd cf rjmp .-6 ; 0x766 <MotorTon+0x148>
76c: 8c b1 in r24, 0x0c ; 12
76e: 80 32 cpi r24, 0x20 ; 32
770: 31 f0 breq .+12 ; 0x77e <MotorTon+0x160>
772: e8 ee ldi r30, 0xE8 ; 232
774: 8e 2e mov r8, r30
776: e3 e0 ldi r30, 0x03 ; 3
778: 9e 2e mov r9, r30
77a: 82 e3 ldi r24, 0x32 ; 50
77c: 06 c0 rjmp .+12 ; 0x78a <MotorTon+0x16c>
77e: 8f e5 ldi r24, 0x5F ; 95
780: 38 d6 rcall .+3184 ; 0x13f2 <uart_putchar>
782: 88 24 eor r8, r8
784: 8a 94 dec r8
786: 98 2c mov r9, r8
788: 88 e2 ldi r24, 0x28 ; 40
78a: 10 92 7c 00 sts 0x007C, r1
78e: 10 92 7b 00 sts 0x007B, r1
792: 00 e0 ldi r16, 0x00 ; 0
794: 10 e0 ldi r17, 0x00 ; 0
796: c8 2e mov r12, r24
798: dd 24 eor r13, r13
79a: 93 9a sbi 0x12, 3 ; 18
79c: 81 e0 ldi r24, 0x01 ; 1
79e: 90 e0 ldi r25, 0x00 ; 0
7a0: 19 df rcall .-462 ; 0x5d4 <DelayM>
7a2: 82 b3 in r24, 0x12 ; 18
7a4: 87 7c andi r24, 0xC7 ; 199
7a6: 82 bb out 0x12, r24 ; 18
7a8: 88 b3 in r24, 0x18 ; 24
7aa: 81 7f andi r24, 0xF1 ; 241
7ac: 88 bb out 0x18, r24 ; 24
7ae: c3 9a sbi 0x18, 3 ; 24
7b0: 81 e0 ldi r24, 0x01 ; 1
7b2: 90 e0 ldi r25, 0x00 ; 0
7b4: 0f df rcall .-482 ; 0x5d4 <DelayM>
7b6: 82 b3 in r24, 0x12 ; 18
7b8: 87 7c andi r24, 0xC7 ; 199
7ba: 82 bb out 0x12, r24 ; 18
7bc: 88 b3 in r24, 0x18 ; 24
7be: 81 7f andi r24, 0xF1 ; 241
7c0: 88 bb out 0x18, r24 ; 24
7c2: 76 01 movw r14, r12
7c4: 80 91 ad 02 lds r24, 0x02AD
7c8: 90 91 ae 02 lds r25, 0x02AE
7cc: 8c 0d add r24, r12
7ce: 9d 1d adc r25, r13
7d0: 20 91 7b 00 lds r18, 0x007B
7d4: 30 91 7c 00 lds r19, 0x007C
7d8: 82 17 cp r24, r18
7da: 93 07 cpc r25, r19
7dc: 28 f4 brcc .+10 ; 0x7e8 <MotorTon+0x1ca>
7de: 84 e3 ldi r24, 0x34 ; 52
7e0: 08 d6 rcall .+3088 ; 0x13f2 <uart_putchar>
7e2: 74 e0 ldi r23, 0x04 ; 4
7e4: b7 2e mov r11, r23
7e6: 05 c0 rjmp .+10 ; 0x7f2 <MotorTon+0x1d4>
7e8: 0f 5f subi r16, 0xFF ; 255
7ea: 1f 4f sbci r17, 0xFF ; 255
7ec: 08 15 cp r16, r8
7ee: 19 05 cpc r17, r9
7f0: a1 f6 brne .-88 ; 0x79a <MotorTon+0x17c>
7f2: 10 92 7c 00 sts 0x007C, r1
7f6: 10 92 7b 00 sts 0x007B, r1
7fa: 00 e0 ldi r16, 0x00 ; 0
7fc: 10 e0 ldi r17, 0x00 ; 0
7fe: 94 9a sbi 0x12, 4 ; 18
800: 81 e0 ldi r24, 0x01 ; 1
802: 90 e0 ldi r25, 0x00 ; 0
804: e7 de rcall .-562 ; 0x5d4 <DelayM>
806: 82 b3 in r24, 0x12 ; 18
808: 87 7c andi r24, 0xC7 ; 199
80a: 82 bb out 0x12, r24 ; 18
80c: 88 b3 in r24, 0x18 ; 24
80e: 81 7f andi r24, 0xF1 ; 241
810: 88 bb out 0x18, r24 ; 24
812: c2 9a sbi 0x18, 2 ; 24
814: 81 e0 ldi r24, 0x01 ; 1
816: 90 e0 ldi r25, 0x00 ; 0
818: dd de rcall .-582 ; 0x5d4 <DelayM>
81a: 82 b3 in r24, 0x12 ; 18
81c: 87 7c andi r24, 0xC7 ; 199
81e: 82 bb out 0x12, r24 ; 18
820: 88 b3 in r24, 0x18 ; 24
822: 81 7f andi r24, 0xF1 ; 241
824: 88 bb out 0x18, r24 ; 24
826: 80 91 ad 02 lds r24, 0x02AD
82a: 90 91 ae 02 lds r25, 0x02AE
82e: 8e 0d add r24, r14
830: 9f 1d adc r25, r15
832: 20 91 7b 00 lds r18, 0x007B
836: 30 91 7c 00 lds r19, 0x007C
83a: 82 17 cp r24, r18
83c: 93 07 cpc r25, r19
83e: 28 f4 brcc .+10 ; 0x84a <MotorTon+0x22c>
840: 85 e3 ldi r24, 0x35 ; 53
842: d7 d5 rcall .+2990 ; 0x13f2 <uart_putchar>
844: 65 e0 ldi r22, 0x05 ; 5
846: b6 2e mov r11, r22
848: 05 c0 rjmp .+10 ; 0x854 <MotorTon+0x236>
84a: 0f 5f subi r16, 0xFF ; 255
84c: 1f 4f sbci r17, 0xFF ; 255
84e: 08 15 cp r16, r8
850: 19 05 cpc r17, r9
852: a9 f6 brne .-86 ; 0x7fe <MotorTon+0x1e0>
854: 10 92 7c 00 sts 0x007C, r1
858: 10 92 7b 00 sts 0x007B, r1
85c: 00 e0 ldi r16, 0x00 ; 0
85e: 10 e0 ldi r17, 0x00 ; 0
860: 95 9a sbi 0x12, 5 ; 18
862: 81 e0 ldi r24, 0x01 ; 1
864: 90 e0 ldi r25, 0x00 ; 0
866: b6 de rcall .-660 ; 0x5d4 <DelayM>
868: 82 b3 in r24, 0x12 ; 18
86a: 87 7c andi r24, 0xC7 ; 199
86c: 82 bb out 0x12, r24 ; 18
86e: 88 b3 in r24, 0x18 ; 24
870: 81 7f andi r24, 0xF1 ; 241
872: 88 bb out 0x18, r24 ; 24
874: c1 9a sbi 0x18, 1 ; 24
876: 81 e0 ldi r24, 0x01 ; 1
878: 90 e0 ldi r25, 0x00 ; 0
87a: ac de rcall .-680 ; 0x5d4 <DelayM>
87c: 82 b3 in r24, 0x12 ; 18
87e: 87 7c andi r24, 0xC7 ; 199
880: 82 bb out 0x12, r24 ; 18
882: 88 b3 in r24, 0x18 ; 24
884: 81 7f andi r24, 0xF1 ; 241
886: 88 bb out 0x18, r24 ; 24
888: 80 91 ad 02 lds r24, 0x02AD
88c: 90 91 ae 02 lds r25, 0x02AE
890: 8e 0d add r24, r14
892: 9f 1d adc r25, r15
894: 20 91 7b 00 lds r18, 0x007B
898: 30 91 7c 00 lds r19, 0x007C
89c: 82 17 cp r24, r18
89e: 93 07 cpc r25, r19
8a0: 28 f4 brcc .+10 ; 0x8ac <MotorTon+0x28e>
8a2: 86 e3 ldi r24, 0x36 ; 54
8a4: a6 d5 rcall .+2892 ; 0x13f2 <uart_putchar>
8a6: 56 e0 ldi r21, 0x06 ; 6
8a8: b5 2e mov r11, r21
8aa: 05 c0 rjmp .+10 ; 0x8b6 <MotorTon+0x298>
8ac: 0f 5f subi r16, 0xFF ; 255
8ae: 1f 4f sbci r17, 0xFF ; 255
8b0: 08 15 cp r16, r8
8b2: 19 05 cpc r17, r9
8b4: a9 f6 brne .-86 ; 0x860 <MotorTon+0x242>
8b6: 17 b8 out 0x07, r1 ; 7
8b8: 82 b3 in r24, 0x12 ; 18
8ba: 87 7c andi r24, 0xC7 ; 199
8bc: 82 bb out 0x12, r24 ; 18
8be: 88 b3 in r24, 0x18 ; 24
8c0: 81 7f andi r24, 0xF1 ; 241
8c2: 88 bb out 0x18, r24 ; 24
8c4: 94 9a sbi 0x12, 4 ; 18
8c6: 95 9a sbi 0x12, 5 ; 18
8c8: 10 92 7c 00 sts 0x007C, r1
8cc: 10 92 7b 00 sts 0x007B, r1
8d0: 00 e0 ldi r16, 0x00 ; 0
8d2: 10 e0 ldi r17, 0x00 ; 0
8d4: ff 24 eor r15, r15
8d6: c3 9a sbi 0x18, 3 ; 24
8d8: 80 e0 ldi r24, 0x00 ; 0
8da: 90 e0 ldi r25, 0x00 ; 0
8dc: fa db rcall .-2060 ; 0xd2 <MessAD>
8de: c3 97 sbiw r24, 0x33 ; 51
8e0: 1c f0 brlt .+6 ; 0x8e8 <MotorTon+0x2ca>
8e2: 51 e0 ldi r21, 0x01 ; 1
8e4: f5 2a or r15, r21
8e6: 02 c0 rjmp .+4 ; 0x8ec <MotorTon+0x2ce>
8e8: 8e ef ldi r24, 0xFE ; 254
8ea: f8 22 and r15, r24
8ec: 18 ba out 0x18, r1 ; 24
8ee: 0f 5f subi r16, 0xFF ; 255
8f0: 1f 4f sbci r17, 0xFF ; 255
8f2: 09 37 cpi r16, 0x79 ; 121
8f4: 11 05 cpc r17, r1
8f6: 79 f7 brne .-34 ; 0x8d6 <MotorTon+0x2b8>
8f8: 82 b3 in r24, 0x12 ; 18
8fa: 87 7c andi r24, 0xC7 ; 199
8fc: 82 bb out 0x12, r24 ; 18
8fe: 88 b3 in r24, 0x18 ; 24
900: 81 7f andi r24, 0xF1 ; 241
902: 88 bb out 0x18, r24 ; 24
904: 93 9a sbi 0x12, 3 ; 18
906: 95 9a sbi 0x12, 5 ; 18
908: 00 e0 ldi r16, 0x00 ; 0
90a: 10 e0 ldi r17, 0x00 ; 0
90c: c2 9a sbi 0x18, 2 ; 24
90e: 81 e0 ldi r24, 0x01 ; 1
910: 90 e0 ldi r25, 0x00 ; 0
912: df db rcall .-2114 ; 0xd2 <MessAD>
914: c3 97 sbiw r24, 0x33 ; 51
916: 1c f0 brlt .+6 ; 0x91e <MotorTon+0x300>
918: 42 e0 ldi r20, 0x02 ; 2
91a: f4 2a or r15, r20
91c: 02 c0 rjmp .+4 ; 0x922 <MotorTon+0x304>
91e: 5d ef ldi r21, 0xFD ; 253
920: f5 22 and r15, r21
922: 18 ba out 0x18, r1 ; 24
924: 0f 5f subi r16, 0xFF ; 255
926: 1f 4f sbci r17, 0xFF ; 255
928: 05 38 cpi r16, 0x85 ; 133
92a: 11 05 cpc r17, r1
92c: 79 f7 brne .-34 ; 0x90c <MotorTon+0x2ee>
92e: 82 b3 in r24, 0x12 ; 18
930: 87 7c andi r24, 0xC7 ; 199
932: 82 bb out 0x12, r24 ; 18
934: 88 b3 in r24, 0x18 ; 24
936: 81 7f andi r24, 0xF1 ; 241
938: 88 bb out 0x18, r24 ; 24
93a: 93 9a sbi 0x12, 3 ; 18
93c: 94 9a sbi 0x12, 4 ; 18
93e: 00 e0 ldi r16, 0x00 ; 0
940: 10 e0 ldi r17, 0x00 ; 0
942: c1 9a sbi 0x18, 1 ; 24
944: 82 e0 ldi r24, 0x02 ; 2
946: 90 e0 ldi r25, 0x00 ; 0
948: c4 db rcall .-2168 ; 0xd2 <MessAD>
94a: c3 97 sbiw r24, 0x33 ; 51
94c: 1c f0 brlt .+6 ; 0x954 <MotorTon+0x336>
94e: 84 e0 ldi r24, 0x04 ; 4
950: f8 2a or r15, r24
952: 02 c0 rjmp .+4 ; 0x958 <MotorTon+0x33a>
954: 4b ef ldi r20, 0xFB ; 251
956: f4 22 and r15, r20
958: 18 ba out 0x18, r1 ; 24
95a: 0f 5f subi r16, 0xFF ; 255
95c: 1f 4f sbci r17, 0xFF ; 255
95e: 0f 36 cpi r16, 0x6F ; 111
960: 11 05 cpc r17, r1
962: 79 f7 brne .-34 ; 0x942 <MotorTon+0x324>
964: 82 b3 in r24, 0x12 ; 18
966: 87 7c andi r24, 0xC7 ; 199
968: 82 bb out 0x12, r24 ; 18
96a: 88 b3 in r24, 0x18 ; 24
96c: 81 7f andi r24, 0xF1 ; 241
96e: 88 bb out 0x18, r24 ; 24
970: 81 e0 ldi r24, 0x01 ; 1
972: 87 b9 out 0x07, r24 ; 7
974: 93 9a sbi 0x12, 3 ; 18
976: 00 e0 ldi r16, 0x00 ; 0
978: 10 e0 ldi r17, 0x00 ; 0
97a: c2 9a sbi 0x18, 2 ; 24
97c: 80 e0 ldi r24, 0x00 ; 0
97e: 90 e0 ldi r25, 0x00 ; 0
980: a8 db rcall .-2224 ; 0xd2 <MessAD>
982: c3 97 sbiw r24, 0x33 ; 51
984: 1c f0 brlt .+6 ; 0x98c <MotorTon+0x36e>
986: 57 ef ldi r21, 0xF7 ; 247
988: f5 22 and r15, r21
98a: 02 c0 rjmp .+4 ; 0x990 <MotorTon+0x372>
98c: 88 e0 ldi r24, 0x08 ; 8
98e: f8 2a or r15, r24
990: 18 ba out 0x18, r1 ; 24
992: 0f 5f subi r16, 0xFF ; 255
994: 1f 4f sbci r17, 0xFF ; 255
996: 09 37 cpi r16, 0x79 ; 121
998: 11 05 cpc r17, r1
99a: 79 f7 brne .-34 ; 0x97a <MotorTon+0x35c>
99c: 95 9a sbi 0x12, 5 ; 18
99e: 00 e0 ldi r16, 0x00 ; 0
9a0: 10 e0 ldi r17, 0x00 ; 0
9a2: c2 9a sbi 0x18, 2 ; 24
9a4: 82 e0 ldi r24, 0x02 ; 2
9a6: 90 e0 ldi r25, 0x00 ; 0
9a8: 94 db rcall .-2264 ; 0xd2 <MessAD>
9aa: c3 97 sbiw r24, 0x33 ; 51
9ac: 1c f0 brlt .+6 ; 0x9b4 <MotorTon+0x396>
9ae: 4f ed ldi r20, 0xDF ; 223
9b0: f4 22 and r15, r20
9b2: 02 c0 rjmp .+4 ; 0x9b8 <MotorTon+0x39a>
9b4: 50 e2 ldi r21, 0x20 ; 32
9b6: f5 2a or r15, r21
9b8: 18 ba out 0x18, r1 ; 24
9ba: 0f 5f subi r16, 0xFF ; 255
9bc: 1f 4f sbci r17, 0xFF ; 255
9be: 05 38 cpi r16, 0x85 ; 133
9c0: 11 05 cpc r17, r1
9c2: 79 f7 brne .-34 ; 0x9a2 <MotorTon+0x384>
9c4: 82 b3 in r24, 0x12 ; 18
9c6: 87 7c andi r24, 0xC7 ; 199
9c8: 82 bb out 0x12, r24 ; 18
9ca: 88 b3 in r24, 0x18 ; 24
9cc: 81 7f andi r24, 0xF1 ; 241
9ce: 88 bb out 0x18, r24 ; 24
9d0: 82 b3 in r24, 0x12 ; 18
9d2: 87 7c andi r24, 0xC7 ; 199
9d4: 82 bb out 0x12, r24 ; 18
9d6: 88 b3 in r24, 0x18 ; 24
9d8: 81 7f andi r24, 0xF1 ; 241
9da: 88 bb out 0x18, r24 ; 24
9dc: 94 9a sbi 0x12, 4 ; 18
9de: 00 e0 ldi r16, 0x00 ; 0
9e0: 10 e0 ldi r17, 0x00 ; 0
9e2: c1 9a sbi 0x18, 1 ; 24
9e4: 81 e0 ldi r24, 0x01 ; 1
9e6: 90 e0 ldi r25, 0x00 ; 0
9e8: 74 db rcall .-2328 ; 0xd2 <MessAD>
9ea: c3 97 sbiw r24, 0x33 ; 51
9ec: 1c f0 brlt .+6 ; 0x9f4 <MotorTon+0x3d6>
9ee: 8f ee ldi r24, 0xEF ; 239
9f0: f8 22 and r15, r24
9f2: 02 c0 rjmp .+4 ; 0x9f8 <MotorTon+0x3da>
9f4: 40 e1 ldi r20, 0x10 ; 16
9f6: f4 2a or r15, r20
9f8: 18 ba out 0x18, r1 ; 24
9fa: 0f 5f subi r16, 0xFF ; 255
9fc: 1f 4f sbci r17, 0xFF ; 255
9fe: 0f 36 cpi r16, 0x6F ; 111
a00: 11 05 cpc r17, r1
a02: 79 f7 brne .-34 ; 0x9e2 <MotorTon+0x3c4>
a04: 82 b3 in r24, 0x12 ; 18
a06: 87 7c andi r24, 0xC7 ; 199
a08: 82 bb out 0x12, r24 ; 18
a0a: 88 b3 in r24, 0x18 ; 24
a0c: 81 7f andi r24, 0xF1 ; 241
a0e: 88 bb out 0x18, r24 ; 24
a10: 78 94 sei
a12: 80 91 67 00 lds r24, 0x0067
a16: fe 01 movw r30, r28
a18: e8 0f add r30, r24
a1a: f1 1d adc r31, r1
a1c: 21 81 ldd r18, Z+1 ; 0x01
a1e: 84 e0 ldi r24, 0x04 ; 4
a20: 90 e0 ldi r25, 0x00 ; 0
a22: 82 1b sub r24, r18
a24: 91 09 sbc r25, r1
a26: 2c e2 ldi r18, 0x2C ; 44
a28: 31 e0 ldi r19, 0x01 ; 1
a2a: ac 01 movw r20, r24
a2c: 42 9f mul r20, r18
a2e: c0 01 movw r24, r0
a30: 43 9f mul r20, r19
a32: 90 0d add r25, r0
a34: 52 9f mul r21, r18
a36: 90 0d add r25, r0
a38: 11 24 eor r1, r1
a3a: 4b d3 rcall .+1686 ; 0x10d2 <Delay_ms>
a3c: 8f 2d mov r24, r15
a3e: 99 27 eor r25, r25
a40: 80 fd sbrc r24, 0
a42: 05 c0 rjmp .+10 ; 0xa4e <MotorTon+0x430>
a44: 81 e4 ldi r24, 0x41 ; 65
a46: 8c b9 out 0x0c, r24 ; 12
a48: bb 24 eor r11, r11
a4a: b3 94 inc r11
a4c: 25 c0 rjmp .+74 ; 0xa98 <MotorTon+0x47a>
a4e: 81 fd sbrc r24, 1
a50: 05 c0 rjmp .+10 ; 0xa5c <MotorTon+0x43e>
a52: 82 e4 ldi r24, 0x42 ; 66
a54: 8c b9 out 0x0c, r24 ; 12
a56: 42 e0 ldi r20, 0x02 ; 2
a58: b4 2e mov r11, r20
a5a: 1e c0 rjmp .+60 ; 0xa98 <MotorTon+0x47a>
a5c: 82 fd sbrc r24, 2
a5e: 05 c0 rjmp .+10 ; 0xa6a <MotorTon+0x44c>
a60: 83 e4 ldi r24, 0x43 ; 67
a62: 8c b9 out 0x0c, r24 ; 12
a64: 33 e0 ldi r19, 0x03 ; 3
a66: b3 2e mov r11, r19
a68: 17 c0 rjmp .+46 ; 0xa98 <MotorTon+0x47a>
a6a: 83 fd sbrc r24, 3
a6c: 05 c0 rjmp .+10 ; 0xa78 <MotorTon+0x45a>
a6e: 81 e6 ldi r24, 0x61 ; 97
a70: 8c b9 out 0x0c, r24 ; 12
a72: 24 e0 ldi r18, 0x04 ; 4
a74: b2 2e mov r11, r18
a76: 10 c0 rjmp .+32 ; 0xa98 <MotorTon+0x47a>
a78: 84 fd sbrc r24, 4
a7a: 05 c0 rjmp .+10 ; 0xa86 <MotorTon+0x468>
a7c: 82 e6 ldi r24, 0x62 ; 98
a7e: 8c b9 out 0x0c, r24 ; 12
a80: 95 e0 ldi r25, 0x05 ; 5
a82: b9 2e mov r11, r25
a84: 09 c0 rjmp .+18 ; 0xa98 <MotorTon+0x47a>
a86: 85 fd sbrc r24, 5
a88: 05 c0 rjmp .+10 ; 0xa94 <MotorTon+0x476>
a8a: 83 e6 ldi r24, 0x63 ; 99
a8c: 8c b9 out 0x0c, r24 ; 12
a8e: 86 e0 ldi r24, 0x06 ; 6
a90: b8 2e mov r11, r24
a92: 02 c0 rjmp .+4 ; 0xa98 <MotorTon+0x47a>
a94: bb 20 and r11, r11
a96: 19 f0 breq .+6 ; 0xa9e <MotorTon+0x480>
a98: 88 ee ldi r24, 0xE8 ; 232
a9a: 93 e0 ldi r25, 0x03 ; 3
a9c: 1a d3 rcall .+1588 ; 0x10d2 <Delay_ms>
a9e: 8b 2d mov r24, r11
aa0: 86 dd rcall .-1268 ; 0x5ae <RotBlink>
aa2: 8e e2 ldi r24, 0x2E ; 46
aa4: a6 d4 rcall .+2380 ; 0x13f2 <uart_putchar>
aa6: 25 96 adiw r28, 0x05 ; 5
aa8: 0f b6 in r0, 0x3f ; 63
aaa: f8 94 cli
aac: de bf out 0x3e, r29 ; 62
aae: 0f be out 0x3f, r0 ; 63
ab0: cd bf out 0x3d, r28 ; 61
ab2: df 91 pop r29
ab4: cf 91 pop r28
ab6: 1f 91 pop r17
ab8: 0f 91 pop r16
aba: ff 90 pop r15
abc: ef 90 pop r14
abe: df 90 pop r13
ac0: cf 90 pop r12
ac2: bf 90 pop r11
ac4: 9f 90 pop r9
ac6: 8f 90 pop r8
ac8: 08 95 ret
 
00000aca <Anwerfen>:
aca: af 92 push r10
acc: bf 92 push r11
ace: cf 92 push r12
ad0: df 92 push r13
ad2: ef 92 push r14
ad4: ff 92 push r15
ad6: 0f 93 push r16
ad8: 1f 93 push r17
ada: cf 93 push r28
adc: df 93 push r29
ade: 18 2f mov r17, r24
ae0: 10 92 78 00 sts 0x0078, r1
ae4: 43 98 cbi 0x08, 3 ; 8
ae6: 85 e0 ldi r24, 0x05 ; 5
ae8: 90 e0 ldi r25, 0x00 ; 0
aea: 90 93 7a 00 sts 0x007A, r25
aee: 80 93 79 00 sts 0x0079, r24
af2: 84 dc rcall .-1784 ; 0x3fc <SetPWM>
af4: 25 db rcall .-2486 ; 0x140 <Manuell>
af6: 88 ec ldi r24, 0xC8 ; 200
af8: 90 e0 ldi r25, 0x00 ; 0
afa: eb d2 rcall .+1494 ; 0x10d2 <Delay_ms>
afc: c1 2f mov r28, r17
afe: dd 27 eor r29, r29
b00: d0 93 7a 00 sts 0x007A, r29
b04: c0 93 79 00 sts 0x0079, r28
b08: 1c e2 ldi r17, 0x2C ; 44
b0a: a1 2e mov r10, r17
b0c: 11 e0 ldi r17, 0x01 ; 1
b0e: b1 2e mov r11, r17
b10: c1 2c mov r12, r1
b12: d1 2c mov r13, r1
b14: ee 24 eor r14, r14
b16: ff 24 eor r15, r15
b18: 87 01 movw r16, r14
b1a: 0e c0 rjmp .+28 ; 0xb38 <Anwerfen+0x6e>
b1c: 80 91 6e 00 lds r24, 0x006E
b20: 88 23 and r24, r24
b22: 11 f4 brne .+4 ; 0xb28 <Anwerfen+0x5e>
b24: 51 d3 rcall .+1698 ; 0x11c8 <SendUart>
b26: 01 c0 rjmp .+2 ; 0xb2a <Anwerfen+0x60>
b28: 52 d5 rcall .+2724 ; 0x15ce <DatenUebertragung>
b2a: 84 e6 ldi r24, 0x64 ; 100
b2c: 95 dc rcall .-1750 ; 0x458 <Wait>
b2e: 08 94 sec
b30: e1 1c adc r14, r1
b32: f1 1c adc r15, r1
b34: 01 1d adc r16, r1
b36: 11 1d adc r17, r1
b38: ea 14 cp r14, r10
b3a: fb 04 cpc r15, r11
b3c: 0c 05 cpc r16, r12
b3e: 1d 05 cpc r17, r13
b40: 69 f7 brne .-38 ; 0xb1c <Anwerfen+0x52>
b42: c6 01 movw r24, r12
b44: b5 01 movw r22, r10
b46: 2f e0 ldi r18, 0x0F ; 15
b48: 30 e0 ldi r19, 0x00 ; 0
b4a: 40 e0 ldi r20, 0x00 ; 0
b4c: 50 e0 ldi r21, 0x00 ; 0
b4e: 12 d7 rcall .+3620 ; 0x1974 <__udivmodsi4>
b50: a2 1a sub r10, r18
b52: b3 0a sbc r11, r19
b54: c4 0a sbc r12, r20
b56: d5 0a sbc r13, r21
b58: 08 94 sec
b5a: a1 08 sbc r10, r1
b5c: b1 08 sbc r11, r1
b5e: c1 08 sbc r12, r1
b60: d1 08 sbc r13, r1
b62: 89 e1 ldi r24, 0x19 ; 25
b64: a8 16 cp r10, r24
b66: b1 04 cpc r11, r1
b68: c1 04 cpc r12, r1
b6a: d1 04 cpc r13, r1
b6c: c0 f0 brcs .+48 ; 0xb9e <Anwerfen+0xd4>
b6e: e8 da rcall .-2608 ; 0x140 <Manuell>
b70: 80 91 76 00 lds r24, 0x0076
b74: 8f 5f subi r24, 0xFF ; 255
b76: 80 93 76 00 sts 0x0076, r24
b7a: 80 91 76 00 lds r24, 0x0076
b7e: 66 e0 ldi r22, 0x06 ; 6
b80: d9 d6 rcall .+3506 ; 0x1934 <__udivmodqi4>
b82: 90 93 76 00 sts 0x0076, r25
b86: 70 da rcall .-2848 ; 0x68 <AdConvert>
b88: d0 93 7a 00 sts 0x007A, r29
b8c: c0 93 79 00 sts 0x0079, r28
b90: 35 dc rcall .-1942 ; 0x3fc <SetPWM>
b92: 44 9b sbis 0x08, 4 ; 8
b94: bf cf rjmp .-130 ; 0xb14 <Anwerfen+0x4a>
b96: 82 b3 in r24, 0x12 ; 18
b98: 80 58 subi r24, 0x80 ; 128
b9a: 82 bb out 0x12, r24 ; 18
b9c: bb cf rjmp .-138 ; 0xb14 <Anwerfen+0x4a>
b9e: df 91 pop r29
ba0: cf 91 pop r28
ba2: 1f 91 pop r17
ba4: 0f 91 pop r16
ba6: ff 90 pop r15
ba8: ef 90 pop r14
baa: df 90 pop r13
bac: cf 90 pop r12
bae: bf 90 pop r11
bb0: af 90 pop r10
bb2: 08 95 ret
 
00000bb4 <main>:
bb4: cf e5 ldi r28, 0x5F ; 95
bb6: d4 e0 ldi r29, 0x04 ; 4
bb8: de bf out 0x3e, r29 ; 62
bba: cd bf out 0x3d, r28 ; 61
bbc: 88 e0 ldi r24, 0x08 ; 8
bbe: 84 bb out 0x14, r24 ; 20
bc0: 85 bb out 0x15, r24 ; 21
bc2: 8a eb ldi r24, 0xBA ; 186
bc4: 81 bb out 0x11, r24 ; 17
bc6: 12 ba out 0x12, r1 ; 18
bc8: 8e e0 ldi r24, 0x0E ; 14
bca: 87 bb out 0x17, r24 ; 23
bcc: 81 e3 ldi r24, 0x31 ; 49
bce: 88 bb out 0x18, r24 ; 24
bd0: 88 b3 in r24, 0x18 ; 24
bd2: 80 6c ori r24, 0xC0 ; 192
bd4: 88 bb out 0x18, r24 ; 24
bd6: b6 9b sbis 0x16, 6 ; 22
bd8: 06 c0 rjmp .+12 ; 0xbe6 <main+0x32>
bda: b7 9b sbis 0x16, 7 ; 22
bdc: 02 c0 rjmp .+4 ; 0xbe2 <main+0x2e>
bde: 81 e0 ldi r24, 0x01 ; 1
be0: 07 c0 rjmp .+14 ; 0xbf0 <main+0x3c>
be2: 82 e0 ldi r24, 0x02 ; 2
be4: 05 c0 rjmp .+10 ; 0xbf0 <main+0x3c>
be6: b7 9b sbis 0x16, 7 ; 22
be8: 02 c0 rjmp .+4 ; 0xbee <main+0x3a>
bea: 83 e0 ldi r24, 0x03 ; 3
bec: 01 c0 rjmp .+2 ; 0xbf0 <main+0x3c>
bee: 84 e0 ldi r24, 0x04 ; 4
bf0: 80 93 67 00 sts 0x0067, r24
bf4: 06 d5 rcall .+2572 ; 0x1602 <UART_Init>
bf6: 50 d2 rcall .+1184 ; 0x1098 <Timer0_Init>
bf8: 78 94 sei
bfa: 23 dc rcall .-1978 ; 0x442 <PWM_Init>
bfc: 80 e5 ldi r24, 0x50 ; 80
bfe: 81 d2 rcall .+1282 ; 0x1102 <InitIC2_Slave>
c00: 3d d1 rcall .+634 ; 0xe7c <InitPPM>
c02: 85 e6 ldi r24, 0x65 ; 101
c04: 90 e0 ldi r25, 0x00 ; 0
c06: 51 d2 rcall .+1186 ; 0x10aa <SetDelay>
c08: 86 e6 ldi r24, 0x66 ; 102
c0a: 90 e0 ldi r25, 0x00 ; 0
c0c: 4e d2 rcall .+1180 ; 0x10aa <SetDelay>
c0e: 87 e6 ldi r24, 0x67 ; 103
c10: 90 e0 ldi r25, 0x00 ; 0
c12: 4b d2 rcall .+1174 ; 0x10aa <SetDelay>
c14: ec 01 movw r28, r24
c16: 8e ef ldi r24, 0xFE ; 254
c18: 90 e0 ldi r25, 0x00 ; 0
c1a: 47 d2 rcall .+1166 ; 0x10aa <SetDelay>
c1c: 6c 01 movw r12, r24
c1e: 8d ee ldi r24, 0xED ; 237
c20: 93 e0 ldi r25, 0x03 ; 3
c22: 43 d2 rcall .+1158 ; 0x10aa <SetDelay>
c24: 8c 01 movw r16, r24
c26: 8e ee ldi r24, 0xEE ; 238
c28: 93 e0 ldi r25, 0x03 ; 3
c2a: 3f d2 rcall .+1150 ; 0x10aa <SetDelay>
c2c: 03 c0 rjmp .+6 ; 0xc34 <main+0x80>
c2e: 20 dc rcall .-1984 ; 0x470 <SollwertErmittlung>
c30: 88 23 and r24, r24
c32: 21 f4 brne .+8 ; 0xc3c <main+0x88>
c34: ce 01 movw r24, r28
c36: 42 d2 rcall .+1156 ; 0x10bc <CheckDelay>
c38: 88 23 and r24, r24
c3a: c9 f3 breq .-14 ; 0xc2e <main+0x7a>
c3c: 97 9a sbi 0x12, 7 ; 18
c3e: 10 92 7a 00 sts 0x007A, r1
c42: 10 92 79 00 sts 0x0079, r1
c46: da db rcall .-2124 ; 0x3fc <SetPWM>
c48: 88 e0 ldi r24, 0x08 ; 8
c4a: 80 bf out 0x30, r24 ; 48
c4c: 81 e0 ldi r24, 0x01 ; 1
c4e: 87 b9 out 0x07, r24 ; 7
c50: 8a e0 ldi r24, 0x0A ; 10
c52: 90 e0 ldi r25, 0x00 ; 0
c54: 2a d2 rcall .+1108 ; 0x10aa <SetDelay>
c56: ec 01 movw r28, r24
c58: 81 e0 ldi r24, 0x01 ; 1
c5a: 90 e0 ldi r25, 0x00 ; 0
c5c: 90 93 91 03 sts 0x0391, r25
c60: 80 93 90 03 sts 0x0390, r24
c64: 10 92 91 00 sts 0x0091, r1
c68: 10 92 90 00 sts 0x0090, r1
c6c: 01 dc rcall .-2046 ; 0x470 <SollwertErmittlung>
c6e: 88 23 and r24, r24
c70: 09 f4 brne .+2 ; 0xc74 <main+0xc0>
c72: d5 dc rcall .-1622 ; 0x61e <MotorTon>
c74: 81 e3 ldi r24, 0x31 ; 49
c76: 88 bb out 0x18, r24 ; 24
c78: ee 24 eor r14, r14
c7a: fa db rcall .-2060 ; 0x470 <SollwertErmittlung>
c7c: 99 27 eor r25, r25
c7e: 90 93 7a 00 sts 0x007A, r25
c82: 80 93 79 00 sts 0x0079, r24
c86: 80 91 76 00 lds r24, 0x0076
c8a: 8e 15 cp r24, r14
c8c: 51 f0 breq .+20 ; 0xca2 <main+0xee>
c8e: 10 92 64 00 sts 0x0064, r1
c92: 10 92 63 00 sts 0x0063, r1
c96: 8a ef ldi r24, 0xFA ; 250
c98: 90 e0 ldi r25, 0x00 ; 0
c9a: 07 d2 rcall .+1038 ; 0x10aa <SetDelay>
c9c: ec 01 movw r28, r24
c9e: e0 90 76 00 lds r14, 0x0076
ca2: 80 91 79 00 lds r24, 0x0079
ca6: 90 91 7a 00 lds r25, 0x007A
caa: 89 2b or r24, r25
cac: d1 f4 brne .+52 ; 0xce2 <main+0x12e>
cae: 10 92 89 00 sts 0x0089, r1
cb2: 10 92 63 00 sts 0x0063, r1
cb6: c5 01 movw r24, r10
cb8: 01 d2 rcall .+1026 ; 0x10bc <CheckDelay>
cba: 88 23 and r24, r24
cbc: e9 f0 breq .+58 ; 0xcf8 <main+0x144>
cbe: 10 92 78 00 sts 0x0078, r1
cc2: 43 98 cbi 0x08, 3 ; 8
cc4: 91 e0 ldi r25, 0x01 ; 1
cc6: 90 93 64 00 sts 0x0064, r25
cca: 82 b3 in r24, 0x12 ; 18
ccc: 87 7c andi r24, 0xC7 ; 199
cce: 82 bb out 0x12, r24 ; 18
cd0: 9f bd out 0x2f, r25 ; 47
cd2: 81 e4 ldi r24, 0x41 ; 65
cd4: 85 bd out 0x25, r24 ; 37
cd6: 8e e0 ldi r24, 0x0E ; 14
cd8: 87 bb out 0x17, r24 ; 23
cda: 88 b3 in r24, 0x18 ; 24
cdc: 81 7f andi r24, 0xF1 ; 241
cde: 88 bb out 0x18, r24 ; 24
ce0: 0b c0 rjmp .+22 ; 0xcf8 <main+0x144>
ce2: 80 91 64 00 lds r24, 0x0064
ce6: 88 23 and r24, r24
ce8: 19 f0 breq .+6 ; 0xcf0 <main+0x13c>
cea: 81 e0 ldi r24, 0x01 ; 1
cec: 80 93 89 00 sts 0x0089, r24
cf0: 8c ed ldi r24, 0xDC ; 220
cf2: 95 e0 ldi r25, 0x05 ; 5
cf4: da d1 rcall .+948 ; 0x10aa <SetDelay>
cf6: 5c 01 movw r10, r24
cf8: 80 91 64 00 lds r24, 0x0064
cfc: 88 23 and r24, r24
cfe: 21 f0 breq .+8 ; 0xd08 <main+0x154>
d00: 10 92 7a 00 sts 0x007A, r1
d04: 10 92 79 00 sts 0x0079, r1
d08: 79 db rcall .-2318 ; 0x3fc <SetPWM>
d0a: 80 91 63 00 lds r24, 0x0063
d0e: 8f 5f subi r24, 0xFF ; 255
d10: 80 93 63 00 sts 0x0063, r24
d14: 81 30 cpi r24, 0x01 ; 1
d16: 09 f0 breq .+2 ; 0xd1a <main+0x166>
d18: b0 cf rjmp .-160 ; 0xc7a <main+0xc6>
d1a: 80 91 64 00 lds r24, 0x0064
d1e: 81 11 cpse r24, r1
d20: 97 9a sbi 0x12, 7 ; 18
d22: c6 01 movw r24, r12
d24: cb d1 rcall .+918 ; 0x10bc <CheckDelay>
d26: 88 23 and r24, r24
d28: a9 f1 breq .+106 ; 0xd94 <main+0x1e0>
d2a: 82 e3 ldi r24, 0x32 ; 50
d2c: 90 e0 ldi r25, 0x00 ; 0
d2e: bd d1 rcall .+890 ; 0x10aa <SetDelay>
d30: 6c 01 movw r12, r24
d32: 80 91 7e 00 lds r24, 0x007E
d36: 48 2f mov r20, r24
d38: 55 27 eor r21, r21
d3a: 20 91 7b 00 lds r18, 0x007B
d3e: 30 91 7c 00 lds r19, 0x007C
d42: 42 17 cp r20, r18
d44: 53 07 cpc r21, r19
d46: 10 f4 brcc .+4 ; 0xd4c <main+0x198>
d48: 8f 5f subi r24, 0xFF ; 255
d4a: 04 c0 rjmp .+8 ; 0xd54 <main+0x1a0>
d4c: 24 17 cp r18, r20
d4e: 35 07 cpc r19, r21
d50: 18 f4 brcc .+6 ; 0xd58 <main+0x1a4>
d52: 81 50 subi r24, 0x01 ; 1
d54: 80 93 7e 00 sts 0x007E, r24
d58: 29 3c cpi r18, 0xC9 ; 201
d5a: 31 05 cpc r19, r1
d5c: 48 f0 brcs .+18 ; 0xd70 <main+0x1bc>
d5e: 80 91 65 00 lds r24, 0x0065
d62: 98 2f mov r25, r24
d64: 92 95 swap r25
d66: 96 95 lsr r25
d68: 97 70 andi r25, 0x07 ; 7
d6a: 89 1b sub r24, r25
d6c: 80 93 65 00 sts 0x0065, r24
d70: 80 91 7e 00 lds r24, 0x007E
d74: 90 91 65 00 lds r25, 0x0065
d78: 89 37 cpi r24, 0x79 ; 121
d7a: 38 f0 brcs .+14 ; 0xd8a <main+0x1d6>
d7c: 99 23 and r25, r25
d7e: 19 f0 breq .+6 ; 0xd86 <main+0x1d2>
d80: 91 50 subi r25, 0x01 ; 1
d82: 90 93 65 00 sts 0x0065, r25
d86: ab 9a sbi 0x15, 3 ; 21
d88: 05 c0 rjmp .+10 ; 0xd94 <main+0x1e0>
d8a: 9f 3f cpi r25, 0xFF ; 255
d8c: 19 f0 breq .+6 ; 0xd94 <main+0x1e0>
d8e: 9f 5f subi r25, 0xFF ; 255
d90: 90 93 65 00 sts 0x0065, r25
d94: c8 01 movw r24, r16
d96: 92 d1 rcall .+804 ; 0x10bc <CheckDelay>
d98: 88 23 and r24, r24
d9a: b9 f0 breq .+46 ; 0xdca <main+0x216>
d9c: 8a e0 ldi r24, 0x0A ; 10
d9e: 90 e0 ldi r25, 0x00 ; 0
da0: 84 d1 rcall .+776 ; 0x10aa <SetDelay>
da2: 8c 01 movw r16, r24
da4: 80 91 8a 00 lds r24, 0x008A
da8: 90 91 8b 00 lds r25, 0x008B
dac: 90 93 8d 00 sts 0x008D, r25
db0: 80 93 8c 00 sts 0x008C, r24
db4: 10 92 8b 00 sts 0x008B, r1
db8: 10 92 8a 00 sts 0x008A, r1
dbc: 80 91 93 00 lds r24, 0x0093
dc0: 88 23 and r24, r24
dc2: 19 f4 brne .+6 ; 0xdca <main+0x216>
dc4: 81 e0 ldi r24, 0x01 ; 1
dc6: 80 93 66 00 sts 0x0066, r24
dca: ce 01 movw r24, r28
dcc: 77 d1 rcall .+750 ; 0x10bc <CheckDelay>
dce: 88 23 and r24, r24
dd0: 31 f0 breq .+12 ; 0xdde <main+0x22a>
dd2: 80 91 8c 00 lds r24, 0x008C
dd6: 90 91 8d 00 lds r25, 0x008D
dda: 89 2b or r24, r25
ddc: 29 f0 breq .+10 ; 0xde8 <main+0x234>
dde: 80 91 89 00 lds r24, 0x0089
de2: 88 23 and r24, r24
de4: 09 f4 brne .+2 ; 0xde8 <main+0x234>
de6: 49 cf rjmp .-366 ; 0xc7a <main+0xc6>
de8: ff 24 eor r15, r15
dea: f3 94 inc r15
dec: f0 92 64 00 sts 0x0064, r15
df0: 10 92 78 00 sts 0x0078, r1
df4: 43 98 cbi 0x08, 3 ; 8
df6: 84 e6 ldi r24, 0x64 ; 100
df8: 90 e0 ldi r25, 0x00 ; 0
dfa: 57 d1 rcall .+686 ; 0x10aa <SetDelay>
dfc: ec 01 movw r28, r24
dfe: 80 91 89 00 lds r24, 0x0089
e02: 88 23 and r24, r24
e04: 09 f4 brne .+2 ; 0xe08 <main+0x254>
e06: 39 cf rjmp .-398 ; 0xc7a <main+0xc6>
e08: ab 98 cbi 0x15, 3 ; 21
e0a: 10 92 89 00 sts 0x0089, r1
e0e: 8a e0 ldi r24, 0x0A ; 10
e10: 5c de rcall .-840 ; 0xaca <Anwerfen>
e12: 97 9a sbi 0x12, 7 ; 18
e14: 10 92 64 00 sts 0x0064, r1
e18: 80 91 76 00 lds r24, 0x0076
e1c: 81 50 subi r24, 0x01 ; 1
e1e: 80 93 76 00 sts 0x0076, r24
e22: 81 e0 ldi r24, 0x01 ; 1
e24: 90 e0 ldi r25, 0x00 ; 0
e26: 90 93 7a 00 sts 0x007A, r25
e2a: 80 93 79 00 sts 0x0079, r24
e2e: e6 da rcall .-2612 ; 0x3fc <SetPWM>
e30: 88 b1 in r24, 0x08 ; 8
e32: 8c 7f andi r24, 0xFC ; 252
e34: 88 b9 out 0x08, r24 ; 8
e36: f0 92 78 00 sts 0x0078, r15
e3a: 88 b1 in r24, 0x08 ; 8
e3c: 8a 60 ori r24, 0x0A ; 10
e3e: 88 b9 out 0x08, r24 ; 8
e40: 84 e1 ldi r24, 0x14 ; 20
e42: 90 e0 ldi r25, 0x00 ; 0
e44: 32 d1 rcall .+612 ; 0x10aa <SetDelay>
e46: ec 01 movw r28, r24
e48: ce 01 movw r24, r28
e4a: 38 d1 rcall .+624 ; 0x10bc <CheckDelay>
e4c: 88 23 and r24, r24
e4e: e1 f3 breq .-8 ; 0xe48 <main+0x294>
e50: 8f e0 ldi r24, 0x0F ; 15
e52: 90 e0 ldi r25, 0x00 ; 0
e54: 90 93 7a 00 sts 0x007A, r25
e58: 80 93 79 00 sts 0x0079, r24
e5c: cf da rcall .-2658 ; 0x3fc <SetPWM>
e5e: 8c e2 ldi r24, 0x2C ; 44
e60: 91 e0 ldi r25, 0x01 ; 1
e62: 23 d1 rcall .+582 ; 0x10aa <SetDelay>
e64: ec 01 movw r28, r24
e66: ce 01 movw r24, r28
e68: 29 d1 rcall .+594 ; 0x10bc <CheckDelay>
e6a: 88 23 and r24, r24
e6c: e1 f3 breq .-8 ; 0xe66 <main+0x2b2>
e6e: 82 e3 ldi r24, 0x32 ; 50
e70: 90 e0 ldi r25, 0x00 ; 0
e72: 1b d1 rcall .+566 ; 0x10aa <SetDelay>
e74: 8c 01 movw r16, r24
e76: 87 e0 ldi r24, 0x07 ; 7
e78: e8 2e mov r14, r24
e7a: ff ce rjmp .-514 ; 0xc7a <main+0xc6>
 
00000e7c <InitPPM>:
//
void InitPPM(void)
//############################################################################
{
TCCR1B |= (1<<ICES1)|(1<<ICNC1);
e7c: 8e b5 in r24, 0x2e ; 46
e7e: 80 6c ori r24, 0xC0 ; 192
e80: 8e bd out 0x2e, r24 ; 46
ICP_POS_FLANKE;
e82: 8e b5 in r24, 0x2e ; 46
e84: 80 64 ori r24, 0x40 ; 64
e86: 8e bd out 0x2e, r24 ; 46
ICP_INT_ENABLE;
e88: 89 b7 in r24, 0x39 ; 57
e8a: 80 62 ori r24, 0x20 ; 32
e8c: 89 bf out 0x39, r24 ; 57
TIMER1_INT_ENABLE;
e8e: 89 b7 in r24, 0x39 ; 57
e90: 84 60 ori r24, 0x04 ; 4
e92: 89 bf out 0x39, r24 ; 57
e94: 08 95 ret
 
00000e96 <__vector_8>:
}
 
//############################################################################
//
SIGNAL(SIG_OVERFLOW1)
//############################################################################
{
e96: 1f 92 push r1
e98: 0f 92 push r0
e9a: 0f b6 in r0, 0x3f ; 63
e9c: 0f 92 push r0
e9e: 11 24 eor r1, r1
ea0: 8f 93 push r24
Timer1Overflow++;
ea2: 80 91 92 00 lds r24, 0x0092
ea6: 8f 5f subi r24, 0xFF ; 255
ea8: 80 93 92 00 sts 0x0092, r24
eac: 8f 91 pop r24
eae: 0f 90 pop r0
eb0: 0f be out 0x3f, r0 ; 63
eb2: 0f 90 pop r0
eb4: 1f 90 pop r1
eb6: 18 95 reti
 
00000eb8 <__vector_5>:
}
 
//############################################################################
//
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
{
eb8: 1f 92 push r1
eba: 0f 92 push r0
ebc: 0f b6 in r0, 0x3f ; 63
ebe: 0f 92 push r0
ec0: 11 24 eor r1, r1
ec2: 2f 93 push r18
ec4: 3f 93 push r19
ec6: 4f 93 push r20
ec8: 5f 93 push r21
eca: 8f 93 push r24
ecc: 9f 93 push r25
static unsigned int tim_alt;
static unsigned int ppm;
if(TCCR1B & (1<<ICES1)) // Positive Flanke
ece: 0e b4 in r0, 0x2e ; 46
ed0: 06 fe sbrs r0, 6
ed2: 0f c0 rjmp .+30 ; 0xef2 <__vector_5+0x3a>
{
Timer1Overflow = 0;
ed4: 10 92 92 00 sts 0x0092, r1
tim_alt = ICR1;
ed8: 86 b5 in r24, 0x26 ; 38
eda: 97 b5 in r25, 0x27 ; 39
edc: 90 93 98 00 sts 0x0098, r25
ee0: 80 93 97 00 sts 0x0097, r24
ICP_NEG_FLANKE;
ee4: 8e b5 in r24, 0x2e ; 46
ee6: 8f 7b andi r24, 0xBF ; 191
ee8: 8e bd out 0x2e, r24 ; 46
PPM_Timeout = 100;
eea: 84 e6 ldi r24, 0x64 ; 100
eec: 80 93 93 00 sts 0x0093, r24
ef0: 71 c0 rjmp .+226 ; 0xfd4 <__vector_5+0x11c>
}
else // Negative Flanke
{
ICP_POS_FLANKE;
ef2: 8e b5 in r24, 0x2e ; 46
ef4: 80 64 ori r24, 0x40 ; 64
ef6: 8e bd out 0x2e, r24 ; 46
#ifdef _32KHZ
ppm = (ICR1 - tim_alt + (int) Timer1Overflow * 256) / 32;
#endif
#ifdef _16KHZ
ppm = (ICR1 - tim_alt + (int) Timer1Overflow * 512) / 32;
ef8: 86 b5 in r24, 0x26 ; 38
efa: 97 b5 in r25, 0x27 ; 39
efc: 20 91 92 00 lds r18, 0x0092
f00: 40 91 97 00 lds r20, 0x0097
f04: 50 91 98 00 lds r21, 0x0098
f08: 84 1b sub r24, r20
f0a: 95 0b sbc r25, r21
f0c: 33 27 eor r19, r19
f0e: 32 2f mov r19, r18
f10: 22 27 eor r18, r18
f12: 33 0f add r19, r19
f14: 82 0f add r24, r18
f16: 93 1f adc r25, r19
f18: 68 94 set
f1a: 14 f8 bld r1, 4
f1c: 96 95 lsr r25
f1e: 87 95 ror r24
f20: 16 94 lsr r1
f22: e1 f7 brne .-8 ; 0xf1c <__vector_5+0x64>
f24: 90 93 96 00 sts 0x0096, r25
f28: 80 93 95 00 sts 0x0095, r24
#endif
if(ppm < 280) ppm = 280;
f2c: 88 51 subi r24, 0x18 ; 24
f2e: 91 40 sbci r25, 0x01 ; 1
f30: 30 f4 brcc .+12 ; 0xf3e <__vector_5+0x86>
f32: 88 e1 ldi r24, 0x18 ; 24
f34: 91 e0 ldi r25, 0x01 ; 1
f36: 90 93 96 00 sts 0x0096, r25
f3a: 80 93 95 00 sts 0x0095, r24
ppm -= 280;
f3e: 40 91 95 00 lds r20, 0x0095
f42: 50 91 96 00 lds r21, 0x0096
f46: 48 51 subi r20, 0x18 ; 24
f48: 51 40 sbci r21, 0x01 ; 1
if(PPM_Signal < ppm) PPM_Signal++;
f4a: 80 91 90 00 lds r24, 0x0090
f4e: 90 91 91 00 lds r25, 0x0091
f52: 84 17 cp r24, r20
f54: 95 07 cpc r25, r21
f56: 30 f4 brcc .+12 ; 0xf64 <__vector_5+0xac>
f58: 80 91 90 00 lds r24, 0x0090
f5c: 90 91 91 00 lds r25, 0x0091
f60: 01 96 adiw r24, 0x01 ; 1
f62: 0c c0 rjmp .+24 ; 0xf7c <__vector_5+0xc4>
else if(PPM_Signal > ppm) PPM_Signal--;
f64: 80 91 90 00 lds r24, 0x0090
f68: 90 91 91 00 lds r25, 0x0091
f6c: 48 17 cp r20, r24
f6e: 59 07 cpc r21, r25
f70: 48 f4 brcc .+18 ; 0xf84 <__vector_5+0xcc>
f72: 80 91 90 00 lds r24, 0x0090
f76: 90 91 91 00 lds r25, 0x0091
f7a: 01 97 sbiw r24, 0x01 ; 1
f7c: 90 93 91 00 sts 0x0091, r25
f80: 80 93 90 00 sts 0x0090, r24
if(FILTER_PPM) ppm = (PPM_Signal * FILTER_PPM + ppm) / (FILTER_PPM + 1); // Filtern
f84: 80 91 90 00 lds r24, 0x0090
f88: 90 91 91 00 lds r25, 0x0091
f8c: 9c 01 movw r18, r24
f8e: 22 0f add r18, r18
f90: 33 1f adc r19, r19
f92: 22 0f add r18, r18
f94: 33 1f adc r19, r19
f96: 22 0f add r18, r18
f98: 33 1f adc r19, r19
f9a: 28 1b sub r18, r24
f9c: 39 0b sbc r19, r25
f9e: 24 0f add r18, r20
fa0: 35 1f adc r19, r21
fa2: 83 e0 ldi r24, 0x03 ; 3
fa4: 36 95 lsr r19
fa6: 27 95 ror r18
fa8: 8a 95 dec r24
faa: e1 f7 brne .-8 ; 0xfa4 <__vector_5+0xec>
fac: 30 93 96 00 sts 0x0096, r19
fb0: 20 93 95 00 sts 0x0095, r18
PPM_Signal = ppm;
fb4: 30 93 91 00 sts 0x0091, r19
fb8: 20 93 90 00 sts 0x0090, r18
if(anz_ppm_werte < 255) anz_ppm_werte++;
fbc: 80 91 94 00 lds r24, 0x0094
fc0: 8f 3f cpi r24, 0xFF ; 255
fc2: 29 f0 breq .+10 ; 0xfce <__vector_5+0x116>
fc4: 80 91 94 00 lds r24, 0x0094
fc8: 8f 5f subi r24, 0xFF ; 255
fca: 80 93 94 00 sts 0x0094, r24
ZeitZumAdWandeln = 1;
fce: 81 e0 ldi r24, 0x01 ; 1
fd0: 80 93 66 00 sts 0x0066, r24
fd4: 9f 91 pop r25
fd6: 8f 91 pop r24
fd8: 5f 91 pop r21
fda: 4f 91 pop r20
fdc: 3f 91 pop r19
fde: 2f 91 pop r18
fe0: 0f 90 pop r0
fe2: 0f be out 0x3f, r0 ; 63
fe4: 0f 90 pop r0
fe6: 1f 90 pop r1
fe8: 18 95 reti
 
00000fea <__vector_1>:
}
}
 
//############################################################################
//
SIGNAL(SIG_INTERRUPT0)
//############################################################################
{
fea: 1f 92 push r1
fec: 0f 92 push r0
fee: 0f b6 in r0, 0x3f ; 63
ff0: 0f 92 push r0
ff2: 11 24 eor r1, r1
ff4: 8f 93 push r24
CLR_INT0_FLAG; // IntFlag Loeschen
ff6: 8a b7 in r24, 0x3a ; 58
ff8: 8f 7b andi r24, 0xBF ; 191
ffa: 8a bf out 0x3a, r24 ; 58
ffc: 8f 91 pop r24
ffe: 0f 90 pop r0
1000: 0f be out 0x3f, r0 ; 63
1002: 0f 90 pop r0
1004: 1f 90 pop r1
1006: 18 95 reti
 
00001008 <__vector_9>:
1008: 1f 92 push r1
100a: 0f 92 push r0
100c: 0f b6 in r0, 0x3f ; 63
100e: 0f 92 push r0
1010: 11 24 eor r1, r1
1012: 8f 93 push r24
1014: 9f 93 push r25
1016: 80 91 af 02 lds r24, 0x02AF
101a: 8f 5f subi r24, 0xFF ; 255
101c: 80 93 af 02 sts 0x02AF, r24
1020: 80 91 9b 00 lds r24, 0x009B
1024: 81 50 subi r24, 0x01 ; 1
1026: 80 93 9b 00 sts 0x009B, r24
102a: 8f 3f cpi r24, 0xFF ; 255
102c: 71 f5 brne .+92 ; 0x108a <__vector_9+0x82>
102e: 83 e0 ldi r24, 0x03 ; 3
1030: 80 93 9b 00 sts 0x009B, r24
1034: 80 91 99 00 lds r24, 0x0099
1038: 90 91 9a 00 lds r25, 0x009A
103c: 01 96 adiw r24, 0x01 ; 1
103e: 90 93 9a 00 sts 0x009A, r25
1042: 80 93 99 00 sts 0x0099, r24
1046: 80 91 81 00 lds r24, 0x0081
104a: 90 91 82 00 lds r25, 0x0082
104e: 00 97 sbiw r24, 0x00 ; 0
1050: 29 f0 breq .+10 ; 0x105c <__vector_9+0x54>
1052: 01 97 sbiw r24, 0x01 ; 1
1054: 90 93 82 00 sts 0x0082, r25
1058: 80 93 81 00 sts 0x0081, r24
105c: 80 91 93 00 lds r24, 0x0093
1060: 88 23 and r24, r24
1062: 31 f0 breq .+12 ; 0x1070 <__vector_9+0x68>
1064: 80 91 93 00 lds r24, 0x0093
1068: 81 50 subi r24, 0x01 ; 1
106a: 80 93 93 00 sts 0x0093, r24
106e: 02 c0 rjmp .+4 ; 0x1074 <__vector_9+0x6c>
1070: 10 92 94 00 sts 0x0094, r1
1074: 80 91 83 00 lds r24, 0x0083
1078: 90 91 84 00 lds r25, 0x0084
107c: 00 97 sbiw r24, 0x00 ; 0
107e: 29 f0 breq .+10 ; 0x108a <__vector_9+0x82>
1080: 01 97 sbiw r24, 0x01 ; 1
1082: 90 93 84 00 sts 0x0084, r25
1086: 80 93 83 00 sts 0x0083, r24
108a: 9f 91 pop r25
108c: 8f 91 pop r24
108e: 0f 90 pop r0
1090: 0f be out 0x3f, r0 ; 63
1092: 0f 90 pop r0
1094: 1f 90 pop r1
1096: 18 95 reti
 
00001098 <Timer0_Init>:
1098: 82 e0 ldi r24, 0x02 ; 2
109a: 83 bf out 0x33, r24 ; 51
109c: 89 b7 in r24, 0x39 ; 57
109e: 81 60 ori r24, 0x01 ; 1
10a0: 89 bf out 0x39, r24 ; 57
10a2: 89 b7 in r24, 0x39 ; 57
10a4: 80 64 ori r24, 0x40 ; 64
10a6: 89 bf out 0x39, r24 ; 57
10a8: 08 95 ret
 
000010aa <SetDelay>:
10aa: 20 91 99 00 lds r18, 0x0099
10ae: 30 91 9a 00 lds r19, 0x009A
10b2: 21 50 subi r18, 0x01 ; 1
10b4: 30 40 sbci r19, 0x00 ; 0
10b6: 82 0f add r24, r18
10b8: 93 1f adc r25, r19
10ba: 08 95 ret
 
000010bc <CheckDelay>:
10bc: 20 91 99 00 lds r18, 0x0099
10c0: 30 91 9a 00 lds r19, 0x009A
10c4: 82 1b sub r24, r18
10c6: 93 0b sbc r25, r19
10c8: 89 2f mov r24, r25
10ca: 99 27 eor r25, r25
10cc: 80 78 andi r24, 0x80 ; 128
10ce: 99 27 eor r25, r25
10d0: 08 95 ret
 
000010d2 <Delay_ms>:
10d2: ac 01 movw r20, r24
10d4: 20 91 99 00 lds r18, 0x0099
10d8: 30 91 9a 00 lds r19, 0x009A
10dc: 21 50 subi r18, 0x01 ; 1
10de: 30 40 sbci r19, 0x00 ; 0
10e0: 80 91 99 00 lds r24, 0x0099
10e4: 90 91 9a 00 lds r25, 0x009A
10e8: b9 01 movw r22, r18
10ea: 68 1b sub r22, r24
10ec: 79 0b sbc r23, r25
10ee: cb 01 movw r24, r22
10f0: 84 0f add r24, r20
10f2: 95 1f adc r25, r21
10f4: 80 70 andi r24, 0x00 ; 0
10f6: 90 78 andi r25, 0x80 ; 128
10f8: 89 2f mov r24, r25
10fa: 99 27 eor r25, r25
10fc: 88 23 and r24, r24
10fe: 81 f3 breq .-32 ; 0x10e0 <Delay_ms+0xe>
1100: 08 95 ret
 
00001102 <InitIC2_Slave>:
1102: 90 91 67 00 lds r25, 0x0067
1106: 99 0f add r25, r25
1108: 98 0f add r25, r24
110a: 92 b9 out 0x02, r25 ; 2
110c: 85 ec ldi r24, 0xC5 ; 197
110e: 86 bf out 0x36, r24 ; 54
1110: 08 95 ret
 
00001112 <__vector_17>:
1112: 1f 92 push r1
1114: 0f 92 push r0
1116: 0f b6 in r0, 0x3f ; 63
1118: 0f 92 push r0
111a: 11 24 eor r1, r1
111c: 8f 93 push r24
111e: 9f 93 push r25
1120: 81 b1 in r24, 0x01 ; 1
1122: 99 27 eor r25, r25
1124: 88 7f andi r24, 0xF8 ; 248
1126: 90 70 andi r25, 0x00 ; 0
1128: 80 38 cpi r24, 0x80 ; 128
112a: 91 05 cpc r25, r1
112c: c9 f0 breq .+50 ; 0x1160 <__vector_17+0x4e>
112e: 81 38 cpi r24, 0x81 ; 129
1130: 91 05 cpc r25, r1
1132: 34 f4 brge .+12 ; 0x1140 <__vector_17+0x2e>
1134: 00 97 sbiw r24, 0x00 ; 0
1136: 91 f1 breq .+100 ; 0x119c <__vector_17+0x8a>
1138: 80 36 cpi r24, 0x60 ; 96
113a: 91 05 cpc r25, r1
113c: 91 f5 brne .+100 ; 0x11a2 <__vector_17+0x90>
113e: 0a c0 rjmp .+20 ; 0x1154 <__vector_17+0x42>
1140: 88 3b cpi r24, 0xB8 ; 184
1142: 91 05 cpc r25, r1
1144: b9 f0 breq .+46 ; 0x1174 <__vector_17+0x62>
1146: 88 3f cpi r24, 0xF8 ; 248
1148: 91 05 cpc r25, r1
114a: 29 f1 breq .+74 ; 0x1196 <__vector_17+0x84>
114c: 88 3a cpi r24, 0xA8 ; 168
114e: 91 05 cpc r25, r1
1150: 41 f5 brne .+80 ; 0x11a2 <__vector_17+0x90>
1152: 10 c0 rjmp .+32 ; 0x1174 <__vector_17+0x62>
1154: 86 b7 in r24, 0x36 ; 54
1156: 80 68 ori r24, 0x80 ; 128
1158: 86 bf out 0x36, r24 ; 54
115a: 10 92 9c 00 sts 0x009C, r1
115e: 23 c0 rjmp .+70 ; 0x11a6 <__vector_17+0x94>
1160: 83 b1 in r24, 0x03 ; 3
1162: 80 93 b0 02 sts 0x02B0, r24
1166: 84 ef ldi r24, 0xF4 ; 244
1168: 91 e0 ldi r25, 0x01 ; 1
116a: 90 93 82 00 sts 0x0082, r25
116e: 80 93 81 00 sts 0x0081, r24
1172: 0e c0 rjmp .+28 ; 0x1190 <__vector_17+0x7e>
1174: 80 91 9c 00 lds r24, 0x009C
1178: 88 23 and r24, r24
117a: 39 f4 brne .+14 ; 0x118a <__vector_17+0x78>
117c: 80 91 7e 00 lds r24, 0x007E
1180: 83 b9 out 0x03, r24 ; 3
1182: 81 e0 ldi r24, 0x01 ; 1
1184: 80 93 9c 00 sts 0x009C, r24
1188: 03 c0 rjmp .+6 ; 0x1190 <__vector_17+0x7e>
118a: 80 91 65 00 lds r24, 0x0065
118e: 83 b9 out 0x03, r24 ; 3
1190: 86 b7 in r24, 0x36 ; 54
1192: 80 68 ori r24, 0x80 ; 128
1194: 07 c0 rjmp .+14 ; 0x11a4 <__vector_17+0x92>
1196: 86 b7 in r24, 0x36 ; 54
1198: 80 69 ori r24, 0x90 ; 144
119a: 86 bf out 0x36, r24 ; 54
119c: 86 b7 in r24, 0x36 ; 54
119e: 80 69 ori r24, 0x90 ; 144
11a0: 86 bf out 0x36, r24 ; 54
11a2: 85 ec ldi r24, 0xC5 ; 197
11a4: 86 bf out 0x36, r24 ; 54
11a6: 9f 91 pop r25
11a8: 8f 91 pop r24
11aa: 0f 90 pop r0
11ac: 0f be out 0x3f, r0 ; 63
11ae: 0f 90 pop r0
11b0: 1f 90 pop r1
11b2: 18 95 reti
 
000011b4 <__vector_13>:
11b4: 1f 92 push r1
11b6: 0f 92 push r0
11b8: 0f b6 in r0, 0x3f ; 63
11ba: 0f 92 push r0
11bc: 11 24 eor r1, r1
11be: 0f 90 pop r0
11c0: 0f be out 0x3f, r0 ; 63
11c2: 0f 90 pop r0
11c4: 1f 90 pop r1
11c6: 18 95 reti
 
000011c8 <SendUart>:
11c8: 5e 9b sbis 0x0b, 6 ; 11
11ca: 24 c0 rjmp .+72 ; 0x1214 <SendUart+0x4c>
11cc: 80 91 6e 00 lds r24, 0x006E
11d0: 88 23 and r24, r24
11d2: e1 f4 brne .+56 ; 0x120c <SendUart+0x44>
11d4: 80 91 ab 00 lds r24, 0x00AB
11d8: 90 91 ac 00 lds r25, 0x00AC
11dc: 01 96 adiw r24, 0x01 ; 1
11de: 90 93 ac 00 sts 0x00AC, r25
11e2: 80 93 ab 00 sts 0x00AB, r24
11e6: fc 01 movw r30, r24
11e8: ee 54 subi r30, 0x4E ; 78
11ea: fd 4f sbci r31, 0xFD ; 253
11ec: e0 81 ld r30, Z
11ee: ed 30 cpi r30, 0x0D ; 13
11f0: 19 f0 breq .+6 ; 0x11f8 <SendUart+0x30>
11f2: 84 36 cpi r24, 0x64 ; 100
11f4: 91 05 cpc r25, r1
11f6: 39 f4 brne .+14 ; 0x1206 <SendUart+0x3e>
11f8: 10 92 ac 00 sts 0x00AC, r1
11fc: 10 92 ab 00 sts 0x00AB, r1
1200: 81 e0 ldi r24, 0x01 ; 1
1202: 80 93 6e 00 sts 0x006E, r24
1206: 58 9a sbi 0x0b, 0 ; 11
1208: ec b9 out 0x0c, r30 ; 12
120a: 08 95 ret
120c: 10 92 ac 00 sts 0x00AC, r1
1210: 10 92 ab 00 sts 0x00AB, r1
1214: 08 95 ret
 
00001216 <Decode64>:
{
1216: 1f 93 push r17
1218: cf 93 push r28
121a: df 93 push r29
121c: ec 01 movw r28, r24
121e: 70 e0 ldi r23, 0x00 ; 0
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
1220: a2 2f mov r26, r18
1222: bb 27 eor r27, r27
1224: 12 97 sbiw r26, 0x02 ; 2
1226: 48 c0 rjmp .+144 ; 0x12b8 <Decode64+0xa2>
1228: e4 2f mov r30, r20
122a: ff 27 eor r31, r31
122c: e8 5e subi r30, 0xE8 ; 232
122e: fc 4f sbci r31, 0xFC ; 252
1230: 30 81 ld r19, Z
1232: 4f 5f subi r20, 0xFF ; 255
1234: e4 2f mov r30, r20
1236: ff 27 eor r31, r31
1238: e8 5e subi r30, 0xE8 ; 232
123a: fc 4f sbci r31, 0xFC ; 252
123c: 50 81 ld r21, Z
123e: 4f 5f subi r20, 0xFF ; 255
1240: e4 2f mov r30, r20
1242: ff 27 eor r31, r31
1244: e8 5e subi r30, 0xE8 ; 232
1246: fc 4f sbci r31, 0xFC ; 252
1248: 10 81 ld r17, Z
124a: 4f 5f subi r20, 0xFF ; 255
124c: e4 2f mov r30, r20
124e: ff 27 eor r31, r31
1250: e8 5e subi r30, 0xE8 ; 232
1252: fc 4f sbci r31, 0xFC ; 252
1254: 20 81 ld r18, Z
1256: 4f 5f subi r20, 0xFF ; 255
1258: 84 2f mov r24, r20
125a: 99 27 eor r25, r25
125c: a8 17 cp r26, r24
125e: b9 07 cpc r27, r25
1260: 74 f1 brlt .+92 ; 0x12be <Decode64+0xa8>
1262: 5d 53 subi r21, 0x3D ; 61
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
1264: fe 01 movw r30, r28
1266: e7 0f add r30, r23
1268: f1 1d adc r31, r1
126a: 85 2f mov r24, r21
126c: 82 95 swap r24
126e: 8f 70 andi r24, 0x0F ; 15
1270: 3d 53 subi r19, 0x3D ; 61
1272: 33 0f add r19, r19
1274: 33 0f add r19, r19
1276: 38 2b or r19, r24
1278: 30 83 st Z, r19
if(len--) ptrOut[ptr++] = y; else break;
127a: 61 30 cpi r22, 0x01 ; 1
127c: 01 f1 breq .+64 ; 0x12be <Decode64+0xa8>
127e: 91 2f mov r25, r17
1280: 9d 53 subi r25, 0x3D ; 61
1282: 7f 5f subi r23, 0xFF ; 255
1284: fe 01 movw r30, r28
1286: e7 0f add r30, r23
1288: f1 1d adc r31, r1
128a: 71 50 subi r23, 0x01 ; 1
128c: 52 95 swap r21
128e: 50 7f andi r21, 0xF0 ; 240
1290: 89 2f mov r24, r25
1292: 86 95 lsr r24
1294: 86 95 lsr r24
1296: 58 2b or r21, r24
1298: 50 83 st Z, r21
129a: 63 50 subi r22, 0x03 ; 3
if(len--) ptrOut[ptr++] = z; else break;
129c: 6f 3f cpi r22, 0xFF ; 255
129e: 79 f0 breq .+30 ; 0x12be <Decode64+0xa8>
12a0: 7e 5f subi r23, 0xFE ; 254
12a2: fe 01 movw r30, r28
12a4: e7 0f add r30, r23
12a6: f1 1d adc r31, r1
12a8: 92 95 swap r25
12aa: 99 0f add r25, r25
12ac: 99 0f add r25, r25
12ae: 90 7c andi r25, 0xC0 ; 192
12b0: 2d 53 subi r18, 0x3D ; 61
12b2: 92 2b or r25, r18
12b4: 90 83 st Z, r25
12b6: 7f 5f subi r23, 0xFF ; 255
12b8: 66 23 and r22, r22
12ba: 09 f0 breq .+2 ; 0x12be <Decode64+0xa8>
12bc: b5 cf rjmp .-150 ; 0x1228 <Decode64+0x12>
12be: df 91 pop r29
12c0: cf 91 pop r28
12c2: 1f 91 pop r17
12c4: 08 95 ret
 
000012c6 <AddCRC>:
}
 
}
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
#if X3D_SIO == 1
static unsigned char serPacketCounter = 100;
SioTmp = UDR;
if(SioTmp == 0xF5) // Startzeichen
{
serPacketCounter = 0;
}
else
{
if(++serPacketCounter == MotorAdresse) // (1-4)
{
SIO_Sollwert = SioTmp;
SIO_Timeout = 200; // werte für 200ms gültig
}
else
{
if(serPacketCounter > 100) serPacketCounter = 100;
}
}
#else
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
SioTmp = UDR;
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; };
if(CrcOkay) // Datensatz schon verarbeitet
{
//NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
uart_putchar(RxdBuffer[2]);
if (RxdBuffer[2] == 't') // Motortest
{ Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
SIO_Sollwert = MotorTest[MotorAdresse - 1];
SIO_Timeout = 500; // werte für 500ms gültig
}
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
 
#endif
};
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
12c6: dc 01 movw r26, r24
12c8: 20 e0 ldi r18, 0x00 ; 0
12ca: 30 e0 ldi r19, 0x00 ; 0
12cc: 40 e0 ldi r20, 0x00 ; 0
12ce: 50 e0 ldi r21, 0x00 ; 0
12d0: 08 c0 rjmp .+16 ; 0x12e2 <AddCRC+0x1c>
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
12d2: fa 01 movw r30, r20
12d4: ee 54 subi r30, 0x4E ; 78
12d6: fd 4f sbci r31, 0xFD ; 253
12d8: 80 81 ld r24, Z
12da: 28 0f add r18, r24
12dc: 31 1d adc r19, r1
12de: 4f 5f subi r20, 0xFF ; 255
12e0: 5f 4f sbci r21, 0xFF ; 255
12e2: 4a 17 cp r20, r26
12e4: 5b 07 cpc r21, r27
12e6: a9 f7 brne .-22 ; 0x12d2 <AddCRC+0xc>
}
tmpCRC %= 4096;
12e8: 3f 70 andi r19, 0x0F ; 15
SendeBuffer[i++] = '=' + tmpCRC / 64;
12ea: c9 01 movw r24, r18
12ec: 36 e0 ldi r19, 0x06 ; 6
12ee: 96 95 lsr r25
12f0: 87 95 ror r24
12f2: 3a 95 dec r19
12f4: e1 f7 brne .-8 ; 0x12ee <AddCRC+0x28>
12f6: 83 5c subi r24, 0xC3 ; 195
12f8: fd 01 movw r30, r26
12fa: ee 54 subi r30, 0x4E ; 78
12fc: fd 4f sbci r31, 0xFD ; 253
12fe: 80 83 st Z, r24
1300: 11 96 adiw r26, 0x01 ; 1
SendeBuffer[i++] = '=' + tmpCRC % 64;
1302: 2f 73 andi r18, 0x3F ; 63
1304: 23 5c subi r18, 0xC3 ; 195
1306: fd 01 movw r30, r26
1308: ee 54 subi r30, 0x4E ; 78
130a: fd 4f sbci r31, 0xFD ; 253
130c: 20 83 st Z, r18
SendeBuffer[i++] = '\r';
130e: ad 54 subi r26, 0x4D ; 77
1310: bd 4f sbci r27, 0xFD ; 253
1312: 8d e0 ldi r24, 0x0D ; 13
1314: 8c 93 st X, r24
UebertragungAbgeschlossen = 0;
1316: 10 92 6e 00 sts 0x006E, r1
UDR = SendeBuffer[0];
131a: 80 91 b2 02 lds r24, 0x02B2
131e: 8c b9 out 0x0c, r24 ; 12
1320: 08 95 ret
 
00001322 <SendOutData>:
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
1322: 1f 93 push r17
1324: cf 93 push r28
1326: df 93 push r29
1328: ea 01 movw r28, r20
132a: 72 2f mov r23, r18
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
132c: 93 e2 ldi r25, 0x23 ; 35
132e: 90 93 b2 02 sts 0x02B2, r25
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
1332: 60 93 b3 02 sts 0x02B3, r22
SendeBuffer[pt++] = cmd; // Commando
1336: 80 93 b4 02 sts 0x02B4, r24
133a: a3 e0 ldi r26, 0x03 ; 3
133c: b0 e0 ldi r27, 0x00 ; 0
133e: 60 e0 ldi r22, 0x00 ; 0
1340: 4f c0 rjmp .+158 ; 0x13e0 <SendOutData+0xbe>
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
1342: fe 01 movw r30, r28
1344: e6 0f add r30, r22
1346: f1 1d adc r31, r1
1348: 90 81 ld r25, Z
134a: 6f 5f subi r22, 0xFF ; 255
134c: 71 50 subi r23, 0x01 ; 1
if(len) { b = snd[ptr++]; len--;} else b = 0;
134e: 19 f4 brne .+6 ; 0x1356 <SendOutData+0x34>
1350: 10 e0 ldi r17, 0x00 ; 0
1352: 40 e0 ldi r20, 0x00 ; 0
1354: 0f c0 rjmp .+30 ; 0x1374 <SendOutData+0x52>
1356: fe 01 movw r30, r28
1358: e6 0f add r30, r22
135a: f1 1d adc r31, r1
135c: 40 81 ld r20, Z
135e: 6f 5f subi r22, 0xFF ; 255
1360: 71 50 subi r23, 0x01 ; 1
if(len) { c = snd[ptr++]; len--;} else c = 0;
1362: 11 f4 brne .+4 ; 0x1368 <SendOutData+0x46>
1364: 10 e0 ldi r17, 0x00 ; 0
1366: 06 c0 rjmp .+12 ; 0x1374 <SendOutData+0x52>
1368: fe 01 movw r30, r28
136a: e6 0f add r30, r22
136c: f1 1d adc r31, r1
136e: 10 81 ld r17, Z
1370: 6f 5f subi r22, 0xFF ; 255
1372: 71 50 subi r23, 0x01 ; 1
SendeBuffer[pt++] = '=' + (a >> 2);
1374: 89 2f mov r24, r25
1376: 86 95 lsr r24
1378: 86 95 lsr r24
137a: 83 5c subi r24, 0xC3 ; 195
137c: fd 01 movw r30, r26
137e: ee 54 subi r30, 0x4E ; 78
1380: fd 4f sbci r31, 0xFD ; 253
1382: 80 83 st Z, r24
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
1384: 55 27 eor r21, r21
1386: 9a 01 movw r18, r20
1388: 84 e0 ldi r24, 0x04 ; 4
138a: 36 95 lsr r19
138c: 27 95 ror r18
138e: 8a 95 dec r24
1390: e1 f7 brne .-8 ; 0x138a <SendOutData+0x68>
1392: 89 2f mov r24, r25
1394: 99 27 eor r25, r25
1396: 83 70 andi r24, 0x03 ; 3
1398: 90 70 andi r25, 0x00 ; 0
139a: f4 e0 ldi r31, 0x04 ; 4
139c: 88 0f add r24, r24
139e: 99 1f adc r25, r25
13a0: fa 95 dec r31
13a2: e1 f7 brne .-8 ; 0x139c <SendOutData+0x7a>
13a4: 28 2b or r18, r24
13a6: 23 5c subi r18, 0xC3 ; 195
13a8: fd 01 movw r30, r26
13aa: ed 54 subi r30, 0x4D ; 77
13ac: fd 4f sbci r31, 0xFD ; 253
13ae: 20 83 st Z, r18
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
13b0: 81 2f mov r24, r17
13b2: 82 95 swap r24
13b4: 86 95 lsr r24
13b6: 86 95 lsr r24
13b8: 83 70 andi r24, 0x03 ; 3
13ba: 4f 70 andi r20, 0x0F ; 15
13bc: 50 70 andi r21, 0x00 ; 0
13be: 44 0f add r20, r20
13c0: 55 1f adc r21, r21
13c2: 44 0f add r20, r20
13c4: 55 1f adc r21, r21
13c6: 84 2b or r24, r20
13c8: 83 5c subi r24, 0xC3 ; 195
13ca: fd 01 movw r30, r26
13cc: ec 54 subi r30, 0x4C ; 76
13ce: fd 4f sbci r31, 0xFD ; 253
13d0: 80 83 st Z, r24
SendeBuffer[pt++] = '=' + ( c & 0x3f);
13d2: 1f 73 andi r17, 0x3F ; 63
13d4: 13 5c subi r17, 0xC3 ; 195
13d6: fd 01 movw r30, r26
13d8: eb 54 subi r30, 0x4B ; 75
13da: fd 4f sbci r31, 0xFD ; 253
13dc: 10 83 st Z, r17
13de: 14 96 adiw r26, 0x04 ; 4
13e0: 77 23 and r23, r23
13e2: 09 f0 breq .+2 ; 0x13e6 <SendOutData+0xc4>
13e4: ae cf rjmp .-164 ; 0x1342 <SendOutData+0x20>
}
AddCRC(pt);
13e6: cd 01 movw r24, r26
13e8: 6e df rcall .-292 ; 0x12c6 <AddCRC>
13ea: df 91 pop r29
13ec: cf 91 pop r28
13ee: 1f 91 pop r17
13f0: 08 95 ret
 
000013f2 <uart_putchar>:
}
 
 
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
13f2: 1f 93 push r17
13f4: 18 2f mov r17, r24
if (c == '\n')
13f6: 8a 30 cpi r24, 0x0A ; 10
13f8: 11 f4 brne .+4 ; 0x13fe <uart_putchar+0xc>
uart_putchar('\r');
13fa: 8d e0 ldi r24, 0x0D ; 13
13fc: fa df rcall .-12 ; 0x13f2 <uart_putchar>
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
13fe: 5d 9b sbis 0x0b, 5 ; 11
1400: fe cf rjmp .-4 ; 0x13fe <uart_putchar+0xc>
//Ausgabe des Zeichens
UDR = c;
1402: 1c b9 out 0x0c, r17 ; 12
return (0);
}
1404: 80 e0 ldi r24, 0x00 ; 0
1406: 90 e0 ldi r25, 0x00 ; 0
1408: 1f 91 pop r17
140a: 08 95 ret
 
0000140c <__vector_11>:
140c: 1f 92 push r1
140e: 0f 92 push r0
1410: 0f b6 in r0, 0x3f ; 63
1412: 0f 92 push r0
1414: 11 24 eor r1, r1
1416: 2f 93 push r18
1418: 3f 93 push r19
141a: 4f 93 push r20
141c: 5f 93 push r21
141e: 6f 93 push r22
1420: 7f 93 push r23
1422: 8f 93 push r24
1424: 9f 93 push r25
1426: af 93 push r26
1428: bf 93 push r27
142a: cf 93 push r28
142c: df 93 push r29
142e: ef 93 push r30
1430: ff 93 push r31
1432: 8c b1 in r24, 0x0c ; 12
1434: 80 93 9e 00 sts 0x009E, r24
1438: 40 91 a6 00 lds r20, 0x00A6
143c: 44 36 cpi r20, 0x64 ; 100
143e: 10 f0 brcs .+4 ; 0x1444 <__vector_11+0x38>
1440: 10 92 a5 00 sts 0x00A5, r1
1444: 50 91 9e 00 lds r21, 0x009E
1448: 5d 30 cpi r21, 0x0D ; 13
144a: 09 f0 breq .+2 ; 0x144e <__vector_11+0x42>
144c: 64 c0 rjmp .+200 ; 0x1516 <__vector_11+0x10a>
144e: 80 91 a5 00 lds r24, 0x00A5
1452: 82 30 cpi r24, 0x02 ; 2
1454: 09 f0 breq .+2 ; 0x1458 <__vector_11+0x4c>
1456: 5f c0 rjmp .+190 ; 0x1516 <__vector_11+0x10a>
1458: 10 92 a5 00 sts 0x00A5, r1
145c: a4 2f mov r26, r20
145e: bb 27 eor r27, r27
1460: fd 01 movw r30, r26
1462: ea 5e subi r30, 0xEA ; 234
1464: fc 4f sbci r31, 0xFC ; 252
1466: 30 81 ld r19, Z
1468: ed 01 movw r28, r26
146a: c9 5e subi r28, 0xE9 ; 233
146c: dc 4f sbci r29, 0xFC ; 252
146e: 28 81 ld r18, Y
1470: 80 91 a9 00 lds r24, 0x00A9
1474: 90 91 aa 00 lds r25, 0x00AA
1478: 83 1b sub r24, r19
147a: 91 09 sbc r25, r1
147c: 82 1b sub r24, r18
147e: 91 09 sbc r25, r1
1480: 9f 70 andi r25, 0x0F ; 15
1482: 90 93 aa 00 sts 0x00AA, r25
1486: 80 93 a9 00 sts 0x00A9, r24
148a: 9c 01 movw r18, r24
148c: 96 e0 ldi r25, 0x06 ; 6
148e: 36 95 lsr r19
1490: 27 95 ror r18
1492: 9a 95 dec r25
1494: e1 f7 brne .-8 ; 0x148e <__vector_11+0x82>
1496: 23 5c subi r18, 0xC3 ; 195
1498: 20 93 a8 00 sts 0x00A8, r18
149c: 98 2f mov r25, r24
149e: 9f 73 andi r25, 0x3F ; 63
14a0: 93 5c subi r25, 0xC3 ; 195
14a2: 90 93 a7 00 sts 0x00A7, r25
14a6: 80 81 ld r24, Z
14a8: 28 17 cp r18, r24
14aa: 09 f0 breq .+2 ; 0x14ae <__vector_11+0xa2>
14ac: 7c c0 rjmp .+248 ; 0x15a6 <__vector_11+0x19a>
14ae: 88 81 ld r24, Y
14b0: 98 17 cp r25, r24
14b2: 09 f0 breq .+2 ; 0x14b6 <__vector_11+0xaa>
14b4: 78 c0 rjmp .+240 ; 0x15a6 <__vector_11+0x19a>
14b6: 40 93 a4 00 sts 0x00A4, r20
14ba: a8 5e subi r26, 0xE8 ; 232
14bc: bc 4f sbci r27, 0xFC ; 252
14be: 5c 93 st X, r21
14c0: 80 91 1a 03 lds r24, 0x031A
14c4: 82 35 cpi r24, 0x52 ; 82
14c6: 49 f4 brne .+18 ; 0x14da <__vector_11+0xce>
14c8: 88 e1 ldi r24, 0x18 ; 24
14ca: 90 e0 ldi r25, 0x00 ; 0
14cc: 2c e0 ldi r18, 0x0C ; 12
14ce: 0f b6 in r0, 0x3f ; 63
14d0: f8 94 cli
14d2: a8 95 wdr
14d4: 81 bd out 0x21, r24 ; 33
14d6: 0f be out 0x3f, r0 ; 63
14d8: 21 bd out 0x21, r18 ; 33
14da: 80 91 1a 03 lds r24, 0x031A
14de: 89 df rcall .-238 ; 0x13f2 <uart_putchar>
14e0: 80 91 1a 03 lds r24, 0x031A
14e4: 84 37 cpi r24, 0x74 ; 116
14e6: 09 f0 breq .+2 ; 0x14ea <__vector_11+0xde>
14e8: 5e c0 rjmp .+188 ; 0x15a6 <__vector_11+0x19a>
14ea: 20 91 a4 00 lds r18, 0x00A4
14ee: 43 e0 ldi r20, 0x03 ; 3
14f0: 64 e0 ldi r22, 0x04 ; 4
14f2: 80 ea ldi r24, 0xA0 ; 160
14f4: 90 e0 ldi r25, 0x00 ; 0
14f6: 8f de rcall .-738 ; 0x1216 <Decode64>
14f8: e0 91 67 00 lds r30, 0x0067
14fc: ff 27 eor r31, r31
14fe: e1 56 subi r30, 0x61 ; 97
1500: ff 4f sbci r31, 0xFF ; 255
1502: 80 81 ld r24, Z
1504: 80 93 9d 00 sts 0x009D, r24
1508: 84 ef ldi r24, 0xF4 ; 244
150a: 91 e0 ldi r25, 0x01 ; 1
150c: 90 93 84 00 sts 0x0084, r25
1510: 80 93 83 00 sts 0x0083, r24
1514: 48 c0 rjmp .+144 ; 0x15a6 <__vector_11+0x19a>
1516: 80 91 a5 00 lds r24, 0x00A5
151a: 81 30 cpi r24, 0x01 ; 1
151c: d9 f0 breq .+54 ; 0x1554 <__vector_11+0x148>
151e: 81 30 cpi r24, 0x01 ; 1
1520: 18 f0 brcs .+6 ; 0x1528 <__vector_11+0x11c>
1522: 82 30 cpi r24, 0x02 ; 2
1524: f1 f5 brne .+124 ; 0x15a2 <__vector_11+0x196>
1526: 21 c0 rjmp .+66 ; 0x156a <__vector_11+0x15e>
1528: 80 91 9e 00 lds r24, 0x009E
152c: 83 32 cpi r24, 0x23 ; 35
152e: 39 f4 brne .+14 ; 0x153e <__vector_11+0x132>
1530: 80 91 9f 00 lds r24, 0x009F
1534: 88 23 and r24, r24
1536: 19 f4 brne .+6 ; 0x153e <__vector_11+0x132>
1538: 81 e0 ldi r24, 0x01 ; 1
153a: 80 93 a5 00 sts 0x00A5, r24
153e: 80 91 9e 00 lds r24, 0x009E
1542: 80 93 18 03 sts 0x0318, r24
1546: 81 e0 ldi r24, 0x01 ; 1
1548: 80 93 a6 00 sts 0x00A6, r24
154c: 80 91 9e 00 lds r24, 0x009E
1550: 99 27 eor r25, r25
1552: 22 c0 rjmp .+68 ; 0x1598 <__vector_11+0x18c>
1554: 82 e0 ldi r24, 0x02 ; 2
1556: 80 93 a5 00 sts 0x00A5, r24
155a: e4 2f mov r30, r20
155c: ff 27 eor r31, r31
155e: 80 91 9e 00 lds r24, 0x009E
1562: e8 5e subi r30, 0xE8 ; 232
1564: fc 4f sbci r31, 0xFC ; 252
1566: 80 83 st Z, r24
1568: 09 c0 rjmp .+18 ; 0x157c <__vector_11+0x170>
156a: e4 2f mov r30, r20
156c: ff 27 eor r31, r31
156e: 80 91 9e 00 lds r24, 0x009E
1572: e8 5e subi r30, 0xE8 ; 232
1574: fc 4f sbci r31, 0xFC ; 252
1576: 80 83 st Z, r24
1578: 44 36 cpi r20, 0x64 ; 100
157a: 20 f4 brcc .+8 ; 0x1584 <__vector_11+0x178>
157c: 4f 5f subi r20, 0xFF ; 255
157e: 40 93 a6 00 sts 0x00A6, r20
1582: 02 c0 rjmp .+4 ; 0x1588 <__vector_11+0x17c>
1584: 10 92 a5 00 sts 0x00A5, r1
1588: 20 91 9e 00 lds r18, 0x009E
158c: 80 91 a9 00 lds r24, 0x00A9
1590: 90 91 aa 00 lds r25, 0x00AA
1594: 82 0f add r24, r18
1596: 91 1d adc r25, r1
1598: 90 93 aa 00 sts 0x00AA, r25
159c: 80 93 a9 00 sts 0x00A9, r24
15a0: 02 c0 rjmp .+4 ; 0x15a6 <__vector_11+0x19a>
15a2: 10 92 a5 00 sts 0x00A5, r1
15a6: ff 91 pop r31
15a8: ef 91 pop r30
15aa: df 91 pop r29
15ac: cf 91 pop r28
15ae: bf 91 pop r27
15b0: af 91 pop r26
15b2: 9f 91 pop r25
15b4: 8f 91 pop r24
15b6: 7f 91 pop r23
15b8: 6f 91 pop r22
15ba: 5f 91 pop r21
15bc: 4f 91 pop r20
15be: 3f 91 pop r19
15c0: 2f 91 pop r18
15c2: 0f 90 pop r0
15c4: 0f be out 0x3f, r0 ; 63
15c6: 0f 90 pop r0
15c8: 1f 90 pop r1
15ca: 18 95 reti
 
000015cc <WriteProgramData>:
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
15cc: 08 95 ret
 
000015ce <DatenUebertragung>:
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
 
UCSRB |= (1<<RXCIE); // serieller Empfangsinterrupt
 
// TX-Interrupt Freigabe
// UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR= (SYSCLK / (BAUD_RATE * 8L) -1 );
//öffnet einen Kanal für printf (STDOUT)
fdevopen (uart_putchar, NULL);
Debug_Timer = SetDelay(200);
// Version beim Start ausgeben (nicht schön, aber geht... )
uart_putchar ('\n');uart_putchar ('B');uart_putchar ('L');uart_putchar (':');
uart_putchar ('V');uart_putchar (0x30 + VERSION_HAUPTVERSION);uart_putchar ('.');uart_putchar (0x30 + VERSION_NEBENVERSION/10); uart_putchar (0x30 + VERSION_NEBENVERSION%10);
uart_putchar ('\n');uart_putchar ('A');uart_putchar ('D');uart_putchar ('R'); uart_putchar (':'); uart_putchar (0x30 + MotorAdresse);
 
}
 
 
 
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
if((CheckDelay(Debug_Timer) && UebertragungAbgeschlossen)) // im Singlestep-Betrieb in jedem Schtitt senden
15ce: 80 91 16 03 lds r24, 0x0316
15d2: 90 91 17 03 lds r25, 0x0317
15d6: 72 dd rcall .-1308 ; 0x10bc <CheckDelay>
15d8: 88 23 and r24, r24
15da: 91 f0 breq .+36 ; 0x1600 <DatenUebertragung+0x32>
15dc: 80 91 6e 00 lds r24, 0x006E
15e0: 88 23 and r24, r24
15e2: 71 f0 breq .+28 ; 0x1600 <DatenUebertragung+0x32>
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
15e4: 60 91 b1 02 lds r22, 0x02B1
15e8: 22 e2 ldi r18, 0x22 ; 34
15ea: 4c e7 ldi r20, 0x7C ; 124
15ec: 53 e0 ldi r21, 0x03 ; 3
15ee: 84 e4 ldi r24, 0x44 ; 68
15f0: 98 de rcall .-720 ; 0x1322 <SendOutData>
Debug_Timer = SetDelay(50); // Sendeintervall
15f2: 82 e3 ldi r24, 0x32 ; 50
15f4: 90 e0 ldi r25, 0x00 ; 0
15f6: 59 dd rcall .-1358 ; 0x10aa <SetDelay>
15f8: 90 93 17 03 sts 0x0317, r25
15fc: 80 93 16 03 sts 0x0316, r24
1600: 08 95 ret
 
00001602 <UART_Init>:
1602: 88 e1 ldi r24, 0x18 ; 24
1604: 8a b9 out 0x0a, r24 ; 10
1606: 59 9a sbi 0x0b, 1 ; 11
1608: 57 9a sbi 0x0a, 7 ; 10
160a: 80 e1 ldi r24, 0x10 ; 16
160c: 89 b9 out 0x09, r24 ; 9
160e: 60 e0 ldi r22, 0x00 ; 0
1610: 70 e0 ldi r23, 0x00 ; 0
1612: 89 ef ldi r24, 0xF9 ; 249
1614: 99 e0 ldi r25, 0x09 ; 9
1616: 28 d0 rcall .+80 ; 0x1668 <fdevopen>
1618: 88 ec ldi r24, 0xC8 ; 200
161a: 90 e0 ldi r25, 0x00 ; 0
161c: 46 dd rcall .-1396 ; 0x10aa <SetDelay>
161e: 90 93 17 03 sts 0x0317, r25
1622: 80 93 16 03 sts 0x0316, r24
1626: 8a e0 ldi r24, 0x0A ; 10
1628: e4 de rcall .-568 ; 0x13f2 <uart_putchar>
162a: 82 e4 ldi r24, 0x42 ; 66
162c: e2 de rcall .-572 ; 0x13f2 <uart_putchar>
162e: 8c e4 ldi r24, 0x4C ; 76
1630: e0 de rcall .-576 ; 0x13f2 <uart_putchar>
1632: 8a e3 ldi r24, 0x3A ; 58
1634: de de rcall .-580 ; 0x13f2 <uart_putchar>
1636: 86 e5 ldi r24, 0x56 ; 86
1638: dc de rcall .-584 ; 0x13f2 <uart_putchar>
163a: 80 e3 ldi r24, 0x30 ; 48
163c: da de rcall .-588 ; 0x13f2 <uart_putchar>
163e: 8e e2 ldi r24, 0x2E ; 46
1640: d8 de rcall .-592 ; 0x13f2 <uart_putchar>
1642: 83 e3 ldi r24, 0x33 ; 51
1644: d6 de rcall .-596 ; 0x13f2 <uart_putchar>
1646: 87 e3 ldi r24, 0x37 ; 55
1648: d4 de rcall .-600 ; 0x13f2 <uart_putchar>
164a: 8a e0 ldi r24, 0x0A ; 10
164c: d2 de rcall .-604 ; 0x13f2 <uart_putchar>
164e: 81 e4 ldi r24, 0x41 ; 65
1650: d0 de rcall .-608 ; 0x13f2 <uart_putchar>
1652: 84 e4 ldi r24, 0x44 ; 68
1654: ce de rcall .-612 ; 0x13f2 <uart_putchar>
1656: 82 e5 ldi r24, 0x52 ; 82
1658: cc de rcall .-616 ; 0x13f2 <uart_putchar>
165a: 8a e3 ldi r24, 0x3A ; 58
165c: ca de rcall .-620 ; 0x13f2 <uart_putchar>
165e: 80 91 67 00 lds r24, 0x0067
1662: 80 5d subi r24, 0xD0 ; 208
1664: c6 de rcall .-628 ; 0x13f2 <uart_putchar>
1666: 08 95 ret
 
00001668 <fdevopen>:
1668: ef 92 push r14
166a: ff 92 push r15
166c: 0f 93 push r16
166e: 1f 93 push r17
1670: cf 93 push r28
1672: df 93 push r29
1674: 8c 01 movw r16, r24
1676: 7b 01 movw r14, r22
1678: 89 2b or r24, r25
167a: 11 f4 brne .+4 ; 0x1680 <fdevopen+0x18>
167c: 67 2b or r22, r23
167e: c9 f1 breq .+114 ; 0x16f2 <fdevopen+0x8a>
1680: 6e e0 ldi r22, 0x0E ; 14
1682: 70 e0 ldi r23, 0x00 ; 0
1684: 81 e0 ldi r24, 0x01 ; 1
1686: 90 e0 ldi r25, 0x00 ; 0
1688: 3b d0 rcall .+118 ; 0x1700 <calloc>
168a: fc 01 movw r30, r24
168c: 00 97 sbiw r24, 0x00 ; 0
168e: 89 f1 breq .+98 ; 0x16f2 <fdevopen+0x8a>
1690: dc 01 movw r26, r24
1692: 80 e8 ldi r24, 0x80 ; 128
1694: 83 83 std Z+3, r24 ; 0x03
1696: e1 14 cp r14, r1
1698: f1 04 cpc r15, r1
169a: 71 f0 breq .+28 ; 0x16b8 <fdevopen+0x50>
169c: f3 86 std Z+11, r15 ; 0x0b
169e: e2 86 std Z+10, r14 ; 0x0a
16a0: 81 e8 ldi r24, 0x81 ; 129
16a2: 83 83 std Z+3, r24 ; 0x03
16a4: 80 91 9e 03 lds r24, 0x039E
16a8: 90 91 9f 03 lds r25, 0x039F
16ac: 89 2b or r24, r25
16ae: 21 f4 brne .+8 ; 0x16b8 <fdevopen+0x50>
16b0: f0 93 9f 03 sts 0x039F, r31
16b4: e0 93 9e 03 sts 0x039E, r30
16b8: 01 15 cp r16, r1
16ba: 11 05 cpc r17, r1
16bc: e1 f0 breq .+56 ; 0x16f6 <fdevopen+0x8e>
16be: 11 87 std Z+9, r17 ; 0x09
16c0: 00 87 std Z+8, r16 ; 0x08
16c2: 83 81 ldd r24, Z+3 ; 0x03
16c4: 82 60 ori r24, 0x02 ; 2
16c6: 83 83 std Z+3, r24 ; 0x03
16c8: 80 91 a0 03 lds r24, 0x03A0
16cc: 90 91 a1 03 lds r25, 0x03A1
16d0: 89 2b or r24, r25
16d2: 89 f4 brne .+34 ; 0x16f6 <fdevopen+0x8e>
16d4: f0 93 a1 03 sts 0x03A1, r31
16d8: e0 93 a0 03 sts 0x03A0, r30
16dc: 80 91 a2 03 lds r24, 0x03A2
16e0: 90 91 a3 03 lds r25, 0x03A3
16e4: 89 2b or r24, r25
16e6: 39 f4 brne .+14 ; 0x16f6 <fdevopen+0x8e>
16e8: f0 93 a3 03 sts 0x03A3, r31
16ec: e0 93 a2 03 sts 0x03A2, r30
16f0: 02 c0 rjmp .+4 ; 0x16f6 <fdevopen+0x8e>
16f2: a0 e0 ldi r26, 0x00 ; 0
16f4: b0 e0 ldi r27, 0x00 ; 0
16f6: cd 01 movw r24, r26
16f8: e6 e0 ldi r30, 0x06 ; 6
16fa: cd b7 in r28, 0x3d ; 61
16fc: de b7 in r29, 0x3e ; 62
16fe: 68 c1 rjmp .+720 ; 0x19d0 <__epilogue_restores__+0x18>
 
00001700 <calloc>:
1700: 0f 93 push r16
1702: 1f 93 push r17
1704: cf 93 push r28
1706: df 93 push r29
1708: 86 9f mul r24, r22
170a: 80 01 movw r16, r0
170c: 87 9f mul r24, r23
170e: 10 0d add r17, r0
1710: 96 9f mul r25, r22
1712: 10 0d add r17, r0
1714: 11 24 eor r1, r1
1716: c8 01 movw r24, r16
1718: 0d d0 rcall .+26 ; 0x1734 <malloc>
171a: ec 01 movw r28, r24
171c: 00 97 sbiw r24, 0x00 ; 0
171e: 21 f0 breq .+8 ; 0x1728 <calloc+0x28>
1720: a8 01 movw r20, r16
1722: 60 e0 ldi r22, 0x00 ; 0
1724: 70 e0 ldi r23, 0x00 ; 0
1726: ff d0 rcall .+510 ; 0x1926 <memset>
1728: ce 01 movw r24, r28
172a: df 91 pop r29
172c: cf 91 pop r28
172e: 1f 91 pop r17
1730: 0f 91 pop r16
1732: 08 95 ret
 
00001734 <malloc>:
1734: cf 93 push r28
1736: df 93 push r29
1738: ac 01 movw r20, r24
173a: 02 97 sbiw r24, 0x02 ; 2
173c: 10 f4 brcc .+4 ; 0x1742 <malloc+0xe>
173e: 42 e0 ldi r20, 0x02 ; 2
1740: 50 e0 ldi r21, 0x00 ; 0
1742: a0 91 a6 03 lds r26, 0x03A6
1746: b0 91 a7 03 lds r27, 0x03A7
174a: fd 01 movw r30, r26
174c: c0 e0 ldi r28, 0x00 ; 0
174e: d0 e0 ldi r29, 0x00 ; 0
1750: 20 e0 ldi r18, 0x00 ; 0
1752: 30 e0 ldi r19, 0x00 ; 0
1754: 20 c0 rjmp .+64 ; 0x1796 <malloc+0x62>
1756: 80 81 ld r24, Z
1758: 91 81 ldd r25, Z+1 ; 0x01
175a: 84 17 cp r24, r20
175c: 95 07 cpc r25, r21
175e: 69 f4 brne .+26 ; 0x177a <malloc+0x46>
1760: 82 81 ldd r24, Z+2 ; 0x02
1762: 93 81 ldd r25, Z+3 ; 0x03
1764: 20 97 sbiw r28, 0x00 ; 0
1766: 19 f0 breq .+6 ; 0x176e <malloc+0x3a>
1768: 9b 83 std Y+3, r25 ; 0x03
176a: 8a 83 std Y+2, r24 ; 0x02
176c: 04 c0 rjmp .+8 ; 0x1776 <malloc+0x42>
176e: 90 93 a7 03 sts 0x03A7, r25
1772: 80 93 a6 03 sts 0x03A6, r24
1776: cf 01 movw r24, r30
1778: 32 c0 rjmp .+100 ; 0x17de <malloc+0xaa>
177a: 48 17 cp r20, r24
177c: 59 07 cpc r21, r25
177e: 38 f4 brcc .+14 ; 0x178e <malloc+0x5a>
1780: 21 15 cp r18, r1
1782: 31 05 cpc r19, r1
1784: 19 f0 breq .+6 ; 0x178c <malloc+0x58>
1786: 82 17 cp r24, r18
1788: 93 07 cpc r25, r19
178a: 08 f4 brcc .+2 ; 0x178e <malloc+0x5a>
178c: 9c 01 movw r18, r24
178e: ef 01 movw r28, r30
1790: 02 80 ldd r0, Z+2 ; 0x02
1792: f3 81 ldd r31, Z+3 ; 0x03
1794: e0 2d mov r30, r0
1796: 30 97 sbiw r30, 0x00 ; 0
1798: f1 f6 brne .-68 ; 0x1756 <malloc+0x22>
179a: 21 15 cp r18, r1
179c: 31 05 cpc r19, r1
179e: 89 f1 breq .+98 ; 0x1802 <malloc+0xce>
17a0: c9 01 movw r24, r18
17a2: 84 1b sub r24, r20
17a4: 95 0b sbc r25, r21
17a6: 04 97 sbiw r24, 0x04 ; 4
17a8: 08 f4 brcc .+2 ; 0x17ac <malloc+0x78>
17aa: a9 01 movw r20, r18
17ac: e0 e0 ldi r30, 0x00 ; 0
17ae: f0 e0 ldi r31, 0x00 ; 0
17b0: 26 c0 rjmp .+76 ; 0x17fe <malloc+0xca>
17b2: 8d 91 ld r24, X+
17b4: 9c 91 ld r25, X
17b6: 11 97 sbiw r26, 0x01 ; 1
17b8: 82 17 cp r24, r18
17ba: 93 07 cpc r25, r19
17bc: e9 f4 brne .+58 ; 0x17f8 <malloc+0xc4>
17be: 48 17 cp r20, r24
17c0: 59 07 cpc r21, r25
17c2: 79 f4 brne .+30 ; 0x17e2 <malloc+0xae>
17c4: ed 01 movw r28, r26
17c6: 8a 81 ldd r24, Y+2 ; 0x02
17c8: 9b 81 ldd r25, Y+3 ; 0x03
17ca: 30 97 sbiw r30, 0x00 ; 0
17cc: 19 f0 breq .+6 ; 0x17d4 <malloc+0xa0>
17ce: 93 83 std Z+3, r25 ; 0x03
17d0: 82 83 std Z+2, r24 ; 0x02
17d2: 04 c0 rjmp .+8 ; 0x17dc <malloc+0xa8>
17d4: 90 93 a7 03 sts 0x03A7, r25
17d8: 80 93 a6 03 sts 0x03A6, r24
17dc: cd 01 movw r24, r26
17de: 02 96 adiw r24, 0x02 ; 2
17e0: 49 c0 rjmp .+146 ; 0x1874 <malloc+0x140>
17e2: 84 1b sub r24, r20
17e4: 95 0b sbc r25, r21
17e6: fd 01 movw r30, r26
17e8: e8 0f add r30, r24
17ea: f9 1f adc r31, r25
17ec: 41 93 st Z+, r20
17ee: 51 93 st Z+, r21
17f0: 02 97 sbiw r24, 0x02 ; 2
17f2: 8d 93 st X+, r24
17f4: 9c 93 st X, r25
17f6: 3a c0 rjmp .+116 ; 0x186c <malloc+0x138>
17f8: fd 01 movw r30, r26
17fa: a2 81 ldd r26, Z+2 ; 0x02
17fc: b3 81 ldd r27, Z+3 ; 0x03
17fe: 10 97 sbiw r26, 0x00 ; 0
1800: c1 f6 brne .-80 ; 0x17b2 <malloc+0x7e>
1802: 80 91 a4 03 lds r24, 0x03A4
1806: 90 91 a5 03 lds r25, 0x03A5
180a: 89 2b or r24, r25
180c: 41 f4 brne .+16 ; 0x181e <malloc+0xea>
180e: 80 91 71 00 lds r24, 0x0071
1812: 90 91 72 00 lds r25, 0x0072
1816: 90 93 a5 03 sts 0x03A5, r25
181a: 80 93 a4 03 sts 0x03A4, r24
181e: 20 91 73 00 lds r18, 0x0073
1822: 30 91 74 00 lds r19, 0x0074
1826: 21 15 cp r18, r1
1828: 31 05 cpc r19, r1
182a: 41 f4 brne .+16 ; 0x183c <malloc+0x108>
182c: 2d b7 in r18, 0x3d ; 61
182e: 3e b7 in r19, 0x3e ; 62
1830: 80 91 6f 00 lds r24, 0x006F
1834: 90 91 70 00 lds r25, 0x0070
1838: 28 1b sub r18, r24
183a: 39 0b sbc r19, r25
183c: e0 91 a4 03 lds r30, 0x03A4
1840: f0 91 a5 03 lds r31, 0x03A5
1844: 2e 1b sub r18, r30
1846: 3f 0b sbc r19, r31
1848: 24 17 cp r18, r20
184a: 35 07 cpc r19, r21
184c: 88 f0 brcs .+34 ; 0x1870 <malloc+0x13c>
184e: ca 01 movw r24, r20
1850: 02 96 adiw r24, 0x02 ; 2
1852: 28 17 cp r18, r24
1854: 39 07 cpc r19, r25
1856: 60 f0 brcs .+24 ; 0x1870 <malloc+0x13c>
1858: cf 01 movw r24, r30
185a: 84 0f add r24, r20
185c: 95 1f adc r25, r21
185e: 02 96 adiw r24, 0x02 ; 2
1860: 90 93 a5 03 sts 0x03A5, r25
1864: 80 93 a4 03 sts 0x03A4, r24
1868: 41 93 st Z+, r20
186a: 51 93 st Z+, r21
186c: cf 01 movw r24, r30
186e: 02 c0 rjmp .+4 ; 0x1874 <malloc+0x140>
1870: 80 e0 ldi r24, 0x00 ; 0
1872: 90 e0 ldi r25, 0x00 ; 0
1874: df 91 pop r29
1876: cf 91 pop r28
1878: 08 95 ret
 
0000187a <free>:
187a: cf 93 push r28
187c: df 93 push r29
187e: 00 97 sbiw r24, 0x00 ; 0
1880: 09 f4 brne .+2 ; 0x1884 <free+0xa>
1882: 4e c0 rjmp .+156 ; 0x1920 <free+0xa6>
1884: ec 01 movw r28, r24
1886: 22 97 sbiw r28, 0x02 ; 2
1888: 1b 82 std Y+3, r1 ; 0x03
188a: 1a 82 std Y+2, r1 ; 0x02
188c: a0 91 a6 03 lds r26, 0x03A6
1890: b0 91 a7 03 lds r27, 0x03A7
1894: 10 97 sbiw r26, 0x00 ; 0
1896: 11 f1 breq .+68 ; 0x18dc <free+0x62>
1898: 40 e0 ldi r20, 0x00 ; 0
189a: 50 e0 ldi r21, 0x00 ; 0
189c: 01 c0 rjmp .+2 ; 0x18a0 <free+0x26>
189e: dc 01 movw r26, r24
18a0: ac 17 cp r26, r28
18a2: bd 07 cpc r27, r29
18a4: 00 f1 brcs .+64 ; 0x18e6 <free+0x6c>
18a6: bb 83 std Y+3, r27 ; 0x03
18a8: aa 83 std Y+2, r26 ; 0x02
18aa: fe 01 movw r30, r28
18ac: 21 91 ld r18, Z+
18ae: 31 91 ld r19, Z+
18b0: e2 0f add r30, r18
18b2: f3 1f adc r31, r19
18b4: ea 17 cp r30, r26
18b6: fb 07 cpc r31, r27
18b8: 71 f4 brne .+28 ; 0x18d6 <free+0x5c>
18ba: 2e 5f subi r18, 0xFE ; 254
18bc: 3f 4f sbci r19, 0xFF ; 255
18be: 8d 91 ld r24, X+
18c0: 9c 91 ld r25, X
18c2: 11 97 sbiw r26, 0x01 ; 1
18c4: 82 0f add r24, r18
18c6: 93 1f adc r25, r19
18c8: 99 83 std Y+1, r25 ; 0x01
18ca: 88 83 st Y, r24
18cc: fd 01 movw r30, r26
18ce: 82 81 ldd r24, Z+2 ; 0x02
18d0: 93 81 ldd r25, Z+3 ; 0x03
18d2: 9b 83 std Y+3, r25 ; 0x03
18d4: 8a 83 std Y+2, r24 ; 0x02
18d6: 41 15 cp r20, r1
18d8: 51 05 cpc r21, r1
18da: 59 f4 brne .+22 ; 0x18f2 <free+0x78>
18dc: d0 93 a7 03 sts 0x03A7, r29
18e0: c0 93 a6 03 sts 0x03A6, r28
18e4: 1d c0 rjmp .+58 ; 0x1920 <free+0xa6>
18e6: fd 01 movw r30, r26
18e8: 82 81 ldd r24, Z+2 ; 0x02
18ea: 93 81 ldd r25, Z+3 ; 0x03
18ec: ad 01 movw r20, r26
18ee: 00 97 sbiw r24, 0x00 ; 0
18f0: b1 f6 brne .-84 ; 0x189e <free+0x24>
18f2: fa 01 movw r30, r20
18f4: d3 83 std Z+3, r29 ; 0x03
18f6: c2 83 std Z+2, r28 ; 0x02
18f8: 21 91 ld r18, Z+
18fa: 31 91 ld r19, Z+
18fc: e2 0f add r30, r18
18fe: f3 1f adc r31, r19
1900: ec 17 cp r30, r28
1902: fd 07 cpc r31, r29
1904: 69 f4 brne .+26 ; 0x1920 <free+0xa6>
1906: 2e 5f subi r18, 0xFE ; 254
1908: 3f 4f sbci r19, 0xFF ; 255
190a: 88 81 ld r24, Y
190c: 99 81 ldd r25, Y+1 ; 0x01
190e: 82 0f add r24, r18
1910: 93 1f adc r25, r19
1912: fa 01 movw r30, r20
1914: 91 83 std Z+1, r25 ; 0x01
1916: 80 83 st Z, r24
1918: 8a 81 ldd r24, Y+2 ; 0x02
191a: 9b 81 ldd r25, Y+3 ; 0x03
191c: 93 83 std Z+3, r25 ; 0x03
191e: 82 83 std Z+2, r24 ; 0x02
1920: df 91 pop r29
1922: cf 91 pop r28
1924: 08 95 ret
 
00001926 <memset>:
1926: dc 01 movw r26, r24
1928: 01 c0 rjmp .+2 ; 0x192c <memset+0x6>
192a: 6d 93 st X+, r22
192c: 41 50 subi r20, 0x01 ; 1
192e: 50 40 sbci r21, 0x00 ; 0
1930: e0 f7 brcc .-8 ; 0x192a <memset+0x4>
1932: 08 95 ret
 
00001934 <__udivmodqi4>:
1934: 99 1b sub r25, r25
1936: 79 e0 ldi r23, 0x09 ; 9
1938: 04 c0 rjmp .+8 ; 0x1942 <__udivmodqi4_ep>
 
0000193a <__udivmodqi4_loop>:
193a: 99 1f adc r25, r25
193c: 96 17 cp r25, r22
193e: 08 f0 brcs .+2 ; 0x1942 <__udivmodqi4_ep>
1940: 96 1b sub r25, r22
 
00001942 <__udivmodqi4_ep>:
1942: 88 1f adc r24, r24
1944: 7a 95 dec r23
1946: c9 f7 brne .-14 ; 0x193a <__udivmodqi4_loop>
1948: 80 95 com r24
194a: 08 95 ret
 
0000194c <__udivmodhi4>:
194c: aa 1b sub r26, r26
194e: bb 1b sub r27, r27
1950: 51 e1 ldi r21, 0x11 ; 17
1952: 07 c0 rjmp .+14 ; 0x1962 <__udivmodhi4_ep>
 
00001954 <__udivmodhi4_loop>:
1954: aa 1f adc r26, r26
1956: bb 1f adc r27, r27
1958: a6 17 cp r26, r22
195a: b7 07 cpc r27, r23
195c: 10 f0 brcs .+4 ; 0x1962 <__udivmodhi4_ep>
195e: a6 1b sub r26, r22
1960: b7 0b sbc r27, r23
 
00001962 <__udivmodhi4_ep>:
1962: 88 1f adc r24, r24
1964: 99 1f adc r25, r25
1966: 5a 95 dec r21
1968: a9 f7 brne .-22 ; 0x1954 <__udivmodhi4_loop>
196a: 80 95 com r24
196c: 90 95 com r25
196e: bc 01 movw r22, r24
1970: cd 01 movw r24, r26
1972: 08 95 ret
 
00001974 <__udivmodsi4>:
1974: a1 e2 ldi r26, 0x21 ; 33
1976: 1a 2e mov r1, r26
1978: aa 1b sub r26, r26
197a: bb 1b sub r27, r27
197c: fd 01 movw r30, r26
197e: 0d c0 rjmp .+26 ; 0x199a <__udivmodsi4_ep>
 
00001980 <__udivmodsi4_loop>:
1980: aa 1f adc r26, r26
1982: bb 1f adc r27, r27
1984: ee 1f adc r30, r30
1986: ff 1f adc r31, r31
1988: a2 17 cp r26, r18
198a: b3 07 cpc r27, r19
198c: e4 07 cpc r30, r20
198e: f5 07 cpc r31, r21
1990: 20 f0 brcs .+8 ; 0x199a <__udivmodsi4_ep>
1992: a2 1b sub r26, r18
1994: b3 0b sbc r27, r19
1996: e4 0b sbc r30, r20
1998: f5 0b sbc r31, r21
 
0000199a <__udivmodsi4_ep>:
199a: 66 1f adc r22, r22
199c: 77 1f adc r23, r23
199e: 88 1f adc r24, r24
19a0: 99 1f adc r25, r25
19a2: 1a 94 dec r1
19a4: 69 f7 brne .-38 ; 0x1980 <__udivmodsi4_loop>
19a6: 60 95 com r22
19a8: 70 95 com r23
19aa: 80 95 com r24
19ac: 90 95 com r25
19ae: 9b 01 movw r18, r22
19b0: ac 01 movw r20, r24
19b2: bd 01 movw r22, r26
19b4: cf 01 movw r24, r30
19b6: 08 95 ret
 
000019b8 <__epilogue_restores__>:
19b8: 2a 88 ldd r2, Y+18 ; 0x12
19ba: 39 88 ldd r3, Y+17 ; 0x11
19bc: 48 88 ldd r4, Y+16 ; 0x10
19be: 5f 84 ldd r5, Y+15 ; 0x0f
19c0: 6e 84 ldd r6, Y+14 ; 0x0e
19c2: 7d 84 ldd r7, Y+13 ; 0x0d
19c4: 8c 84 ldd r8, Y+12 ; 0x0c
19c6: 9b 84 ldd r9, Y+11 ; 0x0b
19c8: aa 84 ldd r10, Y+10 ; 0x0a
19ca: b9 84 ldd r11, Y+9 ; 0x09
19cc: c8 84 ldd r12, Y+8 ; 0x08
19ce: df 80 ldd r13, Y+7 ; 0x07
19d0: ee 80 ldd r14, Y+6 ; 0x06
19d2: fd 80 ldd r15, Y+5 ; 0x05
19d4: 0c 81 ldd r16, Y+4 ; 0x04
19d6: 1b 81 ldd r17, Y+3 ; 0x03
19d8: aa 81 ldd r26, Y+2 ; 0x02
19da: b9 81 ldd r27, Y+1 ; 0x01
19dc: ce 0f add r28, r30
19de: d1 1d adc r29, r1
19e0: 0f b6 in r0, 0x3f ; 63
19e2: f8 94 cli
19e4: de bf out 0x3e, r29 ; 62
19e6: 0f be out 0x3f, r0 ; 63
19e8: cd bf out 0x3d, r28 ; 61
19ea: ed 01 movw r28, r26
19ec: 08 95 ret
/branches/V0.37_neueStruktur/out/BrushLess-Ctrl_V0_37.map
0,0 → 1,750
Archive member included because of file (symbol)
 
/usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodqi4.o)
src/main.o (__udivmodqi4)
/usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodhi4.o)
src/main.o (__udivmodhi4)
/usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodsi4.o)
src/main.o (__udivmodsi4)
/usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
src/analog.o (__do_copy_data)
/usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
src/analog.o (__do_clear_bss)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
src/uart.o (fdevopen)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o) (__iob)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o) (calloc)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o) (malloc)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(memset.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o) (memset)
/usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_epilogue.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o) (__epilogue_restores__)
 
Allocating common symbols
Common symbol size file
 
MeineSlaveAdresse 0x1 src/uart.o
SendeBuffer 0x64 src/uart.o
DrehZahlTabelle 0x200 src/main.o
Timer0Overflow 0x1 src/timer0.o
Debug_Timer 0x2 src/uart.o
__brkval 0x2 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
RxdBuffer 0x64 src/uart.o
RuheStrom 0x2 src/main.o
DebugOut 0x22 src/uart.o
I2C_RXBuffer 0x1 src/twislave.o
__flp 0x2 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
__iob 0x6 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
 
Discarded input sections
 
.stabstr 0x00000000 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
.stabstr 0x00000000 0x0 src/analog.o
.stabstr 0x00000000 0x0 src/BLMC.o
.stabstr 0x00000000 0x0 src/main.o
.stabstr 0x00000000 0x0 src/PPM_Decode.o
.stabstr 0x00000000 0x0 src/timer0.o
.stabstr 0x00000000 0x0 src/twislave.o
.stabstr 0x00000000 0x0 src/uart.o
.stabstr 0x00000000 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
.stabstr 0x00000000 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
.stabstr 0x00000000 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
.stabstr 0x00000000 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
.stabstr 0x00000000 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(memset.o)
 
Memory Configuration
 
Name Origin Length Attributes
text 0x00000000 0x00002000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
*default* 0x00000000 0xffffffff
 
Linker script and memory map
 
LOAD /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
LOAD src/analog.o
LOAD src/BLMC.o
LOAD src/main.o
LOAD src/PPM_Decode.o
LOAD src/timer0.o
LOAD src/twislave.o
LOAD src/uart.o
LOAD /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libm.a
LOAD /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a
LOAD /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a
LOAD /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a
 
.hash
*(.hash)
 
.dynsym
*(.dynsym)
 
.dynstr
*(.dynstr)
 
.gnu.version
*(.gnu.version)
 
.gnu.version_d
*(.gnu.version_d)
 
.gnu.version_r
*(.gnu.version_r)
 
.rel.init
*(.rel.init)
 
.rela.init
*(.rela.init)
 
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
 
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
 
.rel.fini
*(.rel.fini)
 
.rela.fini
*(.rela.fini)
 
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
 
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
 
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
 
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
 
.rel.ctors
*(.rel.ctors)
 
.rela.ctors
*(.rela.ctors)
 
.rel.dtors
*(.rel.dtors)
 
.rela.dtors
*(.rela.dtors)
 
.rel.got
*(.rel.got)
 
.rela.got
*(.rela.got)
 
.rel.bss
*(.rel.bss)
 
.rela.bss
*(.rela.bss)
 
.rel.plt
*(.rel.plt)
 
.rela.plt
*(.rela.plt)
 
.text 0x00000000 0x19ee
*(.vectors)
.vectors 0x00000000 0x26 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
0x00000000 __vectors
0x00000000 __vector_default
*(.vectors)
0x00000026 __ctors_start = .
*(.ctors)
0x00000026 __ctors_end = .
0x00000026 __dtors_start = .
*(.dtors)
0x00000026 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.progmem.gcc*)
*(.progmem*)
0x00000026 . = ALIGN (0x2)
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
*(.init0)
.init0 0x00000026 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
0x00000026 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x00000026 0xc /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x00000032 0x16 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
0x00000032 __do_copy_data
.init4 0x00000048 0x10 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
0x00000048 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x00000058 0x2 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
*(.init9)
*(.text)
.text 0x0000005a 0x2 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
0x0000005a __vector_12
0x0000005a __bad_interrupt
0x0000005a __vector_6
0x0000005a __vector_3
0x0000005a __vector_7
0x0000005a __vector_2
0x0000005a __vector_15
0x0000005a __vector_14
0x0000005a __vector_10
0x0000005a __vector_18
.text 0x0000005c 0xd0 src/analog.o
0x000000d2 MessAD
0x000000f4 FastADConvert
0x00000068 AdConvert
0x0000005c ADC_Init
.text 0x0000012c 0x2d0 src/BLMC.o
0x00000140 Manuell
0x0000012c __vector_4
0x00000206 __vector_16
.text 0x000003fc 0xa80 src/main.o
0x00000470 SollwertErmittlung
0x000005d4 DelayM
0x00000aca Anwerfen
0x00000442 PWM_Init
0x000005ae RotBlink
0x0000061e MotorTon
0x00000458 Wait
0x00000bb4 main
0x0000046a Delay
0x000003fc SetPWM
0x0000056e DebugAusgaben
.text 0x00000e7c 0x18c src/PPM_Decode.o
0x00000fea __vector_1
0x00000eb8 __vector_5
0x00000e7c InitPPM
0x00000e96 __vector_8
.text 0x00001008 0xfa src/timer0.o
0x000010aa SetDelay
0x000010bc CheckDelay
0x000010d2 Delay_ms
0x00001008 __vector_9
0x00001098 Timer0_Init
.text 0x00001102 0xb2 src/twislave.o
0x00001112 __vector_17
0x00001102 InitIC2_Slave
.text 0x000011b4 0x4b4 src/uart.o
0x000015cc WriteProgramData
0x00001602 UART_Init
0x0000140c __vector_11
0x000011b4 __vector_13
0x000011c8 SendUart
0x000012c6 AddCRC
0x000015ce DatenUebertragung
0x00001216 Decode64
0x00001322 SendOutData
0x000013f2 uart_putchar
.text 0x00001668 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodqi4.o)
.text 0x00001668 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodhi4.o)
.text 0x00001668 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodsi4.o)
.text 0x00001668 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
.text 0x00001668 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
.text 0x00001668 0x98 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
0x00001668 fdevopen
.text 0x00001700 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
.text 0x00001700 0x34 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
0x00001700 calloc
.text 0x00001734 0x1f2 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
0x00001734 malloc
0x0000187a free
.text 0x00001926 0xe /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(memset.o)
0x00001926 memset
.text 0x00001934 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_epilogue.o)
0x00001934 . = ALIGN (0x2)
*(.text.*)
.text.libgcc 0x00001934 0x18 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodqi4.o)
0x00001934 __udivmodqi4
.text.libgcc 0x0000194c 0x28 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodhi4.o)
0x0000194c __udivmodhi4
.text.libgcc 0x00001974 0x44 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodsi4.o)
0x00001974 __udivmodsi4
.text.libgcc 0x000019b8 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
.text.libgcc 0x000019b8 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
.text.libgcc 0x000019b8 0x36 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_epilogue.o)
0x000019b8 __epilogue_restores__
0x000019ee . = ALIGN (0x2)
*(.fini9)
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
*(.fini0)
0x000019ee _etext = .
 
.data 0x00800060 0x16 load address 0x000019ee
0x00800060 PROVIDE (__data_start, .)
*(.data)
.data 0x00800060 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
.data 0x00800060 0x0 src/analog.o
.data 0x00800060 0x1 src/BLMC.o
0x00800060 CompFreigabeTimer
.data 0x00800061 0xd src/main.o
0x00800063 ZeitFuerBerechnungen
0x00800067 MotorAdresse
0x00800065 MaxPWM
0x00800061 KommutierDelay
0x00800066 ZeitZumAdWandeln
0x00800068 PPM_Betrieb
0x00800064 MotorGestoppt
.data 0x0080006e 0x0 src/PPM_Decode.o
.data 0x0080006e 0x0 src/timer0.o
.data 0x0080006e 0x0 src/twislave.o
.data 0x0080006e 0x1 src/uart.o
0x0080006e UebertragungAbgeschlossen
.data 0x0080006f 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodqi4.o)
.data 0x0080006f 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodhi4.o)
.data 0x0080006f 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodsi4.o)
.data 0x0080006f 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
.data 0x0080006f 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
.data 0x0080006f 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
.data 0x0080006f 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
.data 0x0080006f 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
.data 0x0080006f 0x6 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
0x00800071 __malloc_heap_start
0x00800073 __malloc_heap_end
0x0080006f __malloc_margin
.data 0x00800075 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(memset.o)
.data 0x00800075 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_epilogue.o)
*(.data*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.d*)
0x00800076 . = ALIGN (0x2)
*fill* 0x00800075 0x1 00
0x00800076 _edata = .
0x00800076 PROVIDE (__data_end, .)
 
.bss 0x00800076 0x332
0x00800076 PROVIDE (__bss_start, .)
*(.bss)
.bss 0x00800076 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
.bss 0x00800076 0x0 src/analog.o
.bss 0x00800076 0x3 src/BLMC.o
0x00800078 CompInterruptFreigabe
0x00800077 ShadowTCCR1A
0x00800076 Phase
.bss 0x00800079 0x17 src/main.o
0x00800087 IstDrehzahl
0x00800081 I2C_Timeout
0x0080007d Strom_max
0x0080007b Strom
0x00800089 MotorAnwerfen
0x00800085 SollDrehzahl
0x0080007f Drehzahl
0x00800083 SIO_Timeout
0x00800079 PWM
0x0080007e Mittelstrom
0x0080008a CntKommutierungen
0x0080008c SIO_Drehzahl
.bss 0x00800090 0x9 src/PPM_Decode.o
0x00800092 Timer1Overflow
0x00800094 anz_ppm_werte
0x00800093 PPM_Timeout
0x00800090 PPM_Signal
.bss 0x00800099 0x3 src/timer0.o
0x00800099 CountMilliseconds
.bss 0x0080009c 0x1 src/twislave.o
0x0080009c Byte_Counter
.bss 0x0080009d 0x10 src/uart.o
0x0080009e SioTmp
0x0080009d SIO_Sollwert
0x008000a0 MotorTest
0x0080009f NeuerDatensatzEmpfangen
0x008000a4 AnzahlEmpfangsBytes
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodqi4.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodhi4.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodsi4.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(memset.o)
.bss 0x008000ad 0x0 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_epilogue.o)
*(.bss*)
*(COMMON)
COMMON 0x008000ad 0x202 src/main.o
0x008000ad DrehZahlTabelle
0x008002ad RuheStrom
COMMON 0x008002af 0x1 src/timer0.o
0x008002af Timer0Overflow
COMMON 0x008002b0 0x1 src/twislave.o
0x008002b0 I2C_RXBuffer
COMMON 0x008002b1 0xed src/uart.o
0x008002b1 MeineSlaveAdresse
0x008002b2 SendeBuffer
0x00800316 Debug_Timer
0x00800318 RxdBuffer
0x0080037c DebugOut
COMMON 0x0080039e 0x6 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
0x0080039e __iob
COMMON 0x008003a4 0x4 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
0x008003a4 __brkval
0x008003a6 __flp
0x008003a8 PROVIDE (__bss_end, .)
0x000019ee __data_load_start = LOADADDR (.data)
0x00001a04 __data_load_end = (__data_load_start + SIZEOF (.data))
 
.noinit 0x008003a8 0x0
0x008003a8 PROVIDE (__noinit_start, .)
*(.noinit*)
0x008003a8 PROVIDE (__noinit_end, .)
0x008003a8 _end = .
0x008003a8 PROVIDE (__heap_start, .)
 
.eeprom 0x00810000 0x0
*(.eeprom*)
0x00810000 __eeprom_end = .
 
.stab 0x00000000 0x45d8
*(.stab)
.stab 0x00000000 0x36c /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
.stab 0x0000036c 0x714 src/analog.o
0x720 (size before relaxing)
.stab 0x00000a80 0x594 src/BLMC.o
0x870 (size before relaxing)
.stab 0x00001014 0x13a4 src/main.o
0x1680 (size before relaxing)
.stab 0x000023b8 0x3c0 src/PPM_Decode.o
0x69c (size before relaxing)
.stab 0x00002778 0x3d8 src/timer0.o
0x6b4 (size before relaxing)
.stab 0x00002b50 0x2e8 src/twislave.o
0x5c4 (size before relaxing)
.stab 0x00002e38 0xa98 src/uart.o
0xd74 (size before relaxing)
.stab 0x000038d0 0x498 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
0x4a4 (size before relaxing)
.stab 0x00003d68 0x12c /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
0x30c (size before relaxing)
.stab 0x00003e94 0x1bc /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
0x1f8 (size before relaxing)
.stab 0x00004050 0x51c /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
0x6fc (size before relaxing)
.stab 0x0000456c 0x6c /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(memset.o)
0x78 (size before relaxing)
 
.stabstr 0x00000000 0x1ed5
*(.stabstr)
.stabstr 0x00000000 0x1ed5 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
 
.stab.excl
*(.stab.excl)
 
.stab.exclstr
*(.stab.exclstr)
 
.stab.index
*(.stab.index)
 
.stab.indexstr
*(.stab.indexstr)
 
.comment
*(.comment)
 
.debug
*(.debug)
 
.line
*(.line)
 
.debug_srcinfo
*(.debug_srcinfo)
 
.debug_sfnames
*(.debug_sfnames)
 
.debug_aranges
*(.debug_aranges)
 
.debug_pubnames
*(.debug_pubnames)
 
.debug_info
*(.debug_info)
*(.gnu.linkonce.wi.*)
 
.debug_abbrev
*(.debug_abbrev)
 
.debug_line
*(.debug_line)
 
.debug_frame
*(.debug_frame)
 
.debug_str
*(.debug_str)
 
.debug_loc
*(.debug_loc)
 
.debug_macinfo
*(.debug_macinfo)
OUTPUT(BrushLess-Ctrl_V0_37.elf elf32-avr)
 
Cross Reference Table
 
Symbol File
ADC_Init src/analog.o
AdConvert src/analog.o
src/main.o
src/BLMC.o
AddCRC src/uart.o
Anwerfen src/main.o
AnzahlEmpfangsBytes src/uart.o
Byte_Counter src/twislave.o
CheckDelay src/timer0.o
src/uart.o
src/main.o
CntKommutierungen src/main.o
src/BLMC.o
CompFreigabeTimer src/BLMC.o
CompInterruptFreigabe src/BLMC.o
src/main.o
CountMilliseconds src/timer0.o
DatenUebertragung src/uart.o
src/main.o
DebugAusgaben src/main.o
DebugOut src/uart.o
src/main.o
Debug_Timer src/uart.o
Decode64 src/uart.o
Delay src/main.o
DelayM src/main.o
Delay_ms src/timer0.o
src/main.o
DrehZahlTabelle src/main.o
Drehzahl src/main.o
FastADConvert src/analog.o
src/main.o
I2C_RXBuffer src/twislave.o
src/main.o
I2C_Timeout src/main.o
src/twislave.o
src/timer0.o
InitIC2_Slave src/twislave.o
src/main.o
InitPPM src/PPM_Decode.o
src/main.o
IstDrehzahl src/main.o
KommutierDelay src/main.o
Manuell src/BLMC.o
src/main.o
MaxPWM src/main.o
src/twislave.o
MeineSlaveAdresse src/uart.o
MessAD src/analog.o
src/main.o
Mittelstrom src/main.o
src/twislave.o
MotorAdresse src/main.o
src/uart.o
src/twislave.o
MotorAnwerfen src/main.o
MotorGestoppt src/main.o
MotorTest src/uart.o
MotorTon src/main.o
NeuerDatensatzEmpfangen src/uart.o
PPM_Betrieb src/main.o
PPM_Signal src/PPM_Decode.o
src/main.o
PPM_Timeout src/PPM_Decode.o
src/timer0.o
src/main.o
PWM src/main.o
PWM_Init src/main.o
Phase src/BLMC.o
src/main.o
RotBlink src/main.o
RuheStrom src/main.o
RxdBuffer src/uart.o
SIO_Drehzahl src/main.o
SIO_Sollwert src/uart.o
src/main.o
SIO_Timeout src/main.o
src/uart.o
src/timer0.o
SendOutData src/uart.o
SendUart src/uart.o
src/main.o
SendeBuffer src/uart.o
SetDelay src/timer0.o
src/uart.o
src/main.o
SetPWM src/main.o
ShadowTCCR1A src/BLMC.o
SioTmp src/uart.o
SollDrehzahl src/main.o
SollwertErmittlung src/main.o
Strom src/main.o
src/analog.o
Strom_max src/main.o
src/analog.o
Timer0Overflow src/timer0.o
Timer0_Init src/timer0.o
src/main.o
Timer1Overflow src/PPM_Decode.o
UART_Init src/uart.o
src/main.o
UebertragungAbgeschlossen src/uart.o
src/main.o
Wait src/main.o
WriteProgramData src/uart.o
ZeitFuerBerechnungen src/main.o
ZeitZumAdWandeln src/main.o
src/PPM_Decode.o
src/BLMC.o
__bad_interrupt /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__brkval /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
__bss_end /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
__bss_start /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
__data_end /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
__data_load_start /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
__data_start /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
__do_clear_bss /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_clear_bss.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
src/uart.o
src/twislave.o
src/timer0.o
src/PPM_Decode.o
src/main.o
src/BLMC.o
src/analog.o
__do_copy_data /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_copy_data.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
src/uart.o
src/twislave.o
src/timer0.o
src/PPM_Decode.o
src/main.o
src/BLMC.o
src/analog.o
__epilogue_restores__ /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_epilogue.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
__flp /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
__heap_end /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
__heap_start /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
__init /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__iob /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(iob.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
__malloc_heap_end /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
__malloc_heap_start /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
__malloc_margin /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
__stack /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
src/main.o
__udivmodhi4 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodhi4.o)
src/main.o
__udivmodqi4 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodqi4.o)
src/main.o
__udivmodsi4 /usr/lib/gcc/avr/4.2.1/avr4/libgcc.a(_udivmodsi4.o)
src/main.o
__vector_1 src/PPM_Decode.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_10 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_11 src/uart.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_12 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_13 src/uart.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_14 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_15 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_16 src/BLMC.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_17 src/twislave.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_18 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_2 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_3 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_4 src/BLMC.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_5 src/PPM_Decode.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_6 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_7 /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_8 src/PPM_Decode.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_9 src/timer0.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vector_default /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
__vectors /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
anz_ppm_werte src/PPM_Decode.o
src/timer0.o
src/main.o
calloc /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
fdevopen /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(fdevopen.o)
src/uart.o
free /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
main src/main.o
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/crtm8.o
malloc /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(malloc.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
memset /usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(memset.o)
/usr/lib/gcc/avr/4.2.1/../../../../avr/lib/avr4/libc.a(calloc.o)
uart_putchar src/uart.o
src/main.o
/branches/V0.37_neueStruktur/out/BrushLess-Ctrl_V0_37.sym
0,0 → 1,206
00000000 W __heap_end
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 W __vector_default
00000000 T __vectors
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000026 T __ctors_end
00000026 T __ctors_start
00000026 T __dtors_end
00000026 T __dtors_start
00000026 W __init
00000032 T __do_copy_data
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003e t .do_copy_data_loop
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
00000042 t .do_copy_data_start
00000048 T __do_clear_bss
00000050 t .do_clear_bss_loop
00000052 t .do_clear_bss_start
0000005a T __bad_interrupt
0000005a W __vector_10
0000005a W __vector_12
0000005a W __vector_14
0000005a W __vector_15
0000005a W __vector_18
0000005a W __vector_2
0000005a W __vector_3
0000005a W __vector_6
0000005a W __vector_7
0000005c T ADC_Init
00000068 T AdConvert
000000d2 T MessAD
000000f4 T FastADConvert
0000012c T __vector_4
00000140 T Manuell
00000206 T __vector_16
000003fc T SetPWM
00000442 T PWM_Init
00000458 T Wait
0000045f W __stack
0000046a T Delay
00000470 T SollwertErmittlung
0000056e T DebugAusgaben
000005ae T RotBlink
000005d4 T DelayM
0000061e T MotorTon
00000aca T Anwerfen
00000bb4 T main
00000e7c T InitPPM
00000e96 T __vector_8
00000eb8 T __vector_5
00000fea T __vector_1
00001008 T __vector_9
00001098 T Timer0_Init
000010aa T SetDelay
000010bc T CheckDelay
000010d2 T Delay_ms
00001102 T InitIC2_Slave
00001112 T __vector_17
000011b4 T __vector_13
000011c8 T SendUart
00001216 T Decode64
000012c6 T AddCRC
00001322 T SendOutData
000013f2 T uart_putchar
0000140c T __vector_11
000015cc T WriteProgramData
000015ce T DatenUebertragung
00001602 T UART_Init
00001668 T fdevopen
00001700 T calloc
00001734 T malloc
0000187a T free
00001926 T memset
00001934 T __udivmodqi4
0000193a t __udivmodqi4_loop
00001942 t __udivmodqi4_ep
0000194c T __udivmodhi4
00001954 t __udivmodhi4_loop
00001962 t __udivmodhi4_ep
00001974 T __udivmodsi4
00001980 t __udivmodsi4_loop
0000199a t __udivmodsi4_ep
000019b8 T __epilogue_restores__
000019ee A __data_load_start
000019ee T _etext
00001a04 A __data_load_end
00800060 D CompFreigabeTimer
00800060 D __data_start
00800061 D KommutierDelay
00800063 D ZeitFuerBerechnungen
00800064 D MotorGestoppt
00800065 D MaxPWM
00800066 D ZeitZumAdWandeln
00800067 D MotorAdresse
00800068 D PPM_Betrieb
00800069 d C.8.2210
0080006e D UebertragungAbgeschlossen
0080006f D __malloc_margin
00800071 D __malloc_heap_start
00800073 D __malloc_heap_end
00800076 B __bss_start
00800076 D __data_end
00800076 D _edata
00800076 B Phase
00800077 B ShadowTCCR1A
00800078 B CompInterruptFreigabe
00800079 B PWM
0080007b B Strom
0080007d B Strom_max
0080007e B Mittelstrom
0080007f B Drehzahl
00800081 B I2C_Timeout
00800083 B SIO_Timeout
00800085 B SollDrehzahl
00800087 B IstDrehzahl
00800089 B MotorAnwerfen
0080008a B CntKommutierungen
0080008c B SIO_Drehzahl
0080008e b sollwert.2390
00800090 B PPM_Signal
00800092 B Timer1Overflow
00800093 B PPM_Timeout
00800094 B anz_ppm_werte
00800095 b ppm.2080
00800097 b tim_alt.2079
00800099 B CountMilliseconds
0080009b b cnt.2066
0080009c B Byte_Counter
0080009d B SIO_Sollwert
0080009e B SioTmp
0080009f B NeuerDatensatzEmpfangen
008000a0 B MotorTest
008000a4 B AnzahlEmpfangsBytes
008000a5 b UartState.2138
008000a6 b buf_ptr.2137
008000a7 b crc2.2136
008000a8 b crc1.2135
008000a9 b crc.2134
008000ab b ptr.2069
008000ad B DrehZahlTabelle
008002ad B RuheStrom
008002af B Timer0Overflow
008002b0 B I2C_RXBuffer
008002b1 B MeineSlaveAdresse
008002b2 B SendeBuffer
00800316 B Debug_Timer
00800318 B RxdBuffer
0080037c B DebugOut
0080039e B __iob
008003a4 B __brkval
008003a6 B __flp
008003a8 B __bss_end
008003a8 A _end
008003a8 A __heap_start
00810000 A __eeprom_end
/branches/V0.37_neueStruktur/out/PPM_Decode.lst
0,0 → 1,367
1 .file "PPM_Decode.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
11 .text
12 .Ltext0:
100 .global InitPPM
102 InitPPM:
103 .stabd 46,0,0
1:src/PPM_Decode.c **** /*############################################################################
2:src/PPM_Decode.c **** + Regler für Brushless-Motoren
3:src/PPM_Decode.c **** + ATMEGA8 mit 8MHz
4:src/PPM_Decode.c **** + (c) 01.2007 Holger Buss
5:src/PPM_Decode.c **** + Nur für den privaten Gebrauch
6:src/PPM_Decode.c **** + Keine Garantie auf Fehlerfreiheit
7:src/PPM_Decode.c **** + Kommerzielle Nutzung nur mit meiner Zustimmung
8:src/PPM_Decode.c **** + Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
9:src/PPM_Decode.c **** + www.mikrocontroller.com
10:src/PPM_Decode.c **** ############################################################################*/
11:src/PPM_Decode.c **** #include "main.h"
12:src/PPM_Decode.c **** volatile unsigned int PPM_Signal = 0;
13:src/PPM_Decode.c **** volatile unsigned char Timer1Overflow = 0;
14:src/PPM_Decode.c **** volatile unsigned char PPM_Timeout = 0, anz_ppm_werte = 0; // Ungültig, wenn Null
15:src/PPM_Decode.c ****
16:src/PPM_Decode.c **** //############################################################################
17:src/PPM_Decode.c **** //
18:src/PPM_Decode.c **** void InitPPM(void)
19:src/PPM_Decode.c **** //############################################################################
20:src/PPM_Decode.c **** {
105 .LM0:
106 .LFBB1:
107 /* prologue: frame size=0 */
108 /* prologue end (size=0) */
21:src/PPM_Decode.c **** TCCR1B |= (1<<ICES1)|(1<<ICNC1);
110 .LM1:
111 0000 8EB5 in r24,78-0x20
112 0002 806C ori r24,lo8(-64)
113 0004 8EBD out 78-0x20,r24
22:src/PPM_Decode.c **** ICP_POS_FLANKE;
115 .LM2:
116 0006 8EB5 in r24,78-0x20
117 0008 8064 ori r24,lo8(64)
118 000a 8EBD out 78-0x20,r24
23:src/PPM_Decode.c **** ICP_INT_ENABLE;
120 .LM3:
121 000c 89B7 in r24,89-0x20
122 000e 8062 ori r24,lo8(32)
123 0010 89BF out 89-0x20,r24
24:src/PPM_Decode.c **** TIMER1_INT_ENABLE;
125 .LM4:
126 0012 89B7 in r24,89-0x20
127 0014 8460 ori r24,lo8(4)
128 0016 89BF out 89-0x20,r24
129 /* epilogue: frame size=0 */
130 0018 0895 ret
131 /* epilogue end (size=1) */
132 /* function InitPPM size 13 (12) */
134 .Lscope1:
136 .stabd 78,0,0
138 .global __vector_8
140 __vector_8:
141 .stabd 46,0,0
25:src/PPM_Decode.c **** }
26:src/PPM_Decode.c ****
27:src/PPM_Decode.c **** //############################################################################
28:src/PPM_Decode.c **** //
29:src/PPM_Decode.c **** SIGNAL(SIG_OVERFLOW1)
30:src/PPM_Decode.c **** //############################################################################
31:src/PPM_Decode.c **** {
143 .LM5:
144 .LFBB2:
145 /* prologue: frame size=0 */
146 001a 1F92 push __zero_reg__
147 001c 0F92 push __tmp_reg__
148 001e 0FB6 in __tmp_reg__,__SREG__
149 0020 0F92 push __tmp_reg__
150 0022 1124 clr __zero_reg__
151 0024 8F93 push r24
152 /* prologue end (size=6) */
32:src/PPM_Decode.c **** Timer1Overflow++;
154 .LM6:
155 0026 8091 0000 lds r24,Timer1Overflow
156 002a 8F5F subi r24,lo8(-(1))
157 002c 8093 0000 sts Timer1Overflow,r24
158 /* epilogue: frame size=0 */
159 0030 8F91 pop r24
160 0032 0F90 pop __tmp_reg__
161 0034 0FBE out __SREG__,__tmp_reg__
162 0036 0F90 pop __tmp_reg__
163 0038 1F90 pop __zero_reg__
164 003a 1895 reti
165 /* epilogue end (size=6) */
166 /* function __vector_8 size 17 (5) */
168 .Lscope2:
170 .stabd 78,0,0
172 .global __vector_5
174 __vector_5:
175 .stabd 46,0,0
33:src/PPM_Decode.c **** }
34:src/PPM_Decode.c ****
35:src/PPM_Decode.c **** //############################################################################
36:src/PPM_Decode.c **** //
37:src/PPM_Decode.c **** SIGNAL(SIG_INPUT_CAPTURE1)
38:src/PPM_Decode.c **** //############################################################################
39:src/PPM_Decode.c **** {
177 .LM7:
178 .LFBB3:
179 /* prologue: frame size=0 */
180 003c 1F92 push __zero_reg__
181 003e 0F92 push __tmp_reg__
182 0040 0FB6 in __tmp_reg__,__SREG__
183 0042 0F92 push __tmp_reg__
184 0044 1124 clr __zero_reg__
185 0046 2F93 push r18
186 0048 3F93 push r19
187 004a 4F93 push r20
188 004c 5F93 push r21
189 004e 8F93 push r24
190 0050 9F93 push r25
191 /* prologue end (size=11) */
40:src/PPM_Decode.c **** static unsigned int tim_alt;
41:src/PPM_Decode.c **** static unsigned int ppm;
42:src/PPM_Decode.c **** if(TCCR1B & (1<<ICES1)) // Positive Flanke
193 .LM8:
194 0052 0EB4 in __tmp_reg__,78-0x20
195 0054 06FE sbrs __tmp_reg__,6
196 0056 00C0 rjmp .L6
43:src/PPM_Decode.c **** {
44:src/PPM_Decode.c **** Timer1Overflow = 0;
198 .LM9:
199 0058 1092 0000 sts Timer1Overflow,__zero_reg__
45:src/PPM_Decode.c **** tim_alt = ICR1;
201 .LM10:
202 005c 86B5 in r24,70-0x20
203 005e 97B5 in r25,(70)+1-0x20
204 0060 9093 0000 sts (tim_alt.2079)+1,r25
205 0064 8093 0000 sts tim_alt.2079,r24
46:src/PPM_Decode.c **** ICP_NEG_FLANKE;
207 .LM11:
208 0068 8EB5 in r24,78-0x20
209 006a 8F7B andi r24,lo8(-65)
210 006c 8EBD out 78-0x20,r24
47:src/PPM_Decode.c **** PPM_Timeout = 100;
212 .LM12:
213 006e 84E6 ldi r24,lo8(100)
214 0070 8093 0000 sts PPM_Timeout,r24
215 0074 00C0 rjmp .L17
216 .L6:
48:src/PPM_Decode.c **** }
49:src/PPM_Decode.c **** else // Negative Flanke
50:src/PPM_Decode.c **** {
51:src/PPM_Decode.c **** ICP_POS_FLANKE;
218 .LM13:
219 0076 8EB5 in r24,78-0x20
220 0078 8064 ori r24,lo8(64)
221 007a 8EBD out 78-0x20,r24
52:src/PPM_Decode.c **** #ifdef _32KHZ
53:src/PPM_Decode.c **** ppm = (ICR1 - tim_alt + (int) Timer1Overflow * 256) / 32;
54:src/PPM_Decode.c **** #endif
55:src/PPM_Decode.c **** #ifdef _16KHZ
56:src/PPM_Decode.c **** ppm = (ICR1 - tim_alt + (int) Timer1Overflow * 512) / 32;
223 .LM14:
224 007c 86B5 in r24,70-0x20
225 007e 97B5 in r25,(70)+1-0x20
226 0080 2091 0000 lds r18,Timer1Overflow
227 0084 4091 0000 lds r20,tim_alt.2079
228 0088 5091 0000 lds r21,(tim_alt.2079)+1
229 008c 841B sub r24,r20
230 008e 950B sbc r25,r21
231 0090 3327 clr r19
232 0092 322F mov r19,r18
233 0094 2227 clr r18
234 0096 330F lsl r19
235 0098 820F add r24,r18
236 009a 931F adc r25,r19
237 009c 6894 set
238 009e 14F8 bld __zero_reg__,5-1
239 00a0 9695 1: lsr r25
240 00a2 8795 ror r24
241 00a4 1694 lsr __zero_reg__
242 00a6 01F4 brne 1b
243 00a8 9093 0000 sts (ppm.2080)+1,r25
244 00ac 8093 0000 sts ppm.2080,r24
57:src/PPM_Decode.c **** #endif
58:src/PPM_Decode.c **** if(ppm < 280) ppm = 280;
246 .LM15:
247 00b0 8851 subi r24,lo8(280)
248 00b2 9140 sbci r25,hi8(280)
249 00b4 00F4 brsh .L9
250 00b6 88E1 ldi r24,lo8(280)
251 00b8 91E0 ldi r25,hi8(280)
252 00ba 9093 0000 sts (ppm.2080)+1,r25
253 00be 8093 0000 sts ppm.2080,r24
254 .L9:
59:src/PPM_Decode.c **** ppm -= 280;
256 .LM16:
257 00c2 4091 0000 lds r20,ppm.2080
258 00c6 5091 0000 lds r21,(ppm.2080)+1
259 00ca 4851 subi r20,lo8(-(-280))
260 00cc 5140 sbci r21,hi8(-(-280))
60:src/PPM_Decode.c **** if(PPM_Signal < ppm) PPM_Signal++;
262 .LM17:
263 00ce 8091 0000 lds r24,PPM_Signal
264 00d2 9091 0000 lds r25,(PPM_Signal)+1
265 00d6 8417 cp r24,r20
266 00d8 9507 cpc r25,r21
267 00da 00F4 brsh .L11
268 00dc 8091 0000 lds r24,PPM_Signal
269 00e0 9091 0000 lds r25,(PPM_Signal)+1
270 00e4 0196 adiw r24,1
271 00e6 00C0 rjmp .L18
272 .L11:
61:src/PPM_Decode.c **** else if(PPM_Signal > ppm) PPM_Signal--;
274 .LM18:
275 00e8 8091 0000 lds r24,PPM_Signal
276 00ec 9091 0000 lds r25,(PPM_Signal)+1
277 00f0 4817 cp r20,r24
278 00f2 5907 cpc r21,r25
279 00f4 00F4 brsh .L13
280 00f6 8091 0000 lds r24,PPM_Signal
281 00fa 9091 0000 lds r25,(PPM_Signal)+1
282 00fe 0197 sbiw r24,1
283 .L18:
284 0100 9093 0000 sts (PPM_Signal)+1,r25
285 0104 8093 0000 sts PPM_Signal,r24
286 .L13:
62:src/PPM_Decode.c **** if(FILTER_PPM) ppm = (PPM_Signal * FILTER_PPM + ppm) / (FILTER_PPM + 1); // Filtern
288 .LM19:
289 0108 8091 0000 lds r24,PPM_Signal
290 010c 9091 0000 lds r25,(PPM_Signal)+1
291 0110 9C01 movw r18,r24
292 0112 220F lsl r18
293 0114 331F rol r19
294 0116 220F lsl r18
295 0118 331F rol r19
296 011a 220F lsl r18
297 011c 331F rol r19
298 011e 281B sub r18,r24
299 0120 390B sbc r19,r25
300 0122 240F add r18,r20
301 0124 351F adc r19,r21
302 0126 83E0 ldi r24,3
303 0128 3695 1: lsr r19
304 012a 2795 ror r18
305 012c 8A95 dec r24
306 012e 01F4 brne 1b
307 0130 3093 0000 sts (ppm.2080)+1,r19
308 0134 2093 0000 sts ppm.2080,r18
63:src/PPM_Decode.c **** PPM_Signal = ppm;
310 .LM20:
311 0138 3093 0000 sts (PPM_Signal)+1,r19
312 013c 2093 0000 sts PPM_Signal,r18
64:src/PPM_Decode.c **** if(anz_ppm_werte < 255) anz_ppm_werte++;
314 .LM21:
315 0140 8091 0000 lds r24,anz_ppm_werte
316 0144 8F3F cpi r24,lo8(-1)
317 0146 01F0 breq .L15
318 0148 8091 0000 lds r24,anz_ppm_werte
319 014c 8F5F subi r24,lo8(-(1))
320 014e 8093 0000 sts anz_ppm_werte,r24
321 .L15:
65:src/PPM_Decode.c **** ZeitZumAdWandeln = 1;
323 .LM22:
324 0152 81E0 ldi r24,lo8(1)
325 0154 8093 0000 sts ZeitZumAdWandeln,r24
326 .L17:
327 /* epilogue: frame size=0 */
328 0158 9F91 pop r25
329 015a 8F91 pop r24
330 015c 5F91 pop r21
331 015e 4F91 pop r20
332 0160 3F91 pop r19
333 0162 2F91 pop r18
334 0164 0F90 pop __tmp_reg__
335 0166 0FBE out __SREG__,__tmp_reg__
336 0168 0F90 pop __tmp_reg__
337 016a 1F90 pop __zero_reg__
338 016c 1895 reti
339 /* epilogue end (size=11) */
340 /* function __vector_5 size 154 (132) */
346 .Lscope3:
348 .stabd 78,0,0
350 .global __vector_1
352 __vector_1:
353 .stabd 46,0,0
66:src/PPM_Decode.c **** }
67:src/PPM_Decode.c **** }
68:src/PPM_Decode.c ****
69:src/PPM_Decode.c **** //############################################################################
70:src/PPM_Decode.c **** //
71:src/PPM_Decode.c **** SIGNAL(SIG_INTERRUPT0)
72:src/PPM_Decode.c **** //############################################################################
73:src/PPM_Decode.c **** {
355 .LM23:
356 .LFBB4:
357 /* prologue: frame size=0 */
358 016e 1F92 push __zero_reg__
359 0170 0F92 push __tmp_reg__
360 0172 0FB6 in __tmp_reg__,__SREG__
361 0174 0F92 push __tmp_reg__
362 0176 1124 clr __zero_reg__
363 0178 8F93 push r24
364 /* prologue end (size=6) */
74:src/PPM_Decode.c **** CLR_INT0_FLAG; // IntFlag Loeschen
366 .LM24:
367 017a 8AB7 in r24,90-0x20
368 017c 8F7B andi r24,lo8(-65)
369 017e 8ABF out 90-0x20,r24
370 /* epilogue: frame size=0 */
371 0180 8F91 pop r24
372 0182 0F90 pop __tmp_reg__
373 0184 0FBE out __SREG__,__tmp_reg__
374 0186 0F90 pop __tmp_reg__
375 0188 1F90 pop __zero_reg__
376 018a 1895 reti
377 /* epilogue end (size=6) */
378 /* function __vector_1 size 15 (3) */
380 .Lscope4:
382 .stabd 78,0,0
383 .global PPM_Signal
384 .global PPM_Signal
385 .section .bss
388 PPM_Signal:
389 0000 0000 .skip 2,0
390 .global Timer1Overflow
391 .global Timer1Overflow
394 Timer1Overflow:
395 0002 00 .skip 1,0
396 .global PPM_Timeout
397 .global PPM_Timeout
400 PPM_Timeout:
401 0003 00 .skip 1,0
402 .global anz_ppm_werte
403 .global anz_ppm_werte
406 anz_ppm_werte:
407 0004 00 .skip 1,0
408 .lcomm ppm.2080,2
409 .lcomm tim_alt.2079,2
416 .text
418 .Letext0:
419 /* File "src/PPM_Decode.c": code 199 = 0x00c7 ( 152), prologues 23, epilogues 24 */
DEFINED SYMBOLS
*ABS*:00000000 PPM_Decode.c
/tmp/cc2IZgCl.s:2 *ABS*:0000003f __SREG__
/tmp/cc2IZgCl.s:3 *ABS*:0000003e __SP_H__
/tmp/cc2IZgCl.s:4 *ABS*:0000003d __SP_L__
/tmp/cc2IZgCl.s:5 *ABS*:00000000 __tmp_reg__
/tmp/cc2IZgCl.s:6 *ABS*:00000001 __zero_reg__
/tmp/cc2IZgCl.s:102 .text:00000000 InitPPM
/tmp/cc2IZgCl.s:140 .text:0000001a __vector_8
/tmp/cc2IZgCl.s:394 .bss:00000002 Timer1Overflow
/tmp/cc2IZgCl.s:174 .text:0000003c __vector_5
/tmp/cc2IZgCl.s:408 .bss:00000007 tim_alt.2079
/tmp/cc2IZgCl.s:400 .bss:00000003 PPM_Timeout
.bss:00000005 ppm.2080
/tmp/cc2IZgCl.s:388 .bss:00000000 PPM_Signal
/tmp/cc2IZgCl.s:406 .bss:00000004 anz_ppm_werte
/tmp/cc2IZgCl.s:352 .text:0000016e __vector_1
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
ZeitZumAdWandeln
/branches/V0.37_neueStruktur/out/analog.lst
0,0 → 1,286
1 .file "analog.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
11 .text
12 .Ltext0:
100 .global ADC_Init
102 ADC_Init:
103 .stabd 46,0,0
1:src/analog.c **** /*############################################################################
2:src/analog.c ****
3:src/analog.c **** ############################################################################*/
4:src/analog.c ****
5:src/analog.c **** #include "main.h"
6:src/analog.c ****
7:src/analog.c **** //############################################################################
8:src/analog.c **** //Init ADC
9:src/analog.c **** void ADC_Init(void)
10:src/analog.c **** //############################################################################
11:src/analog.c **** {
105 .LM0:
106 .LFBB1:
107 /* prologue: frame size=0 */
108 /* prologue end (size=0) */
12:src/analog.c **** ADCSRA = 0xA6; // Free Run & 1MHZ
110 .LM1:
111 0000 86EA ldi r24,lo8(-90)
112 0002 86B9 out 38-0x20,r24
13:src/analog.c **** ADMUX = 7; // Kanal 7
114 .LM2:
115 0004 87E0 ldi r24,lo8(7)
116 0006 87B9 out 39-0x20,r24
14:src/analog.c **** ADCSRA |= 0x40; // Start
118 .LM3:
119 0008 369A sbi 38-0x20,6
120 /* epilogue: frame size=0 */
121 000a 0895 ret
122 /* epilogue end (size=1) */
123 /* function ADC_Init size 6 (5) */
125 .Lscope1:
127 .stabd 78,0,0
129 .global AdConvert
131 AdConvert:
132 .stabd 46,0,0
15:src/analog.c **** }
16:src/analog.c ****
17:src/analog.c **** //############################################################################
18:src/analog.c **** //Strom Analogwerte lesen
19:src/analog.c **** void AdConvert(void)
20:src/analog.c **** //############################################################################
21:src/analog.c **** {
134 .LM4:
135 .LFBB2:
136 /* prologue: frame size=0 */
137 /* prologue end (size=0) */
22:src/analog.c **** unsigned int i=0;
23:src/analog.c **** unsigned char sense;
24:src/analog.c **** sense = ADMUX; // Sense-Kanal merken
139 .LM5:
140 000c 27B1 in r18,39-0x20
25:src/analog.c **** ADMUX = 0x06; // Kanal 6
142 .LM6:
143 000e 96E0 ldi r25,lo8(6)
144 0010 97B9 out 39-0x20,r25
26:src/analog.c **** SFIOR = 0x00; // Analog Comperator aus
146 .LM7:
147 0012 10BE out 80-0x20,__zero_reg__
27:src/analog.c **** ADCSRA = 0xD3; // Converter ein, single
149 .LM8:
150 0014 83ED ldi r24,lo8(-45)
151 0016 86B9 out 38-0x20,r24
28:src/analog.c **** ADCSRA |= 0x10; // Ready löschen
153 .LM9:
154 0018 349A sbi 38-0x20,4
29:src/analog.c **** ADMUX = 0x06; // Kanal 6
156 .LM10:
157 001a 97B9 out 39-0x20,r25
30:src/analog.c **** ADCSRA |= 0x40; // Start
159 .LM11:
160 001c 369A sbi 38-0x20,6
161 .L4:
31:src/analog.c **** while (((ADCSRA & 0x10) == 0));
163 .LM12:
164 001e 349B sbis 38-0x20,4
165 0020 00C0 rjmp .L4
32:src/analog.c **** ADMUX = sense; // zurück auf den Sense-Kanal
167 .LM13:
168 0022 27B9 out 39-0x20,r18
33:src/analog.c **** i = ADCW * 4;
170 .LM14:
171 0024 84B1 in r24,36-0x20
172 0026 95B1 in r25,(36)+1-0x20
34:src/analog.c **** // if(i > 300) i = 300;
35:src/analog.c **** Strom = (i + Strom * 7) / 8;
174 .LM15:
175 0028 2091 0000 lds r18,Strom
176 002c 3091 0000 lds r19,(Strom)+1
177 0030 A901 movw r20,r18
178 0032 63E0 ldi r22,3
179 0034 440F 1: lsl r20
180 0036 551F rol r21
181 0038 6A95 dec r22
182 003a 01F4 brne 1b
183 003c 421B sub r20,r18
184 003e 530B sbc r21,r19
185 0040 880F lsl r24
186 0042 991F rol r25
187 0044 880F lsl r24
188 0046 991F rol r25
189 0048 480F add r20,r24
190 004a 591F adc r21,r25
191 004c 83E0 ldi r24,3
192 004e 5695 1: lsr r21
193 0050 4795 ror r20
194 0052 8A95 dec r24
195 0054 01F4 brne 1b
196 0056 5093 0000 sts (Strom)+1,r21
197 005a 4093 0000 sts Strom,r20
36:src/analog.c **** if (Strom_max < Strom) Strom_max = Strom;
199 .LM16:
200 005e 8091 0000 lds r24,Strom_max
201 0062 9927 clr r25
202 0064 8417 cp r24,r20
203 0066 9507 cpc r25,r21
204 0068 00F4 brsh .L6
205 006a 4093 0000 sts Strom_max,r20
206 .L6:
37:src/analog.c **** ADCSRA = 0x00;
208 .LM17:
209 006e 16B8 out 38-0x20,__zero_reg__
38:src/analog.c **** SFIOR = 0x08; // Analog Comperator ein
211 .LM18:
212 0070 88E0 ldi r24,lo8(8)
213 0072 80BF out 80-0x20,r24
214 /* epilogue: frame size=0 */
215 0074 0895 ret
216 /* epilogue end (size=1) */
217 /* function AdConvert size 53 (52) */
222 .Lscope2:
224 .stabd 78,0,0
227 .global MessAD
229 MessAD:
230 .stabd 46,0,0
39:src/analog.c **** }
40:src/analog.c ****
41:src/analog.c ****
42:src/analog.c ****
43:src/analog.c **** //############################################################################
44:src/analog.c **** //Strom Analogwerte lesen
45:src/analog.c **** unsigned int MessAD(unsigned char channel)
46:src/analog.c **** //############################################################################
47:src/analog.c **** {
232 .LM19:
233 .LFBB3:
234 /* prologue: frame size=0 */
235 /* prologue end (size=0) */
48:src/analog.c **** unsigned char sense;
49:src/analog.c **** sense = ADMUX; // Sense-Kanal merken
237 .LM20:
238 0076 27B1 in r18,39-0x20
50:src/analog.c **** ADMUX = channel; // Kanal 6
240 .LM21:
241 0078 87B9 out 39-0x20,r24
51:src/analog.c **** SFIOR = 0x00; // Analog Comperator aus
243 .LM22:
244 007a 10BE out 80-0x20,__zero_reg__
52:src/analog.c **** ADCSRA = 0xD3; // Converter ein, single
246 .LM23:
247 007c 93ED ldi r25,lo8(-45)
248 007e 96B9 out 38-0x20,r25
53:src/analog.c **** ADCSRA |= 0x10; // Ready löschen
250 .LM24:
251 0080 349A sbi 38-0x20,4
54:src/analog.c **** ADMUX = channel; // Kanal 6
253 .LM25:
254 0082 87B9 out 39-0x20,r24
55:src/analog.c **** ADCSRA |= 0x40; // Start
256 .LM26:
257 0084 369A sbi 38-0x20,6
258 .L12:
56:src/analog.c **** while (((ADCSRA & 0x10) == 0));
260 .LM27:
261 0086 349B sbis 38-0x20,4
262 0088 00C0 rjmp .L12
57:src/analog.c **** ADMUX = sense; // zurück auf den Sense-Kanal
264 .LM28:
265 008a 27B9 out 39-0x20,r18
58:src/analog.c **** ADCSRA = 0x00;
267 .LM29:
268 008c 16B8 out 38-0x20,__zero_reg__
59:src/analog.c **** SFIOR = 0x08; // Analog Comperator ein
270 .LM30:
271 008e 88E0 ldi r24,lo8(8)
272 0090 80BF out 80-0x20,r24
60:src/analog.c **** return(ADCW);
274 .LM31:
275 0092 84B1 in r24,36-0x20
276 0094 95B1 in r25,(36)+1-0x20
277 /* epilogue: frame size=0 */
278 0096 0895 ret
279 /* epilogue end (size=1) */
280 /* function MessAD size 17 (16) */
285 .Lscope3:
287 .stabd 78,0,0
289 .global FastADConvert
291 FastADConvert:
292 .stabd 46,0,0
61:src/analog.c **** }
62:src/analog.c ****
63:src/analog.c **** //############################################################################
64:src/analog.c **** //Strom Analogwerte lesen
65:src/analog.c **** void FastADConvert(void)
66:src/analog.c **** //############################################################################
67:src/analog.c **** {
294 .LM32:
295 .LFBB4:
296 /* prologue: frame size=0 */
297 /* prologue end (size=0) */
68:src/analog.c **** unsigned int i=0;
69:src/analog.c **** i = MessAD(6) * 4;
299 .LM33:
300 0098 86E0 ldi r24,lo8(6)
301 009a 00D0 rcall MessAD
302 009c 9C01 movw r18,r24
303 009e 220F lsl r18
304 00a0 331F rol r19
305 00a2 220F lsl r18
306 00a4 331F rol r19
307 00a6 293C cpi r18,201
308 00a8 3105 cpc r19,__zero_reg__
309 00aa 00F0 brlo .L18
311 .LM34:
312 00ac 28EC ldi r18,lo8(200)
313 00ae 30E0 ldi r19,hi8(200)
314 .L18:
70:src/analog.c **** // i = ADCW * 4;
71:src/analog.c **** if(i > 200) i = 200;
72:src/analog.c **** Strom = i;//(i + Strom * 1) / 2;
316 .LM35:
317 00b0 3093 0000 sts (Strom)+1,r19
318 00b4 2093 0000 sts Strom,r18
73:src/analog.c **** if (Strom_max < Strom) Strom_max = Strom;
320 .LM36:
321 00b8 8091 0000 lds r24,Strom_max
322 00bc 9927 clr r25
323 00be 8217 cp r24,r18
324 00c0 9307 cpc r25,r19
325 00c2 00F4 brsh .L19
326 00c4 2093 0000 sts Strom_max,r18
327 .L19:
74:src/analog.c **** ADCSRA = 0x00;
329 .LM37:
330 00c8 16B8 out 38-0x20,__zero_reg__
75:src/analog.c **** SFIOR = 0x08; // Analog Comperator ein
332 .LM38:
333 00ca 88E0 ldi r24,lo8(8)
334 00cc 80BF out 80-0x20,r24
335 /* epilogue: frame size=0 */
336 00ce 0895 ret
337 /* epilogue end (size=1) */
338 /* function FastADConvert size 28 (27) */
340 .Lscope4:
342 .stabd 78,0,0
344 .Letext0:
345 /* File "src/analog.c": code 104 = 0x0068 ( 100), prologues 0, epilogues 4 */
DEFINED SYMBOLS
*ABS*:00000000 analog.c
/tmp/ccjrtWT0.s:2 *ABS*:0000003f __SREG__
/tmp/ccjrtWT0.s:3 *ABS*:0000003e __SP_H__
/tmp/ccjrtWT0.s:4 *ABS*:0000003d __SP_L__
/tmp/ccjrtWT0.s:5 *ABS*:00000000 __tmp_reg__
/tmp/ccjrtWT0.s:6 *ABS*:00000001 __zero_reg__
/tmp/ccjrtWT0.s:102 .text:00000000 ADC_Init
/tmp/ccjrtWT0.s:131 .text:0000000c AdConvert
/tmp/ccjrtWT0.s:229 .text:00000076 MessAD
/tmp/ccjrtWT0.s:291 .text:00000098 FastADConvert
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
Strom
Strom_max
/branches/V0.37_neueStruktur/out/main.lst
0,0 → 1,2590
1 .file "main.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
11 .text
12 .Ltext0:
100 .global SetPWM
102 SetPWM:
103 .stabd 46,0,0
1:src/main.c **** /*#######################################################################################
2:src/main.c **** Flight Control
3:src/main.c **** #######################################################################################*/
4:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5:src/main.c **** // + Regler für Brushless-Motoren
6:src/main.c **** // + ATMEGA8 mit 8MHz
7:src/main.c **** // + Nur für den privaten Gebrauch
8:src/main.c **** // + Copyright (c) 12.2007 Holger Buss
9:src/main.c **** // + www.MikroKopter.com
10:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11:src/main.c **** // + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation)
12:src/main.c **** // + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulä
13:src/main.c **** // + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikro
14:src/main.c **** // + bzgl. der Nutzungsbedingungen aufzunehmen.
15:src/main.c **** // + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platine
16:src/main.c **** // + Verkauf von Luftbildaufnahmen, usw.
17:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18:src/main.c **** // + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
19:src/main.c **** // + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright
20:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
21:src/main.c **** // + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
22:src/main.c **** // + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http:
23:src/main.c **** // + eindeutig als Ursprung verlinkt werden
24:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
25:src/main.c **** // + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
26:src/main.c **** // + Benutzung auf eigene Gefahr
27:src/main.c **** // + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
28:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
29:src/main.c **** // + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www
30:src/main.c **** // + mit unserer Zustimmung zulässig
31:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32:src/main.c **** // + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
33:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
34:src/main.c **** // + Redistributions of source code (with or without modifications) must retain the above copyright
35:src/main.c **** // + this list of conditions and the following disclaimer.
36:src/main.c **** // + * Neither the name of the copyright holders nor the names of contributors may be used to end
37:src/main.c **** // + from this software without specific prior written permission.
38:src/main.c **** // + * The use of this project (hardware, software, binary files, sources and documentation) is o
39:src/main.c **** // + for non-commercial use (directly or indirectly)
40:src/main.c **** // + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is
41:src/main.c **** // + with our written permission
42:src/main.c **** // + * If sources or documentations are redistributet on other webpages, out webpage (http://www.
43:src/main.c **** // + clearly linked as origin
44:src/main.c **** // + * porting to systems other than hardware from www.mikrokopter.de is not allowed
45:src/main.c **** // + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
46:src/main.c **** // + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47:src/main.c **** // + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48:src/main.c **** // + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
49:src/main.c **** // + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
50:src/main.c **** // + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51:src/main.c **** // + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52:src/main.c **** // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT
53:src/main.c **** // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
54:src/main.c **** // + POSSIBILITY OF SUCH DAMAGE.
55:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
56:src/main.c ****
57:src/main.c **** #include "main.h"
58:src/main.c ****
59:src/main.c **** unsigned int PWM = 0;
60:src/main.c **** unsigned int Strom = 0,RuheStrom; //ca. in 0,1A
61:src/main.c **** unsigned char Strom_max = 0;
62:src/main.c **** unsigned char Mittelstrom = 0;
63:src/main.c **** unsigned int Drehzahl = 0; // in 100UPM 60 = 6000
64:src/main.c **** unsigned int KommutierDelay = 10;
65:src/main.c **** unsigned int I2C_Timeout = 0;
66:src/main.c **** unsigned int SIO_Timeout = 0;
67:src/main.c **** unsigned int SollDrehzahl = 0;
68:src/main.c **** unsigned int IstDrehzahl = 0;
69:src/main.c **** unsigned int DrehZahlTabelle[256];//vorberechnete Werte zur Drehzahlerfassung
70:src/main.c **** unsigned char ZeitFuerBerechnungen = 1;
71:src/main.c **** unsigned char MotorAnwerfen = 0;
72:src/main.c **** unsigned char MotorGestoppt = 1;
73:src/main.c **** unsigned char MaxPWM = MAX_PWM;
74:src/main.c **** unsigned int CntKommutierungen = 0;
75:src/main.c **** unsigned int SIO_Drehzahl = 0;
76:src/main.c **** unsigned char ZeitZumAdWandeln = 1;
77:src/main.c **** unsigned char MotorAdresse = 1;
78:src/main.c **** unsigned char PPM_Betrieb = 1;
79:src/main.c ****
80:src/main.c **** //############################################################################
81:src/main.c **** //
82:src/main.c **** void SetPWM(void)
83:src/main.c **** //############################################################################
84:src/main.c **** {
105 .LM0:
106 .LFBB1:
107 /* prologue: frame size=0 */
108 /* prologue end (size=0) */
85:src/main.c **** unsigned char tmp_pwm;
86:src/main.c **** tmp_pwm = PWM;
110 .LM1:
111 0000 2091 0000 lds r18,PWM
87:src/main.c **** if(tmp_pwm > MaxPWM) // Strombegrenzung
113 .LM2:
114 0004 8091 0000 lds r24,MaxPWM
115 0008 8217 cp r24,r18
116 000a 00F4 brsh .L2
88:src/main.c **** {
89:src/main.c **** tmp_pwm = MaxPWM;
90:src/main.c **** PORTC |= ROT;
118 .LM3:
119 000c AB9A sbi 53-0x20,3
120 000e 282F mov r18,r24
121 .L2:
91:src/main.c **** }
92:src/main.c **** if(Strom > MAX_STROM) // Strombegrenzung
123 .LM4:
124 0010 8091 0000 lds r24,Strom
125 0014 9091 0000 lds r25,(Strom)+1
126 0018 893C cpi r24,201
127 001a 9105 cpc r25,__zero_reg__
128 001c 00F0 brlo .L4
93:src/main.c **** {
94:src/main.c **** OCR1A = 0; OCR1B = 0; OCR2 = 0;
130 .LM5:
131 001e 1BBC out (74)+1-0x20,__zero_reg__
132 0020 1ABC out 74-0x20,__zero_reg__
133 0022 19BC out (72)+1-0x20,__zero_reg__
134 0024 18BC out 72-0x20,__zero_reg__
135 0026 13BC out 67-0x20,__zero_reg__
95:src/main.c **** PORTC |= ROT;
137 .LM6:
138 0028 AB9A sbi 53-0x20,3
96:src/main.c **** Strom--;
140 .LM7:
141 002a 0197 sbiw r24,1
142 002c 9093 0000 sts (Strom)+1,r25
143 0030 8093 0000 sts Strom,r24
144 0034 0895 ret
145 .L4:
97:src/main.c **** }
98:src/main.c **** else
99:src/main.c **** {
100:src/main.c **** #ifdef _32KHZ
101:src/main.c **** OCR1A = tmp_pwm; OCR1B = tmp_pwm; OCR2 = tmp_pwm;
102:src/main.c **** #endif
103:src/main.c ****
104:src/main.c **** #ifdef _16KHZ
105:src/main.c **** //OCR1A = 2 * (int)tmp_pwm; OCR1B = 2 * (int)tmp_pwm; OCR2 = tmp_pwm;
106:src/main.c **** OCR1A = tmp_pwm; OCR1B = tmp_pwm; OCR2 = tmp_pwm;
147 .LM8:
148 0036 822F mov r24,r18
149 0038 9927 clr r25
150 003a 9BBD out (74)+1-0x20,r25
151 003c 8ABD out 74-0x20,r24
152 003e 99BD out (72)+1-0x20,r25
153 0040 88BD out 72-0x20,r24
154 0042 23BD out 67-0x20,r18
155 0044 0895 ret
156 /* epilogue: frame size=0 */
157 /* epilogue: noreturn */
158 /* epilogue end (size=0) */
159 /* function SetPWM size 35 (35) */
164 .Lscope1:
166 .stabd 78,0,0
168 .global PWM_Init
170 PWM_Init:
171 .stabd 46,0,0
107:src/main.c **** #endif
108:src/main.c **** }
109:src/main.c **** }
110:src/main.c ****
111:src/main.c **** //############################################################################
112:src/main.c **** //
113:src/main.c **** void PWM_Init(void)
114:src/main.c **** //############################################################################
115:src/main.c **** {
173 .LM9:
174 .LFBB2:
175 /* prologue: frame size=0 */
176 /* prologue end (size=0) */
116:src/main.c **** PWM_OFF;
178 .LM10:
179 0046 91E0 ldi r25,lo8(1)
180 0048 9FBD out 79-0x20,r25
181 004a 81E4 ldi r24,lo8(65)
182 004c 85BD out 69-0x20,r24
183 004e 8EE0 ldi r24,lo8(14)
184 0050 87BB out 55-0x20,r24
185 0052 88B3 in r24,56-0x20
186 0054 817F andi r24,lo8(-15)
187 0056 88BB out 56-0x20,r24
117:src/main.c **** TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (0 << WGM12) |
189 .LM11:
190 0058 9EBD out 78-0x20,r25
191 /* epilogue: frame size=0 */
192 005a 0895 ret
193 /* epilogue end (size=1) */
194 /* function PWM_Init size 11 (10) */
196 .Lscope2:
198 .stabd 78,0,0
201 .global Wait
203 Wait:
204 .stabd 46,0,0
118:src/main.c **** (0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
119:src/main.c **** /* TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (1 << WGM12) |
120:src/main.c **** (0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
121:src/main.c **** */
122:src/main.c **** }
123:src/main.c ****
124:src/main.c **** //############################################################################
125:src/main.c **** //
126:src/main.c **** void Wait(unsigned char dauer)
127:src/main.c **** //############################################################################
128:src/main.c **** {
206 .LM12:
207 .LFBB3:
208 /* prologue: frame size=0 */
209 /* prologue end (size=0) */
129:src/main.c **** dauer = (unsigned char)TCNT0 + dauer;
211 .LM13:
212 005c 92B7 in r25,82-0x20
213 005e 980F add r25,r24
130:src/main.c **** while((TCNT0 - dauer) & 0x80);
215 .LM14:
216 0060 292F mov r18,r25
217 0062 3327 clr r19
218 .L11:
220 .LM15:
221 0064 82B7 in r24,82-0x20
222 0066 821B sub r24,r18
223 0068 87FD sbrc r24,7
224 006a 00C0 rjmp .L11
225 /* epilogue: frame size=0 */
226 006c 0895 ret
227 /* epilogue end (size=1) */
228 /* function Wait size 9 (8) */
230 .Lscope3:
232 .stabd 78,0,0
235 .global Delay
237 Delay:
238 .stabd 46,0,0
131:src/main.c **** }
132:src/main.c ****
133:src/main.c **** //############################################################################
134:src/main.c **** //
135:src/main.c **** void Anwerfen(unsigned char pwm)
136:src/main.c **** //############################################################################
137:src/main.c **** {
138:src/main.c **** unsigned long timer = 300,i;
139:src/main.c **** DISABLE_SENSE_INT;
140:src/main.c **** PWM = 5;
141:src/main.c **** SetPWM();
142:src/main.c **** Manuell();
143:src/main.c **** Delay_ms(200);
144:src/main.c **** PWM = pwm;
145:src/main.c **** while(1)
146:src/main.c **** {
147:src/main.c **** for(i=0;i<timer; i++)
148:src/main.c **** {
149:src/main.c **** if(!UebertragungAbgeschlossen) SendUart();
150:src/main.c **** else DatenUebertragung();
151:src/main.c **** Wait(100); // warten
152:src/main.c **** }
153:src/main.c **** timer-= timer/15+1;
154:src/main.c **** if(timer < 25) { if(TEST_MANUELL) timer = 25; else return; }
155:src/main.c ****
156:src/main.c **** Manuell();
157:src/main.c **** Phase++;
158:src/main.c **** Phase %= 6;
159:src/main.c **** AdConvert();
160:src/main.c **** PWM = pwm;
161:src/main.c **** SetPWM();
162:src/main.c **** if(SENSE)
163:src/main.c **** {
164:src/main.c **** PORTD ^= GRUEN;
165:src/main.c **** }
166:src/main.c **** }
167:src/main.c **** }
168:src/main.c ****
169:src/main.c **** /*
170:src/main.c **** #define SENSE_A ADMUX = 0;
171:src/main.c **** #define SENSE_B ADMUX = 1;
172:src/main.c **** #define SENSE_C ADMUX = 2;
173:src/main.c ****
174:src/main.c **** #define ClrSENSE ACSR |= 0x10
175:src/main.c **** #define SENSE ((ACSR & 0x10))
176:src/main.c **** #define SENSE_L (!(ACSR & 0x20))
177:src/main.c **** #define SENSE_H ((ACSR & 0x20))
178:src/main.c **** */
179:src/main.c ****
180:src/main.c **** void RotBlink(unsigned char anz)
181:src/main.c **** {
182:src/main.c **** sei(); // Interrupts ein
183:src/main.c **** while(anz--)
184:src/main.c **** {
185:src/main.c **** PORTC |= ROT;
186:src/main.c **** Delay_ms(300);
187:src/main.c **** PORTC &= ~ROT;
188:src/main.c **** Delay_ms(300);
189:src/main.c **** }
190:src/main.c **** Delay_ms(1000);
191:src/main.c **** }
192:src/main.c ****
193:src/main.c **** #define TEST_STROMGRENZE 120
194:src/main.c **** unsigned char DelayM(unsigned int timer)
195:src/main.c **** {
196:src/main.c **** while(timer--)
197:src/main.c **** {
198:src/main.c **** FastADConvert();
199:src/main.c **** if(Strom > (TEST_STROMGRENZE + RuheStrom))
200:src/main.c **** {
201:src/main.c **** FETS_OFF;
202:src/main.c **** return(1);
203:src/main.c **** }
204:src/main.c **** }
205:src/main.c **** return(0);
206:src/main.c **** }
207:src/main.c ****
208:src/main.c **** unsigned char Delay(unsigned int timer)
209:src/main.c **** {
240 .LM16:
241 .LFBB4:
242 /* prologue: frame size=0 */
243 /* prologue end (size=0) */
210:src/main.c **** while(timer--)
211:src/main.c **** {
212:src/main.c **** // if(SENSE_H) { PORTC |= ROT; } else { PORTC &= ~ROT;}
213:src/main.c **** }
214:src/main.c **** return(0);
215:src/main.c **** }
245 .LM17:
246 006e 80E0 ldi r24,lo8(0)
247 0070 90E0 ldi r25,hi8(0)
248 /* epilogue: frame size=0 */
249 0072 0895 ret
250 /* epilogue end (size=1) */
251 /* function Delay size 3 (2) */
253 .Lscope4:
255 .stabd 78,0,0
257 .global SollwertErmittlung
259 SollwertErmittlung:
260 .stabd 46,0,0
216:src/main.c ****
217:src/main.c **** /*
218:src/main.c **** void ShowSense(void)
219:src/main.c **** {
220:src/main.c **** if(SENSE_H) { PORTC |= ROT; } else { PORTC &= ~ROT;}
221:src/main.c ****
222:src/main.c **** }
223:src/main.c **** */
224:src/main.c **** #define HIGH_A_EIN PORTB |= 0x08
225:src/main.c **** #define HIGH_B_EIN PORTB |= 0x04
226:src/main.c **** #define HIGH_C_EIN PORTB |= 0x02
227:src/main.c **** #define LOW_A_EIN PORTD |= 0x08
228:src/main.c **** #define LOW_B_EIN PORTD |= 0x10
229:src/main.c **** #define LOW_C_EIN PORTD |= 0x20
230:src/main.c ****
231:src/main.c **** void MotorTon(void)
232:src/main.c **** //############################################################################
233:src/main.c **** {
234:src/main.c **** unsigned char ADR_TAB[5] = {0,0,2,1,3};
235:src/main.c **** unsigned int timer = 300,i;
236:src/main.c **** unsigned int t = 0;
237:src/main.c **** unsigned char anz = 0,MosfetOkay = 0, grenze = 50;
238:src/main.c ****
239:src/main.c **** PORTC &= ~ROT;
240:src/main.c **** Delay_ms(300 * ADR_TAB[MotorAdresse]);
241:src/main.c **** DISABLE_SENSE_INT;
242:src/main.c **** cli();//Globale Interrupts Ausschalten
243:src/main.c **** uart_putchar('\n');
244:src/main.c **** STEUER_OFF;
245:src/main.c **** Strom_max = 0;
246:src/main.c **** DelayM(50);
247:src/main.c **** RuheStrom = Strom_max;
248:src/main.c **** // uart_putchar(RuheStrom + 'A');
249:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
250:src/main.c **** //+ High-Mosfets auf Kurzschluss testen
251:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
252:src/main.c **** Strom = 0;
253:src/main.c **** LOW_B_EIN;
254:src/main.c **** HIGH_A_EIN;
255:src/main.c **** if(DelayM(3))
256:src/main.c **** {
257:src/main.c **** anz = 1;
258:src/main.c **** uart_putchar('1');
259:src/main.c **** }
260:src/main.c **** FETS_OFF;
261:src/main.c **** Delay(1000);
262:src/main.c **** Strom = 0;
263:src/main.c **** LOW_A_EIN;
264:src/main.c **** HIGH_B_EIN;
265:src/main.c **** if(DelayM(3))
266:src/main.c **** {
267:src/main.c **** anz = 2;
268:src/main.c **** uart_putchar('2');
269:src/main.c **** }
270:src/main.c **** FETS_OFF;
271:src/main.c **** Delay(1000);
272:src/main.c **** Strom = 0;
273:src/main.c **** LOW_B_EIN; // Low C ein
274:src/main.c **** HIGH_C_EIN; // High B ein
275:src/main.c **** if(DelayM(3))
276:src/main.c **** {
277:src/main.c **** anz = 3;
278:src/main.c **** uart_putchar('3');
279:src/main.c **** }
280:src/main.c **** FETS_OFF;
281:src/main.c **** Delay(1000);
282:src/main.c **** LOW_A_EIN; // Low A ein; und A gegen C
283:src/main.c **** HIGH_C_EIN; // High C ein
284:src/main.c **** if(DelayM(3))
285:src/main.c **** {
286:src/main.c **** anz = 3;
287:src/main.c **** uart_putchar('7');
288:src/main.c **** }
289:src/main.c **** FETS_OFF;
290:src/main.c **** DelayM(10000);
291:src/main.c **** if(anz) while(1) RotBlink(anz); // bei Kurzschluss nicht starten
292:src/main.c ****
293:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
294:src/main.c **** //+ LOW-Mosfets auf Schalten und Kurzschluss testen
295:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
296:src/main.c **** if(UDR == ' ') {t = 65535; grenze = 40; uart_putchar('_');} else t = 1000; // Ausführlicher Test
297:src/main.c **** Strom = 0;
298:src/main.c **** for(i=0;i<t;i++)
299:src/main.c **** {
300:src/main.c **** LOW_A_EIN;
301:src/main.c **** DelayM(1);
302:src/main.c **** FETS_OFF;
303:src/main.c **** Delay(5);
304:src/main.c **** HIGH_A_EIN;
305:src/main.c **** DelayM(1);
306:src/main.c **** FETS_OFF;
307:src/main.c **** if(Strom > grenze + RuheStrom) {anz = 4; uart_putchar('4'); break;}
308:src/main.c **** Delay(5);
309:src/main.c **** }
310:src/main.c **** Delay(10000);
311:src/main.c ****
312:src/main.c **** Strom = 0;
313:src/main.c **** for(i=0;i<t;i++)
314:src/main.c **** {
315:src/main.c **** LOW_B_EIN;
316:src/main.c **** DelayM(1);
317:src/main.c **** FETS_OFF;
318:src/main.c **** Delay(5);
319:src/main.c **** HIGH_B_EIN;
320:src/main.c **** DelayM(1);
321:src/main.c **** FETS_OFF;
322:src/main.c **** if(Strom > grenze + RuheStrom) {anz = 5; uart_putchar('5'); break;}
323:src/main.c **** Delay(5);
324:src/main.c **** }
325:src/main.c ****
326:src/main.c **** Strom = 0;
327:src/main.c **** Delay(10000);
328:src/main.c ****
329:src/main.c **** for(i=0;i<t;i++)
330:src/main.c **** {
331:src/main.c **** LOW_C_EIN;
332:src/main.c **** DelayM(1);
333:src/main.c **** FETS_OFF;
334:src/main.c **** Delay(5);
335:src/main.c **** HIGH_C_EIN;
336:src/main.c **** DelayM(1);
337:src/main.c **** FETS_OFF;
338:src/main.c **** if(Strom > grenze + RuheStrom) {anz = 6; uart_putchar('6'); break;}
339:src/main.c **** Delay(5);
340:src/main.c **** }
341:src/main.c ****
342:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
343:src/main.c **** //+ High-Mosfets auf Schalten testen
344:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
345:src/main.c **** SENSE_A;
346:src/main.c **** FETS_OFF;
347:src/main.c **** LOW_B_EIN; // Low B ein
348:src/main.c **** LOW_C_EIN; // Low C ein
349:src/main.c **** Strom = 0;
350:src/main.c **** #define TONDAUER 40000
351:src/main.c **** #define SOUND_E 2
352:src/main.c **** #define SOUND1_A 300
353:src/main.c **** #define SOUND2_A 330
354:src/main.c **** #define SOUND3_A 360
355:src/main.c ****
356:src/main.c **** for(i=0; i< (TONDAUER / SOUND2_A) ; i++)
357:src/main.c **** {
358:src/main.c **** HIGH_A_EIN; // Test A
359:src/main.c **** Delay(SOUND_E);
360:src/main.c **** if(MessAD(0) > 50) { MosfetOkay |= 0x01; } else { MosfetOkay &= ~0x01;};
361:src/main.c **** PORTB = 0;
362:src/main.c **** Delay(SOUND1_A);
363:src/main.c **** }
364:src/main.c **** FETS_OFF;
365:src/main.c ****
366:src/main.c **** LOW_A_EIN; // Low A ein
367:src/main.c **** LOW_C_EIN; // Low C ein
368:src/main.c **** for(i=0; i<(TONDAUER / SOUND1_A); i++)
369:src/main.c **** {
370:src/main.c **** HIGH_B_EIN; // Test B
371:src/main.c **** Delay(SOUND_E);
372:src/main.c **** if(MessAD(1) > 50) { MosfetOkay |= 0x02; } else { MosfetOkay &= ~0x02;};
373:src/main.c **** PORTB = 0;
374:src/main.c **** Delay(SOUND1_A);
375:src/main.c **** }
376:src/main.c ****
377:src/main.c **** FETS_OFF;
378:src/main.c **** LOW_A_EIN; // Low A ein
379:src/main.c **** LOW_B_EIN; // Low B ein
380:src/main.c **** for(i=0; i<(TONDAUER / SOUND3_A); i++)
381:src/main.c **** {
382:src/main.c **** HIGH_C_EIN; // Test C
383:src/main.c **** Delay(SOUND_E);
384:src/main.c **** if(MessAD(2) > 50) { MosfetOkay |= 0x04; } else { MosfetOkay &= ~0x04;};
385:src/main.c **** PORTB = 0;
386:src/main.c **** Delay(SOUND2_A);
387:src/main.c **** }
388:src/main.c **** FETS_OFF;
389:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
390:src/main.c **** //+ Low-Mosfets auf Schalten testen
391:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
392:src/main.c **** SENSE_B;
393:src/main.c **** LOW_A_EIN; // Low A ein
394:src/main.c **** for(i=0; i< (TONDAUER / SOUND2_A) ; i++)
395:src/main.c **** {
396:src/main.c **** HIGH_B_EIN; // Test B
397:src/main.c **** Delay(SOUND_E);
398:src/main.c **** if(MessAD(0) > 50) { MosfetOkay &= ~0x08;} else { MosfetOkay |= 0x08;};
399:src/main.c **** PORTB = 0;
400:src/main.c **** Delay(SOUND2_A);
401:src/main.c **** }
402:src/main.c ****
403:src/main.c **** //++++++++++++++++++++++++++++++++++++
404:src/main.c **** LOW_C_EIN; // Low C ein
405:src/main.c **** for(i=0; i<(TONDAUER / SOUND1_A); i++)
406:src/main.c **** {
407:src/main.c **** HIGH_B_EIN; // Test B
408:src/main.c **** Delay(SOUND_E);
409:src/main.c **** if(MessAD(2) > 50) { MosfetOkay &= ~0x20;} else { MosfetOkay |= 0x20;};
410:src/main.c **** PORTB = 0;
411:src/main.c **** Delay(SOUND3_A);
412:src/main.c **** }
413:src/main.c **** FETS_OFF;
414:src/main.c **** //++++++++++++++++++++++++++++++++++++
415:src/main.c **** FETS_OFF;
416:src/main.c **** LOW_B_EIN; // Low B ein
417:src/main.c **** for(i=0; i<(TONDAUER / SOUND3_A); i++)
418:src/main.c **** {
419:src/main.c **** HIGH_C_EIN; // Test C
420:src/main.c **** Delay(SOUND_E);
421:src/main.c **** if(MessAD(1) > 50) { MosfetOkay &= ~0x10;} else { MosfetOkay |= 0x10;};
422:src/main.c **** PORTB = 0;
423:src/main.c **** Delay(SOUND3_A);
424:src/main.c **** }
425:src/main.c **** FETS_OFF;
426:src/main.c **** //++++++++++++++++++++++++++++++++++++
427:src/main.c ****
428:src/main.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
429:src/main.c **** sei();//Globale Interrupts Einschalten
430:src/main.c **** // Delay_ms(250 * MotorAdresse);
431:src/main.c **** /*
432:src/main.c **** LOW_A_EIN; // Low B ein
433:src/main.c **** #define SOUND8_A 650
434:src/main.c **** for(i=0; i<(TONDAUER / SOUND8_A); i++)
435:src/main.c **** {
436:src/main.c **** HIGH_B_EIN; // Test B
437:src/main.c **** Delay(SOUND_E);
438:src/main.c **** PORTB = 0;
439:src/main.c **** Delay(SOUND8_A);
440:src/main.c **** }
441:src/main.c **** */
442:src/main.c **** Delay_ms(300 * (4-ADR_TAB[MotorAdresse]));
443:src/main.c **** if(!(MosfetOkay & 0x01)) { anz = 1; UDR='A'; } else
444:src/main.c **** if(!(MosfetOkay & 0x02)) { anz = 2; UDR='B'; } else
445:src/main.c **** if(!(MosfetOkay & 0x04)) { anz = 3; UDR='C'; } else
446:src/main.c **** if(!(MosfetOkay & 0x08)) { anz = 4; UDR='a'; } else
447:src/main.c **** if(!(MosfetOkay & 0x10)) { anz = 5; UDR='b'; } else
448:src/main.c **** if(!(MosfetOkay & 0x20)) { anz = 6; UDR='c'; }
449:src/main.c ****
450:src/main.c **** if(anz) Delay_ms(1000);
451:src/main.c ****
452:src/main.c **** RotBlink(anz);
453:src/main.c **** uart_putchar('.');
454:src/main.c **** }
455:src/main.c ****
456:src/main.c **** //############################################################################
457:src/main.c **** //
458:src/main.c **** unsigned char SollwertErmittlung(void)
459:src/main.c **** //############################################################################
460:src/main.c **** {
262 .LM18:
263 .LFBB5:
264 /* prologue: frame size=0 */
265 /* prologue end (size=0) */
461:src/main.c **** static unsigned int sollwert = 0;
462:src/main.c **** unsigned int ppm;
463:src/main.c **** if(!I2C_Timeout) // bei Erreichen von 0 ist der Wert ungültig
267 .LM19:
268 0074 8091 0000 lds r24,I2C_Timeout
269 0078 9091 0000 lds r25,(I2C_Timeout)+1
270 007c 892B or r24,r25
271 007e 01F0 breq .+2
272 0080 00C0 rjmp .L20
464:src/main.c **** {
465:src/main.c **** if(SIO_Timeout) // es gibt gültige SIO-Daten
274 .LM20:
275 0082 8091 0000 lds r24,SIO_Timeout
276 0086 9091 0000 lds r25,(SIO_Timeout)+1
277 008a 892B or r24,r25
278 008c 01F0 breq .L22
466:src/main.c **** {
467:src/main.c **** sollwert = (MAX_PWM * (unsigned int) SIO_Sollwert) / 200; // skalieren auf 0-200 = 0
280 .LM21:
281 008e 9091 0000 lds r25,SIO_Sollwert
282 0092 8FEF ldi r24,lo8(-1)
283 0094 989F mul r25,r24
284 0096 C001 movw r24,r0
285 0098 1124 clr r1
286 009a 68EC ldi r22,lo8(200)
287 009c 70E0 ldi r23,hi8(200)
288 009e 00D0 rcall __udivmodhi4
289 00a0 7093 0000 sts (sollwert.2390)+1,r23
290 00a4 6093 0000 sts sollwert.2390,r22
468:src/main.c **** PPM_Betrieb = 0;
292 .LM22:
293 00a8 1092 0000 sts PPM_Betrieb,__zero_reg__
469:src/main.c **** ICP_INT_DISABLE;
295 .LM23:
296 00ac 89B7 in r24,89-0x20
297 00ae 8F7D andi r24,lo8(-33)
298 00b0 89BF out 89-0x20,r24
299 00b2 00C0 rjmp .L32
300 .L22:
470:src/main.c **** PORTC &= ~ROT;
471:src/main.c **** }
472:src/main.c **** else
473:src/main.c **** if(anz_ppm_werte > 20) // es gibt gültige PPM-Daten
302 .LM24:
303 00b4 8091 0000 lds r24,anz_ppm_werte
304 00b8 8531 cpi r24,lo8(21)
305 00ba 00F0 brlo .L25
474:src/main.c **** {
475:src/main.c **** PPM_Betrieb = 1;
307 .LM25:
308 00bc 81E0 ldi r24,lo8(1)
309 00be 8093 0000 sts PPM_Betrieb,r24
476:src/main.c **** ppm = PPM_Signal;
311 .LM26:
312 00c2 2091 0000 lds r18,PPM_Signal
313 00c6 3091 0000 lds r19,(PPM_Signal)+1
477:src/main.c **** if(ppm > 300) ppm = 0; // ungültiges Signal
315 .LM27:
316 00ca 41E0 ldi r20,hi8(301)
317 00cc 2D32 cpi r18,lo8(301)
318 00ce 3407 cpc r19,r20
319 00d0 00F4 brsh .L27
478:src/main.c **** if(ppm > 200) ppm = 200;
321 .LM28:
322 00d2 293C cpi r18,201
323 00d4 3105 cpc r19,__zero_reg__
324 00d6 00F4 brsh .L29
479:src/main.c **** if(ppm <= MIN_PPM) sollwert = 0;
326 .LM29:
327 00d8 2B30 cpi r18,11
328 00da 3105 cpc r19,__zero_reg__
329 00dc 00F4 brsh .L31
330 .L27:
331 00de 1092 0000 sts (sollwert.2390)+1,__zero_reg__
332 00e2 1092 0000 sts sollwert.2390,__zero_reg__
333 00e6 00C0 rjmp .L32
334 .L29:
335 00e8 28EC ldi r18,lo8(200)
336 00ea 30E0 ldi r19,hi8(200)
337 .L31:
480:src/main.c **** else
481:src/main.c **** {
482:src/main.c **** sollwert = (int) MIN_PWM + ((MAX_PWM - MIN_PWM) * (ppm - MIN_PPM)) / (190 - MIN
339 .LM30:
340 00ec 8CEF ldi r24,lo8(252)
341 00ee 90E0 ldi r25,hi8(252)
342 00f0 AC01 movw r20,r24
343 00f2 249F mul r18,r20
344 00f4 C001 movw r24,r0
345 00f6 259F mul r18,r21
346 00f8 900D add r25,r0
347 00fa 349F mul r19,r20
348 00fc 900D add r25,r0
349 00fe 1124 clr r1
350 0100 885D subi r24,lo8(-(-2520))
351 0102 9940 sbci r25,hi8(-(-2520))
352 0104 64EB ldi r22,lo8(180)
353 0106 70E0 ldi r23,hi8(180)
354 0108 00D0 rcall __udivmodhi4
355 010a 6D5F subi r22,lo8(-(3))
356 010c 7F4F sbci r23,hi8(-(3))
357 010e 7093 0000 sts (sollwert.2390)+1,r23
358 0112 6093 0000 sts sollwert.2390,r22
359 .L32:
483:src/main.c **** }
484:src/main.c **** PORTC &= ~ROT;
361 .LM31:
362 0116 AB98 cbi 53-0x20,3
363 0118 00C0 rjmp .L24
364 .L25:
485:src/main.c **** }
486:src/main.c **** else // Kein gültiger Sollwert
487:src/main.c **** {
488:src/main.c **** if(!TEST_SCHUB) { if(sollwert) sollwert--; }
366 .LM32:
367 011a 8091 0000 lds r24,sollwert.2390
368 011e 9091 0000 lds r25,(sollwert.2390)+1
369 0122 0097 sbiw r24,0
370 0124 01F0 breq .L33
371 0126 0197 sbiw r24,1
372 0128 9093 0000 sts (sollwert.2390)+1,r25
373 012c 8093 0000 sts sollwert.2390,r24
374 .L33:
489:src/main.c **** PORTC |= ROT;
376 .LM33:
377 0130 AB9A sbi 53-0x20,3
378 0132 00C0 rjmp .L24
379 .L20:
490:src/main.c **** }
491:src/main.c **** }
492:src/main.c **** else // I2C-Daten sind gültig
493:src/main.c **** {
494:src/main.c **** sollwert = I2C_RXBuffer;
381 .LM34:
382 0134 8091 0000 lds r24,I2C_RXBuffer
383 0138 9927 clr r25
384 013a 9093 0000 sts (sollwert.2390)+1,r25
385 013e 8093 0000 sts sollwert.2390,r24
495:src/main.c **** PPM_Betrieb = 0;
387 .LM35:
388 0142 1092 0000 sts PPM_Betrieb,__zero_reg__
496:src/main.c **** PORTC &= ~ROT;
390 .LM36:
391 0146 AB98 cbi 53-0x20,3
497:src/main.c **** ICP_INT_DISABLE;
393 .LM37:
394 0148 89B7 in r24,89-0x20
395 014a 8F7D andi r24,lo8(-33)
396 014c 89BF out 89-0x20,r24
397 .L24:
498:src/main.c **** }
499:src/main.c **** if(sollwert > MAX_PWM) sollwert = MAX_PWM;
399 .LM38:
400 014e 8091 0000 lds r24,sollwert.2390
401 0152 9091 0000 lds r25,(sollwert.2390)+1
402 0156 8F3F cpi r24,255
403 0158 9105 cpc r25,__zero_reg__
404 015a 01F0 breq .L35
405 015c 00F0 brlo .L35
406 015e 8FEF ldi r24,lo8(255)
407 0160 90E0 ldi r25,hi8(255)
408 0162 9093 0000 sts (sollwert.2390)+1,r25
409 0166 8093 0000 sts sollwert.2390,r24
410 .L35:
411 016a 8091 0000 lds r24,sollwert.2390
500:src/main.c **** return(sollwert);
501:src/main.c **** }
413 .LM39:
414 016e 9927 clr r25
415 /* epilogue: frame size=0 */
416 0170 0895 ret
417 /* epilogue end (size=1) */
418 /* function SollwertErmittlung size 127 (126) */
424 .Lscope5:
426 .stabd 78,0,0
428 .global DebugAusgaben
430 DebugAusgaben:
431 .stabd 46,0,0
502:src/main.c ****
503:src/main.c **** void DebugAusgaben(void)
504:src/main.c **** {
433 .LM40:
434 .LFBB6:
435 /* prologue: frame size=0 */
436 /* prologue end (size=0) */
505:src/main.c **** DebugOut.Analog[0] = Strom;
438 .LM41:
439 0172 8091 0000 lds r24,Strom
440 0176 9091 0000 lds r25,(Strom)+1
441 017a 9093 0000 sts (DebugOut+18)+1,r25
442 017e 8093 0000 sts DebugOut+18,r24
506:src/main.c **** DebugOut.Analog[1] = Mittelstrom;
444 .LM42:
445 0182 8091 0000 lds r24,Mittelstrom
446 0186 9927 clr r25
447 0188 9093 0000 sts (DebugOut+20)+1,r25
448 018c 8093 0000 sts DebugOut+20,r24
507:src/main.c **** DebugOut.Analog[2] = SIO_Drehzahl;
450 .LM43:
451 0190 8091 0000 lds r24,SIO_Drehzahl
452 0194 9091 0000 lds r25,(SIO_Drehzahl)+1
453 0198 9093 0000 sts (DebugOut+22)+1,r25
454 019c 8093 0000 sts DebugOut+22,r24
508:src/main.c **** DebugOut.Analog[3] = PPM_Signal;
456 .LM44:
457 01a0 8091 0000 lds r24,PPM_Signal
458 01a4 9091 0000 lds r25,(PPM_Signal)+1
459 01a8 9093 0000 sts (DebugOut+24)+1,r25
460 01ac 8093 0000 sts DebugOut+24,r24
461 /* epilogue: frame size=0 */
462 01b0 0895 ret
463 /* epilogue end (size=1) */
464 /* function DebugAusgaben size 32 (31) */
466 .Lscope6:
468 .stabd 78,0,0
471 .global RotBlink
473 RotBlink:
474 .stabd 46,0,0
476 .LM45:
477 .LFBB7:
478 /* prologue: frame size=0 */
479 01b2 1F93 push r17
480 /* prologue end (size=1) */
481 01b4 182F mov r17,r24
483 .LM46:
484 /* #APP */
485 01b6 7894 sei
486 /* #NOAPP */
487 01b8 00C0 rjmp .L41
488 .L42:
490 .LM47:
491 01ba AB9A sbi 53-0x20,3
493 .LM48:
494 01bc 8CE2 ldi r24,lo8(300)
495 01be 91E0 ldi r25,hi8(300)
496 01c0 00D0 rcall Delay_ms
498 .LM49:
499 01c2 AB98 cbi 53-0x20,3
501 .LM50:
502 01c4 8CE2 ldi r24,lo8(300)
503 01c6 91E0 ldi r25,hi8(300)
504 01c8 00D0 rcall Delay_ms
505 .L41:
507 .LM51:
508 01ca 1150 subi r17,1
509 01cc 00F4 brcc .L42
511 .LM52:
512 01ce 88EE ldi r24,lo8(1000)
513 01d0 93E0 ldi r25,hi8(1000)
514 01d2 00D0 rcall Delay_ms
515 /* epilogue: frame size=0 */
516 01d4 1F91 pop r17
517 01d6 0895 ret
518 /* epilogue end (size=2) */
519 /* function RotBlink size 21 (18) */
521 .Lscope7:
523 .stabd 78,0,0
526 .global DelayM
528 DelayM:
529 .stabd 46,0,0
531 .LM53:
532 .LFBB8:
533 /* prologue: frame size=0 */
534 01d8 CF93 push r28
535 01da DF93 push r29
536 /* prologue end (size=2) */
537 01dc EC01 movw r28,r24
538 01de 00C0 rjmp .L46
539 .L47:
541 .LM54:
542 01e0 00D0 rcall FastADConvert
544 .LM55:
545 01e2 8091 0000 lds r24,RuheStrom
546 01e6 9091 0000 lds r25,(RuheStrom)+1
547 01ea 8858 subi r24,lo8(-(120))
548 01ec 9F4F sbci r25,hi8(-(120))
549 01ee 2091 0000 lds r18,Strom
550 01f2 3091 0000 lds r19,(Strom)+1
551 01f6 8217 cp r24,r18
552 01f8 9307 cpc r25,r19
553 01fa 00F4 brsh .L46
555 .LM56:
556 01fc 82B3 in r24,50-0x20
557 01fe 877C andi r24,lo8(-57)
558 0200 82BB out 50-0x20,r24
559 0202 88B3 in r24,56-0x20
560 0204 817F andi r24,lo8(-15)
561 0206 88BB out 56-0x20,r24
562 0208 81E0 ldi r24,lo8(1)
563 020a 90E0 ldi r25,hi8(1)
564 020c 00C0 rjmp .L49
565 .L46:
567 .LM57:
568 020e 2197 sbiw r28,1
569 0210 8FEF ldi r24,hi8(-1)
570 0212 CF3F cpi r28,lo8(-1)
571 0214 D807 cpc r29,r24
572 0216 01F4 brne .L47
573 0218 80E0 ldi r24,lo8(0)
574 021a 90E0 ldi r25,hi8(0)
575 .L49:
576 /* epilogue: frame size=0 */
577 021c DF91 pop r29
578 021e CF91 pop r28
579 0220 0895 ret
580 /* epilogue end (size=3) */
581 /* function DelayM size 37 (32) */
583 .Lscope8:
585 .stabd 78,0,0
587 .global MotorTon
589 MotorTon:
590 .stabd 46,0,0
592 .LM58:
593 .LFBB9:
594 /* prologue: frame size=5 */
595 0222 8F92 push r8
596 0224 9F92 push r9
597 0226 BF92 push r11
598 0228 CF92 push r12
599 022a DF92 push r13
600 022c EF92 push r14
601 022e FF92 push r15
602 0230 0F93 push r16
603 0232 1F93 push r17
604 0234 CF93 push r28
605 0236 DF93 push r29
606 0238 CDB7 in r28,__SP_L__
607 023a DEB7 in r29,__SP_H__
608 023c 2597 sbiw r28,5
609 023e 0FB6 in __tmp_reg__,__SREG__
610 0240 F894 cli
611 0242 DEBF out __SP_H__,r29
612 0244 0FBE out __SREG__,__tmp_reg__
613 0246 CDBF out __SP_L__,r28
614 /* prologue end (size=19) */
616 .LM59:
617 0248 DE01 movw r26,r28
618 024a 1196 adiw r26,1
619 024c E0E0 ldi r30,lo8(C.8.2210)
620 024e F0E0 ldi r31,hi8(C.8.2210)
621 0250 85E0 ldi r24,lo8(5)
622 .L55:
624 .LM60:
625 0252 0190 ld r0,Z+
626 0254 0D92 st X+,r0
627 0256 8150 subi r24,lo8(-(-1))
628 0258 01F4 brne .L55
630 .LM61:
631 025a AB98 cbi 53-0x20,3
633 .LM62:
634 025c 8091 0000 lds r24,MotorAdresse
635 0260 FE01 movw r30,r28
636 0262 E80F add r30,r24
637 0264 F11D adc r31,__zero_reg__
638 0266 8181 ldd r24,Z+1
639 0268 9927 clr r25
640 026a 2CE2 ldi r18,lo8(300)
641 026c 31E0 ldi r19,hi8(300)
642 026e AC01 movw r20,r24
643 0270 429F mul r20,r18
644 0272 C001 movw r24,r0
645 0274 439F mul r20,r19
646 0276 900D add r25,r0
647 0278 529F mul r21,r18
648 027a 900D add r25,r0
649 027c 1124 clr r1
650 027e 00D0 rcall Delay_ms
652 .LM63:
653 0280 1092 0000 sts CompInterruptFreigabe,__zero_reg__
654 0284 4398 cbi 40-0x20,3
656 .LM64:
657 /* #APP */
658 0286 F894 cli
660 .LM65:
661 /* #NOAPP */
662 0288 8AE0 ldi r24,lo8(10)
663 028a 00D0 rcall uart_putchar
665 .LM66:
666 028c 82B3 in r24,50-0x20
667 028e 877C andi r24,lo8(-57)
668 0290 82BB out 50-0x20,r24
669 0292 81E0 ldi r24,lo8(1)
670 0294 8FBD out 79-0x20,r24
671 0296 81E4 ldi r24,lo8(65)
672 0298 85BD out 69-0x20,r24
673 029a 8EE0 ldi r24,lo8(14)
674 029c 87BB out 55-0x20,r24
675 029e 88B3 in r24,56-0x20
676 02a0 817F andi r24,lo8(-15)
677 02a2 88BB out 56-0x20,r24
679 .LM67:
680 02a4 1092 0000 sts Strom_max,__zero_reg__
682 .LM68:
683 02a8 82E3 ldi r24,lo8(50)
684 02aa 90E0 ldi r25,hi8(50)
685 02ac 00D0 rcall DelayM
687 .LM69:
688 02ae 8091 0000 lds r24,Strom_max
689 02b2 9927 clr r25
690 02b4 9093 0000 sts (RuheStrom)+1,r25
691 02b8 8093 0000 sts RuheStrom,r24
693 .LM70:
694 02bc 1092 0000 sts (Strom)+1,__zero_reg__
695 02c0 1092 0000 sts Strom,__zero_reg__
697 .LM71:
698 02c4 949A sbi 50-0x20,4
700 .LM72:
701 02c6 C39A sbi 56-0x20,3
703 .LM73:
704 02c8 83E0 ldi r24,lo8(3)
705 02ca 90E0 ldi r25,hi8(3)
706 02cc 00D0 rcall DelayM
707 02ce 8823 tst r24
708 02d0 01F4 brne .L56
709 02d2 BB24 clr r11
710 02d4 00C0 rjmp .L58
711 .L56:
713 .LM74:
714 02d6 81E3 ldi r24,lo8(49)
715 02d8 00D0 rcall uart_putchar
716 02da BB24 clr r11
717 02dc B394 inc r11
718 .L58:
720 .LM75:
721 02de 82B3 in r24,50-0x20
722 02e0 877C andi r24,lo8(-57)
723 02e2 82BB out 50-0x20,r24
724 02e4 88B3 in r24,56-0x20
725 02e6 817F andi r24,lo8(-15)
726 02e8 88BB out 56-0x20,r24
728 .LM76:
729 02ea 1092 0000 sts (Strom)+1,__zero_reg__
730 02ee 1092 0000 sts Strom,__zero_reg__
732 .LM77:
733 02f2 939A sbi 50-0x20,3
735 .LM78:
736 02f4 C29A sbi 56-0x20,2
738 .LM79:
739 02f6 83E0 ldi r24,lo8(3)
740 02f8 90E0 ldi r25,hi8(3)
741 02fa 00D0 rcall DelayM
742 02fc 8823 tst r24
743 02fe 01F0 breq .L59
745 .LM80:
746 0300 82E3 ldi r24,lo8(50)
747 0302 00D0 rcall uart_putchar
748 0304 B2E0 ldi r27,lo8(2)
749 0306 BB2E mov r11,r27
750 .L59:
752 .LM81:
753 0308 82B3 in r24,50-0x20
754 030a 877C andi r24,lo8(-57)
755 030c 82BB out 50-0x20,r24
756 030e 88B3 in r24,56-0x20
757 0310 817F andi r24,lo8(-15)
758 0312 88BB out 56-0x20,r24
760 .LM82:
761 0314 1092 0000 sts (Strom)+1,__zero_reg__
762 0318 1092 0000 sts Strom,__zero_reg__
764 .LM83:
765 031c 949A sbi 50-0x20,4
767 .LM84:
768 031e C19A sbi 56-0x20,1
770 .LM85:
771 0320 83E0 ldi r24,lo8(3)
772 0322 90E0 ldi r25,hi8(3)
773 0324 00D0 rcall DelayM
774 0326 8823 tst r24
775 0328 01F0 breq .L61
777 .LM86:
778 032a 83E3 ldi r24,lo8(51)
779 032c 00D0 rcall uart_putchar
780 032e A3E0 ldi r26,lo8(3)
781 0330 BA2E mov r11,r26
782 .L61:
784 .LM87:
785 0332 82B3 in r24,50-0x20
786 0334 877C andi r24,lo8(-57)
787 0336 82BB out 50-0x20,r24
788 0338 88B3 in r24,56-0x20
789 033a 817F andi r24,lo8(-15)
790 033c 88BB out 56-0x20,r24
792 .LM88:
793 033e 939A sbi 50-0x20,3
795 .LM89:
796 0340 C19A sbi 56-0x20,1
798 .LM90:
799 0342 83E0 ldi r24,lo8(3)
800 0344 90E0 ldi r25,hi8(3)
801 0346 00D0 rcall DelayM
802 0348 8823 tst r24
803 034a 01F0 breq .L63
805 .LM91:
806 034c 87E3 ldi r24,lo8(55)
807 034e 00D0 rcall uart_putchar
808 0350 F3E0 ldi r31,lo8(3)
809 0352 BF2E mov r11,r31
810 .L63:
812 .LM92:
813 0354 82B3 in r24,50-0x20
814 0356 877C andi r24,lo8(-57)
815 0358 82BB out 50-0x20,r24
816 035a 88B3 in r24,56-0x20
817 035c 817F andi r24,lo8(-15)
818 035e 88BB out 56-0x20,r24
820 .LM93:
821 0360 80E1 ldi r24,lo8(10000)
822 0362 97E2 ldi r25,hi8(10000)
823 0364 00D0 rcall DelayM
825 .LM94:
826 0366 BB20 tst r11
827 0368 01F0 breq .L65
828 .L138:
829 036a 8B2D mov r24,r11
830 036c 00D0 rcall RotBlink
831 036e 00C0 rjmp .L138
832 .L65:
834 .LM95:
835 0370 8CB1 in r24,44-0x20
836 0372 8032 cpi r24,lo8(32)
837 0374 01F0 breq .L67
838 0376 E8EE ldi r30,lo8(1000)
839 0378 8E2E mov r8,r30
840 037a E3E0 ldi r30,hi8(1000)
841 037c 9E2E mov r9,r30
842 037e 82E3 ldi r24,lo8(50)
843 0380 00C0 rjmp .L69
844 .L67:
845 0382 8FE5 ldi r24,lo8(95)
846 0384 00D0 rcall uart_putchar
847 0386 8824 clr r8
848 0388 8A94 dec r8
849 038a 982C mov r9,r8
850 038c 88E2 ldi r24,lo8(40)
851 .L69:
853 .LM96:
854 038e 1092 0000 sts (Strom)+1,__zero_reg__
855 0392 1092 0000 sts Strom,__zero_reg__
856 0396 00E0 ldi r16,lo8(0)
857 0398 10E0 ldi r17,hi8(0)
859 .LM97:
860 039a C82E mov r12,r24
861 039c DD24 clr r13
862 .L70:
864 .LM98:
865 039e 939A sbi 50-0x20,3
867 .LM99:
868 03a0 81E0 ldi r24,lo8(1)
869 03a2 90E0 ldi r25,hi8(1)
870 03a4 00D0 rcall DelayM
872 .LM100:
873 03a6 82B3 in r24,50-0x20
874 03a8 877C andi r24,lo8(-57)
875 03aa 82BB out 50-0x20,r24
876 03ac 88B3 in r24,56-0x20
877 03ae 817F andi r24,lo8(-15)
878 03b0 88BB out 56-0x20,r24
880 .LM101:
881 03b2 C39A sbi 56-0x20,3
883 .LM102:
884 03b4 81E0 ldi r24,lo8(1)
885 03b6 90E0 ldi r25,hi8(1)
886 03b8 00D0 rcall DelayM
888 .LM103:
889 03ba 82B3 in r24,50-0x20
890 03bc 877C andi r24,lo8(-57)
891 03be 82BB out 50-0x20,r24
892 03c0 88B3 in r24,56-0x20
893 03c2 817F andi r24,lo8(-15)
894 03c4 88BB out 56-0x20,r24
896 .LM104:
897 03c6 7601 movw r14,r12
898 03c8 8091 0000 lds r24,RuheStrom
899 03cc 9091 0000 lds r25,(RuheStrom)+1
900 03d0 8C0D add r24,r12
901 03d2 9D1D adc r25,r13
902 03d4 2091 0000 lds r18,Strom
903 03d8 3091 0000 lds r19,(Strom)+1
904 03dc 8217 cp r24,r18
905 03de 9307 cpc r25,r19
906 03e0 00F4 brsh .L71
907 03e2 84E3 ldi r24,lo8(52)
908 03e4 00D0 rcall uart_putchar
909 03e6 74E0 ldi r23,lo8(4)
910 03e8 B72E mov r11,r23
911 03ea 00C0 rjmp .L73
912 .L71:
914 .LM105:
915 03ec 0F5F subi r16,lo8(-(1))
916 03ee 1F4F sbci r17,hi8(-(1))
917 03f0 0815 cp r16,r8
918 03f2 1905 cpc r17,r9
919 03f4 01F4 brne .L70
920 .L73:
922 .LM106:
923 03f6 1092 0000 sts (Strom)+1,__zero_reg__
924 03fa 1092 0000 sts Strom,__zero_reg__
925 03fe 00E0 ldi r16,lo8(0)
926 0400 10E0 ldi r17,hi8(0)
927 .L74:
929 .LM107:
930 0402 949A sbi 50-0x20,4
932 .LM108:
933 0404 81E0 ldi r24,lo8(1)
934 0406 90E0 ldi r25,hi8(1)
935 0408 00D0 rcall DelayM
937 .LM109:
938 040a 82B3 in r24,50-0x20
939 040c 877C andi r24,lo8(-57)
940 040e 82BB out 50-0x20,r24
941 0410 88B3 in r24,56-0x20
942 0412 817F andi r24,lo8(-15)
943 0414 88BB out 56-0x20,r24
945 .LM110:
946 0416 C29A sbi 56-0x20,2
948 .LM111:
949 0418 81E0 ldi r24,lo8(1)
950 041a 90E0 ldi r25,hi8(1)
951 041c 00D0 rcall DelayM
953 .LM112:
954 041e 82B3 in r24,50-0x20
955 0420 877C andi r24,lo8(-57)
956 0422 82BB out 50-0x20,r24
957 0424 88B3 in r24,56-0x20
958 0426 817F andi r24,lo8(-15)
959 0428 88BB out 56-0x20,r24
961 .LM113:
962 042a 8091 0000 lds r24,RuheStrom
963 042e 9091 0000 lds r25,(RuheStrom)+1
964 0432 8E0D add r24,r14
965 0434 9F1D adc r25,r15
966 0436 2091 0000 lds r18,Strom
967 043a 3091 0000 lds r19,(Strom)+1
968 043e 8217 cp r24,r18
969 0440 9307 cpc r25,r19
970 0442 00F4 brsh .L75
971 0444 85E3 ldi r24,lo8(53)
972 0446 00D0 rcall uart_putchar
973 0448 65E0 ldi r22,lo8(5)
974 044a B62E mov r11,r22
975 044c 00C0 rjmp .L77
976 .L75:
978 .LM114:
979 044e 0F5F subi r16,lo8(-(1))
980 0450 1F4F sbci r17,hi8(-(1))
981 0452 0815 cp r16,r8
982 0454 1905 cpc r17,r9
983 0456 01F4 brne .L74
984 .L77:
986 .LM115:
987 0458 1092 0000 sts (Strom)+1,__zero_reg__
988 045c 1092 0000 sts Strom,__zero_reg__
989 0460 00E0 ldi r16,lo8(0)
990 0462 10E0 ldi r17,hi8(0)
991 .L78:
993 .LM116:
994 0464 959A sbi 50-0x20,5
996 .LM117:
997 0466 81E0 ldi r24,lo8(1)
998 0468 90E0 ldi r25,hi8(1)
999 046a 00D0 rcall DelayM
1001 .LM118:
1002 046c 82B3 in r24,50-0x20
1003 046e 877C andi r24,lo8(-57)
1004 0470 82BB out 50-0x20,r24
1005 0472 88B3 in r24,56-0x20
1006 0474 817F andi r24,lo8(-15)
1007 0476 88BB out 56-0x20,r24
1009 .LM119:
1010 0478 C19A sbi 56-0x20,1
1012 .LM120:
1013 047a 81E0 ldi r24,lo8(1)
1014 047c 90E0 ldi r25,hi8(1)
1015 047e 00D0 rcall DelayM
1017 .LM121:
1018 0480 82B3 in r24,50-0x20
1019 0482 877C andi r24,lo8(-57)
1020 0484 82BB out 50-0x20,r24
1021 0486 88B3 in r24,56-0x20
1022 0488 817F andi r24,lo8(-15)
1023 048a 88BB out 56-0x20,r24
1025 .LM122:
1026 048c 8091 0000 lds r24,RuheStrom
1027 0490 9091 0000 lds r25,(RuheStrom)+1
1028 0494 8E0D add r24,r14
1029 0496 9F1D adc r25,r15
1030 0498 2091 0000 lds r18,Strom
1031 049c 3091 0000 lds r19,(Strom)+1
1032 04a0 8217 cp r24,r18
1033 04a2 9307 cpc r25,r19
1034 04a4 00F4 brsh .L79
1035 04a6 86E3 ldi r24,lo8(54)
1036 04a8 00D0 rcall uart_putchar
1037 04aa 56E0 ldi r21,lo8(6)
1038 04ac B52E mov r11,r21
1039 04ae 00C0 rjmp .L81
1040 .L79:
1042 .LM123:
1043 04b0 0F5F subi r16,lo8(-(1))
1044 04b2 1F4F sbci r17,hi8(-(1))
1045 04b4 0815 cp r16,r8
1046 04b6 1905 cpc r17,r9
1047 04b8 01F4 brne .L78
1048 .L81:
1050 .LM124:
1051 04ba 17B8 out 39-0x20,__zero_reg__
1053 .LM125:
1054 04bc 82B3 in r24,50-0x20
1055 04be 877C andi r24,lo8(-57)
1056 04c0 82BB out 50-0x20,r24
1057 04c2 88B3 in r24,56-0x20
1058 04c4 817F andi r24,lo8(-15)
1059 04c6 88BB out 56-0x20,r24
1061 .LM126:
1062 04c8 949A sbi 50-0x20,4
1064 .LM127:
1065 04ca 959A sbi 50-0x20,5
1067 .LM128:
1068 04cc 1092 0000 sts (Strom)+1,__zero_reg__
1069 04d0 1092 0000 sts Strom,__zero_reg__
1070 04d4 00E0 ldi r16,lo8(0)
1071 04d6 10E0 ldi r17,hi8(0)
1072 04d8 FF24 clr r15
1073 .L82:
1075 .LM129:
1076 04da C39A sbi 56-0x20,3
1078 .LM130:
1079 04dc 80E0 ldi r24,lo8(0)
1080 04de 90E0 ldi r25,hi8(0)
1081 04e0 00D0 rcall MessAD
1082 04e2 C397 sbiw r24,51
1083 04e4 04F0 brlt .L83
1084 04e6 51E0 ldi r21,lo8(1)
1085 04e8 F52A or r15,r21
1086 04ea 00C0 rjmp .L85
1087 .L83:
1088 04ec 8EEF ldi r24,lo8(-2)
1089 04ee F822 and r15,r24
1090 .L85:
1092 .LM131:
1093 04f0 18BA out 56-0x20,__zero_reg__
1095 .LM132:
1096 04f2 0F5F subi r16,lo8(-(1))
1097 04f4 1F4F sbci r17,hi8(-(1))
1098 04f6 0937 cpi r16,121
1099 04f8 1105 cpc r17,__zero_reg__
1100 04fa 01F4 brne .L82
1102 .LM133:
1103 04fc 82B3 in r24,50-0x20
1104 04fe 877C andi r24,lo8(-57)
1105 0500 82BB out 50-0x20,r24
1106 0502 88B3 in r24,56-0x20
1107 0504 817F andi r24,lo8(-15)
1108 0506 88BB out 56-0x20,r24
1110 .LM134:
1111 0508 939A sbi 50-0x20,3
1113 .LM135:
1114 050a 959A sbi 50-0x20,5
1115 050c 00E0 ldi r16,lo8(0)
1116 050e 10E0 ldi r17,hi8(0)
1117 .L87:
1119 .LM136:
1120 0510 C29A sbi 56-0x20,2
1122 .LM137:
1123 0512 81E0 ldi r24,lo8(1)
1124 0514 90E0 ldi r25,hi8(1)
1125 0516 00D0 rcall MessAD
1126 0518 C397 sbiw r24,51
1127 051a 04F0 brlt .L88
1128 051c 42E0 ldi r20,lo8(2)
1129 051e F42A or r15,r20
1130 0520 00C0 rjmp .L90
1131 .L88:
1132 0522 5DEF ldi r21,lo8(-3)
1133 0524 F522 and r15,r21
1134 .L90:
1136 .LM138:
1137 0526 18BA out 56-0x20,__zero_reg__
1139 .LM139:
1140 0528 0F5F subi r16,lo8(-(1))
1141 052a 1F4F sbci r17,hi8(-(1))
1142 052c 0538 cpi r16,133
1143 052e 1105 cpc r17,__zero_reg__
1144 0530 01F4 brne .L87
1146 .LM140:
1147 0532 82B3 in r24,50-0x20
1148 0534 877C andi r24,lo8(-57)
1149 0536 82BB out 50-0x20,r24
1150 0538 88B3 in r24,56-0x20
1151 053a 817F andi r24,lo8(-15)
1152 053c 88BB out 56-0x20,r24
1154 .LM141:
1155 053e 939A sbi 50-0x20,3
1157 .LM142:
1158 0540 949A sbi 50-0x20,4
1159 0542 00E0 ldi r16,lo8(0)
1160 0544 10E0 ldi r17,hi8(0)
1161 .L92:
1163 .LM143:
1164 0546 C19A sbi 56-0x20,1
1166 .LM144:
1167 0548 82E0 ldi r24,lo8(2)
1168 054a 90E0 ldi r25,hi8(2)
1169 054c 00D0 rcall MessAD
1170 054e C397 sbiw r24,51
1171 0550 04F0 brlt .L93
1172 0552 84E0 ldi r24,lo8(4)
1173 0554 F82A or r15,r24
1174 0556 00C0 rjmp .L95
1175 .L93:
1176 0558 4BEF ldi r20,lo8(-5)
1177 055a F422 and r15,r20
1178 .L95:
1180 .LM145:
1181 055c 18BA out 56-0x20,__zero_reg__
1183 .LM146:
1184 055e 0F5F subi r16,lo8(-(1))
1185 0560 1F4F sbci r17,hi8(-(1))
1186 0562 0F36 cpi r16,111
1187 0564 1105 cpc r17,__zero_reg__
1188 0566 01F4 brne .L92
1190 .LM147:
1191 0568 82B3 in r24,50-0x20
1192 056a 877C andi r24,lo8(-57)
1193 056c 82BB out 50-0x20,r24
1194 056e 88B3 in r24,56-0x20
1195 0570 817F andi r24,lo8(-15)
1196 0572 88BB out 56-0x20,r24
1198 .LM148:
1199 0574 81E0 ldi r24,lo8(1)
1200 0576 87B9 out 39-0x20,r24
1202 .LM149:
1203 0578 939A sbi 50-0x20,3
1204 057a 00E0 ldi r16,lo8(0)
1205 057c 10E0 ldi r17,hi8(0)
1206 .L97:
1208 .LM150:
1209 057e C29A sbi 56-0x20,2
1211 .LM151:
1212 0580 80E0 ldi r24,lo8(0)
1213 0582 90E0 ldi r25,hi8(0)
1214 0584 00D0 rcall MessAD
1215 0586 C397 sbiw r24,51
1216 0588 04F0 brlt .L98
1217 058a 57EF ldi r21,lo8(-9)
1218 058c F522 and r15,r21
1219 058e 00C0 rjmp .L100
1220 .L98:
1221 0590 88E0 ldi r24,lo8(8)
1222 0592 F82A or r15,r24
1223 .L100:
1225 .LM152:
1226 0594 18BA out 56-0x20,__zero_reg__
1228 .LM153:
1229 0596 0F5F subi r16,lo8(-(1))
1230 0598 1F4F sbci r17,hi8(-(1))
1231 059a 0937 cpi r16,121
1232 059c 1105 cpc r17,__zero_reg__
1233 059e 01F4 brne .L97
1235 .LM154:
1236 05a0 959A sbi 50-0x20,5
1237 05a2 00E0 ldi r16,lo8(0)
1238 05a4 10E0 ldi r17,hi8(0)
1239 .L102:
1241 .LM155:
1242 05a6 C29A sbi 56-0x20,2
1244 .LM156:
1245 05a8 82E0 ldi r24,lo8(2)
1246 05aa 90E0 ldi r25,hi8(2)
1247 05ac 00D0 rcall MessAD
1248 05ae C397 sbiw r24,51
1249 05b0 04F0 brlt .L103
1250 05b2 4FED ldi r20,lo8(-33)
1251 05b4 F422 and r15,r20
1252 05b6 00C0 rjmp .L105
1253 .L103:
1254 05b8 50E2 ldi r21,lo8(32)
1255 05ba F52A or r15,r21
1256 .L105:
1258 .LM157:
1259 05bc 18BA out 56-0x20,__zero_reg__
1261 .LM158:
1262 05be 0F5F subi r16,lo8(-(1))
1263 05c0 1F4F sbci r17,hi8(-(1))
1264 05c2 0538 cpi r16,133
1265 05c4 1105 cpc r17,__zero_reg__
1266 05c6 01F4 brne .L102
1268 .LM159:
1269 05c8 82B3 in r24,50-0x20
1270 05ca 877C andi r24,lo8(-57)
1271 05cc 82BB out 50-0x20,r24
1272 05ce 88B3 in r24,56-0x20
1273 05d0 817F andi r24,lo8(-15)
1274 05d2 88BB out 56-0x20,r24
1276 .LM160:
1277 05d4 82B3 in r24,50-0x20
1278 05d6 877C andi r24,lo8(-57)
1279 05d8 82BB out 50-0x20,r24
1280 05da 88B3 in r24,56-0x20
1281 05dc 817F andi r24,lo8(-15)
1282 05de 88BB out 56-0x20,r24
1284 .LM161:
1285 05e0 949A sbi 50-0x20,4
1286 05e2 00E0 ldi r16,lo8(0)
1287 05e4 10E0 ldi r17,hi8(0)
1288 .L107:
1290 .LM162:
1291 05e6 C19A sbi 56-0x20,1
1293 .LM163:
1294 05e8 81E0 ldi r24,lo8(1)
1295 05ea 90E0 ldi r25,hi8(1)
1296 05ec 00D0 rcall MessAD
1297 05ee C397 sbiw r24,51
1298 05f0 04F0 brlt .L108
1299 05f2 8FEE ldi r24,lo8(-17)
1300 05f4 F822 and r15,r24
1301 05f6 00C0 rjmp .L110
1302 .L108:
1303 05f8 40E1 ldi r20,lo8(16)
1304 05fa F42A or r15,r20
1305 .L110:
1307 .LM164:
1308 05fc 18BA out 56-0x20,__zero_reg__
1310 .LM165:
1311 05fe 0F5F subi r16,lo8(-(1))
1312 0600 1F4F sbci r17,hi8(-(1))
1313 0602 0F36 cpi r16,111
1314 0604 1105 cpc r17,__zero_reg__
1315 0606 01F4 brne .L107
1317 .LM166:
1318 0608 82B3 in r24,50-0x20
1319 060a 877C andi r24,lo8(-57)
1320 060c 82BB out 50-0x20,r24
1321 060e 88B3 in r24,56-0x20
1322 0610 817F andi r24,lo8(-15)
1323 0612 88BB out 56-0x20,r24
1325 .LM167:
1326 /* #APP */
1327 0614 7894 sei
1329 .LM168:
1330 /* #NOAPP */
1331 0616 8091 0000 lds r24,MotorAdresse
1332 061a FE01 movw r30,r28
1333 061c E80F add r30,r24
1334 061e F11D adc r31,__zero_reg__
1335 0620 2181 ldd r18,Z+1
1336 0622 84E0 ldi r24,lo8(4)
1337 0624 90E0 ldi r25,hi8(4)
1338 0626 821B sub r24,r18
1339 0628 9109 sbc r25,__zero_reg__
1340 062a 2CE2 ldi r18,lo8(300)
1341 062c 31E0 ldi r19,hi8(300)
1342 062e AC01 movw r20,r24
1343 0630 429F mul r20,r18
1344 0632 C001 movw r24,r0
1345 0634 439F mul r20,r19
1346 0636 900D add r25,r0
1347 0638 529F mul r21,r18
1348 063a 900D add r25,r0
1349 063c 1124 clr r1
1350 063e 00D0 rcall Delay_ms
1352 .LM169:
1353 0640 8F2D mov r24,r15
1354 0642 9927 clr r25
1355 0644 80FD sbrc r24,0
1356 0646 00C0 rjmp .L112
1357 0648 81E4 ldi r24,lo8(65)
1358 064a 8CB9 out 44-0x20,r24
1359 064c BB24 clr r11
1360 064e B394 inc r11
1361 0650 00C0 rjmp .L114
1362 .L112:
1364 .LM170:
1365 0652 81FD sbrc r24,1
1366 0654 00C0 rjmp .L115
1367 0656 82E4 ldi r24,lo8(66)
1368 0658 8CB9 out 44-0x20,r24
1369 065a 42E0 ldi r20,lo8(2)
1370 065c B42E mov r11,r20
1371 065e 00C0 rjmp .L114
1372 .L115:
1374 .LM171:
1375 0660 82FD sbrc r24,2
1376 0662 00C0 rjmp .L117
1377 0664 83E4 ldi r24,lo8(67)
1378 0666 8CB9 out 44-0x20,r24
1379 0668 33E0 ldi r19,lo8(3)
1380 066a B32E mov r11,r19
1381 066c 00C0 rjmp .L114
1382 .L117:
1384 .LM172:
1385 066e 83FD sbrc r24,3
1386 0670 00C0 rjmp .L119
1387 0672 81E6 ldi r24,lo8(97)
1388 0674 8CB9 out 44-0x20,r24
1389 0676 24E0 ldi r18,lo8(4)
1390 0678 B22E mov r11,r18
1391 067a 00C0 rjmp .L114
1392 .L119:
1394 .LM173:
1395 067c 84FD sbrc r24,4
1396 067e 00C0 rjmp .L121
1397 0680 82E6 ldi r24,lo8(98)
1398 0682 8CB9 out 44-0x20,r24
1399 0684 95E0 ldi r25,lo8(5)
1400 0686 B92E mov r11,r25
1401 0688 00C0 rjmp .L114
1402 .L121:
1404 .LM174:
1405 068a 85FD sbrc r24,5
1406 068c 00C0 rjmp .L123
1407 068e 83E6 ldi r24,lo8(99)
1408 0690 8CB9 out 44-0x20,r24
1409 0692 86E0 ldi r24,lo8(6)
1410 0694 B82E mov r11,r24
1411 0696 00C0 rjmp .L114
1412 .L123:
1414 .LM175:
1415 0698 BB20 tst r11
1416 069a 01F0 breq .L125
1417 .L114:
1418 069c 88EE ldi r24,lo8(1000)
1419 069e 93E0 ldi r25,hi8(1000)
1420 06a0 00D0 rcall Delay_ms
1421 .L125:
1423 .LM176:
1424 06a2 8B2D mov r24,r11
1425 06a4 00D0 rcall RotBlink
1427 .LM177:
1428 06a6 8EE2 ldi r24,lo8(46)
1429 06a8 00D0 rcall uart_putchar
1430 /* epilogue: frame size=5 */
1431 06aa 2596 adiw r28,5
1432 06ac 0FB6 in __tmp_reg__,__SREG__
1433 06ae F894 cli
1434 06b0 DEBF out __SP_H__,r29
1435 06b2 0FBE out __SREG__,__tmp_reg__
1436 06b4 CDBF out __SP_L__,r28
1437 06b6 DF91 pop r29
1438 06b8 CF91 pop r28
1439 06ba 1F91 pop r17
1440 06bc 0F91 pop r16
1441 06be FF90 pop r15
1442 06c0 EF90 pop r14
1443 06c2 DF90 pop r13
1444 06c4 CF90 pop r12
1445 06c6 BF90 pop r11
1446 06c8 9F90 pop r9
1447 06ca 8F90 pop r8
1448 06cc 0895 ret
1449 /* epilogue end (size=18) */
1450 /* function MotorTon size 607 (570) */
1460 .Lscope9:
1462 .stabd 78,0,0
1465 .global Anwerfen
1467 Anwerfen:
1468 .stabd 46,0,0
1470 .LM178:
1471 .LFBB10:
1472 /* prologue: frame size=0 */
1473 06ce AF92 push r10
1474 06d0 BF92 push r11
1475 06d2 CF92 push r12
1476 06d4 DF92 push r13
1477 06d6 EF92 push r14
1478 06d8 FF92 push r15
1479 06da 0F93 push r16
1480 06dc 1F93 push r17
1481 06de CF93 push r28
1482 06e0 DF93 push r29
1483 /* prologue end (size=10) */
1484 06e2 182F mov r17,r24
1486 .LM179:
1487 06e4 1092 0000 sts CompInterruptFreigabe,__zero_reg__
1488 06e8 4398 cbi 40-0x20,3
1490 .LM180:
1491 06ea 85E0 ldi r24,lo8(5)
1492 06ec 90E0 ldi r25,hi8(5)
1493 06ee 9093 0000 sts (PWM)+1,r25
1494 06f2 8093 0000 sts PWM,r24
1496 .LM181:
1497 06f6 00D0 rcall SetPWM
1499 .LM182:
1500 06f8 00D0 rcall Manuell
1502 .LM183:
1503 06fa 88EC ldi r24,lo8(200)
1504 06fc 90E0 ldi r25,hi8(200)
1505 06fe 00D0 rcall Delay_ms
1507 .LM184:
1508 0700 C12F mov r28,r17
1509 0702 DD27 clr r29
1510 0704 D093 0000 sts (PWM)+1,r29
1511 0708 C093 0000 sts PWM,r28
1512 070c 1CE2 ldi r17,lo8(300)
1513 070e A12E mov r10,r17
1514 0710 11E0 ldi r17,hi8(300)
1515 0712 B12E mov r11,r17
1516 0714 C12C mov r12,__zero_reg__
1517 0716 D12C mov r13,__zero_reg__
1518 .L160:
1520 .LM185:
1521 0718 EE24 clr r14
1522 071a FF24 clr r15
1523 071c 8701 movw r16,r14
1524 071e 00C0 rjmp .L147
1525 .L148:
1527 .LM186:
1528 0720 8091 0000 lds r24,UebertragungAbgeschlossen
1529 0724 8823 tst r24
1530 0726 01F4 brne .L149
1531 0728 00D0 rcall SendUart
1532 072a 00C0 rjmp .L151
1533 .L149:
1535 .LM187:
1536 072c 00D0 rcall DatenUebertragung
1537 .L151:
1539 .LM188:
1540 072e 84E6 ldi r24,lo8(100)
1541 0730 00D0 rcall Wait
1543 .LM189:
1544 0732 0894 sec
1545 0734 E11C adc r14,__zero_reg__
1546 0736 F11C adc r15,__zero_reg__
1547 0738 011D adc r16,__zero_reg__
1548 073a 111D adc r17,__zero_reg__
1549 .L147:
1550 073c EA14 cp r14,r10
1551 073e FB04 cpc r15,r11
1552 0740 0C05 cpc r16,r12
1553 0742 1D05 cpc r17,r13
1554 0744 01F4 brne .L148
1556 .LM190:
1557 0746 C601 movw r24,r12
1558 0748 B501 movw r22,r10
1559 074a 2FE0 ldi r18,lo8(15)
1560 074c 30E0 ldi r19,hi8(15)
1561 074e 40E0 ldi r20,hlo8(15)
1562 0750 50E0 ldi r21,hhi8(15)
1563 0752 00D0 rcall __udivmodsi4
1564 0754 A21A sub r10,r18
1565 0756 B30A sbc r11,r19
1566 0758 C40A sbc r12,r20
1567 075a D50A sbc r13,r21
1568 075c 0894 sec
1569 075e A108 sbc r10,__zero_reg__
1570 0760 B108 sbc r11,__zero_reg__
1571 0762 C108 sbc r12,__zero_reg__
1572 0764 D108 sbc r13,__zero_reg__
1574 .LM191:
1575 0766 89E1 ldi r24,lo8(25)
1576 0768 A816 cp r10,r24
1577 076a B104 cpc r11,__zero_reg__
1578 076c C104 cpc r12,__zero_reg__
1579 076e D104 cpc r13,__zero_reg__
1580 0770 00F0 brlo .L156
1582 .LM192:
1583 0772 00D0 rcall Manuell
1585 .LM193:
1586 0774 8091 0000 lds r24,Phase
1587 0778 8F5F subi r24,lo8(-(1))
1588 077a 8093 0000 sts Phase,r24
1590 .LM194:
1591 077e 8091 0000 lds r24,Phase
1592 0782 66E0 ldi r22,lo8(6)
1593 0784 00D0 rcall __udivmodqi4
1594 0786 9093 0000 sts Phase,r25
1596 .LM195:
1597 078a 00D0 rcall AdConvert
1599 .LM196:
1600 078c D093 0000 sts (PWM)+1,r29
1601 0790 C093 0000 sts PWM,r28
1603 .LM197:
1604 0794 00D0 rcall SetPWM
1606 .LM198:
1607 0796 449B sbis 40-0x20,4
1608 0798 00C0 rjmp .L160
1610 .LM199:
1611 079a 82B3 in r24,50-0x20
1612 079c 8058 subi r24,lo8(-(-128))
1613 079e 82BB out 50-0x20,r24
1614 07a0 00C0 rjmp .L160
1615 .L156:
1616 /* epilogue: frame size=0 */
1617 07a2 DF91 pop r29
1618 07a4 CF91 pop r28
1619 07a6 1F91 pop r17
1620 07a8 0F91 pop r16
1621 07aa FF90 pop r15
1622 07ac EF90 pop r14
1623 07ae DF90 pop r13
1624 07b0 CF90 pop r12
1625 07b2 BF90 pop r11
1626 07b4 AF90 pop r10
1627 07b6 0895 ret
1628 /* epilogue end (size=11) */
1629 /* function Anwerfen size 117 (96) */
1635 .Lscope10:
1637 .stabd 78,0,0
1639 .global main
1641 main:
1642 .stabd 46,0,0
509:src/main.c **** }
510:src/main.c ****
511:src/main.c ****
512:src/main.c **** //############################################################################
513:src/main.c **** //Hauptprogramm
514:src/main.c **** int main (void)
515:src/main.c **** //############################################################################
516:src/main.c **** {
1644 .LM200:
1645 .LFBB11:
1646 /* prologue: frame size=0 */
1647 07b8 C0E0 ldi r28,lo8(__stack - 0)
1648 07ba D0E0 ldi r29,hi8(__stack - 0)
1649 07bc DEBF out __SP_H__,r29
1650 07be CDBF out __SP_L__,r28
1651 /* prologue end (size=4) */
517:src/main.c **** char altPhase = 0;
518:src/main.c **** int test = 0;
519:src/main.c **** unsigned int MinUpmPulse,Blink,TestschubTimer;
520:src/main.c **** unsigned int Blink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;
521:src/main.c ****
522:src/main.c **** DDRC = 0x08;
1653 .LM201:
1654 07c0 88E0 ldi r24,lo8(8)
1655 07c2 84BB out 52-0x20,r24
523:src/main.c **** PORTC = 0x08;
1657 .LM202:
1658 07c4 85BB out 53-0x20,r24
524:src/main.c **** DDRD = 0xBA;
1660 .LM203:
1661 07c6 8AEB ldi r24,lo8(-70)
1662 07c8 81BB out 49-0x20,r24
525:src/main.c **** PORTD = 0x00;
1664 .LM204:
1665 07ca 12BA out 50-0x20,__zero_reg__
526:src/main.c **** DDRB = 0x0E;
1667 .LM205:
1668 07cc 8EE0 ldi r24,lo8(14)
1669 07ce 87BB out 55-0x20,r24
527:src/main.c **** PORTB = 0x31;
1671 .LM206:
1672 07d0 81E3 ldi r24,lo8(49)
1673 07d2 88BB out 56-0x20,r24
528:src/main.c ****
529:src/main.c **** #if (MOTORADRESSE == 0)
530:src/main.c **** PORTB |= (ADR1 + ADR2); // Pullups für Adresswahl
1675 .LM207:
1676 07d4 88B3 in r24,56-0x20
1677 07d6 806C ori r24,lo8(-64)
1678 07d8 88BB out 56-0x20,r24
531:src/main.c **** for(test=0;test<500;test++);
532:src/main.c **** if (PINB & ADR1)
1680 .LM208:
1681 07da B69B sbis 54-0x20,6
1682 07dc 00C0 rjmp .L162
533:src/main.c **** {
534:src/main.c **** if (PINB & ADR2) MotorAdresse = 1;
1684 .LM209:
1685 07de B79B sbis 54-0x20,7
1686 07e0 00C0 rjmp .L164
1687 07e2 81E0 ldi r24,lo8(1)
1688 07e4 00C0 rjmp .L220
1689 .L164:
535:src/main.c **** else MotorAdresse = 2;
1691 .LM210:
1692 07e6 82E0 ldi r24,lo8(2)
1693 07e8 00C0 rjmp .L220
1694 .L162:
536:src/main.c **** }
537:src/main.c **** else
538:src/main.c **** {
539:src/main.c **** if (PINB & ADR2) MotorAdresse = 3;
1696 .LM211:
1697 07ea B79B sbis 54-0x20,7
1698 07ec 00C0 rjmp .L167
1699 07ee 83E0 ldi r24,lo8(3)
1700 07f0 00C0 rjmp .L220
1701 .L167:
540:src/main.c **** else MotorAdresse = 4;
1703 .LM212:
1704 07f2 84E0 ldi r24,lo8(4)
1705 .L220:
1706 07f4 8093 0000 sts MotorAdresse,r24
541:src/main.c **** }
542:src/main.c **** #else
543:src/main.c **** MotorAdresse = MOTORADRESSE;
544:src/main.c **** #endif
545:src/main.c ****
546:src/main.c **** UART_Init();
1708 .LM213:
1709 07f8 00D0 rcall UART_Init
547:src/main.c **** Timer0_Init();
1711 .LM214:
1712 07fa 00D0 rcall Timer0_Init
548:src/main.c **** sei();//Globale Interrupts Einschalten
1714 .LM215:
1715 /* #APP */
1716 07fc 7894 sei
549:src/main.c ****
550:src/main.c **** // Am Blinken erkennt man die richtige Motoradresse
551:src/main.c **** /*
552:src/main.c **** for(test=0;test<5;test++)
553:src/main.c **** {
554:src/main.c **** if(test == MotorAdresse) PORTD |= GRUEN;
555:src/main.c **** Delay_ms(150);
556:src/main.c **** PORTD &= ~GRUEN;
557:src/main.c **** Delay_ms(250);
558:src/main.c **** }
559:src/main.c ****
560:src/main.c **** Delay_ms(500);
561:src/main.c **** */
562:src/main.c **** // UART_Init(); // war doppelt
563:src/main.c **** PWM_Init();
1718 .LM216:
1719 /* #NOAPP */
1720 07fe 00D0 rcall PWM_Init
564:src/main.c ****
565:src/main.c **** InitIC2_Slave(0x50);
1722 .LM217:
1723 0800 80E5 ldi r24,lo8(80)
1724 0802 00D0 rcall InitIC2_Slave
566:src/main.c **** InitPPM();
1726 .LM218:
1727 0804 00D0 rcall InitPPM
567:src/main.c ****
568:src/main.c **** Blink = SetDelay(101);
1729 .LM219:
1730 0806 85E6 ldi r24,lo8(101)
1731 0808 90E0 ldi r25,hi8(101)
1732 080a 00D0 rcall SetDelay
569:src/main.c **** Blink2 = SetDelay(102);
1734 .LM220:
1735 080c 86E6 ldi r24,lo8(102)
1736 080e 90E0 ldi r25,hi8(102)
1737 0810 00D0 rcall SetDelay
570:src/main.c **** MinUpmPulse = SetDelay(103);
1739 .LM221:
1740 0812 87E6 ldi r24,lo8(103)
1741 0814 90E0 ldi r25,hi8(103)
1742 0816 00D0 rcall SetDelay
1743 0818 EC01 movw r28,r24
571:src/main.c **** MittelstromTimer = SetDelay(254);
1745 .LM222:
1746 081a 8EEF ldi r24,lo8(254)
1747 081c 90E0 ldi r25,hi8(254)
1748 081e 00D0 rcall SetDelay
1749 0820 6C01 movw r12,r24
572:src/main.c **** DrehzahlMessTimer = SetDelay(1005);
1751 .LM223:
1752 0822 8DEE ldi r24,lo8(1005)
1753 0824 93E0 ldi r25,hi8(1005)
1754 0826 00D0 rcall SetDelay
1755 0828 8C01 movw r16,r24
573:src/main.c **** TestschubTimer = SetDelay(1006);
1757 .LM224:
1758 082a 8EEE ldi r24,lo8(1006)
1759 082c 93E0 ldi r25,hi8(1006)
1760 082e 00D0 rcall SetDelay
1761 0830 00C0 rjmp .L169
1762 .L170:
574:src/main.c **** while(!CheckDelay(MinUpmPulse))
575:src/main.c **** {
576:src/main.c **** if(SollwertErmittlung()) break;
1764 .LM225:
1765 0832 00D0 rcall SollwertErmittlung
1766 0834 8823 tst r24
1767 0836 01F4 brne .L171
1768 .L169:
1770 .LM226:
1771 0838 CE01 movw r24,r28
1772 083a 00D0 rcall CheckDelay
1773 083c 8823 tst r24
1774 083e 01F0 breq .L170
1775 .L171:
577:src/main.c **** }
578:src/main.c **** ;
579:src/main.c **** PORTD |= GRUEN;
1777 .LM227:
1778 0840 979A sbi 50-0x20,7
580:src/main.c **** PWM = 0;
1780 .LM228:
1781 0842 1092 0000 sts (PWM)+1,__zero_reg__
1782 0846 1092 0000 sts PWM,__zero_reg__
581:src/main.c ****
582:src/main.c **** SetPWM();
1784 .LM229:
1785 084a 00D0 rcall SetPWM
583:src/main.c ****
584:src/main.c **** SFIOR = 0x08; // Analog Comperator ein
1787 .LM230:
1788 084c 88E0 ldi r24,lo8(8)
1789 084e 80BF out 80-0x20,r24
585:src/main.c **** ADMUX = 1;
1791 .LM231:
1792 0850 81E0 ldi r24,lo8(1)
1793 0852 87B9 out 39-0x20,r24
586:src/main.c ****
587:src/main.c **** MinUpmPulse = SetDelay(10);
1795 .LM232:
1796 0854 8AE0 ldi r24,lo8(10)
1797 0856 90E0 ldi r25,hi8(10)
1798 0858 00D0 rcall SetDelay
1799 085a EC01 movw r28,r24
588:src/main.c **** DebugOut.Analog[1] = 1;
1801 .LM233:
1802 085c 81E0 ldi r24,lo8(1)
1803 085e 90E0 ldi r25,hi8(1)
1804 0860 9093 0000 sts (DebugOut+20)+1,r25
1805 0864 8093 0000 sts DebugOut+20,r24
589:src/main.c **** PPM_Signal = 0;
1807 .LM234:
1808 0868 1092 0000 sts (PPM_Signal)+1,__zero_reg__
1809 086c 1092 0000 sts PPM_Signal,__zero_reg__
590:src/main.c ****
591:src/main.c **** if(!SollwertErmittlung()) MotorTon();
1811 .LM235:
1812 0870 00D0 rcall SollwertErmittlung
1813 0872 8823 tst r24
1814 0874 01F4 brne .L172
1815 0876 00D0 rcall MotorTon
1816 .L172:
592:src/main.c **** //MotorTon();
593:src/main.c **** PORTB = 0x31; // Pullups wieder einschalten
1818 .LM236:
1819 0878 81E3 ldi r24,lo8(49)
1820 087a 88BB out 56-0x20,r24
1821 087c EE24 clr r14
1822 .L222:
594:src/main.c ****
595:src/main.c **** // zum Test der Hardware; Motor dreht mit konstanter Drehzahl ohne Regelung
596:src/main.c **** if(TEST_MANUELL) Anwerfen(TEST_MANUELL); // kommt von dort nicht wieder
597:src/main.c ****
598:src/main.c **** while (1)
599:src/main.c **** {
600:src/main.c **** //ShowSense();
601:src/main.c ****
602:src/main.c **** if(!TEST_SCHUB) PWM = SollwertErmittlung();
1824 .LM237:
1825 087e 00D0 rcall SollwertErmittlung
1826 0880 9927 clr r25
1827 0882 9093 0000 sts (PWM)+1,r25
1828 0886 8093 0000 sts PWM,r24
603:src/main.c **** //I2C_TXBuffer = PWM; // Antwort über I2C-Bus
604:src/main.c **** if(MANUELL_PWM) PWM = MANUELL_PWM;
605:src/main.c ****
606:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
607:src/main.c **** if(Phase != altPhase) // es gab eine Kommutierung im Interrupt
1830 .LM238:
1831 088a 8091 0000 lds r24,Phase
1832 088e 8E15 cp r24,r14
1833 0890 01F0 breq .L175
608:src/main.c **** {
609:src/main.c **** MotorGestoppt = 0;
1835 .LM239:
1836 0892 1092 0000 sts MotorGestoppt,__zero_reg__
610:src/main.c **** ZeitFuerBerechnungen = 0; // direkt nach einer Kommutierung ist Zeit
1838 .LM240:
1839 0896 1092 0000 sts ZeitFuerBerechnungen,__zero_reg__
611:src/main.c **** MinUpmPulse = SetDelay(250); // Timeout, falls ein Motor stehen bleibt
1841 .LM241:
1842 089a 8AEF ldi r24,lo8(250)
1843 089c 90E0 ldi r25,hi8(250)
1844 089e 00D0 rcall SetDelay
1845 08a0 EC01 movw r28,r24
612:src/main.c **** altPhase = Phase;
1847 .LM242:
1848 08a2 E090 0000 lds r14,Phase
1849 .L175:
613:src/main.c **** }
614:src/main.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
615:src/main.c **** if(!PWM) // Sollwert == 0
1851 .LM243:
1852 08a6 8091 0000 lds r24,PWM
1853 08aa 9091 0000 lds r25,(PWM)+1
1854 08ae 892B or r24,r25
1855 08b0 01F4 brne .L177
616:src/main.c **** {
617:src/main.c **** MotorAnwerfen = 0; // kein Startversuch
1857 .LM244:
1858 08b2 1092 0000 sts MotorAnwerfen,__zero_reg__
618:src/main.c **** ZeitFuerBerechnungen = 0;
1860 .LM245:
1861 08b6 1092 0000 sts ZeitFuerBerechnungen,__zero_reg__
619:src/main.c **** // nach 1,5 Sekunden den Motor als gestoppt betrachten
620:src/main.c **** if(CheckDelay(MotorGestopptTimer))
1863 .LM246:
1864 08ba C501 movw r24,r10
1865 08bc 00D0 rcall CheckDelay
1866 08be 8823 tst r24
1867 08c0 01F0 breq .L179
621:src/main.c **** {
622:src/main.c **** DISABLE_SENSE_INT;
1869 .LM247:
1870 08c2 1092 0000 sts CompInterruptFreigabe,__zero_reg__
1871 08c6 4398 cbi 40-0x20,3
623:src/main.c **** MotorGestoppt = 1;
1873 .LM248:
1874 08c8 91E0 ldi r25,lo8(1)
1875 08ca 9093 0000 sts MotorGestoppt,r25
624:src/main.c **** STEUER_OFF;
1877 .LM249:
1878 08ce 82B3 in r24,50-0x20
1879 08d0 877C andi r24,lo8(-57)
1880 08d2 82BB out 50-0x20,r24
1881 08d4 9FBD out 79-0x20,r25
1882 08d6 81E4 ldi r24,lo8(65)
1883 08d8 85BD out 69-0x20,r24
1884 08da 8EE0 ldi r24,lo8(14)
1885 08dc 87BB out 55-0x20,r24
1886 08de 88B3 in r24,56-0x20
1887 08e0 817F andi r24,lo8(-15)
1888 08e2 88BB out 56-0x20,r24
1889 08e4 00C0 rjmp .L179
1890 .L177:
625:src/main.c **** }
626:src/main.c **** }
627:src/main.c **** else
628:src/main.c **** {
629:src/main.c **** if(MotorGestoppt) MotorAnwerfen = 1; // Startversuch
1892 .LM250:
1893 08e6 8091 0000 lds r24,MotorGestoppt
1894 08ea 8823 tst r24
1895 08ec 01F0 breq .L181
1896 08ee 81E0 ldi r24,lo8(1)
1897 08f0 8093 0000 sts MotorAnwerfen,r24
1898 .L181:
630:src/main.c **** MotorGestopptTimer = SetDelay(1500);
1900 .LM251:
1901 08f4 8CED ldi r24,lo8(1500)
1902 08f6 95E0 ldi r25,hi8(1500)
1903 08f8 00D0 rcall SetDelay
1904 08fa 5C01 movw r10,r24
1905 .L179:
631:src/main.c **** }
632:src/main.c ****
633:src/main.c **** if(MotorGestoppt && !TEST_SCHUB) PWM = 0;
1907 .LM252:
1908 08fc 8091 0000 lds r24,MotorGestoppt
1909 0900 8823 tst r24
1910 0902 01F0 breq .L183
1911 0904 1092 0000 sts (PWM)+1,__zero_reg__
1912 0908 1092 0000 sts PWM,__zero_reg__
1913 .L183:
634:src/main.c **** SetPWM();
1915 .LM253:
1916 090c 00D0 rcall SetPWM
635:src/main.c **** // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
636:src/main.c **** if(!ZeitFuerBerechnungen++)
1918 .LM254:
1919 090e 8091 0000 lds r24,ZeitFuerBerechnungen
1920 0912 8F5F subi r24,lo8(-(1))
1921 0914 8093 0000 sts ZeitFuerBerechnungen,r24
1922 0918 8130 cpi r24,lo8(1)
1923 091a 01F0 breq .+2
1924 091c 00C0 rjmp .L222
637:src/main.c **** {
638:src/main.c **** if(MotorGestoppt) PORTD |= GRUEN; //else PORTD &= ~GRUEN;
1926 .LM255:
1927 091e 8091 0000 lds r24,MotorGestoppt
1928 0922 8111 cpse r24,__zero_reg__
1929 0924 979A sbi 50-0x20,7
1930 .L186:
639:src/main.c **** if(SIO_DEBUG)
640:src/main.c **** {
641:src/main.c **** DebugAusgaben(); // welche Werte sollen angezeigt werden?
642:src/main.c **** if(!UebertragungAbgeschlossen) SendUart();
643:src/main.c **** else DatenUebertragung();
644:src/main.c **** }
645:src/main.c **** // Berechnen des Mittleren Stroms zur (langsamen) Strombegrenzung
646:src/main.c **** if(CheckDelay(MittelstromTimer))
1932 .LM256:
1933 0926 C601 movw r24,r12
1934 0928 00D0 rcall CheckDelay
1935 092a 8823 tst r24
1936 092c 01F0 breq .L188
647:src/main.c **** {
648:src/main.c **** MittelstromTimer = SetDelay(50); // alle 50ms
1938 .LM257:
1939 092e 82E3 ldi r24,lo8(50)
1940 0930 90E0 ldi r25,hi8(50)
1941 0932 00D0 rcall SetDelay
1942 0934 6C01 movw r12,r24
649:src/main.c **** if(Mittelstrom < Strom) Mittelstrom++;// Mittelwert des Stroms bilden
1944 .LM258:
1945 0936 8091 0000 lds r24,Mittelstrom
1946 093a 482F mov r20,r24
1947 093c 5527 clr r21
1948 093e 2091 0000 lds r18,Strom
1949 0942 3091 0000 lds r19,(Strom)+1
1950 0946 4217 cp r20,r18
1951 0948 5307 cpc r21,r19
1952 094a 00F4 brsh .L190
1953 094c 8F5F subi r24,lo8(-(1))
1954 094e 00C0 rjmp .L221
1955 .L190:
650:src/main.c **** else if(Mittelstrom > Strom) Mittelstrom--;
1957 .LM259:
1958 0950 2417 cp r18,r20
1959 0952 3507 cpc r19,r21
1960 0954 00F4 brsh .L192
1961 0956 8150 subi r24,lo8(-(-1))
1962 .L221:
1963 0958 8093 0000 sts Mittelstrom,r24
1964 .L192:
651:src/main.c **** if(Strom > MAX_STROM) MaxPWM -= MaxPWM / 32;
1966 .LM260:
1967 095c 293C cpi r18,201
1968 095e 3105 cpc r19,__zero_reg__
1969 0960 00F0 brlo .L194
1970 0962 8091 0000 lds r24,MaxPWM
1971 0966 982F mov r25,r24
1972 0968 9295 swap r25
1973 096a 9695 lsr r25
1974 096c 9770 andi r25,0x7
1975 096e 891B sub r24,r25
1976 0970 8093 0000 sts MaxPWM,r24
1977 .L194:
652:src/main.c **** if((Mittelstrom > LIMIT_STROM))// Strom am Limit?
1979 .LM261:
1980 0974 8091 0000 lds r24,Mittelstrom
1981 0978 9091 0000 lds r25,MaxPWM
1982 097c 8937 cpi r24,lo8(121)
1983 097e 00F0 brlo .L196
653:src/main.c **** {
654:src/main.c **** if(MaxPWM) MaxPWM--;// dann die Maximale PWM herunterfahren
1985 .LM262:
1986 0980 9923 tst r25
1987 0982 01F0 breq .L198
1988 0984 9150 subi r25,lo8(-(-1))
1989 0986 9093 0000 sts MaxPWM,r25
1990 .L198:
655:src/main.c **** PORTC |= ROT;
1992 .LM263:
1993 098a AB9A sbi 53-0x20,3
1994 098c 00C0 rjmp .L188
1995 .L196:
656:src/main.c **** }
657:src/main.c **** else
658:src/main.c **** {
659:src/main.c **** if(MaxPWM < MAX_PWM) MaxPWM++;
1997 .LM264:
1998 098e 9F3F cpi r25,lo8(-1)
1999 0990 01F0 breq .L188
2000 0992 9F5F subi r25,lo8(-(1))
2001 0994 9093 0000 sts MaxPWM,r25
2002 .L188:
660:src/main.c **** }
661:src/main.c **** }
662:src/main.c ****
663:src/main.c **** if(CheckDelay(DrehzahlMessTimer)) // Ist-Drehzahl bestimmen
2004 .LM265:
2005 0998 C801 movw r24,r16
2006 099a 00D0 rcall CheckDelay
2007 099c 8823 tst r24
2008 099e 01F0 breq .L201
664:src/main.c **** {
665:src/main.c **** DrehzahlMessTimer = SetDelay(10);
2010 .LM266:
2011 09a0 8AE0 ldi r24,lo8(10)
2012 09a2 90E0 ldi r25,hi8(10)
2013 09a4 00D0 rcall SetDelay
2014 09a6 8C01 movw r16,r24
666:src/main.c **** SIO_Drehzahl = CntKommutierungen;//(6 * CntKommutierungen) / (POLANZAHL / 2);
2016 .LM267:
2017 09a8 8091 0000 lds r24,CntKommutierungen
2018 09ac 9091 0000 lds r25,(CntKommutierungen)+1
2019 09b0 9093 0000 sts (SIO_Drehzahl)+1,r25
2020 09b4 8093 0000 sts SIO_Drehzahl,r24
667:src/main.c **** CntKommutierungen = 0;
2022 .LM268:
2023 09b8 1092 0000 sts (CntKommutierungen)+1,__zero_reg__
2024 09bc 1092 0000 sts CntKommutierungen,__zero_reg__
668:src/main.c **** if(PPM_Timeout == 0) // keine PPM-Signale
2026 .LM269:
2027 09c0 8091 0000 lds r24,PPM_Timeout
2028 09c4 8823 tst r24
2029 09c6 01F4 brne .L201
669:src/main.c **** ZeitZumAdWandeln = 1;
2031 .LM270:
2032 09c8 81E0 ldi r24,lo8(1)
2033 09ca 8093 0000 sts ZeitZumAdWandeln,r24
2034 .L201:
670:src/main.c **** }
671:src/main.c ****
672:src/main.c **** if(TEST_SCHUB)
673:src/main.c **** {
674:src/main.c **** if(CheckDelay(TestschubTimer))
675:src/main.c **** {
676:src/main.c **** TestschubTimer = SetDelay(1500);
677:src/main.c **** switch(test)
678:src/main.c **** {
679:src/main.c **** case 0: PWM = 50; test++; break;
680:src/main.c **** case 1: PWM = 130; test++; break;
681:src/main.c **** case 2: PWM = 60; test++; break;
682:src/main.c **** case 3: PWM = 140; test++; break;
683:src/main.c **** case 4: PWM = 150; test = 0; break;
684:src/main.c **** default: test = 0;
685:src/main.c **** }
686:src/main.c **** }
687:src/main.c **** }
688:src/main.c **** // Motor Stehen geblieben
689:src/main.c **** if((CheckDelay(MinUpmPulse) && SIO_Drehzahl == 0) || MotorAnwerfen)
2036 .LM271:
2037 09ce CE01 movw r24,r28
2038 09d0 00D0 rcall CheckDelay
2039 09d2 8823 tst r24
2040 09d4 01F0 breq .L204
2041 09d6 8091 0000 lds r24,SIO_Drehzahl
2042 09da 9091 0000 lds r25,(SIO_Drehzahl)+1
2043 09de 892B or r24,r25
2044 09e0 01F0 breq .L206
2045 .L204:
2046 09e2 8091 0000 lds r24,MotorAnwerfen
2047 09e6 8823 tst r24
2048 09e8 01F4 brne .+2
2049 09ea 00C0 rjmp .L222
2050 .L206:
690:src/main.c **** {
691:src/main.c **** MotorGestoppt = 1;
2052 .LM272:
2053 09ec FF24 clr r15
2054 09ee F394 inc r15
2055 09f0 F092 0000 sts MotorGestoppt,r15
692:src/main.c **** DISABLE_SENSE_INT;
2057 .LM273:
2058 09f4 1092 0000 sts CompInterruptFreigabe,__zero_reg__
2059 09f8 4398 cbi 40-0x20,3
693:src/main.c **** MinUpmPulse = SetDelay(100);
2061 .LM274:
2062 09fa 84E6 ldi r24,lo8(100)
2063 09fc 90E0 ldi r25,hi8(100)
2064 09fe 00D0 rcall SetDelay
2065 0a00 EC01 movw r28,r24
694:src/main.c **** if(MotorAnwerfen)
2067 .LM275:
2068 0a02 8091 0000 lds r24,MotorAnwerfen
2069 0a06 8823 tst r24
2070 0a08 01F4 brne .+2
2071 0a0a 00C0 rjmp .L222
695:src/main.c **** {
696:src/main.c **** PORTC &= ~ROT;
2073 .LM276:
2074 0a0c AB98 cbi 53-0x20,3
697:src/main.c **** MotorAnwerfen = 0;
2076 .LM277:
2077 0a0e 1092 0000 sts MotorAnwerfen,__zero_reg__
698:src/main.c **** Anwerfen(10);
2079 .LM278:
2080 0a12 8AE0 ldi r24,lo8(10)
2081 0a14 00D0 rcall Anwerfen
699:src/main.c **** PORTD |= GRUEN;
2083 .LM279:
2084 0a16 979A sbi 50-0x20,7
700:src/main.c **** MotorGestoppt = 0;
2086 .LM280:
2087 0a18 1092 0000 sts MotorGestoppt,__zero_reg__
701:src/main.c **** Phase--;
2089 .LM281:
2090 0a1c 8091 0000 lds r24,Phase
2091 0a20 8150 subi r24,lo8(-(-1))
2092 0a22 8093 0000 sts Phase,r24
702:src/main.c **** PWM = 1;
2094 .LM282:
2095 0a26 81E0 ldi r24,lo8(1)
2096 0a28 90E0 ldi r25,hi8(1)
2097 0a2a 9093 0000 sts (PWM)+1,r25
2098 0a2e 8093 0000 sts PWM,r24
703:src/main.c **** SetPWM();
2100 .LM283:
2101 0a32 00D0 rcall SetPWM
704:src/main.c **** SENSE_TOGGLE_INT;
2103 .LM284:
2104 0a34 88B1 in r24,40-0x20
2105 0a36 8C7F andi r24,lo8(-4)
2106 0a38 88B9 out 40-0x20,r24
705:src/main.c **** ENABLE_SENSE_INT;
2108 .LM285:
2109 0a3a F092 0000 sts CompInterruptFreigabe,r15
2110 0a3e 88B1 in r24,40-0x20
2111 0a40 8A60 ori r24,lo8(10)
2112 0a42 88B9 out 40-0x20,r24
706:src/main.c **** MinUpmPulse = SetDelay(20);
2114 .LM286:
2115 0a44 84E1 ldi r24,lo8(20)
2116 0a46 90E0 ldi r25,hi8(20)
2117 0a48 00D0 rcall SetDelay
2118 0a4a EC01 movw r28,r24
2119 .L208:
707:src/main.c **** while(!CheckDelay(MinUpmPulse)); // kurz Synchronisieren
2121 .LM287:
2122 0a4c CE01 movw r24,r28
2123 0a4e 00D0 rcall CheckDelay
2124 0a50 8823 tst r24
2125 0a52 01F0 breq .L208
708:src/main.c **** PWM = 15;
2127 .LM288:
2128 0a54 8FE0 ldi r24,lo8(15)
2129 0a56 90E0 ldi r25,hi8(15)
2130 0a58 9093 0000 sts (PWM)+1,r25
2131 0a5c 8093 0000 sts PWM,r24
709:src/main.c **** SetPWM();
2133 .LM289:
2134 0a60 00D0 rcall SetPWM
710:src/main.c **** MinUpmPulse = SetDelay(300);
2136 .LM290:
2137 0a62 8CE2 ldi r24,lo8(300)
2138 0a64 91E0 ldi r25,hi8(300)
2139 0a66 00D0 rcall SetDelay
2140 0a68 EC01 movw r28,r24
2141 .L210:
711:src/main.c **** while(!CheckDelay(MinUpmPulse)); // kurz Durchstarten
2143 .LM291:
2144 0a6a CE01 movw r24,r28
2145 0a6c 00D0 rcall CheckDelay
2146 0a6e 8823 tst r24
2147 0a70 01F0 breq .L210
712:src/main.c ****
713:src/main.c **** // Drehzahlmessung wieder aufsetzen
714:src/main.c **** DrehzahlMessTimer = SetDelay(50);
2149 .LM292:
2150 0a72 82E3 ldi r24,lo8(50)
2151 0a74 90E0 ldi r25,hi8(50)
2152 0a76 00D0 rcall SetDelay
2153 0a78 8C01 movw r16,r24
2154 0a7a 87E0 ldi r24,lo8(7)
2155 0a7c E82E mov r14,r24
2156 0a7e 00C0 rjmp .L222
2157 /* epilogue: frame size=0 */
2158 /* epilogue: noreturn */
2159 /* epilogue end (size=0) */
2160 /* function main size 358 (354) */
2169 .Lscope11:
2171 .stabd 78,0,0
2172 .global PWM
2173 .global PWM
2174 .section .bss
2177 PWM:
2178 0000 0000 .skip 2,0
2179 .global Strom
2180 .global Strom
2183 Strom:
2184 0002 0000 .skip 2,0
2185 .global Strom_max
2186 .global Strom_max
2189 Strom_max:
2190 0004 00 .skip 1,0
2191 .global Mittelstrom
2192 .global Mittelstrom
2195 Mittelstrom:
2196 0005 00 .skip 1,0
2197 .global Drehzahl
2198 .global Drehzahl
2201 Drehzahl:
2202 0006 0000 .skip 2,0
2203 .global KommutierDelay
2204 .data
2207 KommutierDelay:
2208 0000 0A00 .word 10
2209 .global I2C_Timeout
2210 .global I2C_Timeout
2211 .section .bss
2214 I2C_Timeout:
2215 0008 0000 .skip 2,0
2216 .global SIO_Timeout
2217 .global SIO_Timeout
2220 SIO_Timeout:
2221 000a 0000 .skip 2,0
2222 .global SollDrehzahl
2223 .global SollDrehzahl
2226 SollDrehzahl:
2227 000c 0000 .skip 2,0
2228 .global IstDrehzahl
2229 .global IstDrehzahl
2232 IstDrehzahl:
2233 000e 0000 .skip 2,0
2234 .global ZeitFuerBerechnungen
2235 .data
2238 ZeitFuerBerechnungen:
2239 0002 01 .byte 1
2240 .global MotorAnwerfen
2241 .global MotorAnwerfen
2242 .section .bss
2245 MotorAnwerfen:
2246 0010 00 .skip 1,0
2247 .global MotorGestoppt
2248 .data
2251 MotorGestoppt:
2252 0003 01 .byte 1
2253 .global MaxPWM
2256 MaxPWM:
2257 0004 FF .byte -1
2258 .global CntKommutierungen
2259 .global CntKommutierungen
2260 .section .bss
2263 CntKommutierungen:
2264 0011 0000 .skip 2,0
2265 .global SIO_Drehzahl
2266 .global SIO_Drehzahl
2269 SIO_Drehzahl:
2270 0013 0000 .skip 2,0
2271 .global ZeitZumAdWandeln
2272 .data
2275 ZeitZumAdWandeln:
2276 0005 01 .byte 1
2277 .global MotorAdresse
2280 MotorAdresse:
2281 0006 01 .byte 1
2282 .global PPM_Betrieb
2285 PPM_Betrieb:
2286 0007 01 .byte 1
2287 .lcomm sollwert.2390,2
2290 C.8.2210:
2291 0008 00 .byte 0
2292 0009 00 .byte 0
2293 000a 02 .byte 2
2294 000b 01 .byte 1
2295 000c 03 .byte 3
2296 .comm RuheStrom,2,1
2297 .comm DrehZahlTabelle,512,1
2320 .text
2322 .Letext0:
2323 /* File "src/main.c": code 1357 = 0x054d (1282), prologues 36, epilogues 39 */
DEFINED SYMBOLS
*ABS*:00000000 main.c
/tmp/ccPB1ogc.s:2 *ABS*:0000003f __SREG__
/tmp/ccPB1ogc.s:3 *ABS*:0000003e __SP_H__
/tmp/ccPB1ogc.s:4 *ABS*:0000003d __SP_L__
/tmp/ccPB1ogc.s:5 *ABS*:00000000 __tmp_reg__
/tmp/ccPB1ogc.s:6 *ABS*:00000001 __zero_reg__
/tmp/ccPB1ogc.s:102 .text:00000000 SetPWM
/tmp/ccPB1ogc.s:2177 .bss:00000000 PWM
/tmp/ccPB1ogc.s:2256 .data:00000004 MaxPWM
/tmp/ccPB1ogc.s:2183 .bss:00000002 Strom
/tmp/ccPB1ogc.s:170 .text:00000046 PWM_Init
/tmp/ccPB1ogc.s:203 .text:0000005c Wait
/tmp/ccPB1ogc.s:237 .text:0000006e Delay
/tmp/ccPB1ogc.s:259 .text:00000074 SollwertErmittlung
/tmp/ccPB1ogc.s:2214 .bss:00000008 I2C_Timeout
/tmp/ccPB1ogc.s:2220 .bss:0000000a SIO_Timeout
.bss:00000015 sollwert.2390
/tmp/ccPB1ogc.s:2285 .data:00000007 PPM_Betrieb
/tmp/ccPB1ogc.s:430 .text:00000172 DebugAusgaben
/tmp/ccPB1ogc.s:2195 .bss:00000005 Mittelstrom
/tmp/ccPB1ogc.s:2269 .bss:00000013 SIO_Drehzahl
/tmp/ccPB1ogc.s:473 .text:000001b2 RotBlink
/tmp/ccPB1ogc.s:528 .text:000001d8 DelayM
*COM*:00000002 RuheStrom
/tmp/ccPB1ogc.s:589 .text:00000222 MotorTon
/tmp/ccPB1ogc.s:2290 .data:00000008 C.8.2210
/tmp/ccPB1ogc.s:2280 .data:00000006 MotorAdresse
/tmp/ccPB1ogc.s:2189 .bss:00000004 Strom_max
/tmp/ccPB1ogc.s:1467 .text:000006ce Anwerfen
/tmp/ccPB1ogc.s:1641 .text:000007b8 main
/tmp/ccPB1ogc.s:2251 .data:00000003 MotorGestoppt
/tmp/ccPB1ogc.s:2238 .data:00000002 ZeitFuerBerechnungen
/tmp/ccPB1ogc.s:2245 .bss:00000010 MotorAnwerfen
/tmp/ccPB1ogc.s:2263 .bss:00000011 CntKommutierungen
/tmp/ccPB1ogc.s:2275 .data:00000005 ZeitZumAdWandeln
/tmp/ccPB1ogc.s:2201 .bss:00000006 Drehzahl
/tmp/ccPB1ogc.s:2207 .data:00000000 KommutierDelay
/tmp/ccPB1ogc.s:2226 .bss:0000000c SollDrehzahl
/tmp/ccPB1ogc.s:2232 .bss:0000000e IstDrehzahl
*COM*:00000200 DrehZahlTabelle
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SIO_Sollwert
__udivmodhi4
anz_ppm_werte
PPM_Signal
I2C_RXBuffer
DebugOut
Delay_ms
FastADConvert
CompInterruptFreigabe
uart_putchar
MessAD
Manuell
UebertragungAbgeschlossen
SendUart
DatenUebertragung
__udivmodsi4
Phase
__udivmodqi4
AdConvert
__stack
UART_Init
Timer0_Init
InitIC2_Slave
InitPPM
SetDelay
CheckDelay
PPM_Timeout
/branches/V0.37_neueStruktur/out/timer0.lst
0,0 → 1,288
1 .file "timer0.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
11 .text
12 .Ltext0:
101 .global __vector_9
103 __vector_9:
104 .stabd 46,0,0
1:src/timer0.c **** /*****************************************************************************
2:src/timer0.c ****
3:src/timer0.c **** *****************************************************************************/
4:src/timer0.c **** #include "main.h"
5:src/timer0.c **** volatile unsigned int CountMilliseconds = 0;
6:src/timer0.c **** volatile unsigned char Timer0Overflow;
7:src/timer0.c ****
8:src/timer0.c **** enum {
9:src/timer0.c **** STOP = 0,
10:src/timer0.c **** CK = 1,
11:src/timer0.c **** CK8 = 2,
12:src/timer0.c **** CK64 = 3,
13:src/timer0.c **** CK256 = 4,
14:src/timer0.c **** CK1024 = 5,
15:src/timer0.c **** T0_FALLING_EDGE = 6,
16:src/timer0.c **** T0_RISING_EDGE = 7
17:src/timer0.c **** };
18:src/timer0.c ****
19:src/timer0.c ****
20:src/timer0.c **** SIGNAL(SIG_OVERFLOW0)
21:src/timer0.c **** {
106 .LM0:
107 .LFBB1:
108 /* prologue: frame size=0 */
109 0000 1F92 push __zero_reg__
110 0002 0F92 push __tmp_reg__
111 0004 0FB6 in __tmp_reg__,__SREG__
112 0006 0F92 push __tmp_reg__
113 0008 1124 clr __zero_reg__
114 000a 8F93 push r24
115 000c 9F93 push r25
116 /* prologue end (size=7) */
22:src/timer0.c **** static unsigned char cnt;
23:src/timer0.c **** Timer0Overflow++;
118 .LM1:
119 000e 8091 0000 lds r24,Timer0Overflow
120 0012 8F5F subi r24,lo8(-(1))
121 0014 8093 0000 sts Timer0Overflow,r24
24:src/timer0.c **** if(!cnt--)
123 .LM2:
124 0018 8091 0000 lds r24,cnt.2066
125 001c 8150 subi r24,lo8(-(-1))
126 001e 8093 0000 sts cnt.2066,r24
127 0022 8F3F cpi r24,lo8(-1)
128 0024 01F4 brne .L10
25:src/timer0.c **** {
26:src/timer0.c **** cnt = 3;
130 .LM3:
131 0026 83E0 ldi r24,lo8(3)
132 0028 8093 0000 sts cnt.2066,r24
27:src/timer0.c **** CountMilliseconds += 1;
134 .LM4:
135 002c 8091 0000 lds r24,CountMilliseconds
136 0030 9091 0000 lds r25,(CountMilliseconds)+1
137 0034 0196 adiw r24,1
138 0036 9093 0000 sts (CountMilliseconds)+1,r25
139 003a 8093 0000 sts CountMilliseconds,r24
28:src/timer0.c **** if(I2C_Timeout) I2C_Timeout--;
141 .LM5:
142 003e 8091 0000 lds r24,I2C_Timeout
143 0042 9091 0000 lds r25,(I2C_Timeout)+1
144 0046 0097 sbiw r24,0
145 0048 01F0 breq .L4
146 004a 0197 sbiw r24,1
147 004c 9093 0000 sts (I2C_Timeout)+1,r25
148 0050 8093 0000 sts I2C_Timeout,r24
149 .L4:
29:src/timer0.c **** if(PPM_Timeout) PPM_Timeout--; else anz_ppm_werte = 0;
151 .LM6:
152 0054 8091 0000 lds r24,PPM_Timeout
153 0058 8823 tst r24
154 005a 01F0 breq .L6
155 005c 8091 0000 lds r24,PPM_Timeout
156 0060 8150 subi r24,lo8(-(-1))
157 0062 8093 0000 sts PPM_Timeout,r24
158 0066 00C0 rjmp .L8
159 .L6:
160 0068 1092 0000 sts anz_ppm_werte,__zero_reg__
161 .L8:
30:src/timer0.c **** if(SIO_Timeout) SIO_Timeout--;
163 .LM7:
164 006c 8091 0000 lds r24,SIO_Timeout
165 0070 9091 0000 lds r25,(SIO_Timeout)+1
166 0074 0097 sbiw r24,0
167 0076 01F0 breq .L10
168 0078 0197 sbiw r24,1
169 007a 9093 0000 sts (SIO_Timeout)+1,r25
170 007e 8093 0000 sts SIO_Timeout,r24
171 .L10:
172 /* epilogue: frame size=0 */
173 0082 9F91 pop r25
174 0084 8F91 pop r24
175 0086 0F90 pop __tmp_reg__
176 0088 0FBE out __SREG__,__tmp_reg__
177 008a 0F90 pop __tmp_reg__
178 008c 1F90 pop __zero_reg__
179 008e 1895 reti
180 /* epilogue end (size=7) */
181 /* function __vector_9 size 72 (58) */
186 .Lscope1:
188 .stabd 78,0,0
190 .global Timer0_Init
192 Timer0_Init:
193 .stabd 46,0,0
31:src/timer0.c **** }
32:src/timer0.c **** }
33:src/timer0.c ****
34:src/timer0.c ****
35:src/timer0.c **** void Timer0_Init(void)
36:src/timer0.c **** {
195 .LM8:
196 .LFBB2:
197 /* prologue: frame size=0 */
198 /* prologue end (size=0) */
37:src/timer0.c **** TCCR0 = TIMER_TEILER;
200 .LM9:
201 0090 82E0 ldi r24,lo8(2)
202 0092 83BF out 83-0x20,r24
38:src/timer0.c **** // TCNT0 = -TIMER_RELOAD_VALUE; // reload
39:src/timer0.c **** TIM0_START;
204 .LM10:
205 0094 89B7 in r24,89-0x20
206 0096 8160 ori r24,lo8(1)
207 0098 89BF out 89-0x20,r24
40:src/timer0.c **** TIMER2_INT_ENABLE;
209 .LM11:
210 009a 89B7 in r24,89-0x20
211 009c 8064 ori r24,lo8(64)
212 009e 89BF out 89-0x20,r24
213 /* epilogue: frame size=0 */
214 00a0 0895 ret
215 /* epilogue end (size=1) */
216 /* function Timer0_Init size 9 (8) */
218 .Lscope2:
220 .stabd 78,0,0
223 .global SetDelay
225 SetDelay:
226 .stabd 46,0,0
41:src/timer0.c **** }
42:src/timer0.c ****
43:src/timer0.c ****
44:src/timer0.c **** unsigned int SetDelay(unsigned int t)
45:src/timer0.c **** {
228 .LM12:
229 .LFBB3:
230 /* prologue: frame size=0 */
231 /* prologue end (size=0) */
46:src/timer0.c **** return(CountMilliseconds + t - 1);
233 .LM13:
234 00a2 2091 0000 lds r18,CountMilliseconds
235 00a6 3091 0000 lds r19,(CountMilliseconds)+1
236 00aa 2150 subi r18,lo8(-(-1))
237 00ac 3040 sbci r19,hi8(-(-1))
47:src/timer0.c **** }
239 .LM14:
240 00ae 820F add r24,r18
241 00b0 931F adc r25,r19
242 /* epilogue: frame size=0 */
243 00b2 0895 ret
244 /* epilogue end (size=1) */
245 /* function SetDelay size 9 (8) */
247 .Lscope3:
249 .stabd 78,0,0
252 .global CheckDelay
254 CheckDelay:
255 .stabd 46,0,0
48:src/timer0.c ****
49:src/timer0.c **** char CheckDelay (unsigned int t)
50:src/timer0.c **** {
257 .LM15:
258 .LFBB4:
259 /* prologue: frame size=0 */
260 /* prologue end (size=0) */
51:src/timer0.c **** return(((t - CountMilliseconds) & 0x8000) >> 8);
262 .LM16:
263 00b4 2091 0000 lds r18,CountMilliseconds
264 00b8 3091 0000 lds r19,(CountMilliseconds)+1
265 00bc 821B sub r24,r18
266 00be 930B sbc r25,r19
267 00c0 892F mov r24,r25
268 00c2 9927 clr r25
269 00c4 8078 andi r24,lo8(-128)
52:src/timer0.c **** }
271 .LM17:
272 00c6 9927 clr r25
273 /* epilogue: frame size=0 */
274 00c8 0895 ret
275 /* epilogue end (size=1) */
276 /* function CheckDelay size 11 (10) */
278 .Lscope4:
280 .stabd 78,0,0
283 .global Delay_ms
285 Delay_ms:
286 .stabd 46,0,0
53:src/timer0.c ****
54:src/timer0.c **** void Delay_ms(unsigned int w)
55:src/timer0.c **** {
288 .LM18:
289 .LFBB5:
290 /* prologue: frame size=0 */
291 /* prologue end (size=0) */
292 00ca AC01 movw r20,r24
293 .LBB6:
294 .LBB7:
296 .LM19:
297 00cc 2091 0000 lds r18,CountMilliseconds
298 00d0 3091 0000 lds r19,(CountMilliseconds)+1
299 .LBE7:
300 .LBE6:
56:src/timer0.c **** unsigned int akt;
57:src/timer0.c **** akt = SetDelay(w);
58:src/timer0.c **** while (!CheckDelay(akt));
302 .LM20:
303 00d4 2150 subi r18,lo8(-(-1))
304 00d6 3040 sbci r19,hi8(-(-1))
305 .L18:
306 .LBB8:
307 .LBB9:
309 .LM21:
310 00d8 8091 0000 lds r24,CountMilliseconds
311 00dc 9091 0000 lds r25,(CountMilliseconds)+1
312 .LBE9:
313 .LBE8:
315 .LM22:
316 00e0 B901 movw r22,r18
317 00e2 681B sub r22,r24
318 00e4 790B sbc r23,r25
319 00e6 CB01 movw r24,r22
320 00e8 840F add r24,r20
321 00ea 951F adc r25,r21
322 00ec 8070 andi r24,lo8(-32768)
323 00ee 9078 andi r25,hi8(-32768)
324 00f0 892F mov r24,r25
325 00f2 9927 clr r25
326 00f4 8823 tst r24
327 00f6 01F0 breq .L18
328 /* epilogue: frame size=0 */
329 00f8 0895 ret
330 /* epilogue end (size=1) */
331 /* function Delay_ms size 24 (23) */
333 .Lscope5:
335 .stabd 78,0,0
336 .global CountMilliseconds
337 .global CountMilliseconds
338 .section .bss
341 CountMilliseconds:
342 0000 0000 .skip 2,0
343 .lcomm cnt.2066,1
344 .comm Timer0Overflow,1,1
348 .text
350 .Letext0:
351 /* File "src/timer0.c": code 125 = 0x007d ( 107), prologues 7, epilogues 11 */
DEFINED SYMBOLS
*ABS*:00000000 timer0.c
/tmp/ccieS1Um.s:2 *ABS*:0000003f __SREG__
/tmp/ccieS1Um.s:3 *ABS*:0000003e __SP_H__
/tmp/ccieS1Um.s:4 *ABS*:0000003d __SP_L__
/tmp/ccieS1Um.s:5 *ABS*:00000000 __tmp_reg__
/tmp/ccieS1Um.s:6 *ABS*:00000001 __zero_reg__
/tmp/ccieS1Um.s:103 .text:00000000 __vector_9
*COM*:00000001 Timer0Overflow
.bss:00000002 cnt.2066
/tmp/ccieS1Um.s:341 .bss:00000000 CountMilliseconds
/tmp/ccieS1Um.s:192 .text:00000090 Timer0_Init
/tmp/ccieS1Um.s:225 .text:000000a2 SetDelay
/tmp/ccieS1Um.s:254 .text:000000b4 CheckDelay
/tmp/ccieS1Um.s:285 .text:000000ca Delay_ms
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
I2C_Timeout
PPM_Timeout
anz_ppm_werte
SIO_Timeout
/branches/V0.37_neueStruktur/out/twislave.lst
0,0 → 1,241
1 .file "twislave.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
11 .text
12 .Ltext0:
105 .global InitIC2_Slave
107 InitIC2_Slave:
108 .stabd 46,0,0
1:src/twislave.c **** /*############################################################################
2:src/twislave.c **** Slaveadr = 0x52 = Vorne, 0x54 = Hinten, 0x56 = Rechts, 0x58 = Links
3:src/twislave.c **** ############################################################################*/
4:src/twislave.c ****
5:src/twislave.c **** #include <avr/io.h>
6:src/twislave.c **** #include <util/twi.h>
7:src/twislave.c **** #include "main.h"
8:src/twislave.c ****
9:src/twislave.c **** unsigned char I2C_RXBuffer;
10:src/twislave.c **** unsigned char Byte_Counter=0;
11:src/twislave.c ****
12:src/twislave.c **** //############################################################################
13:src/twislave.c **** //I2C (TWI) Interface Init
14:src/twislave.c **** void InitIC2_Slave(uint8_t adr)
15:src/twislave.c **** //############################################################################
16:src/twislave.c **** {
110 .LM0:
111 .LFBB1:
112 /* prologue: frame size=0 */
113 /* prologue end (size=0) */
17:src/twislave.c **** TWAR = adr + (2*MotorAdresse); // Eigene Adresse setzen
115 .LM1:
116 0000 9091 0000 lds r25,MotorAdresse
117 0004 990F lsl r25
118 0006 980F add r25,r24
119 0008 92B9 out 34-0x20,r25
18:src/twislave.c **** TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);
121 .LM2:
122 000a 85EC ldi r24,lo8(-59)
123 000c 86BF out 86-0x20,r24
124 /* epilogue: frame size=0 */
125 000e 0895 ret
126 /* epilogue end (size=1) */
127 /* function InitIC2_Slave size 8 (7) */
129 .Lscope1:
131 .stabd 78,0,0
133 .global __vector_17
135 __vector_17:
136 .stabd 46,0,0
19:src/twislave.c **** }
20:src/twislave.c ****
21:src/twislave.c **** //############################################################################
22:src/twislave.c **** //ISR, die bei einem Ereignis auf dem Bus ausgelöst wird. Im Register TWSR befindet
23:src/twislave.c **** //sich dann ein Statuscode, anhand dessen die Situation festgestellt werden kann.
24:src/twislave.c **** ISR (TWI_vect)
25:src/twislave.c **** //############################################################################
26:src/twislave.c **** {
138 .LM3:
139 .LFBB2:
140 /* prologue: frame size=0 */
141 0010 1F92 push __zero_reg__
142 0012 0F92 push __tmp_reg__
143 0014 0FB6 in __tmp_reg__,__SREG__
144 0016 0F92 push __tmp_reg__
145 0018 1124 clr __zero_reg__
146 001a 8F93 push r24
147 001c 9F93 push r25
148 /* prologue end (size=7) */
27:src/twislave.c **** switch (TWSR & 0xF8)
150 .LM4:
151 001e 81B1 in r24,33-0x20
152 0020 9927 clr r25
153 0022 887F andi r24,lo8(248)
154 0024 9070 andi r25,hi8(248)
155 0026 8038 cpi r24,128
156 0028 9105 cpc r25,__zero_reg__
157 002a 01F0 breq .L7
159 .LM5:
160 002c 8138 cpi r24,129
161 002e 9105 cpc r25,__zero_reg__
162 0030 04F4 brge .L11
163 0032 0097 sbiw r24,0
164 0034 01F0 breq .L5
165 0036 8036 cpi r24,96
166 0038 9105 cpc r25,__zero_reg__
167 003a 01F4 brne .L4
168 003c 00C0 rjmp .L6
169 .L11:
170 003e 883B cpi r24,184
171 0040 9105 cpc r25,__zero_reg__
172 0042 01F0 breq .L9
173 0044 883F cpi r24,248
174 0046 9105 cpc r25,__zero_reg__
175 0048 01F0 breq .L10
176 004a 883A cpi r24,168
177 004c 9105 cpc r25,__zero_reg__
178 004e 01F4 brne .L4
179 0050 00C0 rjmp .L9
180 .L6:
28:src/twislave.c **** {
29:src/twislave.c **** case SR_SLA_ACK:
30:src/twislave.c **** TWCR |= (1<<TWINT);
182 .LM6:
183 0052 86B7 in r24,86-0x20
184 0054 8068 ori r24,lo8(-128)
185 0056 86BF out 86-0x20,r24
31:src/twislave.c **** Byte_Counter=0;
187 .LM7:
188 0058 1092 0000 sts Byte_Counter,__zero_reg__
189 005c 00C0 rjmp .L19
190 .L7:
32:src/twislave.c **** return;
33:src/twislave.c **** // Daten Empfangen
34:src/twislave.c **** case SR_PREV_ACK:
35:src/twislave.c **** I2C_RXBuffer = TWDR;
192 .LM8:
193 005e 83B1 in r24,35-0x20
194 0060 8093 0000 sts I2C_RXBuffer,r24
36:src/twislave.c **** I2C_Timeout = 500;
196 .LM9:
197 0064 84EF ldi r24,lo8(500)
198 0066 91E0 ldi r25,hi8(500)
199 0068 9093 0000 sts (I2C_Timeout)+1,r25
200 006c 8093 0000 sts I2C_Timeout,r24
201 0070 00C0 rjmp .L18
202 .L9:
37:src/twislave.c **** TWCR |= (1<<TWINT);
38:src/twislave.c **** return;
39:src/twislave.c **** // Daten Senden
40:src/twislave.c **** case SW_SLA_ACK:
41:src/twislave.c **** if (Byte_Counter==0)
42:src/twislave.c **** {
43:src/twislave.c **** TWDR = Mittelstrom;
44:src/twislave.c **** Byte_Counter++;
45:src/twislave.c **** }
46:src/twislave.c **** else
47:src/twislave.c **** {
48:src/twislave.c **** TWDR = MaxPWM;
49:src/twislave.c **** }
50:src/twislave.c **** TWCR |= (1<<TWINT);
51:src/twislave.c **** return;
52:src/twislave.c **** // Daten Senden
53:src/twislave.c **** case SW_DATA_ACK:
54:src/twislave.c **** if (Byte_Counter==0)
204 .LM10:
205 0072 8091 0000 lds r24,Byte_Counter
206 0076 8823 tst r24
207 0078 01F4 brne .L16
55:src/twislave.c **** {
56:src/twislave.c **** TWDR = Mittelstrom;
209 .LM11:
210 007a 8091 0000 lds r24,Mittelstrom
211 007e 83B9 out 35-0x20,r24
57:src/twislave.c **** Byte_Counter++;
213 .LM12:
214 0080 81E0 ldi r24,lo8(1)
215 0082 8093 0000 sts Byte_Counter,r24
216 0086 00C0 rjmp .L18
217 .L16:
58:src/twislave.c **** }
59:src/twislave.c **** else
60:src/twislave.c **** {
61:src/twislave.c **** TWDR = MaxPWM;
219 .LM13:
220 0088 8091 0000 lds r24,MaxPWM
221 008c 83B9 out 35-0x20,r24
222 .L18:
62:src/twislave.c **** }
63:src/twislave.c **** TWCR |= (1<<TWINT);
224 .LM14:
225 008e 86B7 in r24,86-0x20
226 0090 8068 ori r24,lo8(-128)
227 0092 00C0 rjmp .L20
228 .L10:
64:src/twislave.c **** return;
65:src/twislave.c **** // Bus-Fehler zurücksetzen
66:src/twislave.c **** case TWI_BUS_ERR_2:
67:src/twislave.c **** TWCR |=(1<<TWSTO) | (1<<TWINT);
230 .LM15:
231 0094 86B7 in r24,86-0x20
232 0096 8069 ori r24,lo8(-112)
233 0098 86BF out 86-0x20,r24
234 .L5:
68:src/twislave.c **** // Bus-Fehler zurücksetzen
69:src/twislave.c **** case TWI_BUS_ERR_1:
70:src/twislave.c **** TWCR |=(1<<TWSTO) | (1<<TWINT);
236 .LM16:
237 009a 86B7 in r24,86-0x20
238 009c 8069 ori r24,lo8(-112)
239 009e 86BF out 86-0x20,r24
240 .L4:
71:src/twislave.c **** }
72:src/twislave.c **** TWCR =(1<<TWEA) | (1<<TWINT) | (1<<TWEN) | (1<<TWIE); // TWI Reset
242 .LM17:
243 00a0 85EC ldi r24,lo8(-59)
244 .L20:
245 00a2 86BF out 86-0x20,r24
246 .L19:
247 /* epilogue: frame size=0 */
248 00a4 9F91 pop r25
249 00a6 8F91 pop r24
250 00a8 0F90 pop __tmp_reg__
251 00aa 0FBE out __SREG__,__tmp_reg__
252 00ac 0F90 pop __tmp_reg__
253 00ae 1F90 pop __zero_reg__
254 00b0 1895 reti
255 /* epilogue end (size=7) */
256 /* function __vector_17 size 81 (67) */
258 .Lscope2:
260 .stabd 78,0,0
261 .global Byte_Counter
262 .global Byte_Counter
263 .section .bss
266 Byte_Counter:
267 0000 00 .skip 1,0
268 .comm I2C_RXBuffer,1,1
271 .text
273 .Letext0:
274 /* File "src/twislave.c": code 89 = 0x0059 ( 74), prologues 7, epilogues 8 */
DEFINED SYMBOLS
*ABS*:00000000 twislave.c
/tmp/ccwqDpRs.s:2 *ABS*:0000003f __SREG__
/tmp/ccwqDpRs.s:3 *ABS*:0000003e __SP_H__
/tmp/ccwqDpRs.s:4 *ABS*:0000003d __SP_L__
/tmp/ccwqDpRs.s:5 *ABS*:00000000 __tmp_reg__
/tmp/ccwqDpRs.s:6 *ABS*:00000001 __zero_reg__
/tmp/ccwqDpRs.s:107 .text:00000000 InitIC2_Slave
/tmp/ccwqDpRs.s:135 .text:00000010 __vector_17
/tmp/ccwqDpRs.s:266 .bss:00000000 Byte_Counter
*COM*:00000001 I2C_RXBuffer
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
MotorAdresse
I2C_Timeout
Mittelstrom
MaxPWM
/branches/V0.37_neueStruktur/out/uart.lst
0,0 → 1,1150
1 .file "uart.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
11 .text
12 .Ltext0:
100 .global __vector_13
102 __vector_13:
103 .stabd 46,0,0
1:src/uart.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2:src/uart.c **** // + Regler für Brushless-Motoren
3:src/uart.c **** // + ATMEGA8 mit 8MHz
4:src/uart.c **** // + (c) 01.2007 Holger Buss
5:src/uart.c **** // + Nur für den privaten Gebrauch
6:src/uart.c **** // + Keine Garantie auf Fehlerfreiheit
7:src/uart.c **** // + Kommerzielle Nutzung nur mit meiner Zustimmung
8:src/uart.c **** // + Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
9:src/uart.c **** // + www.mikrocontroller.com
10:src/uart.c **** // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11:src/uart.c ****
12:src/uart.c **** #include "main.h"
13:src/uart.c **** #include "uart.h"
14:src/uart.c ****
15:src/uart.c **** #define MAX_SENDE_BUFF 100
16:src/uart.c **** #define MAX_EMPFANGS_BUFF 100
17:src/uart.c ****
18:src/uart.c **** unsigned volatile char SIO_Sollwert = 0;
19:src/uart.c **** unsigned volatile char SioTmp = 0;
20:src/uart.c **** unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
21:src/uart.c **** unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
22:src/uart.c **** unsigned volatile char NeuerDatensatzEmpfangen = 0;
23:src/uart.c **** unsigned volatile char UebertragungAbgeschlossen = 1;
24:src/uart.c **** unsigned char MeineSlaveAdresse;
25:src/uart.c **** unsigned char MotorTest[4] = {0,0,0,0};
26:src/uart.c **** unsigned volatile char AnzahlEmpfangsBytes = 0;
27:src/uart.c ****
28:src/uart.c **** struct str_DebugOut DebugOut;
29:src/uart.c ****
30:src/uart.c ****
31:src/uart.c **** int Debug_Timer;
32:src/uart.c ****
33:src/uart.c ****
34:src/uart.c **** SIGNAL(INT_VEC_TX)
35:src/uart.c **** {
105 .LM0:
106 .LFBB1:
107 /* prologue: frame size=0 */
108 0000 1F92 push __zero_reg__
109 0002 0F92 push __tmp_reg__
110 0004 0FB6 in __tmp_reg__,__SREG__
111 0006 0F92 push __tmp_reg__
112 0008 1124 clr __zero_reg__
113 /* prologue end (size=5) */
114 /* epilogue: frame size=0 */
115 000a 0F90 pop __tmp_reg__
116 000c 0FBE out __SREG__,__tmp_reg__
117 000e 0F90 pop __tmp_reg__
118 0010 1F90 pop __zero_reg__
119 0012 1895 reti
120 /* epilogue end (size=5) */
121 /* function __vector_13 size 10 (0) */
123 .Lscope1:
125 .stabd 78,0,0
127 .global SendUart
129 SendUart:
130 .stabd 46,0,0
36:src/uart.c **** }
37:src/uart.c ****
38:src/uart.c **** void SendUart(void)
39:src/uart.c **** {
132 .LM1:
133 .LFBB2:
134 /* prologue: frame size=0 */
135 /* prologue end (size=0) */
40:src/uart.c **** static unsigned int ptr = 0;
41:src/uart.c **** unsigned char tmp_tx;
42:src/uart.c **** if(!(UCSRA & 0x40)) return;
137 .LM2:
138 0014 5E9B sbis 43-0x20,6
139 0016 00C0 rjmp .L11
43:src/uart.c **** if(!UebertragungAbgeschlossen)
141 .LM3:
142 0018 8091 0000 lds r24,UebertragungAbgeschlossen
143 001c 8823 tst r24
144 001e 01F4 brne .L6
44:src/uart.c **** {
45:src/uart.c **** ptr++; // die [0] wurde schon gesendet
146 .LM4:
147 0020 8091 0000 lds r24,ptr.2069
148 0024 9091 0000 lds r25,(ptr.2069)+1
149 0028 0196 adiw r24,1
150 002a 9093 0000 sts (ptr.2069)+1,r25
151 002e 8093 0000 sts ptr.2069,r24
46:src/uart.c **** tmp_tx = SendeBuffer[ptr];
153 .LM5:
154 0032 FC01 movw r30,r24
155 0034 E050 subi r30,lo8(-(SendeBuffer))
156 0036 F040 sbci r31,hi8(-(SendeBuffer))
157 0038 E081 ld r30,Z
47:src/uart.c **** if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
159 .LM6:
160 003a ED30 cpi r30,lo8(13)
161 003c 01F0 breq .L8
162 003e 8436 cpi r24,100
163 0040 9105 cpc r25,__zero_reg__
164 0042 01F4 brne .L10
165 .L8:
48:src/uart.c **** {
49:src/uart.c **** ptr = 0;
167 .LM7:
168 0044 1092 0000 sts (ptr.2069)+1,__zero_reg__
169 0048 1092 0000 sts ptr.2069,__zero_reg__
50:src/uart.c **** UebertragungAbgeschlossen = 1;
171 .LM8:
172 004c 81E0 ldi r24,lo8(1)
173 004e 8093 0000 sts UebertragungAbgeschlossen,r24
174 .L10:
51:src/uart.c **** }
52:src/uart.c **** USR |= (1<TXC);
176 .LM9:
177 0052 589A sbi 43-0x20,0
53:src/uart.c **** UDR = tmp_tx;
179 .LM10:
180 0054 ECB9 out 44-0x20,r30
181 0056 0895 ret
182 .L6:
54:src/uart.c **** }
55:src/uart.c **** else ptr = 0;
184 .LM11:
185 0058 1092 0000 sts (ptr.2069)+1,__zero_reg__
186 005c 1092 0000 sts ptr.2069,__zero_reg__
187 .L11:
188 0060 0895 ret
189 /* epilogue: frame size=0 */
190 /* epilogue: noreturn */
191 /* epilogue end (size=0) */
192 /* function SendUart size 39 (39) */
198 .Lscope2:
200 .stabd 78,0,0
206 .global Decode64
208 Decode64:
209 .stabd 46,0,0
56:src/uart.c **** }
57:src/uart.c ****
58:src/uart.c **** // --------------------------------------------------------------------------
59:src/uart.c **** void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) //
60:src/uart.c **** {
211 .LM12:
212 .LFBB3:
213 /* prologue: frame size=0 */
214 0062 1F93 push r17
215 0064 CF93 push r28
216 0066 DF93 push r29
217 /* prologue end (size=3) */
218 0068 EC01 movw r28,r24
219 006a 70E0 ldi r23,lo8(0)
61:src/uart.c **** unsigned char a,b,c,d;
62:src/uart.c **** unsigned char ptr = 0;
63:src/uart.c **** unsigned char x,y,z;
64:src/uart.c **** while(len)
65:src/uart.c **** {
66:src/uart.c **** a = RxdBuffer[ptrIn++] - '=';
67:src/uart.c **** b = RxdBuffer[ptrIn++] - '=';
68:src/uart.c **** c = RxdBuffer[ptrIn++] - '=';
69:src/uart.c **** d = RxdBuffer[ptrIn++] - '=';
70:src/uart.c **** if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
221 .LM13:
222 006c A22F mov r26,r18
223 006e BB27 clr r27
224 0070 1297 sbiw r26,2
225 0072 00C0 rjmp .L13
226 .L14:
228 .LM14:
229 0074 E42F mov r30,r20
230 0076 FF27 clr r31
231 0078 E050 subi r30,lo8(-(RxdBuffer))
232 007a F040 sbci r31,hi8(-(RxdBuffer))
233 007c 3081 ld r19,Z
235 .LM15:
236 007e 4F5F subi r20,lo8(-(1))
237 0080 E42F mov r30,r20
238 0082 FF27 clr r31
239 0084 E050 subi r30,lo8(-(RxdBuffer))
240 0086 F040 sbci r31,hi8(-(RxdBuffer))
241 0088 5081 ld r21,Z
243 .LM16:
244 008a 4F5F subi r20,lo8(-(1))
245 008c E42F mov r30,r20
246 008e FF27 clr r31
247 0090 E050 subi r30,lo8(-(RxdBuffer))
248 0092 F040 sbci r31,hi8(-(RxdBuffer))
249 0094 1081 ld r17,Z
251 .LM17:
252 0096 4F5F subi r20,lo8(-(1))
253 0098 E42F mov r30,r20
254 009a FF27 clr r31
255 009c E050 subi r30,lo8(-(RxdBuffer))
256 009e F040 sbci r31,hi8(-(RxdBuffer))
257 00a0 2081 ld r18,Z
258 00a2 4F5F subi r20,lo8(-(1))
260 .LM18:
261 00a4 842F mov r24,r20
262 00a6 9927 clr r25
263 00a8 A817 cp r26,r24
264 00aa B907 cpc r27,r25
265 00ac 04F0 brlt .L19
267 .LM19:
268 00ae 5D53 subi r21,lo8(-(-61))
71:src/uart.c ****
72:src/uart.c **** x = (a << 2) | (b >> 4);
73:src/uart.c **** y = ((b & 0x0f) << 4) | (c >> 2);
74:src/uart.c **** z = ((c & 0x03) << 6) | d;
75:src/uart.c ****
76:src/uart.c **** if(len--) ptrOut[ptr++] = x; else break;
270 .LM20:
271 00b0 FE01 movw r30,r28
272 00b2 E70F add r30,r23
273 00b4 F11D adc r31,__zero_reg__
274 00b6 852F mov r24,r21
275 00b8 8295 swap r24
276 00ba 8F70 andi r24,0x0f
277 00bc 3D53 subi r19,lo8(-(-61))
278 00be 330F lsl r19
279 00c0 330F lsl r19
280 00c2 382B or r19,r24
281 00c4 3083 st Z,r19
77:src/uart.c **** if(len--) ptrOut[ptr++] = y; else break;
283 .LM21:
284 00c6 6130 cpi r22,lo8(1)
285 00c8 01F0 breq .L19
287 .LM22:
288 00ca 912F mov r25,r17
289 00cc 9D53 subi r25,lo8(-(-61))
291 .LM23:
292 00ce 7F5F subi r23,lo8(-(1))
293 00d0 FE01 movw r30,r28
294 00d2 E70F add r30,r23
295 00d4 F11D adc r31,__zero_reg__
296 00d6 7150 subi r23,lo8(-(-1))
297 00d8 5295 swap r21
298 00da 507F andi r21,0xf0
299 00dc 892F mov r24,r25
300 00de 8695 lsr r24
301 00e0 8695 lsr r24
302 00e2 582B or r21,r24
303 00e4 5083 st Z,r21
304 00e6 6350 subi r22,lo8(-(-3))
78:src/uart.c **** if(len--) ptrOut[ptr++] = z; else break;
306 .LM24:
307 00e8 6F3F cpi r22,lo8(-1)
308 00ea 01F0 breq .L19
309 00ec 7E5F subi r23,lo8(-(2))
310 00ee FE01 movw r30,r28
311 00f0 E70F add r30,r23
312 00f2 F11D adc r31,__zero_reg__
313 00f4 9295 swap r25
314 00f6 990F lsl r25
315 00f8 990F lsl r25
316 00fa 907C andi r25,0xc0
317 00fc 2D53 subi r18,lo8(-(-61))
318 00fe 922B or r25,r18
319 0100 9083 st Z,r25
320 0102 7F5F subi r23,lo8(-(1))
321 .L13:
323 .LM25:
324 0104 6623 tst r22
325 0106 01F0 breq .+2
326 0108 00C0 rjmp .L14
327 .L19:
328 /* epilogue: frame size=0 */
329 010a DF91 pop r29
330 010c CF91 pop r28
331 010e 1F91 pop r17
332 0110 0895 ret
333 /* epilogue end (size=4) */
334 /* function Decode64 size 88 (81) */
341 .Lscope3:
343 .stabd 78,0,0
346 .global AddCRC
348 AddCRC:
349 .stabd 46,0,0
79:src/uart.c **** }
80:src/uart.c ****
81:src/uart.c **** }
82:src/uart.c ****
83:src/uart.c ****
84:src/uart.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
85:src/uart.c **** //++ Empfangs-Part der Datenübertragung
86:src/uart.c **** //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
87:src/uart.c **** SIGNAL(INT_VEC_RX)
88:src/uart.c **** {
89:src/uart.c ****
90:src/uart.c **** #if X3D_SIO == 1
91:src/uart.c **** static unsigned char serPacketCounter = 100;
92:src/uart.c **** SioTmp = UDR;
93:src/uart.c **** if(SioTmp == 0xF5) // Startzeichen
94:src/uart.c **** {
95:src/uart.c **** serPacketCounter = 0;
96:src/uart.c **** }
97:src/uart.c **** else
98:src/uart.c **** {
99:src/uart.c **** if(++serPacketCounter == MotorAdresse) // (1-4)
100:src/uart.c **** {
101:src/uart.c **** SIO_Sollwert = SioTmp;
102:src/uart.c **** SIO_Timeout = 200; // werte für 200ms gültig
103:src/uart.c **** }
104:src/uart.c **** else
105:src/uart.c **** {
106:src/uart.c **** if(serPacketCounter > 100) serPacketCounter = 100;
107:src/uart.c **** }
108:src/uart.c **** }
109:src/uart.c **** #else
110:src/uart.c **** static unsigned int crc;
111:src/uart.c **** static unsigned char crc1,crc2,buf_ptr;
112:src/uart.c **** static unsigned char UartState = 0;
113:src/uart.c **** unsigned char CrcOkay = 0;
114:src/uart.c ****
115:src/uart.c **** SioTmp = UDR;
116:src/uart.c **** if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
117:src/uart.c **** if(SioTmp == '\r' && UartState == 2)
118:src/uart.c **** {
119:src/uart.c **** UartState = 0;
120:src/uart.c **** crc -= RxdBuffer[buf_ptr-2];
121:src/uart.c **** crc -= RxdBuffer[buf_ptr-1];
122:src/uart.c **** crc %= 4096;
123:src/uart.c **** crc1 = '=' + crc / 64;
124:src/uart.c **** crc2 = '=' + crc % 64;
125:src/uart.c **** CrcOkay = 0;
126:src/uart.c **** if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay
127:src/uart.c **** if(CrcOkay) // Datensatz schon verarbeitet
128:src/uart.c **** {
129:src/uart.c **** //NeuerDatensatzEmpfangen = 1;
130:src/uart.c **** AnzahlEmpfangsBytes = buf_ptr;
131:src/uart.c ****
132:src/uart.c **** RxdBuffer[buf_ptr] = '\r';
133:src/uart.c **** if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt
134:src/uart.c **** uart_putchar(RxdBuffer[2]);
135:src/uart.c **** if (RxdBuffer[2] == 't') // Motortest
136:src/uart.c **** { Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
137:src/uart.c **** SIO_Sollwert = MotorTest[MotorAdresse - 1];
138:src/uart.c **** SIO_Timeout = 500; // werte für 500ms gültig
139:src/uart.c ****
140:src/uart.c **** }
141:src/uart.c **** }
142:src/uart.c **** }
143:src/uart.c **** else
144:src/uart.c **** switch(UartState)
145:src/uart.c **** {
146:src/uart.c **** case 0:
147:src/uart.c **** if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten s
148:src/uart.c **** buf_ptr = 0;
149:src/uart.c **** RxdBuffer[buf_ptr++] = SioTmp;
150:src/uart.c **** crc = SioTmp;
151:src/uart.c **** break;
152:src/uart.c **** case 1: // Adresse auswerten
153:src/uart.c **** UartState++;
154:src/uart.c **** RxdBuffer[buf_ptr++] = SioTmp;
155:src/uart.c **** crc += SioTmp;
156:src/uart.c **** break;
157:src/uart.c **** case 2: // Eingangsdaten sammeln
158:src/uart.c **** RxdBuffer[buf_ptr] = SioTmp;
159:src/uart.c **** if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
160:src/uart.c **** else UartState = 0;
161:src/uart.c **** crc += SioTmp;
162:src/uart.c **** break;
163:src/uart.c **** default:
164:src/uart.c **** UartState = 0;
165:src/uart.c **** break;
166:src/uart.c **** }
167:src/uart.c ****
168:src/uart.c ****
169:src/uart.c **** #endif
170:src/uart.c **** };
171:src/uart.c ****
172:src/uart.c ****
173:src/uart.c **** // --------------------------------------------------------------------------
174:src/uart.c **** void AddCRC(unsigned int wieviele)
175:src/uart.c **** {
351 .LM26:
352 .LFBB4:
353 /* prologue: frame size=0 */
354 /* prologue end (size=0) */
355 0112 DC01 movw r26,r24
356 0114 20E0 ldi r18,lo8(0)
357 0116 30E0 ldi r19,hi8(0)
358 0118 40E0 ldi r20,lo8(0)
359 011a 50E0 ldi r21,hi8(0)
360 011c 00C0 rjmp .L21
361 .L22:
176:src/uart.c **** unsigned int tmpCRC = 0,i;
177:src/uart.c **** for(i = 0; i < wieviele;i++)
178:src/uart.c **** {
179:src/uart.c **** tmpCRC += SendeBuffer[i];
363 .LM27:
364 011e FA01 movw r30,r20
365 0120 E050 subi r30,lo8(-(SendeBuffer))
366 0122 F040 sbci r31,hi8(-(SendeBuffer))
367 0124 8081 ld r24,Z
368 0126 280F add r18,r24
369 0128 311D adc r19,__zero_reg__
371 .LM28:
372 012a 4F5F subi r20,lo8(-(1))
373 012c 5F4F sbci r21,hi8(-(1))
374 .L21:
375 012e 4A17 cp r20,r26
376 0130 5B07 cpc r21,r27
377 0132 01F4 brne .L22
180:src/uart.c **** }
181:src/uart.c **** tmpCRC %= 4096;
379 .LM29:
380 0134 3F70 andi r19,hi8(4095)
182:src/uart.c **** SendeBuffer[i++] = '=' + tmpCRC / 64;
382 .LM30:
383 0136 C901 movw r24,r18
384 0138 36E0 ldi r19,6
385 013a 9695 1: lsr r25
386 013c 8795 ror r24
387 013e 3A95 dec r19
388 0140 01F4 brne 1b
389 0142 835C subi r24,lo8(-(61))
390 0144 FD01 movw r30,r26
391 0146 E050 subi r30,lo8(-(SendeBuffer))
392 0148 F040 sbci r31,hi8(-(SendeBuffer))
393 014a 8083 st Z,r24
394 014c 1196 adiw r26,1
183:src/uart.c **** SendeBuffer[i++] = '=' + tmpCRC % 64;
396 .LM31:
397 014e 2F73 andi r18,lo8(63)
398 0150 235C subi r18,lo8(-(61))
399 0152 FD01 movw r30,r26
400 0154 E050 subi r30,lo8(-(SendeBuffer))
401 0156 F040 sbci r31,hi8(-(SendeBuffer))
402 0158 2083 st Z,r18
184:src/uart.c **** SendeBuffer[i++] = '\r';
404 .LM32:
405 015a A050 subi r26,lo8(-(SendeBuffer+1))
406 015c B040 sbci r27,hi8(-(SendeBuffer+1))
407 015e 8DE0 ldi r24,lo8(13)
408 0160 8C93 st X,r24
185:src/uart.c **** UebertragungAbgeschlossen = 0;
410 .LM33:
411 0162 1092 0000 sts UebertragungAbgeschlossen,__zero_reg__
186:src/uart.c **** UDR = SendeBuffer[0];
413 .LM34:
414 0166 8091 0000 lds r24,SendeBuffer
415 016a 8CB9 out 44-0x20,r24
416 /* epilogue: frame size=0 */
417 016c 0895 ret
418 /* epilogue end (size=1) */
419 /* function AddCRC size 47 (46) */
425 .Lscope4:
427 .stabd 78,0,0
433 .global SendOutData
435 SendOutData:
436 .stabd 46,0,0
187:src/uart.c **** }
188:src/uart.c ****
189:src/uart.c ****
190:src/uart.c **** // --------------------------------------------------------------------------
191:src/uart.c **** void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
192:src/uart.c **** {
438 .LM35:
439 .LFBB5:
440 /* prologue: frame size=0 */
441 016e 1F93 push r17
442 0170 CF93 push r28
443 0172 DF93 push r29
444 /* prologue end (size=3) */
445 0174 EA01 movw r28,r20
446 0176 722F mov r23,r18
193:src/uart.c **** unsigned int pt = 0;
194:src/uart.c **** unsigned char a,b,c;
195:src/uart.c **** unsigned char ptr = 0;
196:src/uart.c ****
197:src/uart.c ****
198:src/uart.c **** SendeBuffer[pt++] = '#'; // Startzeichen
448 .LM36:
449 0178 93E2 ldi r25,lo8(35)
450 017a 9093 0000 sts SendeBuffer,r25
199:src/uart.c **** SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
452 .LM37:
453 017e 6093 0000 sts SendeBuffer+1,r22
200:src/uart.c **** SendeBuffer[pt++] = cmd; // Commando
455 .LM38:
456 0182 8093 0000 sts SendeBuffer+2,r24
457 0186 A3E0 ldi r26,lo8(3)
458 0188 B0E0 ldi r27,hi8(3)
459 018a 60E0 ldi r22,lo8(0)
460 018c 00C0 rjmp .L26
461 .L27:
201:src/uart.c ****
202:src/uart.c **** while(len)
203:src/uart.c **** {
204:src/uart.c **** if(len) { a = snd[ptr++]; len--;} else a = 0;
463 .LM39:
464 018e FE01 movw r30,r28
465 0190 E60F add r30,r22
466 0192 F11D adc r31,__zero_reg__
467 0194 9081 ld r25,Z
468 0196 6F5F subi r22,lo8(-(1))
469 0198 7150 subi r23,lo8(-(-1))
205:src/uart.c **** if(len) { b = snd[ptr++]; len--;} else b = 0;
471 .LM40:
472 019a 01F4 brne .L28
473 019c 10E0 ldi r17,lo8(0)
474 019e 40E0 ldi r20,lo8(0)
475 01a0 00C0 rjmp .L30
476 .L28:
477 01a2 FE01 movw r30,r28
478 01a4 E60F add r30,r22
479 01a6 F11D adc r31,__zero_reg__
480 01a8 4081 ld r20,Z
481 01aa 6F5F subi r22,lo8(-(1))
482 01ac 7150 subi r23,lo8(-(-1))
206:src/uart.c **** if(len) { c = snd[ptr++]; len--;} else c = 0;
484 .LM41:
485 01ae 01F4 brne .L31
486 01b0 10E0 ldi r17,lo8(0)
487 01b2 00C0 rjmp .L30
488 .L31:
489 01b4 FE01 movw r30,r28
490 01b6 E60F add r30,r22
491 01b8 F11D adc r31,__zero_reg__
492 01ba 1081 ld r17,Z
493 01bc 6F5F subi r22,lo8(-(1))
494 01be 7150 subi r23,lo8(-(-1))
495 .L30:
207:src/uart.c **** SendeBuffer[pt++] = '=' + (a >> 2);
497 .LM42:
498 01c0 892F mov r24,r25
499 01c2 8695 lsr r24
500 01c4 8695 lsr r24
501 01c6 835C subi r24,lo8(-(61))
502 01c8 FD01 movw r30,r26
503 01ca E050 subi r30,lo8(-(SendeBuffer))
504 01cc F040 sbci r31,hi8(-(SendeBuffer))
505 01ce 8083 st Z,r24
208:src/uart.c **** SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
507 .LM43:
508 01d0 5527 clr r21
509 01d2 9A01 movw r18,r20
510 01d4 84E0 ldi r24,4
511 01d6 3695 1: lsr r19
512 01d8 2795 ror r18
513 01da 8A95 dec r24
514 01dc 01F4 brne 1b
515 01de 892F mov r24,r25
516 01e0 9927 clr r25
517 01e2 8370 andi r24,lo8(3)
518 01e4 9070 andi r25,hi8(3)
519 01e6 F4E0 ldi r31,4
520 01e8 880F 1: lsl r24
521 01ea 991F rol r25
522 01ec FA95 dec r31
523 01ee 01F4 brne 1b
524 01f0 282B or r18,r24
525 01f2 235C subi r18,lo8(-(61))
526 01f4 FD01 movw r30,r26
527 01f6 E050 subi r30,lo8(-(SendeBuffer+1))
528 01f8 F040 sbci r31,hi8(-(SendeBuffer+1))
529 01fa 2083 st Z,r18
209:src/uart.c **** SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
531 .LM44:
532 01fc 812F mov r24,r17
533 01fe 8295 swap r24
534 0200 8695 lsr r24
535 0202 8695 lsr r24
536 0204 8370 andi r24,0x3
537 0206 4F70 andi r20,lo8(15)
538 0208 5070 andi r21,hi8(15)
539 020a 440F lsl r20
540 020c 551F rol r21
541 020e 440F lsl r20
542 0210 551F rol r21
543 0212 842B or r24,r20
544 0214 835C subi r24,lo8(-(61))
545 0216 FD01 movw r30,r26
546 0218 E050 subi r30,lo8(-(SendeBuffer+2))
547 021a F040 sbci r31,hi8(-(SendeBuffer+2))
548 021c 8083 st Z,r24
210:src/uart.c **** SendeBuffer[pt++] = '=' + ( c & 0x3f);
550 .LM45:
551 021e 1F73 andi r17,lo8(63)
552 0220 135C subi r17,lo8(-(61))
553 0222 FD01 movw r30,r26
554 0224 E050 subi r30,lo8(-(SendeBuffer+3))
555 0226 F040 sbci r31,hi8(-(SendeBuffer+3))
556 0228 1083 st Z,r17
557 022a 1496 adiw r26,4
558 .L26:
560 .LM46:
561 022c 7723 tst r23
562 022e 01F0 breq .+2
563 0230 00C0 rjmp .L27
211:src/uart.c **** }
212:src/uart.c **** AddCRC(pt);
565 .LM47:
566 0232 CD01 movw r24,r26
567 0234 00D0 rcall AddCRC
568 /* epilogue: frame size=0 */
569 0236 DF91 pop r29
570 0238 CF91 pop r28
571 023a 1F91 pop r17
572 023c 0895 ret
573 /* epilogue end (size=4) */
574 /* function SendOutData size 106 (99) */
583 .Lscope5:
585 .stabd 78,0,0
588 .global uart_putchar
590 uart_putchar:
591 .stabd 46,0,0
213:src/uart.c **** }
214:src/uart.c ****
215:src/uart.c ****
216:src/uart.c ****
217:src/uart.c **** //############################################################################
218:src/uart.c **** //Routine für die Serielle Ausgabe
219:src/uart.c **** int uart_putchar (char c)
220:src/uart.c **** //############################################################################
221:src/uart.c **** {
593 .LM48:
594 .LFBB6:
595 /* prologue: frame size=0 */
596 023e 1F93 push r17
597 /* prologue end (size=1) */
598 0240 182F mov r17,r24
222:src/uart.c **** if (c == '\n')
600 .LM49:
601 0242 8A30 cpi r24,lo8(10)
602 0244 01F4 brne .L40
223:src/uart.c **** uart_putchar('\r');
604 .LM50:
605 0246 8DE0 ldi r24,lo8(13)
606 0248 00D0 rcall uart_putchar
607 .L40:
224:src/uart.c **** //Warten solange bis Zeichen gesendet wurde
225:src/uart.c **** loop_until_bit_is_set(USR, UDRE);
609 .LM51:
610 024a 5D9B sbis 43-0x20,5
611 024c 00C0 rjmp .L40
226:src/uart.c **** //Ausgabe des Zeichens
227:src/uart.c **** UDR = c;
613 .LM52:
614 024e 1CB9 out 44-0x20,r17
228:src/uart.c ****
229:src/uart.c **** return (0);
230:src/uart.c **** }
616 .LM53:
617 0250 80E0 ldi r24,lo8(0)
618 0252 90E0 ldi r25,hi8(0)
619 /* epilogue: frame size=0 */
620 0254 1F91 pop r17
621 0256 0895 ret
622 /* epilogue end (size=2) */
623 /* function uart_putchar size 13 (10) */
625 .Lscope6:
627 .stabd 78,0,0
629 .global __vector_11
631 __vector_11:
632 .stabd 46,0,0
634 .LM54:
635 .LFBB7:
636 /* prologue: frame size=0 */
637 0258 1F92 push __zero_reg__
638 025a 0F92 push __tmp_reg__
639 025c 0FB6 in __tmp_reg__,__SREG__
640 025e 0F92 push __tmp_reg__
641 0260 1124 clr __zero_reg__
642 0262 2F93 push r18
643 0264 3F93 push r19
644 0266 4F93 push r20
645 0268 5F93 push r21
646 026a 6F93 push r22
647 026c 7F93 push r23
648 026e 8F93 push r24
649 0270 9F93 push r25
650 0272 AF93 push r26
651 0274 BF93 push r27
652 0276 CF93 push r28
653 0278 DF93 push r29
654 027a EF93 push r30
655 027c FF93 push r31
656 /* prologue end (size=19) */
658 .LM55:
659 027e 8CB1 in r24,44-0x20
660 0280 8093 0000 sts SioTmp,r24
662 .LM56:
663 0284 4091 0000 lds r20,buf_ptr.2137
664 0288 4436 cpi r20,lo8(100)
665 028a 00F0 brlo .L44
667 .LM57:
668 028c 1092 0000 sts UartState.2138,__zero_reg__
669 .L44:
671 .LM58:
672 0290 5091 0000 lds r21,SioTmp
673 0294 5D30 cpi r21,lo8(13)
674 0296 01F0 breq .+2
675 0298 00C0 rjmp .L46
676 029a 8091 0000 lds r24,UartState.2138
677 029e 8230 cpi r24,lo8(2)
678 02a0 01F0 breq .+2
679 02a2 00C0 rjmp .L46
681 .LM59:
682 02a4 1092 0000 sts UartState.2138,__zero_reg__
684 .LM60:
685 02a8 A42F mov r26,r20
686 02aa BB27 clr r27
687 02ac FD01 movw r30,r26
688 02ae E050 subi r30,lo8(-(RxdBuffer-2))
689 02b0 F040 sbci r31,hi8(-(RxdBuffer-2))
690 02b2 3081 ld r19,Z
692 .LM61:
693 02b4 ED01 movw r28,r26
694 02b6 C050 subi r28,lo8(-(RxdBuffer-1))
695 02b8 D040 sbci r29,hi8(-(RxdBuffer-1))
696 02ba 2881 ld r18,Y
698 .LM62:
699 02bc 8091 0000 lds r24,crc.2134
700 02c0 9091 0000 lds r25,(crc.2134)+1
701 02c4 831B sub r24,r19
702 02c6 9109 sbc r25,__zero_reg__
703 02c8 821B sub r24,r18
704 02ca 9109 sbc r25,__zero_reg__
705 02cc 9F70 andi r25,hi8(4095)
706 02ce 9093 0000 sts (crc.2134)+1,r25
707 02d2 8093 0000 sts crc.2134,r24
709 .LM63:
710 02d6 9C01 movw r18,r24
711 02d8 96E0 ldi r25,6
712 02da 3695 1: lsr r19
713 02dc 2795 ror r18
714 02de 9A95 dec r25
715 02e0 01F4 brne 1b
716 02e2 235C subi r18,lo8(-(61))
717 02e4 2093 0000 sts crc1.2135,r18
719 .LM64:
720 02e8 982F mov r25,r24
721 02ea 9F73 andi r25,lo8(63)
722 02ec 935C subi r25,lo8(-(61))
723 02ee 9093 0000 sts crc2.2136,r25
725 .LM65:
726 02f2 8081 ld r24,Z
727 02f4 2817 cp r18,r24
728 02f6 01F0 breq .+2
729 02f8 00C0 rjmp .L65
730 02fa 8881 ld r24,Y
731 02fc 9817 cp r25,r24
732 02fe 01F0 breq .+2
733 0300 00C0 rjmp .L65
735 .LM66:
736 0302 4093 0000 sts AnzahlEmpfangsBytes,r20
738 .LM67:
739 0306 A050 subi r26,lo8(-(RxdBuffer))
740 0308 B040 sbci r27,hi8(-(RxdBuffer))
741 030a 5C93 st X,r21
743 .LM68:
744 030c 8091 0000 lds r24,RxdBuffer+2
745 0310 8235 cpi r24,lo8(82)
746 0312 01F4 brne .L52
747 0314 88E1 ldi r24,lo8(24)
748 0316 90E0 ldi r25,hi8(24)
749 0318 2CE0 ldi r18,lo8(12)
750 /* #APP */
751 031a 0FB6 in __tmp_reg__,__SREG__
752 031c F894 cli
753 031e A895 wdr
754 0320 81BD out 33,r24
755 0322 0FBE out __SREG__,__tmp_reg__
756 0324 21BD out 33,r18
757 /* #NOAPP */
758 .L52:
760 .LM69:
761 0326 8091 0000 lds r24,RxdBuffer+2
762 032a 00D0 rcall uart_putchar
764 .LM70:
765 032c 8091 0000 lds r24,RxdBuffer+2
766 0330 8437 cpi r24,lo8(116)
767 0332 01F0 breq .+2
768 0334 00C0 rjmp .L65
770 .LM71:
771 0336 2091 0000 lds r18,AnzahlEmpfangsBytes
772 033a 43E0 ldi r20,lo8(3)
773 033c 64E0 ldi r22,lo8(4)
774 033e 80E0 ldi r24,lo8(MotorTest)
775 0340 90E0 ldi r25,hi8(MotorTest)
776 0342 00D0 rcall Decode64
778 .LM72:
779 0344 E091 0000 lds r30,MotorAdresse
780 0348 FF27 clr r31
781 034a E050 subi r30,lo8(-(MotorTest-1))
782 034c F040 sbci r31,hi8(-(MotorTest-1))
783 034e 8081 ld r24,Z
784 0350 8093 0000 sts SIO_Sollwert,r24
786 .LM73:
787 0354 84EF ldi r24,lo8(500)
788 0356 91E0 ldi r25,hi8(500)
789 0358 9093 0000 sts (SIO_Timeout)+1,r25
790 035c 8093 0000 sts SIO_Timeout,r24
791 0360 00C0 rjmp .L65
792 .L46:
794 .LM74:
795 0362 8091 0000 lds r24,UartState.2138
796 0366 8130 cpi r24,lo8(1)
797 0368 01F0 breq .L57
798 036a 8130 cpi r24,lo8(1)
799 036c 00F0 brlo .L56
800 036e 8230 cpi r24,lo8(2)
801 0370 01F4 brne .L66
802 0372 00C0 rjmp .L58
803 .L56:
805 .LM75:
806 0374 8091 0000 lds r24,SioTmp
807 0378 8332 cpi r24,lo8(35)
808 037a 01F4 brne .L59
809 037c 8091 0000 lds r24,NeuerDatensatzEmpfangen
810 0380 8823 tst r24
811 0382 01F4 brne .L59
812 0384 81E0 ldi r24,lo8(1)
813 0386 8093 0000 sts UartState.2138,r24
814 .L59:
816 .LM76:
817 038a 8091 0000 lds r24,SioTmp
818 038e 8093 0000 sts RxdBuffer,r24
819 0392 81E0 ldi r24,lo8(1)
820 0394 8093 0000 sts buf_ptr.2137,r24
822 .LM77:
823 0398 8091 0000 lds r24,SioTmp
824 039c 9927 clr r25
825 039e 00C0 rjmp .L67
826 .L57:
828 .LM78:
829 03a0 82E0 ldi r24,lo8(2)
830 03a2 8093 0000 sts UartState.2138,r24
832 .LM79:
833 03a6 E42F mov r30,r20
834 03a8 FF27 clr r31
835 03aa 8091 0000 lds r24,SioTmp
836 03ae E050 subi r30,lo8(-(RxdBuffer))
837 03b0 F040 sbci r31,hi8(-(RxdBuffer))
838 03b2 8083 st Z,r24
839 03b4 00C0 rjmp .L68
840 .L58:
842 .LM80:
843 03b6 E42F mov r30,r20
844 03b8 FF27 clr r31
845 03ba 8091 0000 lds r24,SioTmp
846 03be E050 subi r30,lo8(-(RxdBuffer))
847 03c0 F040 sbci r31,hi8(-(RxdBuffer))
848 03c2 8083 st Z,r24
850 .LM81:
851 03c4 4436 cpi r20,lo8(100)
852 03c6 00F4 brsh .L62
853 .L68:
854 03c8 4F5F subi r20,lo8(-(1))
855 03ca 4093 0000 sts buf_ptr.2137,r20
856 03ce 00C0 rjmp .L64
857 .L62:
859 .LM82:
860 03d0 1092 0000 sts UartState.2138,__zero_reg__
861 .L64:
863 .LM83:
864 03d4 2091 0000 lds r18,SioTmp
865 03d8 8091 0000 lds r24,crc.2134
866 03dc 9091 0000 lds r25,(crc.2134)+1
867 03e0 820F add r24,r18
868 03e2 911D adc r25,__zero_reg__
869 .L67:
870 03e4 9093 0000 sts (crc.2134)+1,r25
871 03e8 8093 0000 sts crc.2134,r24
872 03ec 00C0 rjmp .L65
873 .L66:
875 .LM84:
876 03ee 1092 0000 sts UartState.2138,__zero_reg__
877 .L65:
878 /* epilogue: frame size=0 */
879 03f2 FF91 pop r31
880 03f4 EF91 pop r30
881 03f6 DF91 pop r29
882 03f8 CF91 pop r28
883 03fa BF91 pop r27
884 03fc AF91 pop r26
885 03fe 9F91 pop r25
886 0400 8F91 pop r24
887 0402 7F91 pop r23
888 0404 6F91 pop r22
889 0406 5F91 pop r21
890 0408 4F91 pop r20
891 040a 3F91 pop r19
892 040c 2F91 pop r18
893 040e 0F90 pop __tmp_reg__
894 0410 0FBE out __SREG__,__tmp_reg__
895 0412 0F90 pop __tmp_reg__
896 0414 1F90 pop __zero_reg__
897 0416 1895 reti
898 /* epilogue end (size=19) */
899 /* function __vector_11 size 231 (193) */
908 .Lscope7:
910 .stabd 78,0,0
914 .global WriteProgramData
916 WriteProgramData:
917 .stabd 46,0,0
231:src/uart.c ****
232:src/uart.c **** // --------------------------------------------------------------------------
233:src/uart.c **** void WriteProgramData(unsigned int pos, unsigned char wert)
234:src/uart.c **** {
919 .LM85:
920 .LFBB8:
921 /* prologue: frame size=0 */
922 /* prologue end (size=0) */
923 /* epilogue: frame size=0 */
924 0418 0895 ret
925 /* epilogue end (size=1) */
926 /* function WriteProgramData size 1 (0) */
928 .Lscope8:
930 .stabd 78,0,0
932 .global DatenUebertragung
934 DatenUebertragung:
935 .stabd 46,0,0
235:src/uart.c **** }
236:src/uart.c ****
237:src/uart.c **** //############################################################################
238:src/uart.c **** //INstallation der Seriellen Schnittstelle
239:src/uart.c **** void UART_Init (void)
240:src/uart.c **** //############################################################################
241:src/uart.c **** {
242:src/uart.c **** //Enable TXEN im Register UCR TX-Data Enable & RX Enable
243:src/uart.c ****
244:src/uart.c **** UCR=(1 << TXEN) | (1 << RXEN);
245:src/uart.c **** // UART Double Speed (U2X)
246:src/uart.c **** USR |= (1<<U2X);
247:src/uart.c **** // RX-Interrupt Freigabe
248:src/uart.c ****
249:src/uart.c **** UCSRB |= (1<<RXCIE); // serieller Empfangsinterrupt
250:src/uart.c ****
251:src/uart.c **** // TX-Interrupt Freigabe
252:src/uart.c **** // UCSRB |= (1<<TXCIE);
253:src/uart.c ****
254:src/uart.c **** //Teiler wird gesetzt
255:src/uart.c **** UBRR= (SYSCLK / (BAUD_RATE * 8L) -1 );
256:src/uart.c **** //öffnet einen Kanal für printf (STDOUT)
257:src/uart.c **** fdevopen (uart_putchar, NULL);
258:src/uart.c **** Debug_Timer = SetDelay(200);
259:src/uart.c **** // Version beim Start ausgeben (nicht schön, aber geht... )
260:src/uart.c **** uart_putchar ('\n');uart_putchar ('B');uart_putchar ('L');uart_putchar (':');
261:src/uart.c **** uart_putchar ('V');uart_putchar (0x30 + VERSION_HAUPTVERSION);uart_putchar ('.');uart_putchar (0x3
262:src/uart.c **** uart_putchar ('\n');uart_putchar ('A');uart_putchar ('D');uart_putchar ('R'); uart_putchar (':');
263:src/uart.c ****
264:src/uart.c **** }
265:src/uart.c ****
266:src/uart.c ****
267:src/uart.c ****
268:src/uart.c ****
269:src/uart.c **** //---------------------------------------------------------------------------------------------
270:src/uart.c **** void DatenUebertragung(void)
271:src/uart.c **** {
937 .LM86:
938 .LFBB9:
939 /* prologue: frame size=0 */
940 /* prologue end (size=0) */
272:src/uart.c **** if((CheckDelay(Debug_Timer) && UebertragungAbgeschlossen)) // im Singlestep-Betrieb in jedem Scht
942 .LM87:
943 041a 8091 0000 lds r24,Debug_Timer
944 041e 9091 0000 lds r25,(Debug_Timer)+1
945 0422 00D0 rcall CheckDelay
946 0424 8823 tst r24
947 0426 01F0 breq .L75
949 .LM88:
950 0428 8091 0000 lds r24,UebertragungAbgeschlossen
951 042c 8823 tst r24
952 042e 01F0 breq .L75
273:src/uart.c **** {
274:src/uart.c **** SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
954 .LM89:
955 0430 6091 0000 lds r22,MeineSlaveAdresse
956 0434 22E2 ldi r18,lo8(34)
957 0436 40E0 ldi r20,lo8(DebugOut)
958 0438 50E0 ldi r21,hi8(DebugOut)
959 043a 84E4 ldi r24,lo8(68)
960 043c 00D0 rcall SendOutData
275:src/uart.c **** Debug_Timer = SetDelay(50); // Sendeintervall
962 .LM90:
963 043e 82E3 ldi r24,lo8(50)
964 0440 90E0 ldi r25,hi8(50)
965 0442 00D0 rcall SetDelay
966 0444 9093 0000 sts (Debug_Timer)+1,r25
967 0448 8093 0000 sts Debug_Timer,r24
968 .L75:
969 044c 0895 ret
970 /* epilogue: frame size=0 */
971 /* epilogue: noreturn */
972 /* epilogue end (size=0) */
973 /* function DatenUebertragung size 26 (26) */
975 .Lscope9:
977 .stabd 78,0,0
979 .global UART_Init
981 UART_Init:
982 .stabd 46,0,0
984 .LM91:
985 .LFBB10:
986 /* prologue: frame size=0 */
987 /* prologue end (size=0) */
989 .LM92:
990 044e 88E1 ldi r24,lo8(24)
991 0450 8AB9 out 42-0x20,r24
993 .LM93:
994 0452 599A sbi 43-0x20,1
996 .LM94:
997 0454 579A sbi 42-0x20,7
999 .LM95:
1000 0456 80E1 ldi r24,lo8(16)
1001 0458 89B9 out 41-0x20,r24
1003 .LM96:
1004 045a 60E0 ldi r22,lo8(0)
1005 045c 70E0 ldi r23,hi8(0)
1006 045e 80E0 ldi r24,lo8(pm(uart_putchar))
1007 0460 90E0 ldi r25,hi8(pm(uart_putchar))
1008 0462 00D0 rcall fdevopen
1010 .LM97:
1011 0464 88EC ldi r24,lo8(200)
1012 0466 90E0 ldi r25,hi8(200)
1013 0468 00D0 rcall SetDelay
1014 046a 9093 0000 sts (Debug_Timer)+1,r25
1015 046e 8093 0000 sts Debug_Timer,r24
1017 .LM98:
1018 0472 8AE0 ldi r24,lo8(10)
1019 0474 00D0 rcall uart_putchar
1020 0476 82E4 ldi r24,lo8(66)
1021 0478 00D0 rcall uart_putchar
1022 047a 8CE4 ldi r24,lo8(76)
1023 047c 00D0 rcall uart_putchar
1024 047e 8AE3 ldi r24,lo8(58)
1025 0480 00D0 rcall uart_putchar
1027 .LM99:
1028 0482 86E5 ldi r24,lo8(86)
1029 0484 00D0 rcall uart_putchar
1030 0486 80E3 ldi r24,lo8(48)
1031 0488 00D0 rcall uart_putchar
1032 048a 8EE2 ldi r24,lo8(46)
1033 048c 00D0 rcall uart_putchar
1034 048e 83E3 ldi r24,lo8(51)
1035 0490 00D0 rcall uart_putchar
1036 0492 87E3 ldi r24,lo8(55)
1037 0494 00D0 rcall uart_putchar
1039 .LM100:
1040 0496 8AE0 ldi r24,lo8(10)
1041 0498 00D0 rcall uart_putchar
1042 049a 81E4 ldi r24,lo8(65)
1043 049c 00D0 rcall uart_putchar
1044 049e 84E4 ldi r24,lo8(68)
1045 04a0 00D0 rcall uart_putchar
1046 04a2 82E5 ldi r24,lo8(82)
1047 04a4 00D0 rcall uart_putchar
1048 04a6 8AE3 ldi r24,lo8(58)
1049 04a8 00D0 rcall uart_putchar
1050 04aa 8091 0000 lds r24,MotorAdresse
1051 04ae 805D subi r24,lo8(-(48))
1052 04b0 00D0 rcall uart_putchar
1053 /* epilogue: frame size=0 */
1054 04b2 0895 ret
1055 /* epilogue end (size=1) */
1056 /* function UART_Init size 51 (50) */
1058 .Lscope10:
1060 .stabd 78,0,0
1061 .global SIO_Sollwert
1062 .global SIO_Sollwert
1063 .section .bss
1066 SIO_Sollwert:
1067 0000 00 .skip 1,0
1068 .global SioTmp
1069 .global SioTmp
1072 SioTmp:
1073 0001 00 .skip 1,0
1074 .global NeuerDatensatzEmpfangen
1075 .global NeuerDatensatzEmpfangen
1078 NeuerDatensatzEmpfangen:
1079 0002 00 .skip 1,0
1080 .global UebertragungAbgeschlossen
1081 .data
1084 UebertragungAbgeschlossen:
1085 0000 01 .byte 1
1086 .global MotorTest
1087 .global MotorTest
1088 .section .bss
1091 MotorTest:
1092 0003 0000 0000 .skip 4,0
1093 .global AnzahlEmpfangsBytes
1094 .global AnzahlEmpfangsBytes
1097 AnzahlEmpfangsBytes:
1098 0007 00 .skip 1,0
1099 .lcomm UartState.2138,1
1100 .lcomm buf_ptr.2137,1
1101 .lcomm crc2.2136,1
1102 .lcomm crc1.2135,1
1103 .lcomm crc.2134,2
1104 .lcomm ptr.2069,2
1105 .comm MeineSlaveAdresse,1,1
1106 .comm Debug_Timer,2,1
1107 .comm DebugOut,34,1
1108 .comm SendeBuffer,100,1
1109 .comm RxdBuffer,100,1
1127 .text
1129 .Letext0:
1130 /* File "src/uart.c": code 612 = 0x0264 ( 544), prologues 31, epilogues 37 */
DEFINED SYMBOLS
*ABS*:00000000 uart.c
/tmp/ccYvbISt.s:2 *ABS*:0000003f __SREG__
/tmp/ccYvbISt.s:3 *ABS*:0000003e __SP_H__
/tmp/ccYvbISt.s:4 *ABS*:0000003d __SP_L__
/tmp/ccYvbISt.s:5 *ABS*:00000000 __tmp_reg__
/tmp/ccYvbISt.s:6 *ABS*:00000001 __zero_reg__
/tmp/ccYvbISt.s:102 .text:00000000 __vector_13
/tmp/ccYvbISt.s:129 .text:00000014 SendUart
/tmp/ccYvbISt.s:1084 .data:00000000 UebertragungAbgeschlossen
/tmp/ccYvbISt.s:1103 .bss:0000000e ptr.2069
*COM*:00000064 SendeBuffer
/tmp/ccYvbISt.s:208 .text:00000062 Decode64
*COM*:00000064 RxdBuffer
/tmp/ccYvbISt.s:348 .text:00000112 AddCRC
/tmp/ccYvbISt.s:435 .text:0000016e SendOutData
/tmp/ccYvbISt.s:590 .text:0000023e uart_putchar
/tmp/ccYvbISt.s:631 .text:00000258 __vector_11
/tmp/ccYvbISt.s:1072 .bss:00000001 SioTmp
/tmp/ccYvbISt.s:1099 .bss:00000009 buf_ptr.2137
.bss:00000008 UartState.2138
/tmp/ccYvbISt.s:1102 .bss:0000000c crc.2134
/tmp/ccYvbISt.s:1101 .bss:0000000b crc1.2135
/tmp/ccYvbISt.s:1100 .bss:0000000a crc2.2136
/tmp/ccYvbISt.s:1097 .bss:00000007 AnzahlEmpfangsBytes
/tmp/ccYvbISt.s:1091 .bss:00000003 MotorTest
/tmp/ccYvbISt.s:1066 .bss:00000000 SIO_Sollwert
/tmp/ccYvbISt.s:1078 .bss:00000002 NeuerDatensatzEmpfangen
/tmp/ccYvbISt.s:916 .text:00000418 WriteProgramData
/tmp/ccYvbISt.s:934 .text:0000041a DatenUebertragung
*COM*:00000002 Debug_Timer
*COM*:00000001 MeineSlaveAdresse
*COM*:00000022 DebugOut
/tmp/ccYvbISt.s:981 .text:0000044e UART_Init
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
MotorAdresse
SIO_Timeout
CheckDelay
SetDelay
fdevopen
/branches/V0.37_neueStruktur/src/BLMC.c
0,0 → 1,235
/*#######################################################################################
Flight Control
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Regler für Brushless-Motoren
// + ATMEGA8 mit 8MHz
// + Nur für den privaten Gebrauch
// + Copyright (c) 12.2007 Holger Buss
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
volatile unsigned char Phase = 0,ShadowTCCR1A = 0;
volatile unsigned char CompFreigabeTimer = 100;
volatile unsigned char CompInterruptFreigabe = 0;
 
 
//############################################################################
//
SIGNAL(SIG_OVERFLOW2)
//############################################################################
{
}
 
//############################################################################
// + Interruptroutine
// + Wird durch den Analogkomperator ausgelöst
// + Dadurch wird das Kommutieren erzeugt
SIGNAL(SIG_COMPARATOR)
//############################################################################
{
unsigned char sense = 0;
do
{
if(SENSE_H) sense = 1; else sense = 0;
switch(Phase)
{
case 0:
STEUER_A_H;
if(sense)
{
STEUER_C_L;
if(ZeitZumAdWandeln) AdConvert();
SENSE_FALLING_INT;
SENSE_B;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_B_L;
}
break;
case 1:
STEUER_C_L;
if(!sense)
{
STEUER_B_H;
if(ZeitZumAdWandeln) AdConvert();
SENSE_A;
SENSE_RISING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_A_H;
}
 
break;
case 2:
STEUER_B_H;
if(sense)
{
STEUER_A_L;
if(ZeitZumAdWandeln) AdConvert();
SENSE_C;
SENSE_FALLING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_C_L;
}
break;
case 3:
STEUER_A_L;
if(!sense)
{
STEUER_C_H;
if(ZeitZumAdWandeln) AdConvert();
SENSE_B;
SENSE_RISING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_B_H;
}
 
break;
case 4:
STEUER_C_H;
if(sense)
{
STEUER_B_L;
if(ZeitZumAdWandeln) AdConvert();
SENSE_A;
SENSE_FALLING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_A_L;
}
break;
case 5:
STEUER_B_L;
if(!sense)
{
STEUER_A_H;
if(ZeitZumAdWandeln) AdConvert();
SENSE_C;
SENSE_RISING_INT;
Phase = 0;
CntKommutierungen++;
}
else
{
STEUER_C_H;
}
break;
}
}
while((SENSE_L && sense) || (SENSE_H && !sense));
ZeitZumAdWandeln = 0;
}
 
//############################################################################
//
void Manuell(void)
//############################################################################
{
switch(Phase)
{
case 0:
STEUER_A_H;
STEUER_B_L;
SENSE_C;
SENSE_RISING_INT;
break;
case 1:
STEUER_A_H;
STEUER_C_L;
SENSE_B;
SENSE_FALLING_INT;
break;
case 2:
STEUER_B_H;
STEUER_C_L;
SENSE_A;
SENSE_RISING_INT;
break;
case 3:
STEUER_B_H;
STEUER_A_L;
SENSE_C;
SENSE_FALLING_INT;
break;
case 4:
STEUER_C_H;
STEUER_A_L;
SENSE_B;
SENSE_RISING_INT;
break;
case 5:
STEUER_C_H;
STEUER_B_L;
SENSE_A;
SENSE_FALLING_INT;
break;
}
}
 
/branches/V0.37_neueStruktur/src/BLMC.h
0,0 → 1,98
/*############################################################################
############################################################################*/
 
#ifndef BLMC_H_
#define BLMC_H_
 
extern volatile unsigned char Phase;
extern volatile unsigned char ShadowTCCR1A;
extern volatile unsigned char CompInterruptFreigabe;
 
void Blc(void);
void Manuell(void);
 
// anselm
/*
#define COM1A ((0 << COM1A0) | (1 << COM1A1)) // COM1A-> OC1A non inverting mode
#define COM1B ((0 << COM1B0) | (1 << COM1B1)) // COM1B-> OC1B non inverting mode
#define COM2 ((0 << COM20) | (1 << COM21)) // COM2-> OC2 non inverting mode
 
#ifdef _32KHZ
#define WGM1 ((1 << WGM10) | (0 << WGM11)) // WGM10:13-> fast PWM 8bit
#define WGMCS2 ((1 << WGM20) | (1 << WGM21) | (1 << CS20)) // WGM20:21-> fast PWM, no prescale
#endif
 
#ifdef _16KHZ
#define WGM1 ((1 << WGM10) | (0 << WGM11)) // WGM10:13-> phase corr, PWM 8bit
#define WGMCS2 ((1 << WGM20) | (0 << WGM21) | (1 << CS20)) // WGM20:21-> phase corr. PWM, no prescale
#endif
 
#define PWM_C_ON {TCCR1A = COM1A | WGM1 | COM1B; TCCR2 = WGMCS2;
DDRB = 0x02;} // Steuer_C+ output
#define PWM_B_ON {TCCR1A = COM1B | WGM1 | COM1A; TCCR2 = WGMCS2; \
DDRB = 0x04;} // Steuer_B+ output
#define PWM_A_ON {TCCR1A = WGM1; TCCR2 = COM2 | WGMCS2; \
DDRB = 0x08;} // Steuer_A+ output
#define PWM_OFF {TCCR1A = WGM1; \
TCCR2 = WGMCS2; \
PORTB &= ~0x0E; DDRB = 0x0E;} // OC1x & OC2 disconnected, Steuer_X+ output low
// anselm
*/
 
#ifdef _32KHZ
#define PWM_C_ON {TCCR1A = 0xAD; TCCR2 = 0x49;DDRB = 0x0A;}
#define PWM_B_ON {TCCR1A = 0xAD; TCCR2 = 0x49;DDRB = 0x0C;}
#define PWM_A_ON {TCCR1A = 0xAD; TCCR2 = 0x69;DDRB = 0x08;}
#define PWM_OFF {TCCR1A = 0x0D; TCCR2 = 0x49;PORTC &= ~0x0E;}
#endif
 
#ifdef _16KHZ
// #define PWM_C_ON {TCCR1A = 0xA2; TCCR2 = 0x41; DDRB = 0x0A;}
// #define PWM_B_ON {TCCR1A = 0xA2; TCCR2 = 0x41; DDRB = 0x0C;}
// #define PWM_A_ON {TCCR1A = 0xA2; TCCR2 = 0x61; DDRB = 0x08;}
 
// #define PWM_C_ON {TCCR2 = 0x41; if(PPM_Betrieb) { TCCR1A = 0xA1;DDRB = 0x0A;} else { TCCR1A = 0x81; DDRB = 0x0E;}}
// #define PWM_B_ON {TCCR2 = 0x41; if(PPM_Betrieb) { TCCR1A = 0xA1;DDRB = 0x0C;} else { TCCR1A = 0x21; DDRB = 0x0E;}}
// #define PWM_A_ON {TCCR2 = 0x61; if(PPM_Betrieb) { TCCR1A = 0xA1;DDRB = 0x08;} else { TCCR1A = 0x01; DDRB = 0x0E;}}
 
#define PWM_C_ON {TCCR1A = 0xA1; TCCR2 = 0x61; DDRB = 0x02;}
#define PWM_B_ON {TCCR1A = 0xA1; TCCR2 = 0x61; DDRB = 0x04;}
#define PWM_A_ON {TCCR1A = 0xA1; TCCR2 = 0x61; DDRB = 0x08;}
 
 
// #define PWM_C_ON {TCCR1A = 0x82; TCCR2 = 0x41; PORTB &= ~0x04; DDRB = 0x0E;}
// #define PWM_B_ON {TCCR1A = 0x22; TCCR2 = 0x41; PORTB &= ~0x02; DDRB = 0x0E;}
// #define PWM_A_ON {TCCR1A = 0x02; TCCR2 = 0x61; PORTB &= ~0x06; DDRB = 0x0E;}
 
 
#define PWM_OFF {TCCR1A = 0x01; TCCR2 = 0x41; DDRB = 0x0E; PORTB &= ~0x0E;}
#endif
 
#define STEUER_A_H {PWM_A_ON}
#define STEUER_B_H {PWM_B_ON}
#define STEUER_C_H {PWM_C_ON}
 
#define STEUER_A_L {PORTD &= ~0x30; PORTD |= 0x08;}
#define STEUER_B_L {PORTD &= ~0x28; PORTD |= 0x10;}
#define STEUER_C_L {PORTD &= ~0x18; PORTD |= 0x20;}
#define STEUER_OFF {PORTD &= ~0x38; PWM_OFF; }
#define FETS_OFF {PORTD &= ~0x38; PORTB &= ~0x0E; }
 
#define SENSE_A ADMUX = 0;
#define SENSE_B ADMUX = 1;
#define SENSE_C ADMUX = 2;
 
#define ClrSENSE ACSR |= 0x10
#define SENSE ((ACSR & 0x10))
#define SENSE_L (!(ACSR & 0x20))
#define SENSE_H ((ACSR & 0x20))
#define ENABLE_SENSE_INT {CompInterruptFreigabe = 1;ACSR |= 0x0A; }
#define DISABLE_SENSE_INT {CompInterruptFreigabe = 0; ACSR &= ~0x08; }
 
 
#define SENSE_FALLING_INT ACSR &= ~0x01
#define SENSE_RISING_INT ACSR |= 0x03
#define SENSE_TOGGLE_INT ACSR &= ~0x03
 
#endif //BLMC_H_
 
/branches/V0.37_neueStruktur/src/PPM_Decode.c
0,0 → 1,76
/*############################################################################
+ Regler für Brushless-Motoren
+ ATMEGA8 mit 8MHz
+ (c) 01.2007 Holger Buss
+ Nur für den privaten Gebrauch
+ Keine Garantie auf Fehlerfreiheit
+ Kommerzielle Nutzung nur mit meiner Zustimmung
+ Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
+ www.mikrocontroller.com
############################################################################*/
#include "main.h"
volatile unsigned int PPM_Signal = 0;
volatile unsigned char Timer1Overflow = 0;
volatile unsigned char PPM_Timeout = 0, anz_ppm_werte = 0; // Ungültig, wenn Null
 
//############################################################################
//
void InitPPM(void)
//############################################################################
{
TCCR1B |= (1<<ICES1)|(1<<ICNC1);
ICP_POS_FLANKE;
ICP_INT_ENABLE;
TIMER1_INT_ENABLE;
}
 
//############################################################################
//
SIGNAL(SIG_OVERFLOW1)
//############################################################################
{
Timer1Overflow++;
}
 
//############################################################################
//
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
{
static unsigned int tim_alt;
static unsigned int ppm;
if(TCCR1B & (1<<ICES1)) // Positive Flanke
{
Timer1Overflow = 0;
tim_alt = ICR1;
ICP_NEG_FLANKE;
PPM_Timeout = 100;
}
else // Negative Flanke
{
ICP_POS_FLANKE;
#ifdef _32KHZ
ppm = (ICR1 - tim_alt + (int) Timer1Overflow * 256) / 32;
#endif
#ifdef _16KHZ
ppm = (ICR1 - tim_alt + (int) Timer1Overflow * 512) / 32;
#endif
if(ppm < 280) ppm = 280;
ppm -= 280;
if(PPM_Signal < ppm) PPM_Signal++;
else if(PPM_Signal > ppm) PPM_Signal--;
if(FILTER_PPM) ppm = (PPM_Signal * FILTER_PPM + ppm) / (FILTER_PPM + 1); // Filtern
PPM_Signal = ppm;
if(anz_ppm_werte < 255) anz_ppm_werte++;
ZeitZumAdWandeln = 1;
}
}
 
//############################################################################
//
SIGNAL(SIG_INTERRUPT0)
//############################################################################
{
CLR_INT0_FLAG; // IntFlag Loeschen
}
 
/branches/V0.37_neueStruktur/src/PPM_Decode.h
0,0 → 1,27
/*############################################################################
############################################################################*/
 
extern volatile unsigned int PPM_Signal;
extern volatile unsigned char PPM_Timeout, anz_ppm_werte;
void InitPPM(void);
 
 
#define INT0_ENABLE GIMSK |= 0x40
#define INT0_DISABLE GIMSK &= ~0x40
#define TIM0_START TIMSK |= 0x01
#define TIM0_STOPP TIMSK &= ~0x01
#define ICP_INT_ENABLE TIMSK |= 0x20
#define ICP_INT_DISABLE TIMSK &= ~0x20
#define TIMER1_INT_ENABLE TIMSK |= 0x04
#define TIMER1_INT_DISABLE TIMSK &= ~0x04
#define TIMER2_INT_ENABLE TIMSK |= 0x40
#define TIMER2_INT_DISABLE TIMSK &= ~0x40
#define INT0_POS_FLANKE MCUCR |= 0x01
#define INT0_ANY_FLANKE MCUCR |= 0x01
#define INT0_NEG_FLANKE MCUCR &= ~0x01
#define CLR_INT0_FLAG GIFR &= ~0x40
#define INIT_INT0_FLANKE MCUCR &= ~0x03; MCUCR |= 0x02;
#define TIMER0_PRESCALER TCCR0
#define ICP_POS_FLANKE TCCR1B |= (1<<ICES1)
#define ICP_NEG_FLANKE TCCR1B &= ~(1<<ICES1)
 
/branches/V0.37_neueStruktur/src/analog.c
0,0 → 1,76
/*############################################################################
 
############################################################################*/
 
#include "main.h"
 
//############################################################################
//Init ADC
void ADC_Init(void)
//############################################################################
{
ADCSRA = 0xA6; // Free Run & 1MHZ
ADMUX = 7; // Kanal 7
ADCSRA |= 0x40; // Start
}
 
//############################################################################
//Strom Analogwerte lesen
void AdConvert(void)
//############################################################################
{
unsigned int i=0;
unsigned char sense;
sense = ADMUX; // Sense-Kanal merken
ADMUX = 0x06; // Kanal 6
SFIOR = 0x00; // Analog Comperator aus
ADCSRA = 0xD3; // Converter ein, single
ADCSRA |= 0x10; // Ready löschen
ADMUX = 0x06; // Kanal 6
ADCSRA |= 0x40; // Start
while (((ADCSRA & 0x10) == 0));
ADMUX = sense; // zurück auf den Sense-Kanal
i = ADCW * 4;
// if(i > 300) i = 300;
Strom = (i + Strom * 7) / 8;
if (Strom_max < Strom) Strom_max = Strom;
ADCSRA = 0x00;
SFIOR = 0x08; // Analog Comperator ein
}
 
 
 
//############################################################################
//Strom Analogwerte lesen
unsigned int MessAD(unsigned char channel)
//############################################################################
{
unsigned char sense;
sense = ADMUX; // Sense-Kanal merken
ADMUX = channel; // Kanal 6
SFIOR = 0x00; // Analog Comperator aus
ADCSRA = 0xD3; // Converter ein, single
ADCSRA |= 0x10; // Ready löschen
ADMUX = channel; // Kanal 6
ADCSRA |= 0x40; // Start
while (((ADCSRA & 0x10) == 0));
ADMUX = sense; // zurück auf den Sense-Kanal
ADCSRA = 0x00;
SFIOR = 0x08; // Analog Comperator ein
return(ADCW);
}
 
//############################################################################
//Strom Analogwerte lesen
void FastADConvert(void)
//############################################################################
{
unsigned int i=0;
i = MessAD(6) * 4;
// i = ADCW * 4;
if(i > 200) i = 200;
Strom = i;//(i + Strom * 1) / 2;
if (Strom_max < Strom) Strom_max = Strom;
ADCSRA = 0x00;
SFIOR = 0x08; // Analog Comperator ein
}
/branches/V0.37_neueStruktur/src/analog.h
0,0 → 1,6
 
extern void ADC_Init(void);
extern void GetAnalogWerte(void);
extern void AdConvert(void);
extern void FastADConvert(void);
 
/branches/V0.37_neueStruktur/src/main.c
0,0 → 1,721
/*#######################################################################################
Flight Control
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Regler für Brushless-Motoren
// + ATMEGA8 mit 8MHz
// + Nur für den privaten Gebrauch
// + Copyright (c) 12.2007 Holger Buss
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
unsigned int PWM = 0;
unsigned int Strom = 0,RuheStrom; //ca. in 0,1A
unsigned char Strom_max = 0;
unsigned char Mittelstrom = 0;
unsigned int Drehzahl = 0; // in 100UPM 60 = 6000
unsigned int KommutierDelay = 10;
unsigned int I2C_Timeout = 0;
unsigned int SIO_Timeout = 0;
unsigned int SollDrehzahl = 0;
unsigned int IstDrehzahl = 0;
unsigned int DrehZahlTabelle[256];//vorberechnete Werte zur Drehzahlerfassung
unsigned char ZeitFuerBerechnungen = 1;
unsigned char MotorAnwerfen = 0;
unsigned char MotorGestoppt = 1;
unsigned char MaxPWM = MAX_PWM;
unsigned int CntKommutierungen = 0;
unsigned int SIO_Drehzahl = 0;
unsigned char ZeitZumAdWandeln = 1;
unsigned char MotorAdresse = 1;
unsigned char PPM_Betrieb = 1;
 
//############################################################################
//
void SetPWM(void)
//############################################################################
{
unsigned char tmp_pwm;
tmp_pwm = PWM;
if(tmp_pwm > MaxPWM) // Strombegrenzung
{
tmp_pwm = MaxPWM;
PORTC |= ROT;
}
if(Strom > MAX_STROM) // Strombegrenzung
{
OCR1A = 0; OCR1B = 0; OCR2 = 0;
PORTC |= ROT;
Strom--;
}
else
{
#ifdef _32KHZ
OCR1A = tmp_pwm; OCR1B = tmp_pwm; OCR2 = tmp_pwm;
#endif
 
#ifdef _16KHZ
//OCR1A = 2 * (int)tmp_pwm; OCR1B = 2 * (int)tmp_pwm; OCR2 = tmp_pwm;
OCR1A = tmp_pwm; OCR1B = tmp_pwm; OCR2 = tmp_pwm;
#endif
}
}
 
//############################################################################
//
void PWM_Init(void)
//############################################################################
{
PWM_OFF;
TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (0 << WGM12) |
(0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
/* TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (1 << WGM12) |
(0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
*/
}
 
//############################################################################
//
void Wait(unsigned char dauer)
//############################################################################
{
dauer = (unsigned char)TCNT0 + dauer;
while((TCNT0 - dauer) & 0x80);
}
 
//############################################################################
//
void Anwerfen(unsigned char pwm)
//############################################################################
{
unsigned long timer = 300,i;
DISABLE_SENSE_INT;
PWM = 5;
SetPWM();
Manuell();
Delay_ms(200);
PWM = pwm;
while(1)
{
for(i=0;i<timer; i++)
{
if(!UebertragungAbgeschlossen) SendUart();
else DatenUebertragung();
Wait(100); // warten
}
timer-= timer/15+1;
if(timer < 25) { if(TEST_MANUELL) timer = 25; else return; }
 
Manuell();
Phase++;
Phase %= 6;
AdConvert();
PWM = pwm;
SetPWM();
if(SENSE)
{
PORTD ^= GRUEN;
}
}
}
 
/*
#define SENSE_A ADMUX = 0;
#define SENSE_B ADMUX = 1;
#define SENSE_C ADMUX = 2;
 
#define ClrSENSE ACSR |= 0x10
#define SENSE ((ACSR & 0x10))
#define SENSE_L (!(ACSR & 0x20))
#define SENSE_H ((ACSR & 0x20))
*/
 
void RotBlink(unsigned char anz)
{
sei(); // Interrupts ein
while(anz--)
{
PORTC |= ROT;
Delay_ms(300);
PORTC &= ~ROT;
Delay_ms(300);
}
Delay_ms(1000);
}
 
#define TEST_STROMGRENZE 120
unsigned char DelayM(unsigned int timer)
{
while(timer--)
{
FastADConvert();
if(Strom > (TEST_STROMGRENZE + RuheStrom))
{
FETS_OFF;
return(1);
}
}
return(0);
}
 
unsigned char Delay(unsigned int timer)
{
while(timer--)
{
// if(SENSE_H) { PORTC |= ROT; } else { PORTC &= ~ROT;}
}
return(0);
}
 
/*
void ShowSense(void)
{
if(SENSE_H) { PORTC |= ROT; } else { PORTC &= ~ROT;}
 
}
*/
#define HIGH_A_EIN PORTB |= 0x08
#define HIGH_B_EIN PORTB |= 0x04
#define HIGH_C_EIN PORTB |= 0x02
#define LOW_A_EIN PORTD |= 0x08
#define LOW_B_EIN PORTD |= 0x10
#define LOW_C_EIN PORTD |= 0x20
 
void MotorTon(void)
//############################################################################
{
unsigned char ADR_TAB[5] = {0,0,2,1,3};
unsigned int timer = 300,i;
unsigned int t = 0;
unsigned char anz = 0,MosfetOkay = 0, grenze = 50;
 
PORTC &= ~ROT;
Delay_ms(300 * ADR_TAB[MotorAdresse]);
DISABLE_SENSE_INT;
cli();//Globale Interrupts Ausschalten
uart_putchar('\n');
STEUER_OFF;
Strom_max = 0;
DelayM(50);
RuheStrom = Strom_max;
// uart_putchar(RuheStrom + 'A');
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ High-Mosfets auf Kurzschluss testen
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Strom = 0;
LOW_B_EIN;
HIGH_A_EIN;
if(DelayM(3))
{
anz = 1;
uart_putchar('1');
}
FETS_OFF;
Delay(1000);
Strom = 0;
LOW_A_EIN;
HIGH_B_EIN;
if(DelayM(3))
{
anz = 2;
uart_putchar('2');
}
FETS_OFF;
Delay(1000);
Strom = 0;
LOW_B_EIN; // Low C ein
HIGH_C_EIN; // High B ein
if(DelayM(3))
{
anz = 3;
uart_putchar('3');
}
FETS_OFF;
Delay(1000);
LOW_A_EIN; // Low A ein; und A gegen C
HIGH_C_EIN; // High C ein
if(DelayM(3))
{
anz = 3;
uart_putchar('7');
}
FETS_OFF;
DelayM(10000);
if(anz) while(1) RotBlink(anz); // bei Kurzschluss nicht starten
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ LOW-Mosfets auf Schalten und Kurzschluss testen
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(UDR == ' ') {t = 65535; grenze = 40; uart_putchar('_');} else t = 1000; // Ausführlicher Test
Strom = 0;
for(i=0;i<t;i++)
{
LOW_A_EIN;
DelayM(1);
FETS_OFF;
Delay(5);
HIGH_A_EIN;
DelayM(1);
FETS_OFF;
if(Strom > grenze + RuheStrom) {anz = 4; uart_putchar('4'); break;}
Delay(5);
}
Delay(10000);
 
Strom = 0;
for(i=0;i<t;i++)
{
LOW_B_EIN;
DelayM(1);
FETS_OFF;
Delay(5);
HIGH_B_EIN;
DelayM(1);
FETS_OFF;
if(Strom > grenze + RuheStrom) {anz = 5; uart_putchar('5'); break;}
Delay(5);
}
 
Strom = 0;
Delay(10000);
 
for(i=0;i<t;i++)
{
LOW_C_EIN;
DelayM(1);
FETS_OFF;
Delay(5);
HIGH_C_EIN;
DelayM(1);
FETS_OFF;
if(Strom > grenze + RuheStrom) {anz = 6; uart_putchar('6'); break;}
Delay(5);
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ High-Mosfets auf Schalten testen
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SENSE_A;
FETS_OFF;
LOW_B_EIN; // Low B ein
LOW_C_EIN; // Low C ein
Strom = 0;
#define TONDAUER 40000
#define SOUND_E 2
#define SOUND1_A 300
#define SOUND2_A 330
#define SOUND3_A 360
 
for(i=0; i< (TONDAUER / SOUND2_A) ; i++)
{
HIGH_A_EIN; // Test A
Delay(SOUND_E);
if(MessAD(0) > 50) { MosfetOkay |= 0x01; } else { MosfetOkay &= ~0x01;};
PORTB = 0;
Delay(SOUND1_A);
}
FETS_OFF;
 
LOW_A_EIN; // Low A ein
LOW_C_EIN; // Low C ein
for(i=0; i<(TONDAUER / SOUND1_A); i++)
{
HIGH_B_EIN; // Test B
Delay(SOUND_E);
if(MessAD(1) > 50) { MosfetOkay |= 0x02; } else { MosfetOkay &= ~0x02;};
PORTB = 0;
Delay(SOUND1_A);
}
 
FETS_OFF;
LOW_A_EIN; // Low A ein
LOW_B_EIN; // Low B ein
for(i=0; i<(TONDAUER / SOUND3_A); i++)
{
HIGH_C_EIN; // Test C
Delay(SOUND_E);
if(MessAD(2) > 50) { MosfetOkay |= 0x04; } else { MosfetOkay &= ~0x04;};
PORTB = 0;
Delay(SOUND2_A);
}
FETS_OFF;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ Low-Mosfets auf Schalten testen
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SENSE_B;
LOW_A_EIN; // Low A ein
for(i=0; i< (TONDAUER / SOUND2_A) ; i++)
{
HIGH_B_EIN; // Test B
Delay(SOUND_E);
if(MessAD(0) > 50) { MosfetOkay &= ~0x08;} else { MosfetOkay |= 0x08;};
PORTB = 0;
Delay(SOUND2_A);
}
 
//++++++++++++++++++++++++++++++++++++
LOW_C_EIN; // Low C ein
for(i=0; i<(TONDAUER / SOUND1_A); i++)
{
HIGH_B_EIN; // Test B
Delay(SOUND_E);
if(MessAD(2) > 50) { MosfetOkay &= ~0x20;} else { MosfetOkay |= 0x20;};
PORTB = 0;
Delay(SOUND3_A);
}
FETS_OFF;
//++++++++++++++++++++++++++++++++++++
FETS_OFF;
LOW_B_EIN; // Low B ein
for(i=0; i<(TONDAUER / SOUND3_A); i++)
{
HIGH_C_EIN; // Test C
Delay(SOUND_E);
if(MessAD(1) > 50) { MosfetOkay &= ~0x10;} else { MosfetOkay |= 0x10;};
PORTB = 0;
Delay(SOUND3_A);
}
FETS_OFF;
//++++++++++++++++++++++++++++++++++++
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sei();//Globale Interrupts Einschalten
// Delay_ms(250 * MotorAdresse);
/*
LOW_A_EIN; // Low B ein
#define SOUND8_A 650
for(i=0; i<(TONDAUER / SOUND8_A); i++)
{
HIGH_B_EIN; // Test B
Delay(SOUND_E);
PORTB = 0;
Delay(SOUND8_A);
}
*/
Delay_ms(300 * (4-ADR_TAB[MotorAdresse]));
if(!(MosfetOkay & 0x01)) { anz = 1; UDR='A'; } else
if(!(MosfetOkay & 0x02)) { anz = 2; UDR='B'; } else
if(!(MosfetOkay & 0x04)) { anz = 3; UDR='C'; } else
if(!(MosfetOkay & 0x08)) { anz = 4; UDR='a'; } else
if(!(MosfetOkay & 0x10)) { anz = 5; UDR='b'; } else
if(!(MosfetOkay & 0x20)) { anz = 6; UDR='c'; }
 
if(anz) Delay_ms(1000);
 
RotBlink(anz);
uart_putchar('.');
}
 
//############################################################################
//
unsigned char SollwertErmittlung(void)
//############################################################################
{
static unsigned int sollwert = 0;
unsigned int ppm;
if(!I2C_Timeout) // bei Erreichen von 0 ist der Wert ungültig
{
if(SIO_Timeout) // es gibt gültige SIO-Daten
{
sollwert = (MAX_PWM * (unsigned int) SIO_Sollwert) / 200; // skalieren auf 0-200 = 0-255
PPM_Betrieb = 0;
ICP_INT_DISABLE;
PORTC &= ~ROT;
}
else
if(anz_ppm_werte > 20) // es gibt gültige PPM-Daten
{
PPM_Betrieb = 1;
ppm = PPM_Signal;
if(ppm > 300) ppm = 0; // ungültiges Signal
if(ppm > 200) ppm = 200;
if(ppm <= MIN_PPM) sollwert = 0;
else
{
sollwert = (int) MIN_PWM + ((MAX_PWM - MIN_PWM) * (ppm - MIN_PPM)) / (190 - MIN_PPM);
}
PORTC &= ~ROT;
}
else // Kein gültiger Sollwert
{
if(!TEST_SCHUB) { if(sollwert) sollwert--; }
PORTC |= ROT;
}
}
else // I2C-Daten sind gültig
{
sollwert = I2C_RXBuffer;
PPM_Betrieb = 0;
PORTC &= ~ROT;
ICP_INT_DISABLE;
}
if(sollwert > MAX_PWM) sollwert = MAX_PWM;
return(sollwert);
}
 
void DebugAusgaben(void)
{
DebugOut.Analog[0] = Strom;
DebugOut.Analog[1] = Mittelstrom;
DebugOut.Analog[2] = SIO_Drehzahl;
DebugOut.Analog[3] = PPM_Signal;
}
 
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
char altPhase = 0;
int test = 0;
unsigned int MinUpmPulse,Blink,TestschubTimer;
unsigned int Blink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;
 
DDRC = 0x08;
PORTC = 0x08;
DDRD = 0xBA;
PORTD = 0x00;
DDRB = 0x0E;
PORTB = 0x31;
#if (MOTORADRESSE == 0)
PORTB |= (ADR1 + ADR2); // Pullups für Adresswahl
for(test=0;test<500;test++);
if (PINB & ADR1)
{
if (PINB & ADR2) MotorAdresse = 1;
else MotorAdresse = 2;
}
else
{
if (PINB & ADR2) MotorAdresse = 3;
else MotorAdresse = 4;
}
#else
MotorAdresse = MOTORADRESSE;
#endif
UART_Init();
Timer0_Init();
sei();//Globale Interrupts Einschalten
// Am Blinken erkennt man die richtige Motoradresse
/*
for(test=0;test<5;test++)
{
if(test == MotorAdresse) PORTD |= GRUEN;
Delay_ms(150);
PORTD &= ~GRUEN;
Delay_ms(250);
}
 
Delay_ms(500);
*/
// UART_Init(); // war doppelt
PWM_Init();
 
InitIC2_Slave(0x50);
InitPPM();
 
Blink = SetDelay(101);
Blink2 = SetDelay(102);
MinUpmPulse = SetDelay(103);
MittelstromTimer = SetDelay(254);
DrehzahlMessTimer = SetDelay(1005);
TestschubTimer = SetDelay(1006);
while(!CheckDelay(MinUpmPulse))
{
if(SollwertErmittlung()) break;
}
;
PORTD |= GRUEN;
PWM = 0;
 
SetPWM();
 
SFIOR = 0x08; // Analog Comperator ein
ADMUX = 1;
 
MinUpmPulse = SetDelay(10);
DebugOut.Analog[1] = 1;
PPM_Signal = 0;
 
if(!SollwertErmittlung()) MotorTon();
//MotorTon();
PORTB = 0x31; // Pullups wieder einschalten
 
// zum Test der Hardware; Motor dreht mit konstanter Drehzahl ohne Regelung
if(TEST_MANUELL) Anwerfen(TEST_MANUELL); // kommt von dort nicht wieder
 
while (1)
{
//ShowSense();
 
if(!TEST_SCHUB) PWM = SollwertErmittlung();
//I2C_TXBuffer = PWM; // Antwort über I2C-Bus
if(MANUELL_PWM) PWM = MANUELL_PWM;
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(Phase != altPhase) // es gab eine Kommutierung im Interrupt
{
MotorGestoppt = 0;
ZeitFuerBerechnungen = 0; // direkt nach einer Kommutierung ist Zeit
MinUpmPulse = SetDelay(250); // Timeout, falls ein Motor stehen bleibt
altPhase = Phase;
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!PWM) // Sollwert == 0
{
MotorAnwerfen = 0; // kein Startversuch
ZeitFuerBerechnungen = 0;
// nach 1,5 Sekunden den Motor als gestoppt betrachten
if(CheckDelay(MotorGestopptTimer))
{
DISABLE_SENSE_INT;
MotorGestoppt = 1;
STEUER_OFF;
}
}
else
{
if(MotorGestoppt) MotorAnwerfen = 1; // Startversuch
MotorGestopptTimer = SetDelay(1500);
}
 
if(MotorGestoppt && !TEST_SCHUB) PWM = 0;
SetPWM();
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!ZeitFuerBerechnungen++)
{
if(MotorGestoppt) PORTD |= GRUEN; //else PORTD &= ~GRUEN;
if(SIO_DEBUG)
{
DebugAusgaben(); // welche Werte sollen angezeigt werden?
if(!UebertragungAbgeschlossen) SendUart();
else DatenUebertragung();
}
// Berechnen des Mittleren Stroms zur (langsamen) Strombegrenzung
if(CheckDelay(MittelstromTimer))
{
MittelstromTimer = SetDelay(50); // alle 50ms
if(Mittelstrom < Strom) Mittelstrom++;// Mittelwert des Stroms bilden
else if(Mittelstrom > Strom) Mittelstrom--;
if(Strom > MAX_STROM) MaxPWM -= MaxPWM / 32;
if((Mittelstrom > LIMIT_STROM))// Strom am Limit?
{
if(MaxPWM) MaxPWM--;// dann die Maximale PWM herunterfahren
PORTC |= ROT;
}
else
{
if(MaxPWM < MAX_PWM) MaxPWM++;
}
}
 
if(CheckDelay(DrehzahlMessTimer)) // Ist-Drehzahl bestimmen
{
DrehzahlMessTimer = SetDelay(10);
SIO_Drehzahl = CntKommutierungen;//(6 * CntKommutierungen) / (POLANZAHL / 2);
CntKommutierungen = 0;
if(PPM_Timeout == 0) // keine PPM-Signale
ZeitZumAdWandeln = 1;
}
 
if(TEST_SCHUB)
{
if(CheckDelay(TestschubTimer))
{
TestschubTimer = SetDelay(1500);
switch(test)
{
case 0: PWM = 50; test++; break;
case 1: PWM = 130; test++; break;
case 2: PWM = 60; test++; break;
case 3: PWM = 140; test++; break;
case 4: PWM = 150; test = 0; break;
default: test = 0;
}
}
}
// Motor Stehen geblieben
if((CheckDelay(MinUpmPulse) && SIO_Drehzahl == 0) || MotorAnwerfen)
{
MotorGestoppt = 1;
DISABLE_SENSE_INT;
MinUpmPulse = SetDelay(100);
if(MotorAnwerfen)
{
PORTC &= ~ROT;
MotorAnwerfen = 0;
Anwerfen(10);
PORTD |= GRUEN;
MotorGestoppt = 0;
Phase--;
PWM = 1;
SetPWM();
SENSE_TOGGLE_INT;
ENABLE_SENSE_INT;
MinUpmPulse = SetDelay(20);
while(!CheckDelay(MinUpmPulse)); // kurz Synchronisieren
PWM = 15;
SetPWM();
MinUpmPulse = SetDelay(300);
while(!CheckDelay(MinUpmPulse)); // kurz Durchstarten
// Drehzahlmessung wieder aufsetzen
DrehzahlMessTimer = SetDelay(50);
altPhase = 7;
}
}
} // ZeitFuerBerechnungen
} // while(1) - Hauptschleife
}
 
/branches/V0.37_neueStruktur/src/main.h
0,0 → 1,138
#ifndef _MAIN_H
#define _MAIN_H
 
#define MOTORADRESSE 0 // Adresse (1-4) 0 = Motoradresse über Lötjumper auf BL-Ctrl V1.1
 
#define MANUELL_PWM 0 // zur manuellen Vorgabe der PWM Werte: 0-255
#define TEST_MANUELL 0 // zum Testen der Hardware ohne Kommutierungsdetektion Werte: 0-255 (PWM)
#define TEST_SCHUB 0 // Erzeugt ein Schubmuster Werte: 0 = normal 1 = Test
#define POLANZAHL 12 // Anzahl der Pole (Magnete) Wird nur zur Drehzahlausgabe über Debug gebraucht
#define MAX_PWM 255
#define MIN_PWM 3
#define MIN_PPM 10 // ab hier (PPM-Signal) schaltet der Regler erst ein
#define FILTER_PPM 7 // wie stark soll das PPM-Signal gefiltert werden (Werte: 0-30)?
 
#define SIO_DEBUG 0 // Testwertausgaben auf der seriellen Schnittstelle
#define X3D_SIO 0 // serielles Protokoll des X3D (38400Bd) Achtung: dann muss SIO_DEBUG = 0 sein
 
 
#define _16KHZ // Schaltfrequenz -- die gewünschte einkommentieren
//#define _32KHZ // Schaltfrequenz -- die gewünschte einkommentieren
 
#define FDD6637_IRLR7843 1 // bessere MosFet bestückt? bewirkt höhere Stromgrenzen
 
#ifdef _16KHZ
#ifdef FDD6637_IRLR7843 // bessere Fets = mehr Strom zulassen
#define MAX_STROM 200 // ab ca. 20A PWM ausschalten
#define LIMIT_STROM 120 // ab ca. 12A PWM begrenzen
#else
#define MAX_STROM 130 // ab ca. 13A PWM ausschalten
#define LIMIT_STROM 65 // ab ca. 6,5A PWM begrenzen
#endif
#endif
 
#ifdef _32KHZ
#define MAX_STROM 130 // ab ca. 13A PWM ausschalten
#define LIMIT_STROM 50 // ab ca. 5,0A PWM begrenzen
#endif
 
#define SYSCLK 8000000L //Quarz Frequenz in Hz
 
 
//Robbe Roxxy 2824-34 mit Todd 10x4,5 bei 16kHz
//PWM Strom Schub
//10 0,18A 21g
//20 0,30A 38g
//30 0,40A 49g
//40 0,54A 60g
//50 0,70A 83g
//60 0,95A 102g
//70 1,25A 128g
//80 1,50A 151g
//90 1,83A 175g
//100 2,25A 206g
//110 2,66A 228g
//120 3,10A 257g
//130 3,55A 278g
//140 4,00A 305g
//150 4,50A 330g
//160 5,30A 355g
//170 5,85A 387g
//180 6,40A 400g
//190 7,10A 425g
//200 7,60A 460g
 
//0,5A 63g 14%
//1,0A 110g 24%
//1,5A 170g 32%
//2,0A 195g 37%
//2,5A 230g 41%
//3,0A 260g 46%
//3,5A 290g 50%
//4,0A 310g 53%
//4,5A 340g 58%
//5,0A 360g 63%
//5,5A 380g 67%
//6,0A 400g 68%
//6,5A 420g 70%
//7,0A 450g 75%
//7,5A 460g 78%
//8,0A 475g 82%
//9,0A 550g 86%
//11 A 600g 100%
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "twislave.h"
#include "old_macros.h"
#include "analog.h"
#include "uart.h"
#include "timer0.h"
#include "BLMC.h"
 
#include "PPM_Decode.h"
 
extern unsigned int I2C_Timeout;
extern unsigned int SIO_Timeout;
extern unsigned int PWM;
extern unsigned int Strom; //ca. in 0,1A
extern unsigned char Strom_max;
extern unsigned char Mittelstrom;
extern unsigned int CntKommutierungen;
extern unsigned char MotorAnwerfen;
extern unsigned char MotorGestoppt;
extern unsigned char ZeitZumAdWandeln;
extern unsigned char MaxPWM;
extern unsigned char MotorAdresse;
extern unsigned char PPM_Betrieb;
 
#define ROT 0x08
#define GRUEN 0x80
 
#define ADR1 0x40 // für Motoradresswahl
#define ADR2 0x80 //
 
#if defined(__AVR_ATmega8__)
# define OC1 PB1
# define DDROC DDRB
# define OCR OCR1A
# define PWM10 WGM10
# define PWM11 WGM11
#endif
 
 
#endif //_MAIN_H
 
 
 
 
 
/branches/V0.37_neueStruktur/src/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/V0.37_neueStruktur/src/timer0.c
0,0 → 1,59
/*****************************************************************************
*****************************************************************************/
#include "main.h"
volatile unsigned int CountMilliseconds = 0;
volatile unsigned char Timer0Overflow;
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL(SIG_OVERFLOW0)
{
static unsigned char cnt;
Timer0Overflow++;
if(!cnt--)
{
cnt = 3;
CountMilliseconds += 1;
if(I2C_Timeout) I2C_Timeout--;
if(PPM_Timeout) PPM_Timeout--; else anz_ppm_werte = 0;
if(SIO_Timeout) SIO_Timeout--;
}
}
 
 
void Timer0_Init(void)
{
TCCR0 = TIMER_TEILER;
// TCNT0 = -TIMER_RELOAD_VALUE; // reload
TIM0_START;
TIMER2_INT_ENABLE;
}
 
 
unsigned int SetDelay(unsigned int t)
{
return(CountMilliseconds + t - 1);
}
 
char CheckDelay (unsigned int t)
{
return(((t - CountMilliseconds) & 0x8000) >> 8);
}
 
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
/branches/V0.37_neueStruktur/src/timer0.h
0,0 → 1,15
#if defined (__AVR_ATmega8__)
#define TIMER_TEILER CK8
//#define TIMER_RELOAD_VALUE 125
#endif
 
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char Timer0Overflow;
 
 
void Timer1_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
/branches/V0.37_neueStruktur/src/twislave.c
0,0 → 1,75
/*############################################################################
Slaveadr = 0x52 = Vorne, 0x54 = Hinten, 0x56 = Rechts, 0x58 = Links
############################################################################*/
 
#include <avr/io.h>
#include <util/twi.h>
#include "main.h"
 
unsigned char I2C_RXBuffer;
unsigned char Byte_Counter=0;
 
//############################################################################
//I2C (TWI) Interface Init
void InitIC2_Slave(uint8_t adr)
//############################################################################
{
TWAR = adr + (2*MotorAdresse); // Eigene Adresse setzen
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);
}
 
//############################################################################
//ISR, die bei einem Ereignis auf dem Bus ausgelöst wird. Im Register TWSR befindet
//sich dann ein Statuscode, anhand dessen die Situation festgestellt werden kann.
ISR (TWI_vect)
//############################################################################
{
switch (TWSR & 0xF8)
{
case SR_SLA_ACK:
TWCR |= (1<<TWINT);
Byte_Counter=0;
return;
// Daten Empfangen
case SR_PREV_ACK:
I2C_RXBuffer = TWDR;
I2C_Timeout = 500;
TWCR |= (1<<TWINT);
return;
// Daten Senden
case SW_SLA_ACK:
if (Byte_Counter==0)
{
TWDR = Mittelstrom;
Byte_Counter++;
}
else
{
TWDR = MaxPWM;
}
TWCR |= (1<<TWINT);
return;
// Daten Senden
case SW_DATA_ACK:
if (Byte_Counter==0)
{
TWDR = Mittelstrom;
Byte_Counter++;
}
else
{
TWDR = MaxPWM;
}
TWCR |= (1<<TWINT);
return;
// Bus-Fehler zurücksetzen
case TWI_BUS_ERR_2:
TWCR |=(1<<TWSTO) | (1<<TWINT);
// Bus-Fehler zurücksetzen
case TWI_BUS_ERR_1:
TWCR |=(1<<TWSTO) | (1<<TWINT);
}
TWCR =(1<<TWEA) | (1<<TWINT) | (1<<TWEN) | (1<<TWIE); // TWI Reset
}
 
 
/branches/V0.37_neueStruktur/src/twislave.h
0,0 → 1,32
#ifndef _TWI_SLAVE_H_
#define _TWI_SLAVE_H_
 
extern unsigned char I2C_RXBuffer;
extern unsigned char Byte_Counter;
 
extern void InitIC2_Slave (uint8_t adr);
 
#define TWI_BUS_ERR_1 0x00
#define TWI_BUS_ERR_2 0xF8
 
// Status Slave RX Mode
#define SR_SLA_ACK 0x60
#define SR_LOST_ACK 0x68
#define SR_GEN_CALL_ACK 0x70
#define GEN_LOST_ACK 0x78
#define SR_PREV_ACK 0x80
#define SR_PREV_NACK 0x88
#define GEN_PREV_ACK 0x90
#define GEN_PREV_NACK 0x98
#define STOP_CONDITION 0xA0
#define REPEATED_START 0xA0
 
// Status Slave TX mode
#define SW_SLA_ACK 0xA8
#define SW_LOST_ACK 0xB0
#define SW_DATA_ACK 0xB8
#define SW_DATA_NACK 0xC0
#define SW_LAST_ACK 0xC8
 
#endif
 
/branches/V0.37_neueStruktur/src/uart.c
0,0 → 1,277
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Regler für Brushless-Motoren
// + ATMEGA8 mit 8MHz
// + (c) 01.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + Keine Garantie auf Fehlerfreiheit
// + Kommerzielle Nutzung nur mit meiner Zustimmung
// + Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
// + www.mikrocontroller.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
#define MAX_SENDE_BUFF 100
#define MAX_EMPFANGS_BUFF 100
 
unsigned volatile char SIO_Sollwert = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned char MeineSlaveAdresse;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned volatile char AnzahlEmpfangsBytes = 0;
 
struct str_DebugOut DebugOut;
 
 
int Debug_Timer;
 
 
SIGNAL(INT_VEC_TX)
{
}
 
void SendUart(void)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!(UCSRA & 0x40)) return;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
USR |= (1<TXC);
UDR = tmp_tx;
}
else ptr = 0;
}
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
#if X3D_SIO == 1
static unsigned char serPacketCounter = 100;
SioTmp = UDR;
if(SioTmp == 0xF5) // Startzeichen
{
serPacketCounter = 0;
}
else
{
if(++serPacketCounter == MotorAdresse) // (1-4)
{
SIO_Sollwert = SioTmp;
SIO_Timeout = 200; // werte für 200ms gültig
}
else
{
if(serPacketCounter > 100) serPacketCounter = 100;
}
}
#else
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
SioTmp = UDR;
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; };
if(CrcOkay) // Datensatz schon verarbeitet
{
//NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
uart_putchar(RxdBuffer[2]);
if (RxdBuffer[2] == 't') // Motortest
{ Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
SIO_Sollwert = MotorTest[MotorAdresse - 1];
SIO_Timeout = 500; // werte für 500ms gültig
}
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
 
#endif
};
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
 
UCSRB |= (1<<RXCIE); // serieller Empfangsinterrupt
 
// TX-Interrupt Freigabe
// UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR= (SYSCLK / (BAUD_RATE * 8L) -1 );
//öffnet einen Kanal für printf (STDOUT)
fdevopen (uart_putchar, NULL);
Debug_Timer = SetDelay(200);
// Version beim Start ausgeben (nicht schön, aber geht... )
uart_putchar ('\n');uart_putchar ('B');uart_putchar ('L');uart_putchar (':');
uart_putchar ('V');uart_putchar (0x30 + VERSION_HAUPTVERSION);uart_putchar ('.');uart_putchar (0x30 + VERSION_NEBENVERSION/10); uart_putchar (0x30 + VERSION_NEBENVERSION%10);
uart_putchar ('\n');uart_putchar ('A');uart_putchar ('D');uart_putchar ('R'); uart_putchar (':'); uart_putchar (0x30 + MotorAdresse);
 
}
 
 
 
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
if((CheckDelay(Debug_Timer) && UebertragungAbgeschlossen)) // im Singlestep-Betrieb in jedem Schtitt senden
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
Debug_Timer = SetDelay(50); // Sendeintervall
}
}
/branches/V0.37_neueStruktur/src/uart.h
0,0 → 1,82
#ifndef _UART_H
#define _UART_H
 
extern unsigned volatile char SIO_Sollwert;
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned char MeineSlaveAdresse;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void SendUart(void);
extern void DatenUebertragung(void);
 
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[8]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
//Die Baud_Rate der Seriellen Schnittstelle
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
 
#if X3D_SIO == 1
#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#else
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
#endif
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega8__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H