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

 
 
> 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
Ответов
Dopler
сообщение Jun 12 2013, 13:25
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Не совсем понятно, в чем вопрос. Все 4 пункта верные, так дело и происходит. Если данные по прерыванию RXNE считывать долго, (так, что уже примется следующий байт), то они потеряются.
DMA на stm32f2xx использовать просто, но, к сожалению, CS к нему не подключается и им все равно придется управлять по прерываниям.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 13 2013, 07:23
Сообщение #3


Гуру
******

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



Цитата(Dopler @ Jun 12 2013, 19:25) *
DMA на stm32f2xx использовать просто, но, к сожалению, CS к нему не подключается и им все равно придется управлять по прерываниям.

Вот почему оно не подключается, вот в чём вопрос? И фифо на SPI в стм наверняка нету... sad.gif
Почему всё так обрезано???
В LPC-ках, к примеру, и фифо есть и CS-ом рулить по DMA можно (хоть не всегда гуд).
Go to the top of the page
 
+Quote Post
etoja
сообщение Jun 14 2013, 07:39
Сообщение #4


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

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Цитата(jcxz @ Jun 13 2013, 11:23) *
Вот почему оно не подключается, вот в чём вопрос? И фифо на SPI в стм наверняка нету... sad.gif
Почему всё так обрезано???
В LPC-ках, к примеру, и фифо есть и CS-ом рулить по DMA можно (хоть не всегда гуд).


Бросается в глаза то, что по LPC(1343, 1114) вопросов у форумчан нет. Действительно удачные процессоры.

Откуда у народа тяга к STM32?
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jun 15 2013, 15:41
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(etoja @ Jun 14 2013, 11:39) *
LPC(1343, 1114) .... удачные процессоры.
Откуда у народа тяга к STM32?

Там есть свои "прелести". Тот же PWM на 1343 аппаратно сделать не выйдет. По нынешним временам это совсем странно.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Непомнящий Евгений   SPI на stm32f2xx и прерывания   Jun 11 2013, 17:38
- - Golikov A.   ДМА - универсальное решение. Один момент, надо уто...   Jun 12 2013, 07:21
|- - 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
|- - _Артём_   Цитата(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 Текстовая версия Сейчас: 24th July 2025 - 02:22
Рейтинг@Mail.ru


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