Ну по порядку:
Цитата
GDI: Ногу WP подтяните к питанию у АТ45. Можно просто соплю повесить, там нога питания соседняя, если корпус SO-8.
WP напрямую на мониторе питания, так что тут проблем нет
Цитата
aesok: Как запрограмирован фьюз M103C?
Не запрограммирован, т.е. нормальный режим atmega 128
Цитата
Как скомпилировалась строка rx = SPDR;?
SPDR = tx;
876: 8f b9 out 0x0f, r24 ; 15
878: 80 e0 ldi r24, 0x00 ; 0
Цитата
Проверте везде не только в функции DF_SPI_RW, но и во всех местах где она проинлайнилась. не выкинул ли ее компилятор. Есть ли в других местах программы обращение к регистру SPDR?
В нерабочем/тестируемом куске именно такой код, т.е. не выкинул все ОК.
Цитата
Поставте в отладчике остановку по обращению к адресу SPDR, возможно в него кто то пишет по указателю.
Не распаян у меня JTAG, пока посмотреть не могу.
Цитата
Состояние бита WCOL в SPSR?
Посмотрю, может завтра (у нас уже вечер).
Цитата
777777: А не сбрасывает ли кто SPE случайно? Может просто ноль в SPCR пишет?
Нет. Сделал таймаут ожидания:
SPDR = tx;
uint8_t Cnt = 0;
while(((SPSR & 0x80) == 0) and (Cnt++ < 0xFE));
rx = SPDR;
Функция начала нормально читать данные. Но скорость ограниченна таймаутом.
Цитата
777777: Немного позанудствую: а так не проще?
Проще но при инлайне выкидывается чтение, а оно нужно.
Вообще тестирую на нескольких устройствах (пишу прошивку тестирования железа), на некоторых работает абсолютно нормально, на некоторых подвисает, похоже как раз на этих устройствах проблемы с памятью. Непонятно 2 момента:
1. как память slave может влиять на SPI
2. если ввести таймаут (см. выше) то память читается.