SPI Accelerometer

OP #1172785
Rate this post
useful
not useful
I'm trying to get the ADIS16003 to work with my AT91SAM7S256-EK

my SPI Init looks like this:

void SPI_Init(void)
{
  AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_SPI ) ;
    AT91F_SPI_Reset     (AT91C_BASE_SPI);
    AT91F_SPI_Enable    (AT91C_BASE_SPI);
    AT91F_SPI_CfgMode   (AT91C_BASE_SPI,
               AT91C_SPI_MSTR |
               SPI_FIX_SLCT |
             SPI_CS_DIRECT |
             SPI_MODE_FAULT_DS |
             SPI_LOCAL_LOOP_DS |
             SPI_FIXED_CS_0);

    AT91F_SPI_CfgCs     (AT91C_BASE_SPI, 0,
               SPI_SCK_IDLE_LOW |
             SPI_SCK_SAMPLE_RISING |
             SPI_CS_HIGH_AFTR_TRANS |
             SPI_16_BITS_PER_TRANS |
            (4*SPI_SCK_DIV_FACTOR));

    AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
    ((unsigned int) AT91C_PA13_MOSI    ) |
    ((unsigned int) AT91C_PA14_SPCK    ) |
    ((unsigned int) AT91C_PA11_NPCS0   ) |
    ((unsigned int) AT91C_PA12_MISO    ),
        0 );
}


AND here are my read and write functions:

int SPI_Send(char character, unsigned int cs_number, int last_xfer)
{
  unsigned int value_for_cs;
  value_for_cs = (~(1 << cs_number)) & 0xF; //Place a zero amonga 4 ONEs
number

  // Wait for transmit data register to become available
  while ( !(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TDRE) );
  if (last_xfer)
  {
    AT91C_BASE_SPI->SPI_TDR = (value_for_cs << 16) | character |
AT91C_SPI_LASTXFER; // CS# | Character | Last xfer
  }
  else
  {
    AT91C_BASE_SPI->SPI_TDR = (value_for_cs << 16) | character; // CS#
|Character
  }

  return 0;
}

int SPI_Read()
{
  int rxbyte;
  while ( !(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF) );
  rxbyte = AT91C_BASE_SPI->SPI_RDR & 0xff;
  return rxbyte;
}


I do the following but get the same value for rxbyte every time

SPI_Send(4,0,0); //tells ADIS to read x-axis
rxbyte=SPI_Read();




any help is appreciated

Reply

Please log in before posting.

or

Log in with Google account

Registration is free and takes only a minute.

Register now