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 | //
|