Hallo,
ich bin gerade dabei eine Kommunikation zwischen PC und MSP430FG4618
über RS232 mit IAR Programmierungsumgebung zu erstellen.
Ich habe Source Code von http://www.mathar.com/msp_usart1.html benutzt
und an meinem MSP entsprechend angepasst, aber es läuft einfach nicht.
Ich benutze ACLK= 6MHz, baudrate = 9600, Pin 4.0=TxXD und Pin4.1=RxD.
Für MAX232 benutze ich pin9=R1out und Pin10=T1out. Wenn ich das Programm
über JTAG (von olimex mit LPT1 ) debugge, wird ersten das Interrupt
nicht aufgerufen und zweiten es kommt zum Fehler „could not get target
status“. Was habe ich falsch gemacht?
Gruss,
Rinny
Für den aller ersten Test empfehle ich erst mal einfach Zeichen vom MSP
rauszusenden (Ohne Interrupt). Dann sieht man wenigstens ob die DAten
ordentlich zum PC kommen oder ob da schon ein Problem ist.
1
while(1)
2
{
3
while(!(IFG2&UTXIFG1));// Warten bis TX Buffer leer
4
TXBUF1='5';// Testzeichen senden
5
}
> es kommt zum Fehler „could not get target status“.
Wenn das erste Zeichen einteffen sollte? Hört sich nach Hardwarefehler
(Kurzschluss) an.
Hi Jörg,
Ich konnte ohne Interrupt auch kein einziges Zeichen empfangen. Ich
benutze Hyperterminal mit folgede Einstellung, 8N1, 9600 und keine
Flusssteuerung. Die Meldung „could not get target status“ kommt immer
bei Dubugging nach ca. 10 sec. Ich denke auch, dass es ein
Hardwarefehler ist. Nur ich weiss es nicht, wie ich es rausfinden kann?
Im Anhang habe ich die Beschlatung vom JTAG und RS232 mitgesendet.
Danke & Gruss
Rinny
Der MSP430 verträgt nur 3,3V, seine Eingänge sind nicht mal 5V-tolerant.
Also die 5V weg, und wie gesagt einen MAX3232 nehmen. Eventuell ist der
MSP aber hinüber....
Außerdem ist der Code oben für den USART. Der MSP430FG4618 verfügt aber
über eine USCI Schnittstelle anstatt über eine USART. Am Besten du
schaust dir auch mal die Code Examples auf der Homepage von TI an.
Hallo,
vielen Dank für die Hinweise.
Ich habe in den Datenblättern RS232 nachgeschaut, die Eingangsspannung
am Pin Tin und Rout darf max. -0,3V bis Vcc(+5v) +0,3V sein. Aber die
erlaubte Eingangsspannung am Pin von µC darf zwischen -0,3V bis
Vcc(+3,3v) +0,3V sein! Es ist tatsächlich möglich, dass der µC schon
kaputt ist :(
Wie kriege ich es raus, dass der µC wirklich defekt ist?
Ich habe die anderen Teile wie DAC und ADC getestet, die funktionieren
noch.
Ich werde noch den MAX232 gegen MAX3232 auswechseln, und nochmal in
Betrieb nehmen.
@Michael: wie ich verstanden haben, kann ich USCI (p4.6/4.7) und USART
(p4.0/4.1) für RS232-Schnittstelle auswählen, richtig? Ich habe beide
ausprobieren, aber beide auch keinen Erfolg. Hyperterminal empfängt kein
Zeichen.
Naja, tausch erst mal den MAX aus, und dann kannst du erst mit
Sicherheit sagen, ob der RXD Eingang geschrottet ist oder nicht. Mit
Glück geht er noch.
Achja, den MAX3232 musst du natürlich dann mit 3,3V versorgen. Sonst hat
die ganze Sache keinen Sinn.
@ Rinny (Gast)
>Vcc(+3,3v) +0,3V sein! Es ist tatsächlich möglich, dass der µC schon>kaputt ist :(
Möglich, aber unwahrscheinlich.
>Ich habe die anderen Teile wie DAC und ADC getestet, die funktionieren>noch.
Na dann lebt er noch, und aller Wahrscheinlichkeit nach auch der Rest.
Ein einfacher 4,7 kOhm Widerstand zwischen dem RX-Pin des MAX232 und dem
RX deines MSP reicht als Pegelwandler.
MFG
Falk
Ich habe jetzt MAX3232 eingetauscht und es klappt immer nocht nicht. Ich
benutzt ein USB To RS232 als Kabel für serielle DÜ, da mein Labtop kein
RS232 Anschluss hat. Hat jemand eine Erfahrung damit? Könnte der Fehler
an den Kabel liegen? Hier sind paar Werte von MAX3232:
T2OUT 3,827 V, Rechteck Signal
T2IN 0
R2OUT 3,3 V, Konstant
R2IN 6,5 V, Sägelzahn Signal
Schau dir mal deinen Code nochmal an, und sag mir, was deiner Meinung
nach passiert, nachdem du das erste Zeichen empfangen hast und aus der
ISR zurückkehrst.
Wahrscheinlich ist das Problem viel einfacher. Hast du diesen Satz im
User Guide gelesen?:
"Each bit in each PxDIR register selects the direction of the
corresponding I/O
pin, regardless of the selected function for the pin. PxDIR bits for I/O
pins that
are selected for other module functions must be set as required by the
other
function."
Du musst also den TXD Ausgang erst mal mit P4DIR auf Ausgang schalten.
Auch wenn ich selber auch immer die SEL Register passend zum UART Pin
stelle, ist das glaub ich bei den F1xx und F2xx Typen nicht notwendig,
kann bei den "FG" Spezialtypen natürlich anders sein.
Ein Blick ins Datenblatt sollte da klarheit verschaffen.
Stimmt, beim F1611 ist es eigentlich auch nicht notwendig. Laut
Anleitung aber schon.
@Rinny: Klappt denn nicht mal das Echo-Demo von TI?
Kommt immer noch der Fehler vom Debugger? Das könnte am LPM3 liegen,
probier mal ohne LPM.
ich habe alles probiert und es klappt immer noch nicht. :_(
Es fürchte, dass das Problem an extern Clock(ACLK) liege. Ich habe in
den Code zwar gesagt, dass MSP den ACLK benutzten soll, aber ich habe
vorher sie nicht aktiviert. Muss man per JTAG sie erstmal aktivieren
oder nicht? Und wie?
Danke euch & Gruss
@Christian R. : hab in User Guide nachgelesen, braucht man nicht extra
den PxDIR register für Tx setzen. (hab trotzdem doch gesetzt und
ausprobiert!)
Also standardmäßig läuft der MSP immer erst mal auf dem DCO-Takt für die
CPU. Wenn du einen hochfrequenten Quarz an den ACLK dran baust, musst du
den Oszillator erst ma auf HF-Modus umschalten.
Das geht per Programmcode. Mit JTAG hat das nix zu tun.
Bei den alten MSPs war´s zumindest so, dass der X1 Oszillator
standardmäßig für einen Uhrenquarz ist. Ist sicher bei den aktuellen
auch noch.
Gib den ACLK doch mal an dem entsprechenden Pin aus, und schau mit dem
Oszi.
Und in meinem user Guide steht es so drin, dass man das DIR Register
setzen muss, auch wenn man die Zweitfunktion benutzt. Kann aber sein,
dass es wie bei den alten MSPs schlussendlich doch egal ist. Ich setze
es immer mit, um auf Nummer sicher zu gehn.
Lieber Christian,
Ich bin jetzt am Ende und bin so verzwifelt. Ich habe jetzt mit dem TI
Code probiert, aber wieder erfolgslos. Ich poste mal den Code. Viellicht
weißt Du oder jemand, was ich falsch gemacht habe.
Hier sind meine Anschlüsse:
MSP430MAX3232 Sub-D9(female)
4.1 4.0 10 9 8 7 2 3
Rx Tx Tin Rout Rin Tout Tx Rx
| | | | | | | |
| ------------------ | | --------------- |
------------------------------ ----------------------------
Ich benutze Hyperterminal und COM9 mit 8N1, 9600 und ohne
Flusssteuerung. Noch eine Frage, was bedeutet es?
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0x47FF; i > 0; i--); // Time for flag to set
}
Grussssss
Kann ja nicht klappen, wenn du du TX (Ausgang) vom MSP auf TX (Ausgang)
vom PC legst. Bei RX demzufolge genauso.
Desweiteren musst du den XT1-Oszillator auf HF-Quarz einstellen, wie das
bei den neuen MSPs geht, weiß ich nicht, schau mal in den User Guide. Du
solltest auch die zu deinem Quarz passenden Last-Kapazitäten
einschalten, bzw wenn die internen nicht reichen, externe noch ran
löten. Jeder Last-Kondensator muss doppelt so groß sein, wie die im
Datenblatt deines Quarzes angegebene Lastkapazität. Erst dann schwingt
der richtig.
Bei dem Beispiel stimmen auch die Teilerfaktoren nicht, ich denke du
hast einen 6MHz Quarz dran?
Dieses Programmstück da aktiviert den Quarzoszillator und wartet
solange, bis der 32Khz Quarz stabil schwingt, das kann nämlich eine
weile dauern.
>Kann ja nicht klappen, wenn du du TX (Ausgang) vom MSP auf TX (Ausgang)
vom PC legst. Bei RX demzufolge genauso.
Meine Zeichnung is etwa verwirrt. Das ist eine Sub-D-Buche, die sich auf
der Delevope Board befindet. An der Buche wird mit einer Sub-D-Stecker
(RS232 Kabel) mit dem PC verbindet.
>Bei dem Beispiel stimmen auch die Teilerfaktoren nicht, ich denke du
hast einen 6MHz Quarz dran?
Also U1BR0 = 0x71; U1BR1 = 0x02; U1MCTL = 0x4A;
Richtig? für 9600 Bit/s
>Desweiteren musst du den XT1-Oszillator auf HF-Quarz einstellen
hab ich gemacht:
1. U1TCTL |= SSEL0; // UCLK = ACLK
2. FLL_CTL0 |= XTS_FLL (User Guide sagt: für Register FLL_CTL0 muss
XTS_FLL gleich 1 setzen, damit High frequency mode eingeschlatet werden
kann.
>Du solltest auch die zu deinem Quarz passenden Last-Kapazitäten
einschalten, bzw wenn die internen nicht reichen, externe noch ran
löten.
Das werde ich noch machen.
Vielen Dank! ;-)
Rinny wrote:
>>Kann ja nicht klappen, wenn du du TX (Ausgang) vom MSP auf TX (Ausgang)> vom PC legst. Bei RX demzufolge genauso.>> Meine Zeichnung is etwa verwirrt. Das ist eine Sub-D-Buche, die sich auf> der Delevope Board befindet. An der Buche wird mit einer Sub-D-Stecker> (RS232 Kabel) mit dem PC verbindet.
Dann musst du aber ein Nullmodem-Kabel benutzen, mit gekreuzten
RX/TX-Leitungen
>>>Bei dem Beispiel stimmen auch die Teilerfaktoren nicht, ich denke du> hast einen 6MHz Quarz dran?>> Also U1BR0 = 0x71; U1BR1 = 0x02; U1MCTL = 0x4A;> Richtig? für 9600 Bit/s>
Ja.
>>Desweiteren musst du den XT1-Oszillator auf HF-Quarz einstellen>> hab ich gemacht:> 1. U1TCTL |= SSEL0; // UCLK = ACLK> 2. FLL_CTL0 |= XTS_FLL (User Guide sagt: für Register FLL_CTL0 muss> XTS_FLL gleich 1 setzen, damit High frequency mode eingeschlatet werden> kann.>
Das stand aber nicht im Code des letzten Postings. Ob das eine Register
ausreicht, weiß ich nicht.
>>Du solltest auch die zu deinem Quarz passenden Last-Kapazitäten> einschalten, bzw wenn die internen nicht reichen, externe noch ran> löten.>> Das werde ich noch machen.
Bitte richtig ausrechnen, Formel im User-Guide.
> Vielen Dank! ;-)
Bitte.
@Christian,
Vielen Dank für Deine Hilfe.
Aus Frust habe ich einfach mal die Quarz ausgewechselt wie im Quellcode
von TI steht, also 32,768 kHz.
Und es läuft! Leider weiss ich nicht genau, wo ran das Fehler lag?
Ob die Quarz zu hoch war 6 MHz?
Auf jedenfalls freue ich mich riesig.
Nun kann ich endlich weiter damit arbeiten.
@ Alle
Es kommt allerdings ca. 10-20 Sek. nach Debuggen in IAR noch diese
Fehlermeldung :
"Could not get target status".
Hat jemand Erfahrung damit? Ist das die Einstellungsprobleme in IAR?
Oder eher Hardwareproblem?