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

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