ATMEGA8 Int0 + ADC-Int -> manchmal Absturz (ASM)

OP #1509149
Lesenswert?

Hallo,

bei einem ATMEGA8L ist der ADC-Interrupt und der Int0 aktiv.
Der ADC-Int. läuft zu 99% der Zeit mit 5000sps (clock 8 MHz) Ub=4V.
Alles korrekt abgeblockt usw. Das Programm ist in Assembler (AVR-Studio) 
geschrieben und belegt ca. 3700 Bytes (cseg).

Der Int0 wird mit einem Taster gegen Masse ausgelöst.
Der Pullup-Widerstand für den Pin ist aktiv.
Es ist noch reichlich RAM vorhanden (Stack).

Int0 soll später einen Flag in einem Register verändern.
Allerdings gibt es schon mit der gezeigten Int0-ISR seltsame
Probleme. Siehe Kommentar.
Das Gleiche passiert übrigens auch bei Verwendung anderer Register.

Bin etwas ratlos...

Initialisierung:
outi  MCUCR,0b00000000  ;Int0: Low-Level, Int1:Low-Level (S.65)
sbit  GICR,INT0    ;Int enabled:bit6  (S.65)

   ....main....

int0_isr:  ;es ist jeweils nur eine der auskommentierten Zeilen aktiv!
  push  r17
  ;ori  r17,0b10000000  ; manchmal RESET
  ;andi  r17,0b01111111  ; manchmal RESET
  ;ldi  r17,33         ; nie RESET !
  pop r17
  reti

Wieso kommt es manchmal zum Reset bzw. auch "Absturz" d.h. Programm 
läuft nicht mehr?

Gruß+Danke
Andreas
Gast #1509156
Lesenswert?

Hi

>  ;ori  r17,0b10000000  ; manchmal RESET
>  ;andi  r17,0b01111111  ; manchmal RESET
>  ;ldi  r17,33         ; nie RESET !

'ori' und 'andi' verändern u.U. die Flags in SREG. 'ldi nicht. Du 
solltest in der ISR SREG sichern.

z.B

   push r16
   in r16,SREG
   push r16
   ....

   pop r16
   out SREG,r16
   pop r16
   reti

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren