Hallo zusammen!
Ich möchte meinen MSP430G2553 mit anderen Geräten per I2C verbinden. Um
erstmal grundsätzlich zu sehen wie das (seitens MSP430) funktioniert,
habe ich mir einen Beispielcode von MSP430ware besorgt
(msp430g2xx3_uscib0_i2c_06). Er soll laut Beschreibung als Master
versuchen ein Byte zum Slave zu schicken.
1 | #include <msp430.h>
|
2 |
|
3 | unsigned char TXData;
|
4 | unsigned char TXByteCtr;
|
5 |
|
6 | int main(void)
|
7 | {
|
8 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT
|
9 | P1SEL |= BIT6 + BIT7; // Assign I2C pins to USCI_B0
|
10 | P1SEL2|= BIT6 + BIT7; // Assign I2C pins to USCI_B0
|
11 | UCB0CTL1 |= UCSWRST; // Enable SW reset
|
12 | UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
|
13 | UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
|
14 | UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
|
15 | UCB0BR1 = 0;
|
16 | UCB0I2CSA = 0x48; // Slave Address is 048h
|
17 | UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
|
18 | IE2 |= UCB0TXIE; // Enable TX interrupt
|
19 |
|
20 | TXData = 0x00; // Holds TX data
|
21 |
|
22 | while (1)
|
23 | {
|
24 | TXByteCtr = 1; // Load TX byte counter
|
25 | while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
|
26 | UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition
|
27 | __bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts
|
28 | // Remain in LPM0 until all data
|
29 | // is TX'd
|
30 | TXData++; // Increment data byte
|
31 | }
|
32 | }
|
33 |
|
34 | //------------------------------------------------------------------------------
|
35 | // The USCIAB0TX_ISR is structured such that it can be used to transmit any
|
36 | // number of bytes by pre-loading TXByteCtr with the byte count.
|
37 | //------------------------------------------------------------------------------
|
38 | #pragma vector = USCIAB0TX_VECTOR
|
39 | __interrupt void USCIAB0TX_ISR(void)
|
40 | {
|
41 | if (TXByteCtr) // Check TX byte counter
|
42 | {
|
43 | UCB0TXBUF = TXData; // Load TX buffer
|
44 | TXByteCtr--; // Decrement TX byte counter
|
45 | }
|
46 | else
|
47 | {
|
48 | UCB0CTL1 |= UCTXSTP; // I2C stop condition
|
49 | IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag
|
50 | __bic_SR_register_on_exit(CPUOFF); // Exit LPM0
|
51 | }
|
52 | }
|
aber es tut sich nichts! An Pin 22 und 23 passiert leider garnichts.
Kann mir da bitte jemand helfen?
Vielen Dank schon mal!