Цитата(paskal @ Jan 25 2012, 19:29)

Интересно, а вы по прерываниям работали?
А то у меня не получается. Экспериментирую как раз с мегой128. В цикле периодически шлю байт. Так вот, если SS после каждой посылки дергать, то по приему возникает прерывание, а в буфере приемника лежит нужный байт. Но если SS оставлять в 0 постоянно, прерывания не возникают. Как будто по перепаду SS происходит какая то начальная установка чего то там вызывающего прерывание.
Я не то чтобы работал:
Использовал всегда только режим spi-master (m128). Однажды вылез такой баг:
на SS не было подтяжки к +,
1)программа bootloader-а включила SS на вход и передала упревление на вектор сброса
2) основная программа инициализировала SPI (SPCR=0x50 - master-mode)
3) так как SS оказался равен 0 spi перешёл в режим slave (что программой не предусматривалось)
4) программа зависла
Цитата(paskal @ Jan 25 2012, 19:29)

Так вот, если SS после каждой посылки дергать, то по приему возникает прерывание, а в буфере приемника лежит нужный байт.
по доке прерывание (или SPIF=1) возникает при переходе из master в slave и при окончании передач. Что-то не так в программе (master не шлёт данные?).
Цитата(paskal @ Jan 25 2012, 19:29)

Но если SS оставлять в 0 постоянно, прерывания не возникают.
Значит master не передал данные.
Для spi-slave SPDR=<any_byte> не означает что передача началась.
Цитата(paskal @ Jan 25 2012, 19:29)

Как будто по перепаду SS происходит какая то начальная установка чего то там вызывающего прерывание.
переход в режим и сброс счётчика бит происходит.