mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Seltsame Registereinstellung


Autor: Philipp (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe hier register, dass ich gerne nutzen möchte (siehe Anhang). Was 
ich nicht verstehe ist das Setzen der Bits, um eine bestimmte 
Konfiguration zu ersetzen. Ist das eine Art Sicherung?
Betrifft read, als auch write.

Vielen Dank und Grüße!

Autor: jl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist eine etwas seltsame (aber einfache) Umsetzung in der Hardwarelogic. 
Sieht so aus, als ob die bits im oberen Byte zum setzen des Flipflops 
(Irq_enable register) und im unteren zum zurücksetzen genutzt wird.

Read betrifft es übrigens nicht, da sind nur die unteren 8bit benutzt.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Vorteil der verwendeten Schreiblogik liegt darin, dass man mit einem
einzigen Schreibzugriff jedes der sechs Bits wahlweise setzen, löschen
oder beibehalten kann.

Bei einem "gewöhnlichen" I/O-Register müsste man erst den Inhalt lesen,
mit einer UND-Operation die zu löschenden Bits löschen, mit einer
ODER-Operation die zu setzenden Bits setzen und schließlich das Ergebnis
wieder ins Register schreiben.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, interessant!

Mir erschließt sich jedoch noch nicht der eigentliche Grund oder Zweck 
dieses Verfahrens. Dient es dazu, bestimmte Zustände z.B. bei Interrups 
zu vermeiden?

Vielen Dank und Grüße

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein letzter Post ist zwar schon ein paar Tage her, aber vielleicht ist
die Antwort immer noch von Nutzen:

> Mir erschließt sich jedoch noch nicht der eigentliche Grund oder Zweck
> dieses Verfahrens.

Diese spezielle Schreiblogik dient wohl in erster Linie der Ausführungs-
geschwindigkeit. Man ersetzt damit bis zu vier Befehle durch einen oder
zwei. Dabei wird zusätzlich Programmspeicher eingespart.

> Dient es dazu, bestimmte Zustände z.B. bei Interrups zu vermeiden?

Als angenehmer Nebeneffekt sind die Bitmanipulationen auf Registern
atomar, können also nicht durch einen Interrupt unterbrochen werden.
Wenn sowhl im Interrupthandler als auch im Hauptprogramm Bits desselben
Registers geändert werden, müssen somit keine besonderen Vorkehrungen
zur Kollisionsvermeidung getroffen werden, was die Reaktionszeit auf
Interrupts verringert und etwas zusätzliche Rechenzeit und Programmgröße
einspart.

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@yalu:

Ich würde da Haupt- und Nebeneffekt andersherum sehen.

Und seltsam ist das überhaupt nicht.
I/O-Register sollte man nicht als normalen Speicher ansehen,
die Zugriffe sind Kommandos an die Hardware, etwas zu tun.

Jürgen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.