Hallo folgendes Problem beschäftigt mich derzeit:
MSP430F1612
IAR 3.21A
Sprache: C
Ich habe eine Uhrzeit mittels der Bibliotheken von TI am laufen.
Ich nehme dazu den TimerA (TA).
Das geht auch schon eine ganze Weile ganz gut...
Inzwischen habe ich mein Projekt mit nem ADC12 erweitert...allerdings
habe ich dazu, um die Sache übersichtlicher zu machen, die Uhrzeit und
den restlichen Kram, den ich noch mache weggelassen.
Es sind also alles Einzel-Projekte...
Jetzt wollte ich die Uhrzeit und die AD-Wandlung zusammenführen.
Ich bekomme wahrscheinlich einen Konflikt mit den Timern, aber ich weiß
es halt nicht genau...
Ich habe einfach mal meine Code inkl. der RTC_TA.h und RTC_TA.s43 mit
angehangen.
Der Fehler, der beim Compilieren auftritt ist folgender:
Ich meine, Übersetzen kann ich die Sache schon, aber DEUTEN, da hakt es
gewaltig.
Ich habe auch schon versucht, die Uhrzeit mittels des Basic Timers BT zu
machen, aber es tritt der gleiche Fehler auf...
Ich möchte mit dem ADC12 alle 125 eine Messung auslösen...so steht es in
der main() in der Interrupt-Routine ganz unten...
Die Interrupt-Routine für die Uhrzeit (steht in RTC_TA.s43 drin) macht
aber alle Sekunde einen Interrupt...um halt immer sie Sekunden zu
erhöhen...
Es wäre Super, wenn sich jemand mal die Sache ansehen könnte.
Wenn mir dann noch jemand meine(n) Denkfehler erklären könnte, dann wäre
das grandios! ;-)
danke
Ich hab mir deinen Code nicht angesehen - verwende kein .rar auf meinem
System - aber die Ursache ist mit an Sicherheit grenzender
Wahrscheinlichkeit, daß du in zwei deiner Module jeweils statisch die
Interruptvektoren initialisierst.
Das kann man nur einmal machen.
Hmm...wäre schön, wenn Du trotzdem mal draufschauen würdest.
Hab mal nen *.tar.gz gemacht...hoffe, dass Du auf Deinem System dieses
Archiv verwendest ;-)
danke
Der Fehler ist, wie schon gesagt, dass du zweimal eine TimerA Interrupt
Service Routine definierst. Du müsstest also diese beiden Routinen
zusammenlegen.
Dazu löst du alle 125 ms einen TimerA Interrupt aus, startest jeweils
eine AD-Wandlung und verwendest diese Zeit auch als Referenzzeit für
deine Uhr. Irgendwo musst du halt nur mal acht nehmen, dass die Uhr auch
wieder richtig geht :-)
Viele Grüße
Michael
Danke erstmal.
Beide ISR in eine zu packen und die Zeit dann aus den 125ms zu holen ist
etwas unschön, oder?
Kann ich nicht die ISR von der RTC_TA.s43 so lassen, und für die
AD-Wandlung den TimerB nehmen?
Ich habe schon folgendes versucht, aber ohne Erfolg. Der Fehler tritt
immer noch auf.
Was mache ich denn falsch?
danke
*edit: ach ja, mitAssambler kenn ich mich gar nicht aus, es wird also
schwierig die ISR vom TI-Beispiel zu bearbeiten...
Mein Vorschlag:
Den ganzen Krimskrams wegschmeissen. Mit den 32kHz den Watchdogtimer
befeuern und in dessen ISR die Sekunden zählen und AD-Wandeln. Zum
Watchdog als Standardtimer sollte es auch einige Beispiele bei TI geben
...Dann müsste ich aber auch die ISR, die bei der RTC_DT.s43 dabei ist,
abändern, oder komplett neuschreiben...
Also abändern in Assambler geht schonmal nicht, weil siehe oben...
Warum geht denn meine Sache mit dem TimerB nicht? Das müsste doch auch
funktionieren.
Kann mir mal bitte einer etwas ausführlicher erklären, was ich machen
muss, um einerseits die Uhrzeit zu haben, und zweitens alle 125ms nen
"tick" auszulösen, damit ich dann AD-Wandeln kann.
danke
In RTC_DT.s43 die Zeile:
'RSEG INTVEC'
ersetzen durch:
'COMMON INTVEC'
Interruptvektoren sind nicht relocatable, sondern stehen immer an einer
festen Adresse.
Cool, damit geht es erstmal...mal sehen, ob es morgen auch noch geht,
wenn ich wirklich ad-wandeln tue...
Wenn nicht, dann melde mich ich mich nochmal! ;-)
Eine eigene Frage?
Dieser Thread ist über 19 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.