Цитата(jcxz @ Oct 25 2017, 14:32)

Зависит от используемого МК. В разных МК периферия SPI и DMA устроена по-разному.
Но в общем случае можно считать что транзакция закончилась по завершению приёма блока SPI-DMA.
Проц STM32F429.
можно считать что транзакция закончилась по завершению приёма блока SPI-DMA. - то есть, если в моем случае чтение данных из внешней флэш разбивается на две команды (сначала Transmit_DMA, в которой передается адрес и команда чтения, а затем Receive_DMA, которая и читает данные из памяти), то завершение транзакции надо отслеживать именно после Receive_DMA, правильно?
Цитата(jcxz @ Oct 25 2017, 14:32)

Здесь никакие биты не помогут. Вам надо править консерваторию алгоритм.
Такого просто не должно быть - чтобы из разных мест (да ещё из фона и ISR) шло асинхронное обращение к периферии.
Если подходить грамотно: пишется служба доступа к флешь, и только эта служба может работать с этим SPI-FLASH.
И эта служба должна обслуживать клиентские запросы операций с FLASH от разных клиентов.
Понятно, спасибо.
Цитата(x893 @ Oct 25 2017, 14:50)

Для начала надо определиться, что делать если в прерывании надо читать, а SPI занят.
Как определитесь с этой ситуацией - дальше решение будет очевидным.
Оно же будет грамотным и рабочим.
Если в обработчике прерывания выяснится, что по SPI идет обмен, то можно просто пройти дальше, ждать пока SPI освободится не надо.
Сообщение отредактировал charkin - Oct 25 2017, 12:02