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):
unsignedchar *PTxData; // Pointer to TX data
unsignedchar TXByteCtr;
constunsigned 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: