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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> SPI по DMA на разные м/с
Rash
сообщение Jun 6 2017, 10:54
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Добрый день.
Подскажите, возможно, ли опрашивать последовательно несколько м/с по SPI переключать при этом CS и использовать DMA и таймер(ы)? Если да, то как?
МК STM32F401, два датчика: акселерометр и гироскоп подключены параллельно с раздельным CS. Частота опроса 400 Гц. Последовательность следующая: выбор и опрос датчик1, выбор и опрос датчик2, ожидание готовности данных, и т.д. Таким образом делать N-выборок без участия CPU.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jun 6 2017, 11:00
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Rash @ Jun 6 2017, 15:54) *
Добрый день.
Подскажите, возможно, ли опрашивать последовательно несколько м/с по SPI переключать при этом CS и использовать DMA и таймер(ы)? Если да, то как?
МК STM32F401, два датчика: акселерометр и гироскоп подключены параллельно с раздельным CS. Частота опроса 400 Гц. Последовательность следующая: выбор и опрос датчик1, выбор и опрос датчик2, ожидание готовности данных, и т.д. Таким образом делать N-выборок без участия CPU.

переключать CS только "вручную". То есть сначала выставляем CS в активное состояние, затем запускаем DMA , в прерывании по его окончанию снимаем CS и повторяем процесс для всех абонентов.

Сообщение отредактировал nanorobot - Jun 6 2017, 11:03
Go to the top of the page
 
+Quote Post
Rash
сообщение Jun 6 2017, 11:11
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



CS в ручную это понятно, тогда от DMA толку нет, весь смысл процесс автоматизировать. Запустить DMA на N выборок с частотой 400 Hz и каким то образом (таймером) их переключать.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jun 6 2017, 11:16
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Rash @ Jun 6 2017, 16:11) *
CS в ручную это понятно, тогда от DMA толку нет, весь смысл процесс автоматизировать. Запустить DMA на N выборок с частотой 400 Hz и каким то образом (таймером) их переключать.

Почему нету? По таймеру происходит опрос абонентов. Вручную только переключение CS и запуск DMA. Все данные передаются / принимаются без участия CPU.

Сообщение отредактировал nanorobot - Jun 6 2017, 11:17
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 6 2017, 11:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Можно попробовать замутить хитрую схему с таймерами. Таймеры могут формировать CS на своих выходах и запускать DMA.
Но не проще ли на прерываниях?
Go to the top of the page
 
+Quote Post
Rash
сообщение Jun 6 2017, 11:18
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



nanorobot,
Смысла нет передавать 2-3 байта через DMA.

scifi
Вот только как этот процесс синхронизировать и сделать нужную задержку после опроса датчиков?
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jun 6 2017, 11:24
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Rash @ Jun 6 2017, 16:18) *
nanorobot,
Смысла нет передавать 2-3 байта через DMA.


все равно лишниий раз не обслуживать прерывание от SPI. А вообще я бы RTOS прикрутил. ChibiOs например. Кроме любых синхронизаций и задержек там великолепный HAL имеется для STM32. Попробуйте, не пожалеете.

Сообщение отредактировал nanorobot - Jun 6 2017, 11:28
Go to the top of the page
 
+Quote Post
Rash
сообщение Jun 6 2017, 11:27
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Цитата(nanorobot @ Jun 6 2017, 14:24) *
все равно лишниий раз не обслуживать прерывание от SPI.

там SPI 10МГц, поэтому быстрее дождаться окончания передачи, нежели прерывания обрабатывать или DMA запускать.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jun 6 2017, 11:31
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Rash @ Jun 6 2017, 16:27) *
там SPI 10МГц, поэтому быстрее дождаться окончания передачи, нежели прерывания обрабатывать или DMA запускать.

Возможно. Вам виднее конечно. Я предпочитаю избегать любых ожиданий. Перезапуск DMA - пара тройка команд.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 6 2017, 12:01
Сообщение #10


Гуру
******

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



Цитата(nanorobot @ Jun 6 2017, 13:24) *
все равно лишниий раз не обслуживать прерывание от SPI. А вообще я бы RTOS прикрутил. ChibiOs например. Кроме любых синхронизаций и задержек там великолепный HAL имеется для STM32. Попробуйте, не пожалеете.

А я бы выбрал другой МК - получше, умеющий управлять несколькими CS в процессе обмена. Если так уж нужно laughing.gif
Go to the top of the page
 
+Quote Post
Rash
сообщение Jun 6 2017, 12:16
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



это не вариант, проще сделать опрос полингом, как он сейчас и сделан.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jun 6 2017, 12:44
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Rash @ Jun 6 2017, 17:16) *
это не вариант, проще сделать опрос полингом, как он сейчас и сделан.


В STM32F4xx минимум 3 штуки SPI, как мне кажется. Используйте парочку по таймеру и с ДМА.

Сообщение отредактировал nanorobot - Jun 6 2017, 12:45
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 6 2017, 12:48
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Rash @ Jun 6 2017, 15:16) *
это не вариант, проще сделать опрос полингом, как он сейчас и сделан.

И что не устраивает?
Go to the top of the page
 
+Quote Post
Rash
сообщение Jun 6 2017, 13:03
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



То что нужно каждые 2.5 мсек по таймеру читать новое значение (этим временем не ограничен). Так было ещё во времена AVR.
А так можно было бы запустить N выборок и получить только одно прерывание по окончанию всего процесса.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 6 2017, 13:09
Сообщение #15


Гуру
******

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



Цитата(Rash @ Jun 6 2017, 15:03) *
Так было ещё во времена AVR.
А так можно было бы запустить N выборок и получить только одно прерывание по окончанию всего процесса.

Ну если так нужно, то что-ж, когда с AVR слазили, не выбрали подходящий МК где это можно сделать?
Go to the top of the page
 
+Quote Post

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

 


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


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