Ich brauche mal Hilfe beim benutzen der SPI-Schnittstelle auf meinem
CC430F6135. Ich versuche die 2. serielle Baugruppe UCB0 zu verwenden.
Das Problem ist, das die Port-Pins für MOSI und SCLK einfach nur auf GND
bleiben. Ich verwende das Standard-Mapping P1.2=SOMI, P1.3=SIMO,
P1.4=CLK. Diese Einstellungen habe ich auch im Mapping-Register geprüft,
das stimmt (0x01ca=20=PM_UCB0SOMI, 0x01cb=21=PM_UCB0SIMO,
0x01ca=22=PM_UCB0CLK).
Hier mal meine Initialisierung:
1 | #define SPI_USCIB0_PortSEL P1SEL
|
2 | #define SPI_USCIB0_PortDIR P1DIR
|
3 | #define SPI_USCIB0_MOSI (1<<3)
|
4 | #define SPI_USCIB0_MISO (1<<2)
|
5 | #define SPI_USCIB0_UCLK (1<<4)
|
6 | void SPI_init(void)
|
7 | {
|
8 | UCB0CTL1 |= UCSWRST;
|
9 | SPI0_CS_HIGH();
|
10 | SPI0_CS_PORT();
|
11 | UCB0CTL0 |= UCMODE_2+UCMST+UCCKPL+UCMSB+UCSYNC; /* SPI master */
|
12 | UCB0CTL1 |= UCSSEL_2;
|
13 | UCB0BR0 = 0x01;
|
14 | UCB0BR1 = 0;
|
15 | SPI_USCIB0_PortSEL |= SPI_USCIB0_MOSI | SPI_USCIB0_MISO | SPI_USCIB0_UCLK;
|
16 | SPI_USCIB0_PortDIR |= SPI_USCIB0_MOSI | SPI_USCIB0_UCLK;
|
17 | UCB0CTL1 &= ~UCSWRST;
|
18 | }
|
19 | u8 SPI_TxRxByte(u8 Data)
|
20 | {
|
21 | UCB0TXBUF=Data;
|
22 | while(UCB0STAT & UCBUSY); /* Wait for RX to finish */
|
23 | return (UCB0RXBUF);
|
24 | }
|
Muss ich noch irgendwas einschalten? Clk für die UCB0? Was hab ich
vergessen?
Nochmal das Problem: die CLK und MOSI-Leitung bleiben auf GND und
bewegen sich nicht. Beim Verwenden der RxTx-Funktion ist das BUSY-Flag
nicht (mehr) gesetzt.
Danke.