GPIO-Zugriff auf Cortex-M4: Lesen-Ändern-Schreiben vs. Atomic

Ich bin kürzlich auf die Bit-Banding-Funktion auf dem Cortex-M4-Kern gestoßen und wie sie eine Lösung bietet, um Race-Conditions beim Umschalten von Registerbits zu vermeiden. Der M4 hat auch ein dediziertes BSRR-Register für die Durchführung von Atombit-Manipulationen an den GPIO-Ports. Ich verstehe, dass die Anwendung dadurch Thread-sicher wird

Gibt es einen Nachteil dieses Ansatzes im Vergleich zu der allgemein verwendeten Read-Modify-Write-Methode zum Umschalten von GPIO-Pins? .

Nehmen Sie diesen Fall: Umschalten von 8 Pins (kann insgesamt ein Port sein) gleichzeitig? Welche ist schneller?
@ammar.cma der BSRR/BRR kann bis zu 16 Bit gleichzeitig ändern, wenn sie sich im selben Port befinden. Was diese Register jedoch nicht zulassen können, ist die Übertragung beliebiger Daten mit einem effizienten festen Befehl.

Antworten (2)

Sie gehen davon aus, dass alle Operationen an IO-Ports auf Bitebene erfolgen. Ich habe vor einiger Zeit eine externe LCD-Schnittstelle geschrieben, die Px0..Px7 für die Datenschnittstelle und Px8 für die Schreibsteuerung verwendete. Dadurch konnte ich mit einer Folge von vier GPIO_ODR-Schreibvorgängen ein Pixel (16-Bit-Farbe) direkt auf das Display streamen. Wenn ich BSRR verwendet hätte, hätte ich die rohen Pixeldaten in Bitmasken für dieses Register übersetzen müssen. Dies hätte die Dinge erheblich verlangsamt.

Sie haben die betreffende MCU nicht angegeben, aber das BSRR-Register ist spezifisch für ST Micro Cortex-M-Teile.

Das BSRR-Register bietet eine ähnliche Funktionalität wie die Bitbanding-Funktion, die Teil der Cortex-M-Architektur in Bezug auf den atomaren Betrieb ist.

Ob Bit-Banding im Vergleich zu Read-Modify-Write einen Nachteil hat, der Hauptnachteil besteht darin, dass sie jeweils nur ein Bit manipulieren können.

Beachten Sie, dass BSRR und BRR im Gegensatz zu adressbasiertem Bitbanding Mehrbitoperationen zulassen, da sie mit Bitmasken arbeiten .
Die GPIO-Ports, die Arm mit dem Cortex-M lizenziert, haben eine in die Portadresse integrierte Maske, sodass Sie die Portbits mit einer einzigen Operation atomar schreiben können. Der einzige mir bekannte Anbieter, der das Arm-GPIO-Design verwendet, ist TI, obwohl NXP dies auf ähnliche Weise tut. Energy Micro/Silabs hat Ports mit Set/Clear-Registern.