Created
January 20, 2015 03:37
-
-
Save stu9458/64892f44dc3989a1f271 to your computer and use it in GitHub Desktop.
MSP430F5529-I2C(Slave)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//****************************************************************************** | |
// MSP430F552x Demo - USCI_B0 I2C Slave RX single bytes from MSP430 Master | |
// | |
// Description: This demo connects two MSP430's via the I2C bus. The master | |
// transmits to the slave. This is the slave code. The interrupt driven | |
// data receiption is demonstrated using the USCI_B0 RX interrupt. | |
// ACLK = n/a, MCLK = SMCLK = default DCO = ~1.045MHz | |
// | |
// ***to be used with "MSP430F55xx_uscib0_i2c_06.c" *** | |
// | |
// /|\ /|\ | |
// MSP430F5529 10k 10k MSP430F5529 | |
// slave | | master | |
// ----------------- | | ----------------- | |
// -|XIN P3.0/UCB0SDA|<-|----+->|P3.0/UCB0SDA XIN|- | |
// | | | | | | |
// -|XOUT | | | XOUT|- | |
// | P3.1/UCB0SCL|<-+------>|P3.1/UCB0SCL | | |
// | | | | | |
// | |
// Bhargavi Nisarga | |
// Texas Instruments Inc. | |
// April 2009 | |
// Built with CCSv4 and IAR Embedded Workbench Version: 4.21 | |
//****************************************************************************** | |
//The code from TI company, use reference Volt to pull-up SDA and SCL(You can add that if you want.) | |
#include <msp430.h> | |
volatile unsigned char RXData; | |
int main(void) | |
{ | |
WDTCTL = WDTPW + WDTHOLD; // Stop WDT | |
P3REN |= 0x03; | |
P3OUT |= 0x03; | |
P3SEL |= 0x03; // Assign I2C pins to USCI_B0 | |
UCB0CTL1 |= UCSWRST; // Enable SW reset | |
UCB0CTL0 = UCMODE_3 + UCSYNC; // I2C Slave, synchronous mode | |
UCB0I2COA = 0x48; // Own Address is 048h | |
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation | |
UCB0IE |= UCRXIE; // Enable RX interrupt | |
while (1) | |
{ | |
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts | |
__no_operation(); // Set breakpoint >>here<< and read | |
} // RXData | |
} | |
// USCI_B0 Data ISR | |
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) | |
#pragma vector = USCI_B0_VECTOR | |
__interrupt void USCI_B0_ISR(void) | |
#elif defined(__GNUC__) | |
void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_B0_ISR (void) | |
#else | |
#error Compiler not supported! | |
#endif | |
{ | |
switch(__even_in_range(UCB0IV,12)) | |
{ | |
case 0: break; // Vector 0: No interrupts | |
case 2: break; // Vector 2: ALIFG | |
case 4: break; // Vector 4: NACKIFG | |
case 6: break; // Vector 6: STTIFG | |
case 8: break; // Vector 8: STPIFG | |
case 10: // Vector 10: RXIFG | |
RXData = UCB0RXBUF; // Get RX data | |
__bic_SR_register_on_exit(LPM0_bits); // Exit LPM0 | |
break; | |
case 12: break; // Vector 12: TXIFG | |
default: break; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment