Ich löse damit ja keinen extra Interrupt aus, sondern lasse damit den Timer zurücksetzen, der frei geringfügig länger laufen würde und ohnehin einen Update Interrupt erzeugen muss. Das kostet gar keine CPU extra. Ein minimaler Jitter entsteht nur dadurch, dass vor dem Betreten der Hauptschleife auf das Flag vom Update Interrupt getestet wird. Wie könnte man den Jitter kleiner als ein paar Clocks machen? Da ist eher das Problem, dass ich das RC Signal per Interrupt vom UART hole und nicht per DMA. Auf dem Logic Analyzer ist kein Jitter zu sehen.
Wenn man einfach ein 1000 Hz Signal mit 1001 Hz sampled läuft die Phasenlage im laufe der Zeit(1s) ja komplett durch. Damit schwankt die Latenz in dieser Periode des Durchlaufens ja mit 1 ms. Im Extremfall liest man dann die Daten unmittelbar bevor die jüngsten Daten lesbar wären. Da ist doch genau das was Du zu Recht kritisiert hast als ich die 1 kHz mit 1,25 kHz gelesen habe.
Wenn man einfach ein 1000 Hz Signal mit 1001 Hz sampled läuft die Phasenlage im laufe der Zeit(1s) ja komplett durch. Damit schwankt die Latenz in dieser Periode des Durchlaufens ja mit 1 ms. Im Extremfall liest man dann die Daten unmittelbar bevor die jüngsten Daten lesbar wären. Da ist doch genau das was Du zu Recht kritisiert hast als ich die 1 kHz mit 1,25 kHz gelesen habe.
SysTick_Config(SystemCoreClock / 1000);
versa
// SysTick
SysTick_Config(SystemCoreClock / 1000-1);
das mit den 1001 hz war leicht übertrieben.
man soll sicherstellen, dass keine daten durch jitter verlorengehen.
du solltest mal die m4 architektur studieren.
spätestens da merkst du, das mit dem retten der register viel zeit drauf geht.
also lieber per dma - das befreit die cpu.
instrumentiere mal den code und messe den jitter.