www.mikrocontroller.net

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

Autor: Proc Proc (proc)
Datum: 14.05.2008 11:48

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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net