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

Сдвиг на бит при передаче по SPI DMA

43 минуты назад, dimka76 сказал:

Немного не так.

SYNC должен быть в единице между транзакциями. Это тот же самый переименованный CS.

Если смотреть на диаграмму, то там ему все равно что на SYNC после окончания передачи, главное чтоб до начала передачи SYNC находился в единице необходимое время. Можно SYCN и как CS для SPI использовать, т.е. поднимать сразу после передачи. 

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


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

Завел SPI на 8 МБ/с и попробовал все 4 комбинации полярности и фазы, отправляя через DMA. Результат всегда один- смещение на бит вправо.

В блокирующем режиме работает корректно только в конфиге SPI как в первом посте темы.

4 часа назад, dimka76 сказал:

В вашем случае смысл передачи по DMA пропадает, т.к. все равно приходится отвлекаться на дергание ножкой CS. 

Что толку мало понимаю, но не по вашей причине. Сразу написал- просто стало интересно. Вашу причину как раз не особо понял- "отвлекаюсь", в смысле занимаю процессорное время на подъем и опускание чип-селекта? Ну а в вашем случае мне занимать это время обрабатывая прерывание от таймера и указывая что надо передавать.

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


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

On 10/6/2023 at 7:09 PM, Turgenev said:

"отвлекаюсь", в смысле занимаю процессорное время на подъем и опускание чип-селекта? 

Да

On 10/6/2023 at 7:09 PM, Turgenev said:

 Ну а в вашем случае мне занимать это время обрабатывая прерывание от таймера и указывая что надо передавать.

С таймером это не мое предложение.

Но с таймером не надо никакие прерывания обрабатывать.

Таймер дает команду на запуск DMA аппаратно. Одновременно с помощью функции ШИМ таймер генерирует сигнал SYNC. 

При этом, у вас стабильное время обновления значения ЦАП и все происходит аппаратно. Т.е. таймер это триггер для DMA.

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


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

1 минуту назад, dimka76 сказал:

При этом, у вас стабильное время обновления значения ЦАП и все происходит аппаратно. Т.е. таймер это триггер для DMA.

Так, а зачем обновлять значение ЦАП каждые n-секунд, если это пользовательское действие (когда надо пользователю, тогда и обновил) или результат работы другой функции?

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


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

On 10/6/2023 at 9:22 PM, Turgenev said:

Так, а зачем обновлять значение ЦАП каждые n-секунд, если это пользовательское действие (когда надо пользователю, тогда и обновил) или результат работы другой функции?

Ну, мало ли. Может вам захочется синусоиду генерировать.

А для однократного режима у таймера есть One-pulse mode. Дал пинка и все действия выполнятся аппаратно до конца.

 

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


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

6 минут назад, dimka76 сказал:

А для однократного режима у таймера есть One-pulse mode. Дал пинка и все действия выполнятся аппаратно до конца.

Так все равно же пинок таймера это аналог опускания чип-селекта у меня- занятое процессорное время.

Я просто пытаюсь понять в чем преимущество работы с spi при помощи таймеров, не поймите не правильно. 

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


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

On 10/6/2023 at 9:38 PM, Turgenev said:

Я просто пытаюсь понять в чем преимущество работы с spi при помощи таймеров, не поймите не правильно. 

В циклическом режиме (например для формирования синусоиды) не надо будет отвлекаться на формирование импульсов SYNC (CS). Все будет формироваться аппаратно.

А зачем вам внешний ЦАП ?

У STM32F407 есть свой внутренний и тоже 12 битный.

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


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

1 час назад, dimka76 сказал:

А зачем вам внешний ЦАП ?

Боюсь нету нормальной причины, все было затеяно в образовательных целях. Есть задумки подключать ЦАП к более слабому МК (L0, F1) и управлять потоком воздуха. Но чтобы думать о чем-то серьезном, надо разобраться с фундаментальными вещами, а тут споткнулся вообще у подножья.

И все же, что делать с DMA, может есть еще варианты?

1 час назад, dimka76 сказал:

В циклическом режиме (например для формирования синусоиды) не надо будет отвлекаться на формирование импульсов SYNC (CS). Все будет формироваться аппаратно.

Понял, постараюсь запомнить.

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


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

On 10/6/2023 at 11:17 PM, Turgenev said:

И все же, что делать с DMA, может есть еще варианты?

осцилографировать

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


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

1 час назад, dimka76 сказал:

осцилографировать

Сделал. На скринах разный масштаб по времени. При передаче через DMA чет совсем странно работает(2й скрин, нижний). Для первого скрина напряжение нормально выставляется.

Спойлер

BewgjpEEbds.thumb.jpg.3c8209509b508ee47b7a6f0d31f21cd5.jpg

18zNme1vEBY.thumb.jpg.335c45be7d727dd884608abd66e4d837.jpg

 

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

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


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

On 10/7/2023 at 12:23 AM, Turgenev said:

Сделал. На скринах разный масштаб по времени. При передаче через DMA чет совсем странно работает(2й скрин, нижний). Для первого скрина напряжение нормально выставляется.

Для больше информативности надо двумя каналами снимать.

Например так

Первый канал - CLK

Второй канал - SYNC

 

Потом 

Первый канал - CLK

Второй канал - данные

 

И в итоге сопоставить эти два набора осцилограм.

 

И снимайте в том режиме, в котором у вас не правильно пишется. Т.е. в режиме DMA.

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


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

28 минут назад, dimka76 сказал:

надо двумя каналами снимать.

Да понимаю... Работаю над тем, чтобы второй щуп появился.

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


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

8 часов назад, Turgenev сказал:

Да понимаю... Работаю над тем, чтобы второй щуп появился.

Воткнуть во 2й канал  любой кусок провода) Лучше конечно коаксиала кусок.

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


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

10 часов назад, HardEgor сказал:

Воткнуть во 2й канал  любой кусок провода) Лучше конечно коаксиала кусок.

Коаксила под рукой нет. Заколхозил на проводе. Такие пульсации получил, что фронтов вообще не разобрать. Бросил.

Но проблему решил. Дело было в размере данных передаваемых DMA. Вот так правильно, а стояло полслова:

Спойлер

image.thumb.png.fc5e138e53fbf37a7fd2201dc596ff70.png

Подскажите, почему передачей полслова дает такую ошибку?

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


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

15 часов назад, Turgenev сказал:

Подскажите, почему передачей полслова дает такую ошибку?

Не очень понятно как у вас было настроено, если источник и получатель полуслово, то куда по вашей логике DMA должен ещё 8 бит положить, если у вас SPI настроен на передачу по 8 бит.

Если источник полуслово, а получатель байт, то надо внимательно прочитать раздел документации про DMA, как настроить при разной ширине источника и получателя и какое должно быть количество трансферов в вашем случае.

Или просто SPI настроить на передачу 16 бит.

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


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

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

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

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

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

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

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

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

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

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