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

STM32F378 атомарная запись в два SPI DAC AD5443

Заппрограммирован вывод в интерфейс SPI с помощью DMA от таймера. Глубина буфера два 16 битовых слова. Метод циркулярный. Каждый раз по событию таймера выводится одно 16 битовое слово. Требуется каждый раз по событию таймера выводить ДВА 16 битовых слова, соответственно глубина буфера станет равной 4. Можно ли как то извернуться с использованием например еще одного канала DMA, что бы решить данную задачу не используя прерываний ?
Изменено пользователем nanorobot

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


Ссылка на сообщение
Поделиться на другие сайты
Можно попробовать.
Зарядить второй ДМА на другой SPI и в таймере просто выставить флаг старта ДМА1 и ДМА2.
Но как будет обстоять дело с синхронностью - вопрос.

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


Ссылка на сообщение
Поделиться на другие сайты
а что вы делаете с чип селектом? его через дма не пртащишь, а именно он синхронность задает...

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(klen @ Jan 23 2018, 01:21) <{POST_SNAPBACK}>
а что вы делаете с чип селектом? его через дма не пртащишь, а именно он синхронность задает...

Можно с этого же таймера через channel output вытащить. Или прикрутить к нему подчиненный таймер и уже с него вытащить.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(nanorobot @ Jan 12 2018, 13:07) <{POST_SNAPBACK}>
Можно ли как то извернуться с использованием например еще одного канала DMA, что бы решить данную задачу не используя прерываний ?

Можно решить данную задачу вообще не используя DMA и при этом обеспечив синхронность не только передаваемых данных на MOSI, но и сигналов CS обоих SPI.
...заменив STM на МК с более продвинутой периферией. sm.gif
Например: на XMC4xxx (Infineon) можно, предварительно записав данные в FIFO двух SPI-портов, запустить их передачу от двух синхронно работающих таймеров (или даже от одного, выбрав такой таймер, который может триггерить передачу обоих последовательных портов). И сигналы CS будут формироваться аппаратно.
А ещё можно (если позволяет алгоритм работы) смешать оба передаваемых слова черезбитно и выплюнуть их в dual-SPI порт. Тогда нужен всего один SPI-порт.
Так можно сделать на любом МК, имеющем dual-SPI (но не на STM32, где, к сожалению, как всегда всё сильно упрощено). Только потребуется 2 записи в порт.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация