Ti msp430f5310

Thread Starter

bangaru

Joined Jan 5, 2012
1

I am working on a project where i'm using TI micro MSP430F5310. My slave address doesn't seem to be right when i see it on oscilloscope. Can anyone help me with this problem? Why is my slave address not coming out right?

Rich (BB code):
#include
Rich (BB code):
Rich (BB code):
Rich (BB code):
Rich (BB code):
Rich (BB code):
 <msp430f5310.h>
Rich (BB code):
unsigned​
char *PTxData; // Pointer to TX data
unsigned​
char TXByteCtr;
const​
unsigned char TxData[] = // Table of data to transmit
{ 0x11, 0x22, 0x33, 0x44, 0x55 };​
void​
main(void) { unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog timer
PJDIR |= BIT1;​
// PJ.1 set as output
P4SEL |= 0x06;​
// Sets P4.1 to UCB1SDA, 4.2 to UCB1SCL
P4DIR |= BIT6;​
// set P4.6 as output
P4OUT |= BIT6;​
// XT2 Setup
P5SEL |= BIT2+BIT3;​
// For XT2 crystal usage.
// Setting up clocks
UCSCTL0 = 0;​
// set lowest possible DCOx, MODx
UCSCTL1 |= DCORSEL_4 + DCORSEL_5;​
// Set max. DCO setting
UCSCTL2 = FLLD_1+366;​
// Set DCO Multiplier for 12MHz
// (N + 1) * FLLRef = Fdco
// (366 + 1) * 32768 = 12MHz
// Set FLL Div = fDCOCLK/2
UCSCTL3 = SELREF_2;​
// Set DCO FLL reference = REFO
UCSCTL4 = SELA_5 + SELS_5 + SELM_5;​
// set ACLK = XT2;SMCLK = XT2;MCLK = XT2
UCSCTL5 = DIVPA_0 +DIVA_0 + DIVS_3 + DIVM_3;​
// set all dividers
UCSCTL6 |= XT2DRIVE_1;​
// XT2 Oscillator adjusted to its drive needs
UCSCTL6 &= ~XT2OFF;​
// Turns on the XT2 oscillator
do
{ UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);​
// Clear XT2 oscillator fault flag
SFRIFG1 &= ~OFIFG; }​
while (SFRIFG1&OFIFG); // Test oscillator fault flag
//Setting up I2C
UCB1CTL1 |= UCSWRST;​
// Keep USCI in reset( Enable SW reset)
UCB1CTL0 = UCMST + UCMODE_3 + UCSYNC;​
// I2C Master, synchronous mode
UCB1CTL1 = UCSSEL_2 + UCSWRST;​
// Selects the SMCLK, keep SW reset
UCB1BR0 = 120;​
// fSCL = SMCLK/12 = ~100kHz
UCB1BR1 = 0; UCB1I2CSA = 0x98;​
// Slave Address is 098h
UCB1CTL1 &= ~UCSWRST;​
// Clear SW reset, resume operation
PJOUT &= ~BIT1;​
while (1) { PJOUT ^= BIT1; PTxData = (unsigned char *)TxData; // TX array start address
UCB1CTL1 |= UCTR + UCTXSTT;
// I2C TX, start condition
for(i=0;i<1000;i++); UCB1CTL1 |= UCTXSTP; // Delay required between transaction
for(i=0;i<1000;i++); } }

Thanks in advance!

 
Last edited by a moderator:
Top