Hallo zusammen, ich versuche meinen neu erworbenen µC (eZ430-RF2500) zum laufen zu bringen. Aber schon mit den ersten Bsp-programmen zur Funkübertragung haperts. Es soll ein I²C Bus zur Übertragung von einzelnen Bytes aufgebaut werden. Aber es funktioniert nich. Beim Debuggen habe ich festegestllt, dass in der Zeile: while (UCB0CTL1 & UCTXSTT); // Start condition sent? das Prgramm hängt. Somit kann auch nix gesendet werden. Aber warum? Ist das Bsp-Programm etwa falsch? liegen falsche einstellungen vor? Oder woran könnte es liegen? als dateianhang hab ich den kompletten slave-code angehangen und hier ist der master-code: vielen dank im vorraus! martin //********************************************************************** ******** // MSP430F22x4 Demo - USCI_B0 I2C Master RX single bytes from MSP430 Slave // // Description: This demo connects two MSP430's via the I2C bus. The master // reads from the slave. This is the master code. The data from the slave // transmitter begins at 0 and increments with each transfer. The received // data is in R5 and is checked for validity. If the received data is // incorrect, the CPU is trapped and the P1.0 LED will stay on. The USCI_B0 // RX interrupt is used to know when new data has been received. // ACLK = n/a, MCLK = SMCLK = BRCLK = default DCO = ~1.2MHz // // /|\ /|\ // MSP430F22x4 10k 10k MSP430F22x4 // slave | | master // ----------------- | | ----------------- // -|XIN P3.1/UCB0SDA|<-|---+->|P3.1/UCB0SDA XIN|- // | | | | | 32kHz // -|XOUT | | | XOUT|- // | P3.2/UCB0SCL|<-+----->|P3.2/UCB0SCL | // | | | P1.0|--> LED // // Andreas Dannenberg // Texas Instruments Inc. // October 2006 // Built with IAR Embedded Workbench Version: 3.41A //********************************************************************** ******** #include "msp430x22x4.h" unsigned char RXData; unsigned char RXCompare; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1OUT &= ~0x01; // P1.0 = 0 P1DIR |= 0x01; // P1.0 output P3SEL |= 0x06; // Assign I2C pins to USCI_B0 UCB0CTL1 |= UCSWRST; // Enable SW reset UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz UCB0BR1 = 0; UCB0I2CSA = 0x048; // Slave Address is 048h UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation IE2 |= UCB0RXIE; // Enable RX interrupt RXCompare = 0; // Used to check incoming data while (1) { while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent UCB0CTL1 |= UCTXSTT; // I2C start condition while (UCB0CTL1 & UCTXSTT); // Start condition sent? UCB0CTL1 |= UCTXSTP; // I2C stop condition __bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts if (RXData != RXCompare) // Trap CPU if wrong { P1OUT |= 0x01; // P1.0 = 1 while (1); // Trap CPU } RXCompare++; // Increment correct RX value } } // USCI_B0 Data ISR #pragma vector = USCIAB0TX_VECTOR __interrupt void USCIAB0TX_ISR(void) { RXData = UCB0RXBUF; // Get RX data __bic_SR_register_on_exit(CPUOFF); // Exit LPM0 }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.