Hallo zusammen! Ich würde gerne mithilfe des MSP430G2553 Daten per SPI empfangen und bekomme nach stundenlangem Herumprobieren leider nichts in den Empfang-Buffer. Der Slave ist aktiv bei CS=LOW. Hoffentlich könnt ihr mir weiterhelfen! Die Beschaltung ist folgende: P 1.5 -> SCK P 1.6 -> MISO P 1.7 -> Slave Select (also insgesamt laut Datenblatt USCI_B0) Als Code habe ich mir folgendes zusammengebastelt (teils aus dem Internet, teils eigene Überlegungen).
1 | int temp=0; //in diese Variable sollen die empfangenen Bits rein |
2 | |
3 | |
4 | void pinConfig() // MISO, SCK und CS einstellen |
5 | {
|
6 | P1SEL = BIT5 + BIT6; // MISO + SCK |
7 | |
8 | P1DIR &= ~BIT6; //MISO als Eingang |
9 | P1DIR |= BIT5; //SCK als Ausgang |
10 | P1DIR |= BIT7; //CS als Ausgang |
11 | P1OUT |= BIT7; //CS auf HIGH |
12 | }
|
13 | |
14 | |
15 | void spiConfig() |
16 | {
|
17 | UCB0CTL1 = UCSWRST; // reset |
18 | UCB0CTL0 |= UCCKPL +UCMST + UCSYNC +UCMSB; // synchronous (=SPI) master 3 wire SPI, clock polarity High |
19 | UCB0CTL1 |= UCSSEL_2; //use SCLK : 4MHz (MCP4131 supports up to 10MHz write via SPI) |
20 | // set baud rate = SMCLK, no further division
|
21 | UCB0BR0 = 0; |
22 | UCB0BR1 = 0; |
23 | UCB0CTL1 &= ~UCSWRST; // **Initialize USCI ** |
24 | }
|
25 | |
26 | |
27 | void getValue(unsigned char dataOut) |
28 | {
|
29 | P1OUT &= ~BIT7; // aktiviere Slave |
30 | |
31 | IFG2 &= ~ (UCB0RXIFG); // Lösche Flags |
32 | IFG2 &= ~ (UCB0TXIFG); |
33 | UCB0TXBUF = dataOut; // Send command |
34 | while ((IFG2 & UCB0TXIFG)==0); // wait for TX buffer ready |
35 | while ((IFG2 & UCB0RXIFG)==0); // wait for TX buffer ready |
36 | |
37 | temp=UCB0RXBUF; |
38 | |
39 | P1OUT |= BIT7; // deaktiviere Slave |
40 | }
|
41 | |
42 | void main(){ |
43 | ...
|
44 | |
45 | getValue(0); // Schicke Dummy Wert 0, "erhalte" temp |
46 | |
47 | ...
|
48 | }
|
Bedanke mich für jede Hilfe im Voraus! Beste Grüße Der µC-Anfänger