реклама на сайте
подробности

 
 
> SPI DMA, проверка занятости.
charkin
сообщение Oct 25 2017, 10:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 10-01-16
Пользователь №: 89 977



Всем привет.
Подскажите, каким образом можно гарантированно определить, что обмен по SPI (прием/передача, с использованием DMA) завершен?

У меня обращение к внешней флэш-памяти по SPI может происходить из главного цикла, а также в обработчике прерывания EXTI. Если прерывание возникло в момент, когда в главном цикле что-то писалось/читалось во флэш, то данные конечно же портятся.. Пробовал смотреть биты SPI-модуля - TXE, RXNE И BUSY, но подобрать правильно условие так и не смог, либо оно никогда не выполняется, либо наоборот выполняется тогда, когда нельзя запускать обмен по SPI.
Почитал про флаги DMA, они выставляются по завершению чтения/записи, но в соответствующем обработчике прерываний эти флаги сбрасываются.. И, похоже, использовать их для определения завершения обмена не получится.

Понимаю, что можно убрать код обращения к флэш-памяти из обработчика прерывания EXTI (пока так и сделал), но тем не менее - каким образом можно узнать, что данные прочитаны/отправлены и можно запускать обмен по SPI?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Oct 25 2017, 11:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(charkin @ Oct 25 2017, 13:26) *
Подскажите, каким образом можно гарантированно определить, что обмен по SPI (прием/передача, с использованием DMA) завершен?

Зависит от используемого МК. В разных МК периферия SPI и DMA устроена по-разному.
Но в общем случае можно считать что транзакция закончилась по завершению приёма блока SPI-DMA.

Цитата(charkin @ Oct 25 2017, 13:26) *
У меня обращение к внешней флэш-памяти по SPI может происходить из главного цикла, а также в обработчике прерывания EXTI. Если прерывание возникло в момент, когда в главном цикле что-то писалось/читалось во флэш, то данные конечно же портятся.. Пробовал смотреть биты SPI-модуля - TXE, RXNE И BUSY

Здесь никакие биты не помогут. Вам надо править консерваторию алгоритм.
Такого просто не должно быть - чтобы из разных мест (да ещё из фона и ISR) шло асинхронное обращение к периферии.

Если подходить грамотно: пишется служба доступа к флешь, и только эта служба может работать с этим SPI-FLASH.
И эта служба должна обслуживать клиентские запросы операций с FLASH от разных клиентов.
Go to the top of the page
 
+Quote Post
charkin
сообщение Oct 25 2017, 12:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 10-01-16
Пользователь №: 89 977



Цитата(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
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 21:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016