Forum: Mikrocontroller und Digitale Elektronik AVR-Studio BUG ? ( EECR cleared? )


von Kai Schilling (Gast)


Lesenswert?

AVR-Studio BUG ?

Leider funktioniert bei der AVR Studio Ver. 4.07 ,AVR
Simulator  Build  1, 0, 0, 9 die Simulation der ser. Schnittstelle 
nicht.
korrekt d.h der simulierte Controller (AT90S8515 bzw. mega...) bleibt
an der Stelle im Code hängen an der er auf das Rücksetzen des Bussy
wartet :

asm:
eep_r_wait_s:sbic  EECR, 0           ; bit cleared?
             rjmp  eep_r_wait_s
             .
             .
             ret

Dieser Fehler tritt anscheinend NUR im Schrittbetrieb auf , bei der
Sim. via " Run to Cursor " verläuft alles normal .

Ist dieses Problem Jemandem bekannt oder handelt es sich eher um einen
Konfig.-Fehler meinerseits ?

MfG Kai

von crazy horse (Gast)


Lesenswert?

hier gehts ja mächtig durcheinander...Was hat das EERE-Bit mit der
seriellen Schnittstelle zu tun??
Auf EECR.EERE braucht man nie zu warten, das Setzen löst das Lesen aus,
es werden automatisch 2 noops ausgeführt, dann kann man das Datenbyte
auch schon abholen.
Trotzdem solltest du dir die Version 4.08 holen.

von Kai Schilling (Gast)


Lesenswert?

Sorry , da die Routine von Eprom auf ser. ausliest und ich außerdem wohl
etwas zu sparsam in der code Darstellung war , ist das natürlich zu
einem  Musterbeispiel an verwirrender Darstellung geworden.Hier noch
mal die vollständige Routine.
;String --> RS232 (temp1=Adress)
ser_string:
           push temp2
           mov temp2, temp1
           out EEARL, temp2                  ; set Eprom_Adr
     sbi EECR, EERE              ; set Read Enable Bit
nextchar_s:
           in temp1, EEDR
           rcall ser_out
           inc temp2
           out EEARL, temp2
           sbi EECR, EERE
eep_r_wait_s:sbic  EECR, 0                     ; bit cleared?
           rjmp  eep_r_wait_s                  ; no
           in temp1, EEDR                      ; yes ,then read
           tst temp1                           ;test string_end
           brne nextchar_s
           pop temp2
     ldi temp1, 10                       ;new line etc.
     rcall ser_out
     ldi temp1, 13
     rcall ser_out                       ;
           ret

Dank an Crazy Horse. Hast mich glücklicherweise darin erinnert das der
Befehl eh nur einen Clk dauert... so braucht man EERE ja nie
abzufragen.Leider wird das aber beim AVR Studio nicht weiter
angezeigt.

Sollte ich zum Lesen eigentlich besser das EEWE abfragen und auf 0
warten ? Vielleicht sicherer wenn mal n Int. die Routine unterbricht
und etwas im Eprom hinterlegen möchte.

MfG Kai

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.