Hallo,
ich bin dabei 2 MSP430F2274 über I2C zu verbinden.
Als Beispiel habe ich die TI Application Note "Using the USCI I2C Master
(slaa382.pdf)" genommen.
Allerdings haperts schon beim I2C Master.
Die SDA und SCL Pins der Controller sind miteinander verbunden und an 2
10kOhm PullUp Widerständen gegen 3,3V angeschlossen.
Die beiden Leitungen des Busses sind an ein Oszi angeschlossen.
Wenn ich die Pins per Software einfach toggle (P3OUT^= 0x06) kann ich
das auf dem Oszi schön erkennen - auch mit den 10k
PullUp-Widerständen...
Für Testzwecke habe ich folgenden Code erstellt.
Der Master wird als I2C Master (Transmitt) initialisiert und soll dann
Daten ausgeben UCB0TXBUF = 0x44.
Das ganze in der While-Schleife, so dass es sich wiederholt und ggf. auf
dem Oszi erkennbar ist.
1 | #include "msp430x22x4.h"
|
2 |
|
3 | #define SDA_PIN 0x02 // UCB0SDA pin
|
4 | #define SCL_PIN 0x04 // UCB0SCL pin
|
5 |
|
6 | unsigned int slave_address;
|
7 | unsigned int prescale;
|
8 |
|
9 | int main( void )
|
10 | {
|
11 | // Stop watchdog timer to prevent time out reset
|
12 | WDTCTL = WDTPW + WDTHOLD;
|
13 |
|
14 | slave_address = 0x50;
|
15 | prescale = 0x11;
|
16 |
|
17 | BCSCTL1 = CALBC1_8MHZ;
|
18 | DCOCTL = CALDCO_8MHZ;
|
19 |
|
20 | while(1){
|
21 | // Transmit Init
|
22 | P3SEL |= SDA_PIN + SCL_PIN; // Assign I2C pins to USCI_B0
|
23 | UCB0CTL1 = UCSWRST; // Enable SW reset
|
24 | UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
|
25 | UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
|
26 | UCB0BR0 = prescale; // set prescaler
|
27 | UCB0BR1 = 0;
|
28 | UCB0I2CSA = slave_address; // Set slave address
|
29 | UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
|
30 | UCB0I2CIE = UCNACKIE;
|
31 | IE2 = UCB0TXIE; // Enable TX ready interrupt
|
32 |
|
33 | UCB0CTL1 |= UCTR + UCTXSTT; // Transmit Mode + Start Cond.
|
34 |
|
35 | UCB0TXBUF = 0x44; // Transmit something
|
36 |
|
37 | }
|
38 | }
|
An den Pins passiert allerdings nichts.
Es wird weder während der Initialisierung die Adresse des Slaves über
den Bus geschickt, noch irgendetwas anderes.
Die SDA Leitung ist ohne Veränderung high und die SCL Leitung low.
Ich weiß leider nicht mehr weiter. Bin für jede Hilfe dankbar.
Vielen Dank,
Mitch