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!
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)
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!
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.