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
Hi Christian, Hast Du bitte einen Lösungsvorschlag? Sollte ich den MAX232 gegen ein anderen austauschen? Danke
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
Achja, Entschuldigung. Ich hatte vergessen, dass im MSP430FG4618 beide Schnittstellen implementiert sind.
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.
Das DIR Bit ist wichtig, wenn ein Portpin zwei Special Functions hat. Über das Richtungsbit kann man dann hier auswählen.
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: MSP430 MAX3232 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?
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.