Hallo zusammen,
ich hätte eine Frage bezüglich der SPI Initialisierung bei dem
MSP430G2553 als Master mit dem SPI Kanal UCB0.
Ich versuche mit meinem Microcontroller MSP430G2553 über die SPI
Schnittstelle einfach ein Testbyte über einen Schieberegister
(TPIC6C596)
zu senden. An diesem SR ist eine 7Segment-Anzeige(SA40-19SRWA)
angeschlossen.
Bei dem folgenden Code habe ich mich an den Beispielcode von TI
orientiert.
Irgendwie kriege ich jedoch kein Byte an mein SR/7Seg-Anzeige geschickt.
Anbei der Code und die Datenblätter zur 7Seg+SR:
1 |
|
2 | #include <msp430.h>
|
3 | #include <msp430g2553.h>
|
4 |
|
5 | // ################# Prototypen ################################################
|
6 |
|
7 | void SPI_init(void);
|
8 | void SPI_send(unsigned char data);
|
9 | __interrupt void SPI_USCIB0RX_ISR(void);
|
10 |
|
11 | // ########################## Main #############################################
|
12 |
|
13 | int main(void)
|
14 | {
|
15 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
|
16 |
|
17 | BCSCTL1 = CALBC1_1MHZ; // Stelle Frequenz ein …
|
18 | DCOCTL = CALDCO_1MHZ; //.-
|
19 |
|
20 | SPI_init(); // Iniialisiere SPI-Modul UCB0
|
21 |
|
22 | _EINT(); // Aktiviere gl. Interrupts
|
23 |
|
24 | }
|
25 |
|
26 | // ################# Funktionen ################################################
|
27 |
|
28 | //
|
29 | // Initialisiere SPI-Modul UCB0
|
30 | //
|
31 | void SPI_init(void)
|
32 | {
|
33 | P1SEL = BIT5 + BIT6 + BIT7; // Stelle Spezialegister für SPI-UCB0 ein ...
|
34 | P1SEL2 = BIT5 + BIT6 + BIT7; //P1.5 = CLK | P1.6 = MISO | P1.7 = MOSI
|
35 |
|
36 | P1DIR |= BIT2;
|
37 | P1OUT |= BIT2; // Setze P1.2 = PWM/G active high
|
38 |
|
39 | P2DIR |= BIT0; //P2.0 = CS | CS soll active high sein
|
40 | P2OUT |= BIT0;
|
41 |
|
42 | UCB0CTL0 |= UCCKPH+UCCKPL+UCMSB+UCMST+UCSYNC; // 3-pin, 8-bit, SPI master, Modi 1-1
|
43 | UCB0CTL1 |= UCSSEL_2; // SMCLK ...
|
44 | UCB0BR0 |= 0x02; // ...
|
45 | UCB0BR1 = 0; // /2 = 500kHz.-
|
46 | UCB0CTL1 &= ~UCSWRST; // Neustart SPI-Modul
|
47 |
|
48 | IE2 |= UCB0RXIE; // Aktiviere Empfangs-Interrupt
|
49 | }
|
50 |
|
51 | //
|
52 | // Sende Daten über UCB0
|
53 | //
|
54 | void SPI_send(unsigned char data)
|
55 | {
|
56 | P2OUT &= ~BIT0; // Ziehe CS auf Low, Frame startet
|
57 |
|
58 | data = 0xFF; // Testwert alle LEDs an
|
59 | UCB0TXBUF = data; // Sende Wert
|
60 | while(UCB0STAT & UCBUSY); // Warte bis Wert gesendet wurd, Alternativ: while (!(IFG2 & UCA0TXIFG));
|
61 |
|
62 | P2OUT |= BIT0; // Ziehe CS wieder auf High, Frame beendet
|
63 | }
|
64 |
|
65 | //
|