Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 Int0 + ADC-Int -> manchmal Absturz (ASM)


von Andreas T. (andyt)


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

von spess53 (Gast)


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

von Stefan E. (sternst)


Lesenswert?

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

Weil ori und andi Einfluss auf das SREG haben und du es in der ISR nicht 
sicherst und restaurierst.

von Andreas T. (andyt)


Lesenswert?

Mist, hätte ich auch selber drauf kommen können, zumal ich
das in der ADC-ISR auch so gemacht habe....


Vielen Dank!

Andreas

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.