This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LM74: How to read 2 bytes data within same SS period continuously?

Part Number: LM74
Other Parts Discussed in Thread: MSP430G2553

Dear Sirs,

My customer wants to read 2 bytes data with SPI, but found he cannot get data within the same SS period.

The source code also attached.

Please help to review it if there is any problem.

//-----------------------------------------------------------------------------
//
//
//USCIB0 SPI
//                                  MSP430G2xx3
//                               -----------------
//                           /|\|              XIN|-
//                            | |                 |
//                            --|RST          XOUT|-
//                              |                 |
//                              |                 |
//                              |                 |
//                              |             P1.7|-> Data Out (UCB0SIMO)
// Serial Clock Out (UCB0CLK) <-|P1.5         P1.6|<- Data In  (UCB0SOMI)
//                              |                 |
//
//-----------------------------------------------------------------------------
void ConfigSPI_USCIB0(void)
{
	//---------------------------------
	//For USCIB0_SPI
	//---------------------------------
	//
	//	P1.6	UCA0SOMI	SOMI (IN)
	//	P1.7	UCA0SIMO	SIMO (OUT)
	//	P1.5	UCA0CLK		SCLK (OUT)
	P1SEL  |= BIT5 + BIT6 + BIT7;
	P1SEL2 |= BIT5 + BIT6 + BIT7;

	//clock phase		= data is changed on the first UCLK edge, captured on the following edge
	//clock polarity	= active high
	//MSB first select	= MSB first
	//character length	= 8-bit
	//master mode		= master mode
	//USCI mode			= 3-pin SPI
	//synchronous mode	= synchronous mode
	//
	//UCSI clock source	= SMCLK
     UCB0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;	// 3-pin, 8-bit SPI master
	//UCA0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC;	// 3-pin, 8-bit SPI master
    UCB0CTL1 |= UCSSEL_2;							// SMCLK

    //bit clock prescaler = 0x0002
    UCB0BR0 |= 0x04;                          // /4
    UCB0BR1 = 0;                              //

    //UCB0MCTL = 0;                             // No baud rate modulation

    //release the software reset (for operation)
    UCB0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
}

unsigned short LM74_ReadRegister(void)
{
    unsigned char HByte;
    unsigned char LByte;
    unsigned short TWord;


    SENSOR_CS_LOW;

    //wait for completion of send
    UCB0TXBUF = 0x00;                   // Transmit the byte
    while (!(IFG2 & UCB0TXIFG));        // USCI_B0 TX buffer ready?  
    IFG2 &= ~(UCB0TXIFG);               //clear the interrupt flag

    while (!(IFG2 & UCB0RXIFG));        // USCI_B0 RX Received?
    IFG2 &= ~(UCB0RXIFG);               //clear the interrupt flag
    HByte = UCB0RXBUF;

    UCB0TXBUF = 0x00;                   // Transmit the byte
    while (!(IFG2 & UCB0TXIFG));        // USCI_B0 TX buffer ready?   
    IFG2 &= ~(UCB0TXIFG);               //clear the interrupt flag

    while (!(IFG2 & UCB0RXIFG));        // USCI_B0 RX Received?
    IFG2 &= ~(UCB0RXIFG);               //clear the interrupt flag
    LByte = UCB0RXBUF;

    SENSOR_CS_HI;

    TWord = ((HByte<<8)| LByte)>>3;

 //   TWord = TWord>>3;

    return (TWord*0.0625);
}




	
	
	
	
	
	
	
	
}

Thanks.