Mit RS232 und msp430F5529 senden und empfangen

Gast #2311622
Lesenswert?

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
Gast #2311722
Lesenswert?

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ß
Gast #2311997
Lesenswert?

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
Gast #2316221
Lesenswert?

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
Gast #2316308
Lesenswert?

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ß
Persönliche Seite #2316335
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren