Forum: Compiler & IDEs ARM Assembler: ein Bit setzen


von romanua (Gast)


Lesenswert?

Hallo,

ich lerne ARM assembler am AT91SAM7S64 und stehe jetzt vor einem
Problem.

Die Peripherie wird ueber "memory mapped" Registers gesteuert. Also,
in meinem Fall, will ich den USB Port ansteuern. Dafuer muss ich in
einer Speicherzelle Bits setzen oder zuruecksetzen.

Bis jetzt habe ich nur auf folgendes zum Setzen des Bits 1 gekommen:

Die Zelle in R1 einlesen
OR R2, R1,0x1
R2 zurueck in die Zelle schreiben.

Das Problem, das ich dabei habe, ist, dass USB port auch einige BITs
inzwischen aendern koente und ich die Veraenderungen verliere.

Gibt es wie bei AVR einen Befehl, mit dem man ein Bit in einem Zug
aendern kann?

Danke,

Roman

von A.K. (Gast)


Lesenswert?

Nein.

Wenn das betreffende Register keine set/clr-Adressen hat, wie bei den
Ports, dann müssen dafür die Interrupts abgeschaltet werden.

Ist übrigens bei AVRs nicht anders, wenn man mal die ersten 32 Bytes
verlassen hat.

von romanua (Gast)


Lesenswert?

Hallo, danke fuer die Antowrt.

Ich bin jetzt aber verwirrt. z.B. Seite 468 UDP_CSRx register.


http://www.atmel.com/dyn/resources/prod_documents/doc6175.pdf


Das zweite Byte des Registers (Bits 8-15) hat Bit 11 als "read-only"
und Bit 15 "read/write". Also wenn ich Bit 15 besreiben will, muss
ich auch das Bit 15 auch beschreiben, obwohl es "read-only" ist.

Was passiert, wenn man ein "read-only" Bit beschreibt? nichts?

von romanua (Gast)


Lesenswert?

Sorry, es muesste heissen:

 Also wenn ich Bit 15 besreiben will, muss ich auch das Bit 11 auch
beschreiben, obwohl es "read-only" ist.

von A.K. (Gast)


Lesenswert?

Was immer du in read-only reinschreibst, es ändert sich nichts. Das
heisst nicht, dass die Kiste explodiert wenn du das machst.

Übrigens ist das bei den Bitbefehlen von AVR oder 8051 auch nicht
anders. Obzwar diese Prozessoren eigens Befehle für Bitmanipulation
haben, lesen und schreiben auch die immer nur ganze Bytes, per
"laden", "setzen/löschen", schreiben". Nur in einem Befehl.

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.