MSP430G2553 I2C funktioniert nicht

OP #3290241
Lesenswert?

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
OP #3290521
Lesenswert?

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
Gast #3307961
Lesenswert?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren