Mit RS232 und msp430F5529 senden und empfangen

Gast #2311622
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
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
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
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
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ß
Gast #2316327
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ß
Persönliche Seite #2316335
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.