Цитата(777777 @ Mar 9 2011, 12:07)

Нужно по SPI считывать данные с АЦП и складывать в память. Как это сделать с помощью DMA? Во-первых непонятно с самим SPI, там почему-то биты приема и передачи отдельные, хотя в SPI это невозможно. Во-вторых, как я понял DMA запускается по появлению бита RXNE, но кто запустит SPI? Его надо запустить по появлению сигнала готовности АЦП, программно это можно сделать записав ноль в SPI_DR, но кто это сделает если работать в DMA?
1. Берутся два канала DMA: один для передачи по SPI, другой - для приема.
2. Тот, который для передачи, толкается разок программно.
3. Если TXE установлен/установился, DMA передачи запускает (очередную) транзакцию, что приводит и к "втягиванию" данных извне со входа SPI.
4. Как только RXNE установится, DMA приема "слизнет" SPI->DR в память.
5. Возвращаемся к пункту 3, пока счетчик DMA не закончится.
6. Обрабатываем прерывание по завершению приема, переходим к пункту 2.