STM32 SPI DMA Jitter

OP #7551406
Lesenswert?
• ▲
▼

Hi,

Ich verwende ein STM32F767 Nucleo-144 board mit einem STM32F767ZIT6 Prozessor.

Mit CubeIDE konfiguriere ich SPI1 als I2S input und pumpe die Daten über den DMA2/Stream0 in einen kleinen 8x16Bit circular buffer. Die clock vom SPI1 ist ~ 3MHz. Ich habe die HAL_I2S_RxHalfCpltCallback() und HAL_I2S_RxCpltCallback() Routinen aufgesetzt. In beiden Routinen toggle ich einen GPIO und bekomme ein ~23.8kHz Rechteck signal. Das geht alles wunderbar.

Aber: Das Rechteck Signal hat zwei verschiedene Arten von Jitter. Erstens einen konstanten jitter ~ 100ns, der von der unterschiedlich langen Reaktionszeit des uC auf den Interrupt stammt.

Zweitens ist manchmal für Bruchteile von Sekunden das Tastverhältnis des Rechtecks um ~ 330ns geändert. 330ns ist der Kehrwert der 3MHz clock.

Wie werde ich den 330ns Jitter los, woher kommt der? Ich habe den HAL_DMA_IRQHandler() bis auf die Knochen abgespeckt. Ich habe auch die Interrupt Prioritäten ohne Erfolg geändert.

THX Cheers Detlef

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.