|
SPI по DMA на разные м/с |
|
|
|
 |
Ответов
|
Jun 6 2017, 21:06
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Rash @ Jun 6 2017, 13:54)  Добрый день. Подскажите, возможно, ли опрашивать последовательно несколько м/с по SPI переключать при этом CS и использовать DMA и таймер(ы)? Если да, то как? МК STM32F401, два датчика: акселерометр и гироскоп подключены параллельно с раздельным CS. Частота опроса 400 Гц. Последовательность следующая: выбор и опрос датчик1, выбор и опрос датчик2, ожидание готовности данных, и т.д. Таким образом делать N-выборок без участия CPU. На серии Kinetis от NXP это делается элементарно в одной пересылке DMA. Там вместе с данными в буфер записывается состояние CS. А в STM32 вижу да, дикая проблема. Даже сцепленных DMA структур не имеет. Как выход можно было бы применить промежуточный контроллер из серии Kinetis. Скажем серия KS22 имеет и SPI с аппаратным управлением более 16-ю CS-ами, и DMA со сцепленными блоками и еще такую фичу, как FlexIO, где можно творить какой угодно сериальный стрим.
|
|
|
|
|
Jun 6 2017, 21:55
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AlexandrY @ Jun 6 2017, 23:06)  На серии Kinetis от NXP это делается элементарно в одной пересылке DMA. Там вместе с данными в буфер записывается состояние CS. Такое управление CS-ами есть и в Infineon и в Tiva и в OMAP-L. Нету только в STM32, так как его периферию упростили по самое нехочу. Цитата(Rash @ Jun 6 2017, 16:31)  Да я не первый год в теме и если бы бросал чем то заниматься, как только, что-то запустилось, то много бы не узнал. МК 401, а не 407, но в SPI без разницы, вот таймеров меньше и работать с GPIO через DMA можно только одним таймером TIM1. ну если из любви к искусству и если Вы действительно так въедливы как пишете, то изучите от корки до корки всю периферию своего камня и думаю сможете что-нить придумать. Тут подобные темы уже не раз обсасывались - поднимите историю. Как зацепка Вам: Выделяете один канал DMA, синхронизируемый событиями от таймера, который при каждом event-е от таймера засылает блок конфигурации в регистры другого DMA-канала. А уже тот второй DMA-канал выполняет пересылки память-память, программируя различную периферию и другие DMA-каналы. Если DMA-контроллер вашего STM может по событию таймера выполнить пересылку блока байт память-память, а по следующему событию таймера - следующего блока из списка в памяти по тому-же целевому адресу, то должно получиться. Мне открывать мануал на периферию STM лень.  Ещё можно придумать разные фокусы с подсчётом SCLK вашего SPI каким-то таймером и формированию события по достижении некоего числа SCLK (например - фронта CS, или опять-же - event к DMA).
|
|
|
|
|
Jun 7 2017, 03:07
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612

|
Цитата(jcxz @ Jun 7 2017, 01:55)  ну если из любви к искусству и если Вы действительно так въедливы как пишете, то изучите от корки до корки всю периферию своего камня и думаю сможете что-нить придумать. Думаю, что более просто будет так: При условии, что CS-ы посажены на один порт. Задействовать 1 дополнительный канал DMA, который будет синхронно писать данные в регистр BSRR соответствующего порта, тем самым дергая нужные CS.
|
|
|
|
Сообщений в этой теме
Rash SPI по DMA на разные м/с Jun 6 2017, 10:54 nanorobot Цитата(Rash @ Jun 6 2017, 15:54) Добрый д... Jun 6 2017, 11:00 Rash CS в ручную это понятно, тогда от DMA толку нет, в... Jun 6 2017, 11:11 nanorobot Цитата(Rash @ Jun 6 2017, 16:11) CS в руч... Jun 6 2017, 11:16 scifi Можно попробовать замутить хитрую схему с таймерам... Jun 6 2017, 11:16 nanorobot Цитата(Rash @ Jun 6 2017, 16:18) nanorobo... Jun 6 2017, 11:24  jcxz Цитата(nanorobot @ Jun 6 2017, 13:24) все... Jun 6 2017, 12:01 Rash nanorobot,
Смысла нет передавать 2-3 байта через D... Jun 6 2017, 11:18 Rash Цитата(nanorobot @ Jun 6 2017, 14:24) все... Jun 6 2017, 11:27 nanorobot Цитата(Rash @ Jun 6 2017, 16:27) там SPI ... Jun 6 2017, 11:31 Rash это не вариант, проще сделать опрос полингом, как ... Jun 6 2017, 12:16 nanorobot Цитата(Rash @ Jun 6 2017, 17:16) это не в... Jun 6 2017, 12:44 scifi Цитата(Rash @ Jun 6 2017, 15:16) это не в... Jun 6 2017, 12:48 Rash То что нужно каждые 2.5 мсек по таймеру читать нов... Jun 6 2017, 13:03 jcxz Цитата(Rash @ Jun 6 2017, 15:03) Так было... Jun 6 2017, 13:09 scifi Цитата(Rash @ Jun 6 2017, 16:03) То что н... Jun 6 2017, 13:47 Rash А при чём здесь AVR? И чем архитектура не подошла?... Jun 6 2017, 13:18 jcxz Цитата(Rash @ Jun 6 2017, 15:18) А при чё... Jun 6 2017, 13:28 Rash Управлять несколькими CS аппаратно не является при... Jun 6 2017, 13:41 Rash Ну да, сам, побитно ручками вынимаю.
scifi, если е... Jun 6 2017, 14:04 scifi Цитата(Rash @ Jun 6 2017, 17:04) scifi, е... Jun 6 2017, 14:11 Rash Вы меня наверное с кем то путаете.
Да я не первый ... Jun 6 2017, 14:31 scifi Цитата(Rash @ Jun 6 2017, 17:31) Да я не ... Jun 6 2017, 18:59  AlexandrY Цитата(jcxz @ Jun 7 2017, 00:55) Такое уп... Jun 7 2017, 07:34   jcxz Цитата(AlexandrY @ Jun 7 2017, 09:34) В к... Jun 7 2017, 09:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|