Hallo, ich nutzte den STM32F303 Microcontroller. Dieser soll per SPI und DMA Daten empfangen und senden. Zur Zeit werden die Funktionen der HAL Bibliothek genutzt. Hauptsächlich die Funktion HAL_SPI_TransmitReceive_DMA Nach Abschluss des Empfangs- und Sendezyklus wird eine Callbackfunktion aufgerufen.In Callbackfunktion befindet sich eine Zustandsmaschine, welche die Länge des nächsten Nachrichtenzykluses festlegt und den Sendebuffer mit neuen Daten füttert. Nun zu meiner Frage. Die Kommunikation funktionirt soweit. Jedoch ist die Callbackfunktion ein kritischer Abschnitt. Dieser soll geschützt werden damit kein Interrupt dazwischenfunken kann. Besteht die Möglichkeit es elegater zu lösen als die kompletten Peripherie Interrupts zu sperren (UART,ADC,DAC,...). vielen Dank im vorraus.
>Dieser soll geschützt werden damit kein Interrupt dazwischenfunken kann.
"Geschützt" gegen was?
Martin schrieb: > Nun zu meiner Frage. Die Kommunikation funktionirt soweit. Jedoch ist > die Callbackfunktion ein kritischer Abschnitt. Dieser soll geschützt > werden damit kein Interrupt dazwischenfunken kann. > > Besteht die Möglichkeit es elegater zu lösen als die kompletten > Peripherie Interrupts zu sperren (UART,ADC,DAC,...). Es darf keinerlei ISR angesprungen werden - welche Lösung wäre also eleganter, als für diese Zeit alle Interrupts via "CPSIE I" zu sperren? Allerdings könnte es eleganter sein, die Originalvorgabe zu ändern, statt generell alle Interrupts zu verbieten...
Marcus H. schrieb: > Es darf keinerlei ISR angesprungen werden - welche Lösung wäre also > eleganter, als für diese Zeit alle Interrupts via "CPSIE I" zu sperren? Ich muss gestehen, dass mir die Funktion mit CPSIE I nicht bekannt war. Ich habe es getestet und es funktioniert so wie es soll, Danke.
Martin schrieb: > Marcus H. schrieb: >> Es darf keinerlei ISR angesprungen werden - welche Lösung wäre also >> eleganter, als für diese Zeit alle Interrupts via "CPSIE I" zu sperren? > > Ich muss gestehen, dass mir die Funktion mit CPSIE I nicht bekannt war. > Ich habe es getestet und es funktioniert so wie es soll, Danke. Ah, ok. Freut mich, dass ich Dir helfen konnte. Vielleicht magst Du gelegentlich mal die RMxxx und PMxxx, sowie die ARM-Core-Doku für Deinen Controller lesen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.