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