|
|
SPI - это два восьмибитных (AVR) сдвиговых регистра - один на мастере, другой на слейве - соединенных кольцом, т.е. Master Data In = Slave Data Out (MISO), и Master Data Out = Slave Data In (MOSI). Клоки генерит мастер, и когда их пройдет 8 штук, в регистре у слейва окажется то, что было в регистре у мастера, и наоборот, т.е. M и S обменяются байтами. Читать SPDR можно/нужно сразу после выставления SPIF в "1", и т.к. отдельного Master Receive не бывает, трактовать чтение/прием как побочную халявную фичу Master Transmit, а называть таковую транзакцию как-нибудь понапыщеннее, например, SPI_MasterXchange:
char SPI_MasterXchange(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1</* Return received data */
return SPDR;
}
Практически то же самое ув. mse изложил "на чистом AVR-ском".
E-mail: info@telesys.ru