MSP430G2553 USCIA0 umschalten zw. UART und SPI

Gast #3454647
Lesenswert?
• ▲
▼
Moin Moin,

ich versuche mit meinem Launchpad am USCIA0 nacheinander UART und SPI zu 
verwenden ... das sin meine Init Funktionen:
1
 
2
void SPI_Init(){
3
UCA0CTL1 |= UCSWRST;
4
UCA0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC; 
5
P1SEL |= SPI_USCIB0_SOMI + SPI_USCIB0_SIMO + SPI_USCIB0_SCLK;
6
P1SEL2 |= SPI_USCIB0_SOMI + SPI_USCIB0_SIMO + SPI_USCIB0_SCLK;
7
UCA0CTL1 |= UCSSEL_2; 
8
UCA0BR0 |= 0x01;               
9
UCA0BR1 = 0;
10
UCA0MCTL = 0;               
11
UCA0CTL1 &= ~UCSWRST;
12
IE2 |= UCA0RXIE; 
13
}
14

15
void UART_Init{
16
UCA0CTL1 |= UCSWRST;
17
UCA0CTL0 = 0; 
18
P1SEL = BIT1 + BIT2 ;                     
19
P1SEL2 = BIT1 + BIT2 ;                   
20
UCA0CTL1 |= UCSSEL_2;                     
21
UCA0BR0 = 104;                           
22
UCA0BR1 = 0;                             
23
UCA0MCTL = UCBRS0;                        
24
UCA0CTL1 &= ~UCSWRST;                     
25
IE2 |= UCA0RXIE;                          
26
}

Die Aufrufe im main:
1
UART_Init();
2
UART_String("Hello World");
3
Wait();
4

5
SPI_Init();
6
retValue=SPI_Send(Data);
7

8
UART_Init();
9
UART_Send(retValue);

Einezeln Funktioniert alles ... also nur UART oder nur SPI (jeweils 
andere Funktionen auskommentiert). UART gibt keine fehlerbehafteten 
Zeichen aus, SPI bekommt auf dem RX-Kanal den erwarteten Wert (0x02).

Der Wechsel von UART nach SPI und zurück klappt nicht. Folgendes 
Verhalten:
1)"Hello World" Ausgabe auskommentiert, Abfrage per SPI macht dann genau 
was sie soll, danach UART einschalten, Produziert ein fehlerbehaftetes 
Zeichen, danach normaler Betrieb.
2)"Hello word Ausgabe" aktiviert, Abfrage per SPI liefert auf dem 
RX-Kanal nur 0xFF ... danach UART-Verhalten wie in 1).

Hat jemand Erfahrung mit der Doppelverwendung des USCIA0 beim 
MSP430G2553?

Gruß
Weihnachtsbengel
Gast #3454825
Lesenswert?
• ▲
▼
Hallo,

... sry wegen der ganzen Schreibfehler im vorherigen Posting. Da hab ich 
wohl etwas vorschnell auf Absenden geklickt :(

Kann mir vielleicht trozdem jemand einen Hinweis geben wie ich das 
Problem angehen kann?

LG
Weihnachtsbengel
Gast #3455479
Lesenswert?
• ▲
▼
Ich würde mal damit anfangen, die '|='
wegzumachen.
Du weisst, dass Du UART machen willst, dann setze
halt die entsprechenden Bits mit einer Zuweisung ('='),
egal was vorher drinsteht. Dito für SPI.
Warum da mit den alten Werten 'rummachen.
Geht natürlich nicht immer, in dem Fall vermutlich aber schon.

Nächste Regel: Ein Register wird in einer
Funktion GENAU einmal beschrieben.
Falls das aus irgendwelchen Gründen einmal nicht geht,
müssen die Zugriffe der Übersichtlichkeit halber
beieinander gruppiert werden.
Alles andere ist eine Falle, in die Du früher
oder später tappst (oder schon 'drinsteckst).

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.