// Basiskommentare f¸r die SPI Kommunikation // #define delay_2 __delay_cycles(10); // eine andere Mˆglichkeit ein Delay zu definieren #include "msp430F5438A.h" // einf¸gen der Mikroprozessordaten #include "stdint.h" //Variablen char addr; char data; char Test; char receive_byte; char receive_data; uint8_t i; //Einstellunmgen ADXL345 void spi_senden_CONFG(); void spi_receive_COORD(); //Koordinatenachsen x,y,z int CORD[3]; void main (void) // Hauptprogramm starten { WDTCTL=WDTPW+WDTHOLD; // ausschalten des Watchdogs P10SEL|= BIT1 + BIT2 + BIT3; //P10SEL|=0x0F; // PSEL, SPI Konfiguration ausw‰hlen, 0b00001111 P10DIR|= 0x01; //P10DIR|=0x0D; // SCLK ist 1 auf P10.3 ; MOSI ist 1 auf P10.1 ; SOMI ist 0 auf P10.2, CS(low active) auf 1 am P10.0, 0b00001101 UCB3CTL1|=UCSWRST; // **Put state machine in reset** !!! UCB3CTL0|= UCSYNC | UCMST | UCMSB | UCCKPL | UCMODE1; // synchroner Modus, 4 pin SPI einstellen , Master Modus eingestellt, MSB zuerst UCB3CTL1|=UCSSEL_2; // Zeitgeber ausw‰hlen, SMCLK UCB3BR0|=0x02; //Zeitgeber einstellen, UCA3BR0 und UCA3BR1, (UCAxBR0 + UCAxBR1 ? 256) UCB3BR1=0; // spaeter ncoh einmal die Berechnung bedenken und mit den Angaben im Datenblatt vergleichen UCB3IE|=UCRXIE + UCTXIE;// Interrupt zulassen UCB3CTL1&=~UCSWRST; // Initialisierung der State machine //spi_senden_CONFG(); while (1) { spi_receive_COORD(); } } // beenden des Hauptprogrammes void spi_senden_CONFG() { P10OUT &= ~BIT0; // CSquer auf low setzen, um die ‹bertragung anzufangen, bei 4 wire __delay_cycles(10); while(!(UCB3IFG&UCTXIFG)); // nicht UCB3IFG benutzen, sondern IFG3, wieder zurück geändert eventuell das Flag lˆschen UCB3TXBUF=0x31; // Addresse, 0x31; while(!(UCB3IFG&UCTXIFG)); // nicht UCB3IFG benutzen, sondern IFG3 UCB3TXBUF=0x4E; // SELF_TEST | SPI | INT_INVERT | 0 | FULL_RES | Justify | Range data sozusagen, Manipulierung, 0b01001110, 0x4E; //__delay_cycles(2); // Wartezeit definieren, 10 Zyklen, eventuell zu kurz P10OUT |= BIT0; __delay_cycles(10); // Wartezeit definieren, 10 Zyklen, eventuell zu kurz // P10OUT&=~BIT0; // CSquer auf low setzen, um die ‹bertragung anzufangen, bei 4 wire // __delay_cycles(2); // while (!(UCB3IFG&UCTXIFG)); // UCB3IFG benutzen // UCB3TXBUF=0x2C; // Addresse // while (!(UCB3IFG&UCTXIFG)); // UCB3IFG benutzen, sondern IFG3 // UCB3TXBUF = 0x0A; // __delay_cycles(2); // Wartezeit definieren, 10 Zyklen, eventuell zu kurz // P10OUT|=BIT0; // // __delay_cycles(10); // Wartezeit definieren, 10 Zyklen, eventuell zu kurz // // P10OUT&=~BIT0; // __delay_cycles(2); // CSquer auf low setzen, um die ‹bertragung anzufangen, bei 4 wire // while (!(UCB3IFG & UCTXIFG)); // UCB3IFG benutzen // UCB3TXBUF = 0x38; // Addresse // while (!(UCB3IFG & UCTXIFG)); // nicht UCB3IFG benutzen, sondern IFG3 // UCB3TXBUF = 0x80 ; // FIFO_MODE | FIFO_MODE | Trigger | Samples | Samples | Samples | Samples | Samples data sozusagen, Manipulierung, 0b10000000 // __delay_cycles(2); // Wartezeit definieren, 10 Zyklen, eventuell zu kurz // P10OUT|=BIT0; // // __delay_cycles(10); // Wartezeit definieren, 10 Zyklen, eventuell zu kurz // // P10OUT&=~BIT0; // CSquer auf low setzen, um die ‹bertragung anzufangen, bei 4 wire // __delay_cycles(2); // while (!(UCB3IFG&UCTXIFG)); // UCB3IFG benutzen // UCB3TXBUF=0x2D; // Addresse // while (!(UCB3IFG&UCTXIFG)); // UCB3TXBUF=0x04 ; // 0 | 0 | Link | AUTO_SLEEP | Measure | Sleep | Wakeup data sozusagen, Manipulierung, 0b0000100 // __delay_cycles(2); // Wartezeit definieren, 10 Zyklen, eventuell zu kurz // P10OUT|=BIT0; // // __delay_cycles(10); // Wartezeit definieren, 10 Zyklen, eventuell zu kurz } void spi_receive_COORD() { P10OUT &= ~BIT0; // CSquer auf low setzen, um die ‹bertragung anzufangen, bei 4 wire while (!(UCB3IFG&UCTXIFG)); UCB3TXBUF=0x80; //__delay_cycles(10); // while (!(UCB3IFG&UCTXIFG)); // UCB3TXBUF=0xFF; while(!(UCB3IFG&UCRXIFG)); Test=UCB3RXBUF; //__delay_cycles(100); // CSquer auf low setzen, um die ‹bertragung anzufangen, bei 4 wire // UCB3STE = 1; // __delay_cycles(2); P10OUT |= BIT0; __delay_cycles(20); } /