Hi! Ich hab ne frage zum ARM7 Timer Modul. Ausgangssituation: ARM7 LPC2368 Interrupt mit Timer0 wenn TC == MC. Das geht so weit & stellt auch kein Problem dar. Vorhaben: Dann in der ISR beim debuggen nen Haltepunkt setzen, auf RUN drücken & schauen was der TC macht. Also wieviel Clocks gezählt werden, bis er wieder an die Stelle kommt. Erwartung: TC's fast immer im gleichen Bereich. Naja, pi*mal daumen zumindest, da er zwischendrin eigentlich net viel zu tun hat ausser einmal ne ad-wandlung zu machen. Ist: Die TC-Werte sind extrem unterschiedlich. Frage: - Warum? Dachte eigentlich im Debug-Mode werden die Schritte einzeln durchgetaktet & da der PCLK ja eigentlich konstant ist & das TC-Register ja nur die PCLK Flanken zählt, hätte ich eher gleichbleibende werte erwartet. - Was passiert, wenn der Debug-Mode aus ist & der ohne zu debuggen takten kann. Wird das dann einheitlicher oder ist das immer eher 'willkürlich' ??
Gast
#1110887
Huhu, die Kombination Timer + Debugging ist eine einzige Katastrophe beim ARM. Wenn der Kern gestoppt wird laufen die Timer ganz normal weiter. Timer und CPU sind also völlig asynchron, da kann alles Mögliche passieren. Ich verwende üblicherweise den Timer0 im freilaufenden Modus (d. h. der TC wird nie zurückgesetzt) und arbeite mit Zeit- stempeln. Ein Breakpoint bringt das vollkommen durcheinander, sodaß sich das Programm anschließend nicht mehr mit 'continue' fortsetzen läßt. Rein technisch geht das natürlich, dadurch das der TC aber zwischenzeitlich lustig weitergelaufen ist funktioniert das Programm dann aber nicht mehr richtig. Oder habe ich deine Frage falsch verstanden?
let wrote:
> Oder habe ich deine Frage falsch verstanden?
Nö.
Hast schon richtig verstanden!
Gut zu wissen, das das net an meinem Quellcode oder was anderem liegt.
Dank' dir!!
Zwei fragen hätte ich aber noch.
Und zwar:
1) wenn der dann ohne Debug läuft, dann müsste das doch alles normal
laufen, oder ??
2)
Wie arbeitest du/man mit den Zeitstempeln??
So ganz versteh ich das mit denen nicht, weil doch irgendwann nen ewig
langen Wert als Zeit bekommst. Oder versteh ich da was falsch???
Nimmst dann immer die Ticks & hängst die einfach an den Wert dran, oder
wie ??? Und was machst, wenn die Daten dann verschicken willst???
Weil Zeitstempel okay. Nur wenn jetzt 2-3h lang alle Millisekunde nen
Wert nimmst, dann hat man doch mehr Daten an Zeitstempeln, denn an
brauchbaren Daten. Oder nicht???
Gast
#1110923
>wenn der dann ohne Debug läuft, dann müsste das doch alles normal laufen, oder ?? So sollte es sein. Ich habe es zwar nie genau gemessen aber ich gehe davon aus das die ISR immer wieder um einige Takte versetzt aufgerufen wird, je nachdem wann der Interrupt zuschlägt. >Wie arbeitest du/man mit den Zeitstempeln?? Ich hole mir zum Zeitpunkt x den aktuellen Wert vom TC und bilde zum Zeitpunkt y die Differenz zum aktuellen TC. Beispiel:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
currentTimer() liefert den aktuellen TC Wert und elapsedTime() bildet die Differenz (TC - time). Der Timer wird etwa jede Milli- sekunde erhöht.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.