www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 EXP-FG4618/F2013 und I2C


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich versuche gerade auf dem Experimenter Board von TI (ein FG4618 und 
ein F2013 MSP430 drauf) eine Kommunikation zwischen den beiden per I2C 
aufzubauen.
Der FG4618 soll der Master sein, und da ich anfangs nicht wusste wie die 
Addresse des F2013 ist hab ich den Adressraum durchsucht und die Adresse 
auf dem LCD anzeigen lassen, hat auch wunderbar geklappt. Bis ich dann 
angefangen hab den F2013 zu programmieren... Jetzt findet er nichts 
mehr, das seltsame daran ist, wenn der F2013 (ebenfalls) als Master 
gesetzt ist durchsucht der FG4618 den Adressraum (extra eine Anzeige 
dafuer programmiert) findet aber nichts mehr.
Wenn ich jetzt aber den F2013 als Slave schalte, was auch so sein 
sollte, wird nichts mehr durchsucht. Dh. die Anzeige bleibt stehen, auch 
wenn ich das JTAG vom F2013 abziehe (die Pins werden ja gemultiplexed, 
koennte sich ja beissen)

Meine Frage ist jetzt nur, was fuer moegliche Gruende koennte es denn 
geben dass ein Slave den I2C blockiert. Der FG4618 sagt naemlich dass 
der Bus busy ist... Register sollten richtig gesetzt sein, hab das mit 
Codesamples abgeglichen. Nichtsdesto trotz:

FG4618:
UCB0CTL1 |= UCSWRST;  //Softwarereset ein => USCI aus
P3SEL |= 0x06;  //P3.1 = SDA, P3.2 = SCL initialisieren
UCB0CTL0 |= UCMM + UCMST + UCMODE_3 + UCSYNC;    //Master, I2C, Sync Modi
UCB0CTL1 |= UCSSEL_3;  //SMCLK 
UCB0BR0 |= 0x10;    //div 16
UCB0BR1 |= 0x00;
UCB0I2CSA |= 0x00;    //adress wird gesucht
UCB0I2CIE &= ~(UCNACKIE + UCSTPIE + UCSTTIE);    //NACK, START, STOP Interrupts aus
UCB0I2CIE &= ~UCALIE;  //Arbiration Interrupt aus
UCB0CTL1 &= ~UCSWRST;


F2013
USICTL0 |= USISWRST;  //Softwarereset rein
P1OUT |= 0xc0;  //P1.6, P1.7 Pullups
P1REN |= 0xc0;  //P1.6, P1.7 Pullups
  
USICTL0 &= ~USIOE;
USICTL0 |= USIPE6 + USIPE7;    //Port & USI mode setup
USICTL1 |= USII2C + USIIE + USISTTIE;//Enable I2C mode & USI interrupts
USICKCTL |= USIDIV_4 + USISSEL_2 + USICKPL;  //Setup USI clocks: SCL = SMCLK/16
USICTL0 &= ~USISWRST;  //Enable USI
USICTL1 &= ~USIIFG;

Kann sein dass kleine Ungereimtheiten jetzt im Code auftauchen, hab 
vorhin nochmal rumgespielt ;)

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

Bewertung
0 lesenswert
nicht lesenswert
Also vom USI hab ich bisher nur mal das User Guide gelesen, aber soweit 
ich mich erinnere stand da recht häufig das das I2C Interface auf SCL 
Low stehen bleibt. Man muss da also reht häufig das SCL Low aufheben 
damit es weiter geht.
Wie schaut der I2C denn auf dem Oszi aus? Beide Leitungen gehen immer 
schön auf high zurück?

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.