Можно чуть иначе. Начало передачи определяется командой или таймером. В этот момент ставится CS и запускается таймер на фиксированное время - слейву на подготовку данных к передаче и запуска своего DMA на прием/передачу. По истечении таймера (прерывание) мастер запускает свой DMA на прием/передачу и разрешает прерывание по завершению приема по DMA. По этому прерыванию он снимает CS - цикл передачи завершен.
Слейв по переднему фронту CS (прерывание по ноге) готовит данные, запускает свой DMA на прием/передачу и разрешает прерывание завершения приема DMA. По этому прерыванию обрабатывает полученные данные.
Состояние CS используется только если нужно навесить несколько слейвов - тогда по переднему фронту CS считывается адрес (доп. ноги) и, если он совпадает - готовится передача и нога MISO включается как выход. По снятию CS (прерывание по заднему фронту) эта нога переключается во вход.
|