Цитата(Dimon49773 @ Jan 18 2012, 18:34)

Она работает по протоколу SPI, но так как мой МК не подерживает хардварно этот протокол, решил сделать его софтварно.
Поддерживает...
Смотрите модуль USI, ражим SPI master mode 0.
Цитата(Dimon49773 @ Jan 18 2012, 18:34)

Но тут и вся загвоздка...в инете ничего толкового не нашёл.
Плохо искали. SPI - простейший протокол, поэтому его реализаций - море.
Цитата(Dimon49773 @ Jan 18 2012, 18:34)

решил сделать его софтварно. Но тут и вся загвоздка...в инете ничего толкового не нашёл. Даже написал пару строк, вроде чтото отправляется, но как получать???
Если вам не трудно и есть какие-то соображения поделитесь очень прошу...уже неделю снятся кошмары про SPI
Что там соображать:
принцып прост:
CODE
void SendByteToSPI(unsigned char data)
{
SS=0;// выход - перед началом посылки ставится в 0
unsigned char bit_cnt=0;
do {
// старший бит первым
if (data&0x80) SPIOUT=1; else SPIOUT=0;
data<<=1;
SPICLK=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
SPICLK=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
if (SPIIN) data|=1;
SPICLK=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
} while (++bit_cnt<8)
SS=1;
return data;
}
Цитата(Dimon49773 @ Jan 18 2012, 18:34)

USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
Статус почему не используется? И регистр данных?
Читайте AVR319: Using the USI module for SPI communication on tinyAVR and megaAVR devices.
Там всё должно быть понятно и готовый драйвер тоже должен быть.
Сообщение отредактировал IgorKossak - Jan 18 2012, 21:01
Причина редактирования: [codebox], лишние пустые строки