|
SPI по DMA на разные м/с |
|
|
|
Jun 6 2017, 11:00
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 6 2017, 11:16
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 6 2017, 11:24
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 6 2017, 11:31
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(Rash @ Jun 6 2017, 16:27)  там SPI 10МГц, поэтому быстрее дождаться окончания передачи, нежели прерывания обрабатывать или DMA запускать. Возможно. Вам виднее конечно. Я предпочитаю избегать любых ожиданий. Перезапуск DMA - пара тройка команд.
|
|
|
|
|
Jun 6 2017, 12:44
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(Rash @ Jun 6 2017, 17:16)  это не вариант, проще сделать опрос полингом, как он сейчас и сделан. В STM32F4xx минимум 3 штуки SPI, как мне кажется. Используйте парочку по таймеру и с ДМА.
Сообщение отредактировал nanorobot - Jun 6 2017, 12:45
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|