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

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

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

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

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


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

Можно попробовать.

Зарядить второй ДМА на другой SPI и в таймере просто выставить флаг старта ДМА1 и ДМА2.

Но как будет обстоять дело с синхронностью - вопрос.

 

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


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

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

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


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

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

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

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


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

Можно ли как то извернуться с использованием например еще одного канала DMA, что бы решить данную задачу не используя прерываний ?

Можно решить данную задачу вообще не используя DMA и при этом обеспечив синхронность не только передаваемых данных на MOSI, но и сигналов CS обоих SPI.

...заменив STM на МК с более продвинутой периферией. :)

Например: на XMC4xxx (Infineon) можно, предварительно записав данные в FIFO двух SPI-портов, запустить их передачу от двух синхронно работающих таймеров (или даже от одного, выбрав такой таймер, который может триггерить передачу обоих последовательных портов). И сигналы CS будут формироваться аппаратно.

А ещё можно (если позволяет алгоритм работы) смешать оба передаваемых слова черезбитно и выплюнуть их в dual-SPI порт. Тогда нужен всего один SPI-порт.

Так можно сделать на любом МК, имеющем dual-SPI (но не на STM32, где, к сожалению, как всегда всё сильно упрощено). Только потребуется 2 записи в порт.

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


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

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

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

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

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

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

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

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

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

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