MSP430 --I2C -- Byte senden und empfangen

Gast #493549
Lesenswert?
• ▲
▼
Die größeren MSP430F1xx  z.B. MSP430F168 enthalten ein I2C modul mit dem 
eine Verbindung zu I2C tauglichen Geräten hergestellt werden kann.
In SLAU 049E finde ich einfach nichts, wie man ein Byte senden oder 
empfangen kann.
Bei SPI wird durch Laden des Sendebuffers, also  wenn ich schreibe (in 
C)
 TXBUF0 = 0x01;
das Byte 0x01 gesendet
Der Empfang ist bei SPI ähnlich.
Vielleicht kann mir jemand mal einen Hinweis geben, wie das bei I2C 
geht.
Mit freundlichen Grüßen
Wolfgang
Gast #493558
Lesenswert?
• ▲
▼
Ein kleines Beispiel von mir:

/*!
 * \brief Schreibfunktion für 1 Byte Daten auf I²C Bus EEPROM
 * \param adresse 2 Byte Adresse
 * \param daten_byte Daten Byte das geschrieben werden soll
 */
void I2C_write_byte_EEPROM (unsigned int adresse, unsigned char 
daten_byte)
{
  unsigned char adr_high;
  unsigned char adr_low;

  adr_high = adresse >> 8;
  adr_low = adresse & 0xFF;

  //  while (I2CDCTL&I2CBUSY);  // wait until I2C module has finished 
all operations

  I2CNDAT = 0x03;                           // 3 Byte senden
  I2CSA = EEPROM_I2C_ADDRESS;               // Slave Adresse

  U0CTL |= MST;                             // Master
  I2CTCTL |= I2CTRX + I2CSTT + I2CSTP;      // TX Mode, Start, Stop
  while ((I2CIFG & TXRDYIFG) == 0);         // Wait for transmitter
  I2CDRB = adr_high;                        // Adresse High-Byte
  while ((I2CIFG & TXRDYIFG) == 0);         // Wait for transmitter
  I2CDRB = adr_low;                         // Adresse Low_Byte
  while ((I2CIFG & TXRDYIFG) == 0);         // Wait for transmitter
  I2CDRB = daten_byte;                      // Daten
  //while ((I2CTCTL & I2CSTP) == I2CSTP);   // Auf Stop warten
  while ((I2CIFG & ARDYIFG) == 0);          // Warten bis I2CNDAT Anzahl

  I2CIFG=0x00;                              // Clear I2C interrupt Flags
}
Gast #494023
Lesenswert?
• ▲
▼
Meine Funktionen basieren eigentlich hauptsächlich auf den TI 
Beispielen. Da solltest du mal reinschauen:
http://www-s.ti.com/sc/techzip/slac015.zip


/*!
 * \brief Lesefunktion für 1 Byte Daten von I²C Bus EEPROM
 * \param adresse 2 Byte Adresse
 * \param daten_byte Pointer auf Daten Byte
 */
void I2C_read_byte_EEPROM (unsigned int adresse, unsigned char 
*daten_byte)
{
  unsigned char adr_high;
  unsigned char adr_low;

  adr_high = adresse >> 8;
  adr_low = adresse & 0xFF;

//  while (I2CDCTL&I2CBUSY);  // wait until I2C module has finished all 
operations

  I2CNDAT = 0x02;                           // 2 Byte senden
  I2CSA = EEPROM_I2C_ADDRESS;               // Slave Adresse

  U0CTL |= MST;                             // Master
  I2CTCTL |= I2CTRX + I2CSTT;               // TX Mode, Start (kein 
Stop!)
  while ((I2CIFG & TXRDYIFG) == 0);         // Wait for transmitter
  I2CDRB = adr_high;                        // Adresse High-Byte
  while ((I2CIFG & TXRDYIFG) == 0);         // Wait for transmitter
  I2CDRB = adr_low;                         // Adresse Low_Byte
  while ((I2CIFG & ARDYIFG) == 0);          // Warten bis alle Daten 
raus

  I2CNDAT = 0x01;                           // 1 Byte empfangen
  U0CTL |= MST;                             // Master mode
  I2CTCTL &= ~I2CTRX;                       // RX Mode
  I2CTCTL |= I2CSTT + I2CSTP;               // Start, Stop
  //while ((I2CIFG & RXRDYIFG) == 0);       // Wait for Receiver
  //while ((I2CIFG & ARDYIFG) == 0);        // Warten bis I2CNDAT anzahl
  while ((I2CTCTL & I2CSTP) == I2CSTP);     // Auf Stop warten
  *daten_byte = I2CDRB;                     // Daten holen

  I2CIFG=0x00;                              // Clear I2C interrupt Flags
}

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.