www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 I2C Slave


Autor: Frank Bußmann (frank13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits!

Ich bin (mal wieder) an einem Punkt angelangt, an dem ich die Hilfe des 
Forums in Anspruch nehmen möchte (hat bisher immer gut geklappt).

Ich habe einen MSP430F169 und möchte diesen per I2C ansprechen (Slave), 
erstmal einfach nur ein Byte schreiben. Der Code funktioniert allerdings 
nur teilweise: Die ersten Male kommt das Byte korrekt an und dann bleibt 
der I2C-Bus hängen, bzw. der MSP zieht SDA auf low (nach dem 
Adressierungszyklus).
Hat jemand eine Idee, woran das liegen könnte?

Viele Grüße

Frank
#include <msp430x16x.h>
#include <stdbool.h>

char TXData = 0;
char RXData = 0;
char x=0xFF;

void main (void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P4DIR=0xFF;
  P4OUT=x;

  P3SEL |= 0x0A;                            // Select I2C pins
  U0CTL |= I2C + SYNC;                      // Recommended init procedure
  U0CTL &= ~I2CEN;                          // Recommended init procedure
  I2CTCTL |= I2CSSEL1;                      // SMCLK
  I2COA = 0x0030;                           // Own Address is 048h
  I2CIE = RXRDYIE;                          // Enable TXRDYIFG interrupt
  U0CTL |= I2CEN;                           // Enable I2C

  _BIS_SR(GIE);
  while(1);
}


#pragma vector=USART0TX_VECTOR
__interrupt void I2C_ISR(void)
{
   volatile unsigned int i = 0;
   switch( I2CIV )
   {
   case  2: break;                          // Arbitration lost
   case  4: break;                          // No Acknowledge
   case  6:                          // Own Address
        break;
   case  8: break;                          // Register Access Ready
   case 10: 
        RXData = I2CDRB;                      // RX data
        P4OUT=RXData;
        break;                          // Receive Ready
   case 12:                                 // Transmit Ready
        break;
   case 14: break;                          // General Call
   case 16: break;                          // Start Condition
 }
}

Autor: Tobias Korrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du mal geschaut ob die Flags auch zurückgesetzt werden?
Hast du schon einmal in die Device Erratasheet geschaut ob es dort ein 
Problem gibt?

Autor: Frank Bußmann (frank13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ok, setzt stehe ich total auf dem Schlauch. Es sind folgende Bits 
gesetzt (egal ob der Transfer geklappt hat der nicht):
TXRDYIF, RXRDYIF, ALIFG

Insbesondere das ALIFG wundert mich. Der MSP ist doch im Slave-Mode oder 
sehe ich das falsch? Ich komme da irgendwie nicht weiter...

Gruß

Frank

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>erstmal einfach nur ein Byte schreiben.
D.h. der Master schickt dem MSP die Adresse+1Byte, richtig?

>Die ersten Male kommt das Byte korrekt an ...
D.h. komplette Übertragungen haben schon funktioniert?

>...der MSP zieht SDA auf low (nach dem Adressierungszyklus).
D.h. der MSP bleibt beim ACK der Adresse stehen?

Autor: Frank Bußmann (frank13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau so sieht es aus!

Autor: Frank Bußmann (frank13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat da keiner eine Antwort? Es hörte sich in den vorangegangenen 
Antworten doch so an...

Gruß

Frank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.