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

 
 
> 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
Ответов
x893
сообщение Oct 25 2017, 12:16
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Передача и прием это одна транзакция.
Например - записать надо 3 байта и потом считать 15.
Задаем передачу 18 байт (3 байта с данными, остальные не важно какие) и прием 18 байт (первые 3 игнорируем, 15 последних будут с данными).
По концу приема (RX_TC) SPI свободен.
В прерывании, если SPI занят - ставите флаг (bool HOUSTON_WE_NEED_SPI = true), что бы SPI никакая сволочь не занимала, если свободен - то используете.
В основном процессе, если SPI свободен и флаг требования (HOUSTON_WE_NEED_SPI == false) не установлен (тут придется прерывания запретить), то используете SPI.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:16
Рейтинг@Mail.ru


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