At this point, I am just trying to read the status register. Using the data sheet, this is what i came up to send to it:
Which in Hex, is 0xE5 and 0xD5. The next read should return 16bits for the status register. The read method looks like this
Code: Select all
unsigned int spi_in_word(spi_master_interface &i)
{
// big endian byte order
unsigned int data = 0;
data |= (spi_in_byte(i) << 24);
data |= (spi_in_byte(i) << 16);
data |= (spi_in_byte(i) << 8);
data |= spi_in_byte(i);
return data;
}
and out method:
Code: Select all
void spi_out_word(spi_master_interface &i, unsigne d int data)
{
// big endian byte order
spi_out_byte(i, (data >> 24) & 0xFF);
spi_out_byte(i, (data >> 16) & 0xFF);
spi_out_byte(i, (data >> 8) & 0xFF);
spi_out_byte(i, data & 0xFF);
}
I am unsure about what these are actually doing. When It is sending, does it send as an 8-bit word? I do:
Code: Select all
spi_out_word(spi_if, 0xE5);
spi_out_word(spi_if, 0xD1);
And when I read, the ADC should be sending 2 8-bit words (i think). Is this method receiving all 16bits? When i read, this is what i get:
Every read after this, without writing, yields the same "FF9FFFFE".
According to the data-sheet, the first bit should always be 0, and this is not. I have also, instead of sending out a word, sending a byte, which gives:
This is the main method of the code:
Code: Select all
spi_init(spi_if, 4);
delay(250);
spi_select();
spi_out_byte(spi_if, 0xE5);
spi_out_byte(spi_if, 0xD1);
spi_deselect();
delay(10);
spi_select();
word = spi_in_word(spi_if);
word1 = spi_in_word(spi_if);
printhexln(word);
printhexln(word1);
spi_deselect();
spi_shutdown(spi_if);
select() pulls the chip select low.