Цитата(PuHaT @ May 15 2009, 06:59)

В одном из сообщений говорилось, что при использовании DMA необходимо одновременно запускать процедуры для приема и передачи данных (в частности настраивать регистры SPI_TCR и SPI_TRCR на одинаковое количество)
Странное замечание. Каналы приема и передачи не зависимы друг от друга, имеют разные регистры и могут по желанию использоваться либо нет. DMA трансфер будет осуществлен только в том случае если
соответствующий регистр счетчик (TCR/TNCR или RCR/RNCR) не нулевой и установлен бит присутствия данных в буффере перефирии (TDR/RDR) и естественно если DMA включен. Целиком от вас зависит хотите ли вы трансфер данных осуществлять вручную (записавая данные в TDR/читая из RDR) или возложить всю работу на DMA.
В одном из проектов по ходу создании прошивки я начал с передачи и приема - оба вручную по прерываниям (TDRE/RDRF & TMEMPTY). После того как был не удовлетворен этим перевел прием на работу через DMA в то время как передача по прежнему висела на прерывании - вручную записывая новые данные в TDR регистр. Никаких потерь не наблюдалось. Далее и передачу перевел на работу через DMA. Итого во всех трех случаях прием передача были без потерь.
Очень вероятно влияние кеширования данных (если оно у вас включено).
Либо обратите внимание на скорость работы - может быть у вас скорость передачи данных (частота SPI) граничат со скоростью с которой микроконтроллер способен обработать один трансфер (8-16 бит). Убедитесь что за целый промежуток времени когда у вас пересылаются 10-50к данных не произошла ни разу потеря (OVRES бит в регистре статуса SR должен быть постоянно 0)