mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM7_LPC2368: Timer beim Debuggen


Autor: D. S. (forack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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' ??

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: D. S. (forack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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???

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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:
uint32_t time;

time = currentTimer();
for (;;) {
   if (elapsedTime(time) >= 250) {
      time = currentTimer();
      TOGGLEPIN(P_LED);
   }

   ...
}

currentTimer() liefert den aktuellen TC Wert und elapsedTime()
bildet die Differenz (TC - time). Der Timer wird etwa jede Milli-
sekunde erhöht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.