Forum: Mikrocontroller und Digitale Elektronik MSP430 UART1 und SPI0 Initialisierung


von Gast (Gast)


Lesenswert?

Hallo,
ich habe ein Problem mit dem UART1 und dem SPI0 des MSP430F149. Hier mal 
der c-Code:
1
void init_spi0(void)
2
{
3
  ME1 |= USPIE0;                        // Enable USART0 SPI mode
4
  UTCTL0 = CKPH+SSEL1+SSEL0+STC;        // SMCLK, 3-pin mode
5
  UCTL0 = CHAR+SYNC+MM;                 // 8-bit SPI Master **SWRST**
6
  UBR00 = 0x02;                         // UCLK/2 
7
  UBR10 = 0x00;                         // 0
8
  UMCTL0 = 0x00;                        // no modulation
9
  P3SEL |= 0x0E;                        // P3.1-3 SPI option select
10
  P3DIR |= 0x01;                        // P3.0 output direction
11
}
12
13
void init_uart1(void)
14
{
15
  P3SEL = 0xC0;                         // P3.6,7 = USART1 TXD/RXD
16
  ME2 |= UTXE1 + URXE1;                 // Enabled USART1 TXD/RXD
17
  UCTL1 |= CHAR;                        // 8-bit character, SWRST=1
18
  UTCTL1 |= SSEL0;                      // UCLK = ACLK
19
  UBR01 = 0xCC;                         // 9600 from 1Mhz
20
  UBR11 = 0x04;                          
21
  UMCTL1 = 0x4A;                        // Modulation
22
  UCTL1 &= ~SWRST;                      // Initialize USART state machine
23
 }
24
25
void main(void)
26
{
27
  ....
28
29
  init_spi0();                            // Init SPI0
30
  init_uart1();
31
  ....

so jetzt zu meinem Problem. Nachdem ich den UART1 initialisiert habe, 
funktioniert der SPI0 nichtmehr. D.h. er sendet nicht mehr. Durch Zufall 
hab ich herausbekommen, dass wenn ich zuerst den UART1 initialisier und 
dann den SPI0 das es dann funktioniert. Ich kann dann mit beiden 
Schnittstellen senden und empfangen, so wie es sein sollte. Jetzt kann 
man natürlich sagen, ich sollte zufrieden sein aber rein 
interessenhalber würde mich das mal interessieren, warum

  init_spi0();                            // Init SPI0
  init_uart1();

nicht geht und

  init_uart1();
  init_spi0();                            // Init SPI0

geht. Ist da ein Fehler in der Initialisierung? Ich siehs einfach nicht.

Kann mir da jemand helfen....
Danke und Grüße

von Matthias H. (Gast)


Lesenswert?

>P3SEL = 0xC0;

sollte besser

P3SEL |= 0xC0;

sein

von Gast (Gast)


Lesenswert?

@ Matthias H.

vielen Dank für die schnelle Antwort es funktioniert:)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.