Rash 0 6 июня, 2017 Опубликовано 6 июня, 2017 (изменено) · Жалоба Добрый день. Подскажите, возможно, ли опрашивать последовательно несколько м/с по SPI переключать при этом CS и использовать DMA и таймер(ы)? Если да, то как? МК STM32F401, два датчика: акселерометр и гироскоп подключены параллельно с раздельным CS. Частота опроса 400 Гц. Последовательность следующая: выбор и опрос датчик1, выбор и опрос датчик2, ожидание готовности данных, и т.д. Таким образом делать N-выборок без участия CPU. Изменено 21 ноября, 2022 пользователем haker_fox Уточнил название темы, добавил теги, переместил в нужный раздел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 6 июня, 2017 Опубликовано 6 июня, 2017 (изменено) · Жалоба Добрый день. Подскажите, возможно, ли опрашивать последовательно несколько м/с по SPI переключать при этом CS и использовать DMA и таймер(ы)? Если да, то как? МК STM32F401, два датчика: акселерометр и гироскоп подключены параллельно с раздельным CS. Частота опроса 400 Гц. Последовательность следующая: выбор и опрос датчик1, выбор и опрос датчик2, ожидание готовности данных, и т.д. Таким образом делать N-выборок без участия CPU. переключать CS только "вручную". То есть сначала выставляем CS в активное состояние, затем запускаем DMA , в прерывании по его окончанию снимаем CS и повторяем процесс для всех абонентов. Изменено 6 июня, 2017 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба CS в ручную это понятно, тогда от DMA толку нет, весь смысл процесс автоматизировать. Запустить DMA на N выборок с частотой 400 Hz и каким то образом (таймером) их переключать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 6 июня, 2017 Опубликовано 6 июня, 2017 (изменено) · Жалоба CS в ручную это понятно, тогда от DMA толку нет, весь смысл процесс автоматизировать. Запустить DMA на N выборок с частотой 400 Hz и каким то образом (таймером) их переключать. Почему нету? По таймеру происходит опрос абонентов. Вручную только переключение CS и запуск DMA. Все данные передаются / принимаются без участия CPU. Изменено 6 июня, 2017 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба Можно попробовать замутить хитрую схему с таймерами. Таймеры могут формировать CS на своих выходах и запускать DMA. Но не проще ли на прерываниях? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба nanorobot, Смысла нет передавать 2-3 байта через DMA. scifi Вот только как этот процесс синхронизировать и сделать нужную задержку после опроса датчиков? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 6 июня, 2017 Опубликовано 6 июня, 2017 (изменено) · Жалоба nanorobot, Смысла нет передавать 2-3 байта через DMA. все равно лишниий раз не обслуживать прерывание от SPI. А вообще я бы RTOS прикрутил. ChibiOs например. Кроме любых синхронизаций и задержек там великолепный HAL имеется для STM32. Попробуйте, не пожалеете. Изменено 6 июня, 2017 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба все равно лишниий раз не обслуживать прерывание от SPI. там SPI 10МГц, поэтому быстрее дождаться окончания передачи, нежели прерывания обрабатывать или DMA запускать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба там SPI 10МГц, поэтому быстрее дождаться окончания передачи, нежели прерывания обрабатывать или DMA запускать. Возможно. Вам виднее конечно. Я предпочитаю избегать любых ожиданий. Перезапуск DMA - пара тройка команд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба все равно лишниий раз не обслуживать прерывание от SPI. А вообще я бы RTOS прикрутил. ChibiOs например. Кроме любых синхронизаций и задержек там великолепный HAL имеется для STM32. Попробуйте, не пожалеете. А я бы выбрал другой МК - получше, умеющий управлять несколькими CS в процессе обмена. Если так уж нужно :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба это не вариант, проще сделать опрос полингом, как он сейчас и сделан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 6 июня, 2017 Опубликовано 6 июня, 2017 (изменено) · Жалоба это не вариант, проще сделать опрос полингом, как он сейчас и сделан. В STM32F4xx минимум 3 штуки SPI, как мне кажется. Используйте парочку по таймеру и с ДМА. Изменено 6 июня, 2017 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба это не вариант, проще сделать опрос полингом, как он сейчас и сделан. И что не устраивает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба То что нужно каждые 2.5 мсек по таймеру читать новое значение (этим временем не ограничен). Так было ещё во времена AVR. А так можно было бы запустить N выборок и получить только одно прерывание по окончанию всего процесса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба Так было ещё во времена AVR. А так можно было бы запустить N выборок и получить только одно прерывание по окончанию всего процесса. Ну если так нужно, то что-ж, когда с AVR слазили, не выбрали подходящий МК где это можно сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться