Доброго времени суток.
Делаю обмен информацией по SPI порциями по 16 бит.
Отправка 16 бит со стороны сервера:
Код:
|
void spi_ad_16(unsigned short data)
{
unsigned char MSdata = ((data ››8) & 0x00FF);
unsigned char LSdata = (data & 0x00FF);
SPDR = MSdata;
while(!(SPSR & (1‹‹SPIF)));
SPDR = LSdata;
while(!(SPSR & (1‹‹SPIF)));
} |
Вопрос в том, как нужно правильно принимать. Точнее, как "собрать" два 8-битных числа в одно 16битное, понимаю что сдвиг, но... как правильно?
Код:
|
unsigned short SPI_SlaveReceive(void)
{
unsigned char MSdata;
unsigned char LSdata;
unsigned short data;
/* Wait for reception complete */
while(!(SPSR & (1‹‹SPIF)));
MSdata = SPDR;
while(!(SPSR & (1‹‹SPIF)));
LSdata = SPDR;
//вот здесь???
//data = MSdata+LSdata
return data;
} |
что-то наподобие такого работать будет?
Код:
|
data = MSdata;
data = data ‹‹ 8;
data += LSdata; |
спасибо за помощь.