EICRA mit ATmega128

Gast #95642
Codeauschnitt:

ldi temp3, 0b01000000
out GIMSK, temp3     ;ext int0 aktiviern in General Interupt Mask

ldi temp3, 0b00000011
out EIMSK, temp3     ;ext int0 aktiviern in Ext Interupt Mask

ldi temp3, 0b00001010
out EICRA, temp3    ;ext int0 und int1 aktivieren bei fallender Flanke

sei

loop:

  rjmp loop


Hallo leute,

ich bastele an meiner Diplarbeit und stehe seit ein paar Tagen vor dem
Problem, mit den INterupts, meinen Atmega anzusteuern. Mittlerweile tut
das auch soweit, allerdings habe ich noch ein Problem, zu dem ich keine
Lösung finde:
Wenn ich mit dem EICRA den Interupttrigger auf fallende Flanke setzen
möchte, bekomme ic hvom Compiler folgende Fehlermeldung:

E:\Arbeit\Diplomarbeit\AVR\040617\Timer040621.asm(78) : error :
Illegal argument type or count
Assembly complete with 1 error


Dies passiert, bei egal welcher einstellung. Jetzt triggert er
natürlich auf ein low, d.h. es funzt trotzdem, da bei 8Mhz keiner
shcnell genug den bttonb loslassen könnte, aber es ärgert mich, das ich
das nicht hinkrieg mit dem Register..

Wer kann mir helfen?

Danke
Gast #95643
Sers,

also wenn man mal F1 drück kommt man in die Hilfe. Da steht dann drin
das der out Befehl für Adressen von 0 bis 61 funktioniert. Laut
Datenblatt ist das Register aber auf Adresse 6A, also leicht
außerhalb.
So wird das also nix.

seb
Gast #95644
Danke für die INfo,

aber wenn ich in meiner Hilfe was gefunden hätte, dann hätte ich mir
auch die Frage her gespart. (ich benutze AVRStudio 4)

Ich habe übrigens gerade nocheinmal nachgesehn und nichts gefunden. Mag
auch an meiner mangelnden Suchqualität liegen, ic hlasse mich gern eines
Besseren belehren.
Gast #95645
Hi!

;Externe Interrupts aktivieren
lds    temp1,EICRA
sbr    temp1, 1<<ISC11 | 0<<ISC10 | 1<<ISC01 | 0<<ISC00
sts    EICRA,temp1

;Int4-Int6: "falling edge"
in    temp1,EICRB
sbr    temp1, 1<<ISC61 | 0<<ISC60
sbr    temp1, 1<<ISC51 | 0<<ISC50 | 1<<ISC41 | 0<<ISC40
out    EICRB,temp1

in    temp1,EIMSK
sbr    temp1, 1<<INT6 | 1<<INT5 | 1<<INT4 | 1<<INT1 | 1<<INT0
out    EIMSK,temp1
in    temp1,EIFR
sbr    temp1, 1<<INTF6 | 1<<INTF5 | 1<<INTF4 | 1<<INTF1 | 1<<INTF0
out    EIFR,temp1

So mache ich das. Wie Du siehst verwende ich "out" bei EICRB, aber
"sts" bei EICRA.

Das liegt an dem Problem, was Sebastian schon angesprochen hatte -->
OUT geht nicht überall. War für mich aber auch erst verwirrend!
Theoretisch kann man immer STS verwenden, muß dann aebr 63 oder so
immer dazuzählen bei den sonst OUT-Befehlen.

Also: Probier's mal mit STS anstatt OUT!

Sebastian
Gast #95646
Thanx Sebastian,

das ist genau was ich suchte. Habe STS in der Hilfe gefunden, war mir
aber nicht klar über die Anwendung... bin noch recht blutiger
Anfänger.

Danke

Torsten
Gast #95647
Hi Torsten,

gern geschehen!

Über LDS und STS kannst Du auch auf die 4KB SRAM zugreifen. Da kannst
Du z.B. "Variablen" abspeichern, falls die Register nicht mehr
ausreichen.

Sebastian

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.