nanorobot 3 12 января, 2018 Опубликовано 12 января, 2018 (изменено) · Жалоба Заппрограммирован вывод в интерфейс SPI с помощью DMA от таймера. Глубина буфера два 16 битовых слова. Метод циркулярный. Каждый раз по событию таймера выводится одно 16 битовое слово. Требуется каждый раз по событию таймера выводить ДВА 16 битовых слова, соответственно глубина буфера станет равной 4. Можно ли как то извернуться с использованием например еще одного канала DMA, что бы решить данную задачу не используя прерываний ? Изменено 12 января, 2018 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ryabikin 0 13 января, 2018 Опубликовано 13 января, 2018 · Жалоба Можно попробовать. Зарядить второй ДМА на другой SPI и в таймере просто выставить флаг старта ДМА1 и ДМА2. Но как будет обстоять дело с синхронностью - вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 22 января, 2018 Опубликовано 22 января, 2018 · Жалоба а что вы делаете с чип селектом? его через дма не пртащишь, а именно он синхронность задает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 66 22 января, 2018 Опубликовано 22 января, 2018 · Жалоба а что вы делаете с чип селектом? его через дма не пртащишь, а именно он синхронность задает... Можно с этого же таймера через channel output вытащить. Или прикрутить к нему подчиненный таймер и уже с него вытащить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 23 января, 2018 Опубликовано 23 января, 2018 · Жалоба Можно ли как то извернуться с использованием например еще одного канала DMA, что бы решить данную задачу не используя прерываний ? Можно решить данную задачу вообще не используя DMA и при этом обеспечив синхронность не только передаваемых данных на MOSI, но и сигналов CS обоих SPI. ...заменив STM на МК с более продвинутой периферией. :) Например: на XMC4xxx (Infineon) можно, предварительно записав данные в FIFO двух SPI-портов, запустить их передачу от двух синхронно работающих таймеров (или даже от одного, выбрав такой таймер, который может триггерить передачу обоих последовательных портов). И сигналы CS будут формироваться аппаратно. А ещё можно (если позволяет алгоритм работы) смешать оба передаваемых слова черезбитно и выплюнуть их в dual-SPI порт. Тогда нужен всего один SPI-порт. Так можно сделать на любом МК, имеющем dual-SPI (но не на STM32, где, к сожалению, как всегда всё сильно упрощено). Только потребуется 2 записи в порт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться