Forum: Digitale Signalverarbeitung / DSP / Machine Learning Schwankung bei der Latenz von ISR bei TMS320


von MaMü (Gast)


Lesenswert?

Hi zusammen,
mir ist aufgefallen dass die Startdauer meiner ISR ziemlich schwankt und 
jetzt würde mich mal interessieren woher das kommen kann? Und zwar geht 
es um einen Hall-Sensor welcher mit einem TMS320 erfasst wird.
Immer bei der gleichen ISR und immer am gleichen Sensor gemessen habe 
ich einen Jitter von 3µS und eine Startzeit von 20µS (was mir bei einem 
150MHz Controller ziemlich viel vorkommt?)

Messen tue ich wie Folgt: GPIO Output in der ISR als erster Befehl. 
Diese toggled sobald die ISR ausgeführt wird. Oszi auf steigende Flanke 
des Hall-Sensor getriggert und dann mit den Cursors das Delta gemessen.
Die gemessene ISR hat die höchste Priorität, also kann eine dazwischen 
spuckende ISR als Ursache ausgeschlossen werden.

Nun woher kann der Jitter noch kommen? Es wird immer nur das gleiche 
abgearbeitet im Programm...Immer die gleiche Routinen.

Der Jitter ist jetzt kein wirkliches Problem, aber würde mich doch 
interessieren woher der kommt!

von spiegelau (Gast)


Lesenswert?

Arbeitest du mit TI-RTOS oder ohne?
Sind noch andere Interrupts aktiv? Wenn ja musst du das Nesting richtig 
einstellen. Standardmäßig macht der TMS320 kein Nesting. D.h. dein 
Interrupt kann andere Interrupts nicht unterbrechen.

Normal ist eine Latenz von ca. 100ns und ein Jitter im ns Bereich(bei 
aktiviertem Nesting)

von MaMü (Gast)


Lesenswert?

Hi,
ich habe kein RTOS! nur n "schlankes" C-Programm (RTOS wäre denk ich der 
nächste Schritt aber da fehlt mir noch n bisschen die Erfahrung)

Ich gebe die anderen ISRs Sofort nach Auslösen des Interrupts wieder 
frei so dass die zeitkritischen sofort durchkommen. Außerdem hab ich 
irgendwo was mit Prioritäten gelesen gehabt wo ich dann die 3 Hall -ISRs 
höchstpriorisiert habe. Aber keine Ahnung ob das soweit richtig war... 
Nesting sagt mir bis jetzt noch nicht viel, aber ich schau es mir jetzt 
mal an!

von MaMü (Gast)


Lesenswert?

hmm ich finde im Moment nichts wie ich noch meine Latenz runter bekommen 
könnte... Ich häng mich wohl nochmal ans Oszi und mess erneut! Vlt hab 
ich irgend einen Messfehler gemacht...

Wie lang ist denn übliche Befehlsdauer (wie Clocks benötigt ein MOV)? 
Ich habe nach einer Tabelle gesucht in der die ganzen ASM Befehle mit 
Ihrer Dauer (Clock pro Befehl) aufgeführt sind, aber habe nirgends was 
gefunden... Das ist bei dem TMS320 unheimlich unübersichtlich mit den 
ganzen verschiedenen C-Files...

von Martin (Gast)


Lesenswert?

Die Anzahl Takte / Befehl lässt sich beim TMS nicht so einfach angeben, 
weil er für die Befehle eine Pipe verwendet. Je nach dem, ob er 
sequenziell abarbeiten kann oder durch einen Sprung die Pipe erst wieder 
neu füllen muss, ist diese unterschiedlich.
Die Interrupt-Einsprungzeit ist u.A. davon abhängig, welcher Befehl 
gerade abgearbeitet wird. Auch ist die Zeit, welche er für die Sicherung 
der Register benötigt unterschiedlich lang.

Abhängig von der Aufgabe: evtl. mit der Capture Compare Einheit 
arbeiten, wenn der Jitter zu groß ist.

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.