Цитата(inventor @ Jul 16 2012, 20:46)

даташыте написано что SCLK не можето быть более половины тактовой частоты.
У меня тактовая частота атмеги 8 мегагерц, но и 4 мегагерца - это предел.
В даташите говорится что частота spi не может быть больше половины тактовой в режиме мастера, для slave - 1/4 . Предел - 2 МГц.
Цитата
When the SPI is configured as Slave, the SPI is only guaranteed to work at fosc /4 or
lower.
Цитата(inventor @ Jul 16 2012, 20:46)

SPI и чтение и запись это одно и тоже.
то есть если я в прерывании прочитал принятый байт - то я как бы уже автоматом должет передать в мастер dummy байт.
или я не прав?
Вы неправы. Чтение - просто чтение.
Передача байта мастером - это запись в SPDR.
Запись slave-ом в SPDR - это эагрузка байта в буфер который будет передан тогда когда мастер протактирует следующий байт.
Цитата(inventor @ Jul 16 2012, 20:46)

как вот мне реализовать команду a = PINx
то есть чтение порта?
принял я команду и хочу в слеве передать ответ-как мне это правильно сделать?
А в чём тут проблема?
Код
unsigned char SpiState;
unsigned char NewSpiRxByte;
#pragma vector=SPI_STC_vect
__interrupt void SpiIsr()
{
switch (SpiState) {
case 0:// перепад на линии SS
SpiState++;
SPDR=PINA;// посылаем PINA в SPI
break;
case 1:
NewSpiRxByte=SPDR;// чтение команды
SPDR=PINB; // посылаем PINB в SPI
SpiState++;
break;
case 2:// посылаем ещё что-нибудь
break;
}
}