Цитата(ubobrov @ Nov 23 2012, 18:04)

Вот, я переделывал драйвер SPI от атмела чтоб он работал как слейв. Все то же самое, что и мастер, тока ждет CS. Все работает.
Не могли бы Вы пояснить работу вашего драйвера с таймерами?
А именно, что происходит при возникновении таймаута?
И еще один момент мне непонятен. В обработчике прерываний RXBUFF/ENDRX/NSSR Вы запрещаете только фактически возникшие прерывания (spi_writel(as, IDR, pending)

. Допустим, принят/передан последний байт последней транзакции, и возникло прерывание по RXBUFF/ENDRX, но сигнал CS еще активен. В результате RXBUFF/ENDRX будут запрещены обработчиком, но NSSR останется разрешенным. as->current_transfer становится равным NULL. Далее мастер снимает сигнал CS, в результате возникает прерывание NSSR, и мы снова попадаем в ту же ветку обработчика, в которой падаем, так как xfer равен NULL! Я что-то где-то не учел или неправильно понял?