Hallo zusammen, ich versuche gerade über eine RS232-Schnittstelle und meinen MSP430F5529 eine Verbindung zum PC herzustellen. Leider will es mir noch nicht so richtig gelingen. Könnte mir da eventuell jemand behilflich sein? Freundliche Grüße
Anbei noch der von mir erstellte Code:
1 | #include <msp430f5529.h> |
2 | |
3 | unsigned char answer1[] = "Buchstabe "; |
4 | unsigned char answer2[] = " gedrueckt\r\n"; |
5 | |
6 | char i, j; |
7 | |
8 | void main(void) |
9 | {
|
10 | WDTCTL = WDTPW + WDTHOLD; |
11 | P3SEL = 0x18; // P3.3 und P3.4 als USART0 TXD/RXD |
12 | P3DIR = 0x08; |
13 | |
14 | UCA0CTL0 = UCSWRST; // SWRST setzen um Schnittstelle zu konfigurieren |
15 | UCA0CTL0 |= CHAR; // 8 Data Bits, 1 Stop Bit, no parity (8N1) |
16 | UCA0TCTL0 = UCSSEL_1 | UCA0TXEPT; // ACLK als UCLK festlegen |
17 | |
18 | UCA0BR0 = 0x03; // 9600 baud aus 32.768 kHz erzeugen |
19 | UCA0BR1 = 0x00; // siehe application note tabelle 2, seite 10 |
20 | UCA0MCTL = 0x4A; // Korrektur der Division |
21 | UCA0ME |= UCA0TXDE0 + UCA0RXDE0; // TX- und RX-Modul erstmal anschalten |
22 | UCA0CTL0 &= ~UCSWRST; // USART freigeben |
23 | UCA0IE |= UCRXIE + UCTXIE; // TX- und RX-interrupts anschalten |
24 | UCA0IFG &= ~UCTXIFG+UCRXIFG; // initales interrupt-flag löschen |
25 | |
26 | _bis_SR_register(LPM0_bits + GIE); // ab in den LPM0 mit interrupts ... |
27 | }
|
28 | |
29 | #pragma vector=USART0_A0_VECTOR
|
30 | __interrupt void USART0_A0_TX (void) |
31 | {
|
32 | if (i < sizeof answer1-1) // string schon zu ende? |
33 | UCA0TXBUF = answer1[i++]; // string ausgeben |
34 | else if (i == sizeof answer1-1) // wenn erster string zu ende ... |
35 | {
|
36 | UCA0TXBUF = UCA0RXBUF; // ... dann den getippten buchstaben ausgeben |
37 | i++; |
38 | }
|
39 | else if (j < sizeof answer2-1) // wenn auch der ausgegeben ist ... |
40 | UCA0TXBUF = answer2[j++]; // ... dann den zweiten string ausgeben |
41 | }
|
42 | |
43 | #pragma vector=USART0_A0_VECTOR
|
44 | __interrupt void USART0_A0_RX (void) |
45 | {
|
46 | i = 0; |
47 | j = 0; |
48 | UCA0TXBUF = answer1[i++]; // ersten buchstaben von answer1 ausgeben |
49 | }
|
Freundliche Grüße
>Leider will es mir noch nicht so richtig gelingen.
Das bedeutet was genau? Empfängt er Daten? Sendet er Daten aber mit der
Falschen Baudrate?
Folgende Deklarationen lassen sich nicht definieren:
1 | UCA0CTL0 |= CHAR; |
2 | |
3 | UCA0TCTL0 = UCSSEL_1 | UCA0TXEPT; |
4 | |
5 | UCA0ME |= UCA0TXDE0 + UCA0RXDE0; |
6 | |
7 | #pragma vector=USART0_A0_VECTOR
|
Leider weiß ich nicht warum? Aus diesem Grund konnte ich bis jetzt noch keinen Datenaustausch starten! Gruß
In erster Linie würde mich interessieren wie das mit der 8-Bit Übertragung zu verstehen ist? Diese Zeile kann ich am aller wenigstens interpretieren!
1 | UCA0CTL0 |= CHAR; |
Nochmals vielen Dank für jede Hilfe... Gruß Daniel
Wo kommt dein Code denn her? Sind das die original TI Beispiele? Welchen Compiler nutzt du?
Hallo, der Code stammt zum Teil aus einem Beispiel für einen msp430f1612 und zum Teil von mir selbst. Ich verwende das Code Composer Studio V4 Core Edition. Ich versuche jetzt schon seit mehreren Tagen dieses Problem zu lösen. Freundliche Grüße
Wo kommt denn die Zeile "UCA0CTL0 |= CHAR;" her? In der Quelle muss dann auch definiert sein was CHAR ist.
Hallo, das weiß ich leider nicht wie CHAR definiert ist, hab den Code wie gesagt zusammengeschustert! Es geht aber eigentlich genau darum wie ich CHAR definieren muss damit UCA0CTL0 8 Bit pro Datenbyte ergibt? Gruß
Der Ausdruck CHAR stammt aus dem Code für den msp430f1612. Jetzt ist die Frage welchen Ausdruck ich für den msp430f5529 benötigen würde, damit die Übertragung funktionieren könnte? Gruß
Für die Baudratenberechnung habe ich http://mspgcc.sourceforge.net/baudrate.html verwendet, damit kannst Du Deine Werte mal plausibilisieren. Was ich nicht verstehe: warum hast Du zwei ISR für den gleichen Vektor definiert? Habe ich in der Compiler-Dokumentation irgendwas übersehen, oder führt Dein Code hier zu Chaos? Für die Definition von CHAR: RTFM, anders lässt sich das echt nicht mehr sagen. Bit 4 muss auf 0 stehen. "das weiß ich leider nicht wie CHAR definiert ist, hab den Code wie gesagt zusammengeschustert!" ist einfach nur daneben. Gleiche Deinen Code mal mit dem User´s Guide ab, was Du da tust. Wenn´s dann immer noch nicht geht, melde dich wieder. Kopfschüttelnd, Max
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.