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:
1 | UCB0CTL1 |= UCSWRST; //Softwarereset ein => USCI aus
|
2 | P3SEL |= 0x06; //P3.1 = SDA, P3.2 = SCL initialisieren
|
3 | UCB0CTL0 |= UCMM + UCMST + UCMODE_3 + UCSYNC; //Master, I2C, Sync Modi
|
4 | UCB0CTL1 |= UCSSEL_3; //SMCLK
|
5 | UCB0BR0 |= 0x10; //div 16
|
6 | UCB0BR1 |= 0x00;
|
7 | UCB0I2CSA |= 0x00; //adress wird gesucht
|
8 | UCB0I2CIE &= ~(UCNACKIE + UCSTPIE + UCSTTIE); //NACK, START, STOP Interrupts aus
|
9 | UCB0I2CIE &= ~UCALIE; //Arbiration Interrupt aus
|
10 | UCB0CTL1 &= ~UCSWRST;
|
F2013
1 | USICTL0 |= USISWRST; //Softwarereset rein
|
2 | P1OUT |= 0xc0; //P1.6, P1.7 Pullups
|
3 | P1REN |= 0xc0; //P1.6, P1.7 Pullups
|
4 |
|
5 | USICTL0 &= ~USIOE;
|
6 | USICTL0 |= USIPE6 + USIPE7; //Port & USI mode setup
|
7 | USICTL1 |= USII2C + USIIE + USISTTIE;//Enable I2C mode & USI interrupts
|
8 | USICKCTL |= USIDIV_4 + USISSEL_2 + USICKPL; //Setup USI clocks: SCL = SMCLK/16
|
9 | USICTL0 &= ~USISWRST; //Enable USI
|
10 | USICTL1 &= ~USIIFG;
|
Kann sein dass kleine Ungereimtheiten jetzt im Code auftauchen, hab
vorhin nochmal rumgespielt ;)