Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: особенность работы DAC в режиме DMA
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
nanorobot
Занимаюсь разработкой дивайса на STM32F051C8T6. Используется DAC в режиме DMA. "Родным" каналом для DAC в данном камне является 3 канал. Но он у меня занят под обмен по интерфейсу SPI c другой платой дивайса, которая является SPI мастером. Пришлось использовать для DAC TIMER15 и канал DMA номер 5("родной" для TIMER15). В регистре DAC_CR взвел биты триггера для TIMER15. Вроде все работает, но в момент запуска DAC в режиме DMA теряется связь с мастером(входящий от слейва к мастеру поток искажается, CRC не совпадает).
Мучился несколько дней, пробовал заводить DAC на другой свободный канал и с другим таймером. Все без толку. Потом, без всякой связи с проблемой, сообразил, что в режиме DMA установка битов триггера под соответствующий таймер не требуется. закомментил соответствующую строчку, загрузил, все работает как часы, в том числе и связь. Просто, несколько неожиданно для меня. Може сгодится кому...
jcxz
Цитата(nanorobot @ Mar 24 2017, 22:48) *
Занимаюсь разработкой дивайса на STM32F051C8T6. Используется DAC в режиме DMA. "Родным" каналом для DAC в данном камне является 3 канал. Но он у меня занят под обмен по интерфейсу SPI c другой платой дивайса, которая является SPI мастером.

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

Цитата(nanorobot @ Mar 24 2017, 22:48) *
Пришлось использовать для DAC TIMER15 и канал DMA номер 5("родной" для TIMER15). В регистре DAC_CR взвел биты триггера для TIMER15. Вроде все работает, но в момент запуска DAC в режиме DMA теряется связь с мастером(входящий от слейва к мастеру поток искажается, CRC не совпадает).

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

Цитата(nanorobot @ Mar 24 2017, 22:48) *
Потом, без всякой связи с проблемой, сообразил, что в режиме DMA установка битов триггера под соответствующий таймер не требуется. закомментил соответствующую строчку, загрузил, все работает как часы, в том числе и связь. Просто, несколько неожиданно для меня. Може сгодится кому...

Скоро буду делать работу DAC+DMA на F429. Но там вроде как я понял из даташита, если не использовать запуск от внешнего триггера (таймера например), то просто записью в регистр данных ЦАП преобразование не запустить. Надо ещё отдельную запись в другой регистр сделать (программный триггер). Наверное в вашем STM по-другому.
Да и не нужно это - я заранее предусмотрел чтобы не занимать DMA-канал ЦАП-а.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.