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