Hallo zusammen, habe mich hier angemeldet, da ich bei einem Problem nicht weiter komme. Bastle schon eine Weile mit dem Launchpad rum und wollte mich jetzt mal an die I2C Kommunikation wagen. Habe mir den Beispiel Code von TI geholt(msp430g2xx3_uscib0_i2c_06.c) und aufgespielt... und es passiert gar nix. Hab die Ausgänge mit einem Oszi vermessen und sind beide auf Dauer high. Auch beim Debuggen finde ich nix, das Programm läuft durch. Hab es schon mit einem anderen Controller, internen und externen Pull-Ups versucht und auch mit anderen Programmen und immer passiert nix. Hatte das schon mal jemand oder weiß, woran es liegen könnte? Ich gehe mal davon aus, dass der Code von TI funktionsfähig ist oder gibt es da bekannte Probleme? Hab das Forum und Internet schon durchsucht, aber dass der Basiscode von TI nicht funktioniert gab es wohl noch nicht. Danke schon mal für die Hilfe Schöne Grüße Alex91
Zeig doch mal deinen Code... Wird I2C richtig initialsiert? Wird I2C gestartet?
1 | #include <msp430.h> |
2 | |
3 | unsigned char TXData; |
4 | unsigned char TXByteCtr; |
5 | |
6 | int main(void) |
7 | {
|
8 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT |
9 | P1SEL |= BIT6 + BIT7; // Assign I2C pins to USCI_B0 |
10 | P1SEL2|= BIT6 + BIT7; // Assign I2C pins to USCI_B0 |
11 | UCB0CTL1 |= UCSWRST; // Enable SW reset |
12 | UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode |
13 | UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset |
14 | UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz |
15 | UCB0BR1 = 0; |
16 | UCB0I2CSA = 0x48; // Slave Address is 048h |
17 | UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation |
18 | IE2 |= UCB0TXIE; // Enable TX interrupt |
19 | |
20 | TXData = 0x00; // Holds TX data |
21 | |
22 | while (1) |
23 | {
|
24 | TXByteCtr = 1; // Load TX byte counter |
25 | while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent |
26 | UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition |
27 | __bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts |
28 | // Remain in LPM0 until all data
|
29 | // is TX'd
|
30 | TXData++; // Increment data byte |
31 | }
|
32 | }
|
33 | |
34 | //------------------------------------------------------------------------------
|
35 | // The USCIAB0TX_ISR is structured such that it can be used to transmit any
|
36 | // number of bytes by pre-loading TXByteCtr with the byte count.
|
37 | //------------------------------------------------------------------------------
|
38 | #pragma vector = USCIAB0TX_VECTOR
|
39 | __interrupt void USCIAB0TX_ISR(void) |
40 | {
|
41 | if (TXByteCtr) // Check TX byte counter |
42 | {
|
43 | UCB0TXBUF = TXData; // Load TX buffer |
44 | TXByteCtr--; // Decrement TX byte counter |
45 | }
|
46 | else
|
47 | {
|
48 | UCB0CTL1 |= UCTXSTP; // I2C stop condition |
49 | IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag |
50 | __bic_SR_register_on_exit(CPUOFF); // Exit LPM0 |
51 | }
|
52 | }
|
original von TI... ggf noch mit P1REN |= BIT6 +BIT7; nach dem watchdog
http://www.ti.com/lit/ug/slau144j/slau144j.pdf USIPE7 + USIPE6 in UCB0CTL0 USII2C muss auch noch im UCB0CTL1 enabled werden Weitere hilfe findest du im Link oben.
USIPE7, USIPE6 und USII2C sind doch aber gar nicht im Header vom G2553 definiert?! Kann das Programm dann auch nicht kompilieren.
Da es in meinem Thread wohl um das selbe Problem geht: Wie aktiviere ich die denn? Im CCS wird keines der Bits gefunden!
Bitte schau dir die Application Notes an: http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slaa382&docCategoryId=1&familyId=342 http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slaa383&docCategoryId=1&familyId=342 http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slaa208a&docCategoryId=1&familyId=342 http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slva302&docCategoryId=1&familyId=342 Wenn es dann immer noch nicht läuft, melde dich noch einmal.
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.