Forum: Mikrocontroller und Digitale Elektronik STM32 GCC Buffer Interrupt Safe machen


von Peter (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Problemchen mit meinen Ring Buffer.
Für die USB Schnittstelle habe ich jeweils für RX und TX einen Separaten 
Ring Buffer. Dabei sind RX und TX Interrupt gesteuert.

Das Problem tritt beim TX-Buffer auf, der Interrupt- und der 
Normale-Prozess greifen beide auf die gleiche Variable zu und es kommt 
zu Datenschrott. Tritt zwar selten auf, aber es kommt halt vor.

Beim AVR würde ich mit cli() sei() solange den Interrupt deaktivieren, 
wie macht man das am geschicktesten beim STM32?

von (prx) A. K. (prx)


Lesenswert?

Innerhalb der kritischen Zone das BASEPRI-Register auf den Level des 
UART-Interrupts setzen (=> CMSIS Funktion). Sperrt alle Interrupts bis 
zu diesem Level, lässt höher priorisierte aber durch. Siehe dazu auch 
BASEPRI_MAX, falls sich sowas verschachteln sollte.

Alternativ lassen sich auch die jeweiligen Interrupts im NVIC sperren, 
und natürlich kann man mit der Holzhammer-Methode auch die Interrupts 
ganz abklemmen.

von Peter (Gast)


Lesenswert?

@ A. K. (prx)
Ich habe es jetzt mit NVIC probiert, und es hat geklappt.
Danke für den Tipp.

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.