SPI-slave, передача данных Приветствую.
Упорно продолжаю воевать с SPI :) Пытаюсь последовательно передать 8 байт (в непрерывном режиме). В симуляторе все обкатал досконально, прошелся дебаггером, глядя на регистры. Все должно работать, IMHO :) А на самом чипе - ни хрена :)
Мастер, принимая от меня данные выводит их на экран, и там получается ерунда, то есть совсем не то что ожидалось. Байты приходят, но какие-то неправильные..
Чип atmega162, частота 8МГц.
Вроде бы логика кода правильная, так мне думается. В чем же тогда может быть дело?
char *data = "123456780";
...
/*
SPI init
Mode: slave
MISO: output
MOSI: input
SS: input
SCK: input
*/
void SPI_SlaveInit(void)
{
DDRB = (1 << PB6);
SPCR = (1 << SPIE) | (1 << SPE); // slave and enable SPI
PORTB |= (1 << PB6);
}
void SPI_SendByte(unsigned cЕhar *data)
{
SPDR = *data;
while ( !(SPSR & (1 << SPIF)) )
;
}
SIGNAL(SIG_SPI)
{
char *t;
t = data;
while ( *data != 0 ) {
SPI_SendByte(data);
data++;
}
data = t;
LED0_blink();
}
int main(void)
{
sei();
SPI_SlaveInit();
........
return 1;
}