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

особенность работы DAC в режиме DMA на STM32F051C8T6

Занимаюсь разработкой дивайса на STM32F051C8T6. Используется DAC в режиме DMA. "Родным" каналом для DAC в данном камне является 3 канал. Но он у меня занят под обмен по интерфейсу SPI c другой платой дивайса, которая является SPI мастером. Пришлось использовать для DAC TIMER15 и канал DMA номер 5("родной" для TIMER15). В регистре DAC_CR взвел биты триггера для TIMER15. Вроде все работает, но в момент запуска DAC в режиме DMA теряется связь с мастером(входящий от слейва к мастеру поток искажается, CRC не совпадает).

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

Изменено пользователем haker_fox
Уточнил название темы, добавил теги, переместил в нужный раздел.

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


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

Занимаюсь разработкой дивайса на STM32F051C8T6. Используется DAC в режиме DMA. "Родным" каналом для DAC в данном камне является 3 канал. Но он у меня занят под обмен по интерфейсу SPI c другой платой дивайса, которая является SPI мастером.

Как вариант:

Завести SCLK SPI на вход таймера, поделить частоту на размер слова SPI, таймером генерить запросы к DMA-каналу этого таймера и этим DMA обслуживать уже SPI.

Не знаю - возможно-ли такое на данном STM, но я такое делал когда-то давно на LPC17xx (или даже LPC23xx ещё?) на его SPI, который самостоятельно не работал с DMA. А так получилось заставить работать.

 

Пришлось использовать для DAC TIMER15 и канал DMA номер 5("родной" для TIMER15). В регистре DAC_CR взвел биты триггера для TIMER15. Вроде все работает, но в момент запуска DAC в режиме DMA теряется связь с мастером(входящий от слейва к мастеру поток искажается, CRC не совпадает).

Ну естественно - DAC ведь отправляет запросы на DMA к своему каналу. Это вроде как бы очевидно. А Вы чего хотели?

Естественно DMA-биты в ЦАП в таком случае нельзя взводить.

 

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

Скоро буду делать работу DAC+DMA на F429. Но там вроде как я понял из даташита, если не использовать запуск от внешнего триггера (таймера например), то просто записью в регистр данных ЦАП преобразование не запустить. Надо ещё отдельную запись в другой регистр сделать (программный триггер). Наверное в вашем STM по-другому.

Да и не нужно это - я заранее предусмотрел чтобы не занимать DMA-канал ЦАП-а.

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


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

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

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

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

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

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

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

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

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

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