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

 
 
> SPI на stm32f2xx и прерывания
Непомнящий Евген...
сообщение Jun 11 2013, 17:38
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Здравствуйте

Пытаюсь реализовать обмен по SPI как описано в мануале, на прерываниях:
Цитата
2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE
flag).
3. Wait until TXE=1 and write the second data item to be transmitted. Then wait until
RXNE=1 and read the SPI_DR to get the first received data item (this clears the RXNE
bit). Repeat this operation for each data item to be transmitted/received until the n–1
received data.
4. Wait until RXNE=1 and read the last received data.


По пунктам (жирным - мои действия, курсивом - предположения о работе железа):
1. пишем в DR байт 0 для передачи
2. байт копируется в TX, Срабатывает прерывание по TXE, в котором пишем в DR байт 1. При этом передача из TX возможно еще не завершена
3. Передача TX завершается, при этом в DR оказывается принятый байт 0, а байт 1 копируется в TX
4. Если теперь прерывание по RXNE (в котором читем DR) обработается до окончания передачи байта 1 из TX - все здорово. Но если после, то будет переполнение и один из принятых байтов окажется потерян

Я реализовал передачу только на одном прерывании RXNE, т.е. пишу очередной байт после вычитки предыдущего. Это работает, но дает относительно большие задержки между байтами на шине. Рекомендованный в даташите алгоритм дает меньшие задержки, но иногда вызывает переполнение.

Или я где-то напутал и его все же можно реализовать для случая, когда возможна задержка обработка прерывания по RXNE?

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jun 12 2013, 07:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ДМА - универсальное решение. Один момент, надо уточнить нет ли буфера фифо на входе и выходе. В ЛПЦ процах например ставят 16 байтные буферы, не знаю как на этом семействе СТМ.

Если их нет, то единственный шанс сохранности данных это вычитывать байт из буфера до прихода следующего. Тут поможет либо не блокируемое прерывание, либо ДМА. Последние существенно увеличивает скорость обмена без нагрузки на проц.

А да можно еще сделать блокируемое чтение - посылку.
то есть тупо читать по одному байту дожидаясь его прихода в функции чтения, но так уже делать давно не модно...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Непомнящий Евгений   SPI на stm32f2xx и прерывания   Jun 11 2013, 17:38
- - Dopler   Не совсем понятно, в чем вопрос. Все 4 пункта верн...   Jun 12 2013, 13:25
|- - jcxz   Цитата(Dopler @ Jun 12 2013, 19:25) DMA н...   Jun 13 2013, 07:23
|- - Dopler   Цитата(jcxz @ Jun 13 2013, 11:23) Вот поч...   Jun 13 2013, 08:09
||- - jcxz   Цитата(Dopler @ Jun 13 2013, 14:09) Я вид...   Jun 13 2013, 08:45
|- - Непомнящий Евгений   Цитата(jcxz @ Jun 13 2013, 11:23) И фифо ...   Jun 13 2013, 08:20
|- - etoja   Цитата(jcxz @ Jun 13 2013, 11:23) Вот поч...   Jun 14 2013, 07:39
|- - Qwertty   Цитата(etoja @ Jun 14 2013, 11:39) LPC(13...   Jun 15 2013, 15:41
|- - _Артём_   Цитата(Qwertty @ Jun 15 2013, 18:41) Тот ...   Jun 15 2013, 15:58
- - Непомнящий Евгений   Да просто полдня ковырялся с spi, пока до меня не ...   Jun 13 2013, 05:23
- - Golikov A.   не очень понятно почему не может? Он так и работае...   Jun 13 2013, 05:40
- - Непомнящий Евгений   он будет работать, если мы гарантируем отрабатывае...   Jun 13 2013, 06:20
- - syoma   Именно так и делаю, как в ТС. Так как принятый ба...   Jun 13 2013, 08:52
- - Golikov A.   вы затрете принятый байт вторым байтом только в то...   Jun 13 2013, 12:39
|- - Непомнящий Евгений   Цитата(Golikov A. @ Jun 13 2013, 16:39) Д...   Jun 14 2013, 07:27
- - Qwertty   Обычный. Просто регистры задания коэффициента запо...   Jun 15 2013, 18:30


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

 


RSS Текстовая версия Сейчас: 3rd September 2025 - 14:58
Рейтинг@Mail.ru


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