Quantcast
Channel: Microcontrollers
Viewing all articles
Browse latest Browse all 230551

Forum Post: MSP430G2553 and ADXRS450

$
0
0

Hello,

I try to comunicate with ADXRS450 via SPI. But receive data is always is same. All detail and code:

#include "msp430.h"
#include <signal.h>

#define CS_DIS {P1DIR|=BIT3;P1OUT|=BIT3;}
#define CS_ENA {P1DIR|=BIT3;P1OUT&=~BIT3;}

void SPI_Write(unsigned char Data_for_write);
void SPI_Disable(void);
void SPI_Init(void);
int SPI_Read(void);
void ADXRS450_Init(void);

unsigned char Byte;
long Measure_byte_first;
long Measure_byte_second;
long Measure_byte_third;
long Measure_byte_four;
long Measurement;

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                                         // Stop watchdog timer

  BCSCTL1 = CALBC1_1MHZ;
  DCOCTL = CALDCO_1MHZ;

  CS_DIS;
  SPI_Init();
  __delay_cycles(1000);
  ADXRS450_Init();

for(;;)
{
      CS_ENA;
      SPI_Write(0x20);
      SPI_Write(0x00);
      SPI_Write(0x00);
      SPI_Write(0x00);
      CS_DIS;

      __delay_cycles(50000);

      CS_ENA;
      SPI_Read();
      Measure_byte_first = UCA0RXBUF;
      SPI_Read();
      Measure_byte_second = UCA0RXBUF<<8;
      SPI_Read();
      Measure_byte_third = UCA0RXBUF<<8;
      SPI_Read();
      Measure_byte_four = UCA0RXBUF<<8;
      CS_DIS;
      Measurement = (Measure_byte_first | Measure_byte_second | Measure_byte_third | Measure_byte_four);
      Measurement = (int)((Measurement & 0x3FFFC00) >> 10);
}
}

void SPI_Init(void)
{
    P1SEL = BIT1 + BIT2 + BIT4;
    P1SEL2 = BIT1 + BIT2 + BIT4;

    UCA0CTL1 = UCSWRST;
    UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;                      // 3-pin, 8-bit SPI master
    UCA0CTL1 |= UCSSEL_2;                                             // SMCLK
    UCA0BR0 |= 0x02;                                                  // /2
    UCA0BR1 = 0;
    UCA0MCTL = 0;                                                     // No modulation
    UCA0CTL1 &= ~UCSWRST;                                             // **Initialize USCI state machine**
}

void SPI_Write(unsigned char Byte)
{
    while (!(IFG2 & UCA0TXIFG));
    UCA0TXBUF = Byte;
}

void SPI_Disable(void)
{
    UCB0CTL1 |= UCSWRST;
}

int SPI_Read(void)
{
    while (!(IFG2 & UCA0RXIFG));

    UCA0TXBUF = 0;
    return UCA0RXBUF;
}

void ADXRS450_Init(void)
{
      CS_ENA;
      SPI_Write(0x20);
      SPI_Write(0x00);
      SPI_Write(0x00);
      SPI_Write(0x03);
      CS_DIS;
      __delay_cycles(150000);
      CS_ENA;
      SPI_Write(0x20);
      SPI_Write(0x00);
      SPI_Write(0x00);
      SPI_Write(0x00);
      CS_DIS;
      __delay_cycles(70000);
      CS_ENA;
      SPI_Write(0x20);
      SPI_Write(0x00);
      SPI_Write(0x00);
      SPI_Write(0x00);
      CS_DIS;
      __delay_cycles(70000);
      CS_ENA;
      SPI_Write(0x20);
      SPI_Write(0x00);
      SPI_Write(0x00);
      SPI_Write(0x00);
      CS_DIS;
      __delay_cycles(10000);
}

Thank You for your suggestion.


Viewing all articles
Browse latest Browse all 230551

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>