mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ext.-Interrupt Auf AT91SAM7X-EK mit ethernut und gcc


Autor: Proc Proc (proc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich wird niemand so eine Konstellation haben, aber vielleicht 
ergibt sich doch der eine oder andere Tipp :

Ein selbstgeschriebener, externer Interrupt 
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA]=(unsigned int)ex_int_handler; 
wird korrekt (mit dem Linkerscript elf32-littlearm.lds und 
entsprechendem makefile) ausgeführt.

Verwende ich jedoch ethernut mit dem Linkerscript at91sam7x256_rom.ld 
und unten angefügtem makefile, macht das Hauptprogramm nach Auslösen und 
Ausführen der Interruptroutine danach nichts mehr.

( Bin ganz neu in diesen Dingen und kenne mich mit AIC’s, makefiles, 
Linkerfiles und Memoryremapping nicht aus, aber vielleicht weiß ja doch 
jemand was ich wo wie verändern könnte, damit das Programm ins’ 
ROM/Flash richtig zusammen gelinkt wird und auch nach dem Interrupt zum 
OS/zu main() zurückkehrt )
PROJ   = main
WEBDIR = sample
WEBFILE= urom.c
INCFIRST=-I./nutbld/include 
PLATFORM=AT91SAM7X_EK
HWDEF+=-D$(PLATFORM)
LDSCRIPT=./nut/arch/arm/ldscripts/at91sam7x256_rom.ld
MCU=arm7tdmi
CRUROM=crurom
DEFS = $(HWDEF)
INCDIR = ./nut/include
TRGT   = arm-elf-
CC     = $(TRGT)gcc
CXX    = $(TRGT)g++
AR     = $(TRGT)ar
CP     = cp
AS     = $(TRGT)gcc -x assembler-with-cpp
RANLIN = $(TARG)ranlib
MCFLAGS = -mcpu=$(MCU)
CPFLAGS = $(MCFLAGS) -Os -mthumb-interwork -fomit-frame-pointer -Wall -Werror -Wstrict-prototypes -Wa,-ahlms=$(@:.o=.lst) $(DEFS) $(UCPFLAGS) 
CXXFLAGS = $(MCFLAGS) -Os -fno-delete-null-pointer-checks -fno-exceptions -fno-rtti -Wall -Wa,-ahlms=$(<F:.cc=.lst) $(DEFS) $(UCPFLAGS)

LDFLAGS = $(MCFLAGS) -Wl,-T$(LDSCRIPT),-Map=$(PROJ).map,--relax,--sort-common,--strip-all,--cref -L./nutbld/lib
ARFLAGS = rsv
ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(@:.o=.lst) $(DEFS) $(UASFLAG)
TARG      = $(PROJ).hex
ITARG     = $(PROJ).bin
DTARG     = $(PROJ).elf
BIN       = $(TRGT)objcopy
BINDIR    = ./nut/bin/$(MCU)

CPFLAGS   = $(MCFLAGS) -Os -mthumb-interwork -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm -Wa,-ahlms=$(<:.c=.lst) $(DEFS)

LDFLAGS   = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(PROJ).map,--cref,--no-warn-mismatch -L./nutbld/lib
ELFCOF    = $(BIN) --debugging \
  --change-section-address .data-0x800000 \
  --change-section-address .bss-0x800000 \
  --change-section-address .noinit-0x800000 \
  --change-section-address .eeprom-0x810000
BURN=jtagomat
BURNMEMORY=FLASHNN
BURNFLAGS=-DDEVICE=0x1F0F0F0F -DIMAGE=./$(ITARG) BATCH at91-upl.jom $(BURNMEMORY)
SRCS =  $(PROJ).c $(WEBFILE) 
OBJS =  $(SRCS:.c=.o)
LIBS =  ./nutbld/lib/nutinit.o -lnutpro -lnutos -lnutarch -lnutdev -lnutarch -lnutnet -lnutfs -lnutcrt
TARG =  $(PROJ).hex
ifneq (, $(findstring h8300, $(ARCH)))
# Libraries specific for H8 port
LIBS += -lnutentry -lc -lgcc
endif
all: $(OBJS) $(TARG) $(ITARG) $(DTARG)
$(WEBFILE): $(WEBDIR)/enlogo.gif $(WEBDIR)/entail.gif $(WEBDIR)/index.html $(WEBDIR)/form.html \
            $(WEBDIR)/flash/egnite.swf $(WEBDIR)/flash/flash.html
  $(CRUROM) -r -o$(WEBFILE) $(WEBDIR)
%o : %c
  $(CC) -c $(CPFLAGS) $(INCFIRST) -I$(INCDIR) $(INCLAST) $< -o $@
%o : %cc
  $(CXX) -c $(CXXFLAGS) $(INCFIRST) -I$(INCDIR) $(INCLAST) $< -o $@
%o : %S
  $(AS) -c $(ASFLAGS) $(INCFIRST) -I$(INCDIR) $(INCLAST) $< -o $@
%s : %c
  $(CC) -c $(CPFLAGS) $(INCFIRST) -I$(INCDIR) $(INCLAST) $< -o $@
%elf: $(OBJS)
  $(CC) $(OBJS) $(LIB) $(LDFLAGS) -o $@
%obj: %elf
  $(BIN) -O avrobj $< $@
%rom: %elf
  $(BIN) -O srec $< $@
%eep: %elf
  $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" -O srec $< $@
%a: $(OBJS)
  $(AR) $(ARFLAGS) $@ $?
%elf: $(OBJS)
  $(CC) $(OBJS) $(LDFLAGS) -Wl,--start-group $(LIBS) $(ADDLIBS) -Wl,--end-group -o $@
%cof: %elf
  $(ELFCOF) -O coff-ext-avr $< $@
%hex: %elf
  $(BIN) -O ihex $< $@
%rom: %elf
  $(BIN) -O srec $< $@
%bin: %elf
  $(BIN) -O binary $< $@
%eep: %elf
  $(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex $< $@
burn: $(TARG) $(ITARG)
  $(BURN) $(BURNFLAGS)
install: $(TARG) $(ITARG)
  $(CP) $(TARG) $(BINDIR)/$(TARG)
  $(CP) $(ITARG) $(BINDIR)/$(ITARG)
clean:
  -rm -f $(OBJS)
  -rm -f $(TARG) $(ITARG) $(DTARG)
  -rm -f $(PROJ).eep
  -rm -f $(PROJ).obj
  -rm -f $(PROJ).map
  -rm -f $(SRCS:.c=.lst)
  -rm -f $(SRCS:.c=.bak)
  -rm -f $(SRCS:.c=.i)
  -rm -f $(WEBFILE)


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.