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