Forum: Compiler & IDEs Problem: Reset bei Ext. Interrupt (avrgcc, m8)


von lenard (Gast)


Lesenswert?

Hi,
mein Programm resettet sich bei externem Interrupt (INT1, PD3, Pin 5). 
Ich habe mir den Code im Disassembler angeschaut, und die 
Interruptvektoren stehen falsch. Ich benutze AVRStudio 4.13 build 557 
mit WinAVR 20070525.

Quellcode:

ISR(INT1_vect)
{
  TCCR1B = 0;  //stop counter
}

int main(void)
{
  cli();      //erstmal interrupts aus

  OSCCAL = 0xAB;

  TCCR1A = 0;
  TCCR1B = 1;  //no prescaler; 2=pre/8 TCNT1 counter-register

  MCUCR = (1<<ISC10);
  GICR = (1<<INT1);

  sei();
  while(true)      //endlosschleife über das if
  if( zaehler == 30 )
  { ... }
}

Dis-ASM:
+00000000:   C012        RJMP    PC+0x0013        Relative jump
+00000001:   C02C        RJMP    PC+0x002D        Relative jump
+00000002:   C02C        RJMP    PC+0x002D        Relative jump
+00000003:   C02A        RJMP    PC+0x002B        Relative jump
+00000004:   C029        RJMP    PC+0x002A        Relative jump
+00000005:   C028        RJMP    PC+0x0029        Relative jump
...
+0000002E:   CFD1        RJMP    PC-0x002E        Relative jump
@0000002F: __vector_2
...

wenn ein Interrupt auftritt (ich also PIND Bit3 im Simulator anklicken) 
springt der Prozessor an Adresse 0x04 (TIMER2 OVF laut Datenblatt) ?!?
Wenn ich den Interruptvektor auf TIMER2_OVF_vect ändere, läuft das 
Programm wie erwartet.

von Johannes M. (johnny-m)


Lesenswert?

Dann hast Du möglicherweise einen falschen Controller für die Simulation 
angegeben. Überprüf mal Deine Einstellungen. Das sieht so aus, als ob da 
ein AVR mit mehr als 8 KiB Flash eingestellt ist...

von lenard (Gast)


Lesenswert?

Dachte ich auch schon, aber eingestellt ist der korrekte "atmega8".

von lenard (Gast)


Lesenswert?

Sorry für den Doppelpost:
hier die compilerausgabe:

avr-gcc.exe  -mmcu=atmega8 -Wall -gdwarf-2 
-DF_CPU=4000000UL -Os -fsigned-char -MD -MP -MT testprojekt.o -MF 
dep/testprojekt.o.d  -c  ../testprojekt.c
avr-gcc.exe -mmcu=atmega8  testprojekt.o     -o testprojekt.elf
avr-objcopy -O ihex -R .eeprom  testprojekt.elf testprojekt.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 --no-change-warnings -O ihex 
testprojekt.elf testprojekt.eep || exit 0
d:\WinAVR-20070525\bin\avr-objcopy.exe: there are no sections to be 
copied!

AVR Memory Usage
----------------
Device: atmega8

Program:     514 bytes (6.3% Full)
(.text + .data + .bootloader)

Data:         94 bytes (9.2% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...

von lenard (Gast)


Lesenswert?

Sorry für den Dreifachpost:

Natürlich, im Simulator war der Mega16 eingestellt :(
Man muss natürlich wissen, das Projekt und Simulator nicht dieselbe 
Konfiguration verwenden (müssen).
Jetzt geht es in jedem Fall. Vielen Dank für die Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.