Перейти к содержанию
    

SPI по DMA на разные м/с на STM32F401

Добрый день.

Подскажите, возможно, ли опрашивать последовательно несколько м/с по SPI переключать при этом CS и использовать DMA и таймер(ы)? Если да, то как?

МК STM32F401, два датчика: акселерометр и гироскоп подключены параллельно с раздельным CS. Частота опроса 400 Гц. Последовательность следующая: выбор и опрос датчик1, выбор и опрос датчик2, ожидание готовности данных, и т.д. Таким образом делать N-выборок без участия CPU.

 

Изменено пользователем haker_fox
Уточнил название темы, добавил теги, переместил в нужный раздел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день.

Подскажите, возможно, ли опрашивать последовательно несколько м/с по SPI переключать при этом CS и использовать DMA и таймер(ы)? Если да, то как?

МК STM32F401, два датчика: акселерометр и гироскоп подключены параллельно с раздельным CS. Частота опроса 400 Гц. Последовательность следующая: выбор и опрос датчик1, выбор и опрос датчик2, ожидание готовности данных, и т.д. Таким образом делать N-выборок без участия CPU.

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CS в ручную это понятно, тогда от DMA толку нет, весь смысл процесс автоматизировать. Запустить DMA на N выборок с частотой 400 Hz и каким то образом (таймером) их переключать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CS в ручную это понятно, тогда от DMA толку нет, весь смысл процесс автоматизировать. Запустить DMA на N выборок с частотой 400 Hz и каким то образом (таймером) их переключать.

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно попробовать замутить хитрую схему с таймерами. Таймеры могут формировать CS на своих выходах и запускать DMA.

Но не проще ли на прерываниях?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

nanorobot,

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

 

scifi

Вот только как этот процесс синхронизировать и сделать нужную задержку после опроса датчиков?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

nanorobot,

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

 

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все равно лишниий раз не обслуживать прерывание от SPI.

там SPI 10МГц, поэтому быстрее дождаться окончания передачи, нежели прерывания обрабатывать или DMA запускать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

там SPI 10МГц, поэтому быстрее дождаться окончания передачи, нежели прерывания обрабатывать или DMA запускать.

Возможно. Вам виднее конечно. Я предпочитаю избегать любых ожиданий. Перезапуск DMA - пара тройка команд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

А я бы выбрал другой МК - получше, умеющий управлять несколькими CS в процессе обмена. Если так уж нужно :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это не вариант, проще сделать опрос полингом, как он сейчас и сделан.

 

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это не вариант, проще сделать опрос полингом, как он сейчас и сделан.

И что не устраивает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То что нужно каждые 2.5 мсек по таймеру читать новое значение (этим временем не ограничен). Так было ещё во времена AVR.

А так можно было бы запустить N выборок и получить только одно прерывание по окончанию всего процесса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так было ещё во времена AVR.

А так можно было бы запустить N выборок и получить только одно прерывание по окончанию всего процесса.

Ну если так нужно, то что-ж, когда с AVR слазили, не выбрали подходящий МК где это можно сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...