реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Sinus 2kHz на К1986ВЕ92QI, Использование DMA+DAC
Konrad
сообщение Sep 6 2016, 19:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 202
Регистрация: 7-04-08
Пользователь №: 36 555



Коллеги, нужен совет.

Хочу с помощью имеющихся в МК К1986ВЕ92QI ЦАП и DMA генерировать синус 2 кГц.
Для своих целей я задействовал таймер 1. Когда происходит событие CNT=ARR, формируется запрос DMA, и DMA-контроллер должен очередное табличное значение функции отправить в ЦАП.
У контроллера DMA есть несколько режимов работы: основной, автозапрос, пинг-понг и др. Из документации не совсем ясна разница между ними, но в ходе экспериментов я выяснил, что в режимах основной и автозапрос при поступлении от таймера одиночного запроса, контроллер DMA пересылает подряд в ЦАП весь массив значений, чего мне не нужно... А вот в режиме пинг-понг в ответ на запрос происходит пересылка одного значения и декремент счетчика числа передач. В итоге я остановился на режиме пинг-понг, и всё работает, но есть одно "но", которое меня смущает...
По завершении цикла DMA счетчик передач становится = 0, и чтобы зациклить процесс приходится разрешать прерывание от DMA и в нем переинициализировать управляющие слова основной и альтернативной структур DMA-канала. В принципе, это не фатально, в моем случае прерывание возникает раз в 500 мкс, но в примерах для STM32, что я встречал, прерывания не используются - только инициализация и всё...
Например:
http://chipspace.ru/stm32-dac-3/

Кто-нибудь может сказать: можно ли на этом МК решить мою задачу без использования прерывания от DMA? Так чтобы синус формировалсяисключительноаппаратными средствами.
Go to the top of the page
 
+Quote Post
amiller
сообщение Sep 7 2016, 03:25
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Konrad @ Sep 6 2016, 23:46) *
По завершении цикла DMA счетчик передач становится = 0, и чтобы зациклить процесс приходится разрешать прерывание от DMA и в нем переинициализировать управляющие слова основной и альтернативной структур DMA-канала. В принципе, это не фатально, в моем случае прерывание возникает раз в 500 мкс, но в примерах для STM32, что я встречал, прерывания не используются - только инициализация и всё...

В STM32 в настройках DMA есть специальный бит "CIRC" (Circular Mode), который как раз и отвечает за этот функционал. Ищите аналог у Вашего контроллера.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 7 2016, 05:08
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А еще у STM32 есть прерывание на половине буфера ПДП, очень полезная вещь в данном случае.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 7 2016, 06:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Konrad @ Sep 7 2016, 01:46) *
но в примерах для STM32, что я встречал, прерывания не используются - только инициализация и всё...

А причём тут STM32? У Вас какой контроллер? Очевидно что в нём совершенно другой контроллер DMA (как и другая периферия) с другими возможностями. И только его и надо изучать.
STM32 тут никак не поможет.

Цитата(Konrad @ Sep 7 2016, 01:46) *
чтобы синус формировалсяисключительноаппаратными средствами.

А зачем?

Цитата(ViKo @ Sep 7 2016, 11:08) *
А еще у STM32 есть прерывание на половине буфера ПДП, очень полезная вещь в данном случае.

Я могу вспомнить кучу фич DMA-контроллеров LPC17xx, LPC43xx, TM4C129, OMAP-L137 и др. с помощью которых можно решить эту задачу. Только - толку???
Ведь у ТС совсем другой МК.

PS: Впрочем - если в МК ТС-а DMA-контроллер соответствует стандарту "ARM ® PrimeCell ® 32-channel configurable µDMA controller", то могу подсказать wink.gif
Go to the top of the page
 
+Quote Post
редактор
сообщение Sep 7 2016, 07:26
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



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


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Sep 7 2016, 08:23
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



В примерах в Milandr.MDR1986BExx.1.4.2.pack есть готовая программа генерирования синуса на DMA и DAC для вашего процессора.

Прикрепленные файлы
Прикрепленный файл  DMA_SineWave.rar ( 6.21 килобайт ) Кол-во скачиваний: 13
 
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 7 2016, 08:25
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Sep 7 2016, 09:34) *
Я могу вспомнить кучу фич DMA-контроллеров LPC17xx, LPC43xx, TM4C129, OMAP-L137 и др. с помощью которых можно решить эту задачу. Только - толку???
Ведь у ТС совсем другой МК.

Так, может, и у топикстартевого контроллера есть такое прерывание? В конце концов, можно 2 буфера сделать, и поочереди их использовать. Будет примерно то же.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 7 2016, 08:33
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Sep 7 2016, 14:25) *
Так, может, и у топикстартевого контроллера есть такое прерывание? В конце концов, можно 2 буфера сделать, и поочереди их использовать. Будет примерно то же.

И в тех МК что я перечислил, есть и ping-pong и передачи связным списком. Эти режимы можно использовать для того, что нужно ТС. И даже без прерываний.
Go to the top of the page
 
+Quote Post
Konrad
сообщение Sep 7 2016, 10:26
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 202
Регистрация: 7-04-08
Пользователь №: 36 555



Цитата(HardEgor @ Sep 7 2016, 12:23) *
В примерах в Milandr.MDR1986BExx.1.4.2.pack есть готовая программа генерирования синуса на DMA и DAC для вашего процессора.


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

Цитата(jcxz @ Sep 7 2016, 10:34) *
А причём тут STM32? У Вас какой контроллер? Очевидно что в нём совершенно другой контроллер DMA (как и другая периферия) с другими возможностями. И только его и надо изучать.
STM32 тут никак не поможет.


А зачем?


Я могу вспомнить кучу фич DMA-контроллеров LPC17xx, LPC43xx, TM4C129, OMAP-L137 и др. с помощью которых можно решить эту задачу. Только - толку???
Ведь у ТС совсем другой МК.

PS: Впрочем - если в МК ТС-а DMA-контроллер соответствует стандарту "ARM ® PrimeCell ® 32-channel configurable µDMA controller", то могу подсказать wink.gif


Ну, этот контроллер заявлялся как отдаленный аналог STM32...
Зачем? Ну, хочется...) Вообще, в данном случае синхронно с генерацией мне нужно производить измерения, так что это прерывание весьма кстати... Но если рассуждать отвлеченно, то хотелось бы иметь возможность все делать аппаратно... Сейчас частота 2к, а если бы она была выше? понятно, что ПДП все равно занимает шину и может тормозить работу МК, но не хотелось бы тормозить его еще и прерываниями...

Чему соответствует контроллер ПДП, я не знаю. Но его описание взято с сайта АРМа (перевод).
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 7 2016, 11:21
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Konrad @ Sep 7 2016, 16:26) *
Ну, этот контроллер заявлялся как отдаленный аналог STM32...

Аналог в чём? Имеющий то же самое ядро Cortex-M4? Так таких аналогов - пруд пруди.

Цитата(Konrad @ Sep 7 2016, 16:26) *
Зачем? Ну, хочется...) Вообще, в данном случае синхронно с генерацией мне нужно производить измерения, так что это прерывание весьма кстати... Но если рассуждать отвлеченно, то хотелось бы иметь возможность все делать аппаратно... Сейчас частота 2к, а если бы она была выше?

Была-бы выше и что? Частота 2К выборок из памяти для Cortex-M - это вообще ни о чём. С такой маленькой скоростью даже DMA излишне.
У меня сейчас на Tiva через DMA->SPI идут потоки до 15МБ/сек на 120МГц ядра и нормально - загрузка МК небольшая.
У Вас и других прерываний нигде не будет в ПО? Или Вас только прерывания от ЦАП не устраивают почему-то?

Цитата(Konrad @ Sep 7 2016, 16:26) *
Чему соответствует контроллер ПДП, я не знаю. Но его описание взято с сайта АРМа (перевод).

Если это так, тогда он должен соответствовать стандарту "ARM ® PrimeCell ® 32-channel configurable µDMA controller".
А в семействе Tiva как раз такой контроллер и у Вас аналог не STM32, а Tiva (по DMA-периферии по-крайней мере).
И там есть передача свЯзным списком.
Go to the top of the page
 
+Quote Post
редактор
сообщение Sep 7 2016, 12:22
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Цитата
Имеющий то же самое ядро Cortex-M4?
Это М3.Но аналогов меньше не становится. Почему заявлен как анлог St для меня тоже загадка.
Цитата
Частота 2К выборок из памяти для Cortex-M - это вообще ни о чём.
Если читать внимательнее то 2К это частота синуса, сколько точек его формирует не указано. При максимальной частоте ядра 80МГц синус из 100 точек проблемой не станет но без ДМА будет уже не комфортно.
Цитата
Или Вас только прерывания от ЦАП не устраивают почему-то?
Не устраивают прерывания от DMA, там одно прерывание на весь модуль и надо программно искать, какой канал его вызвал, кроме того есть проблемы совместного использования прерываний DMA и АЦП (учитывая что требуются какие то измерения).


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 7 2016, 12:46
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(редактор @ Sep 7 2016, 18:22) *
Если читать внимательнее то 2К это частота синуса, сколько точек его формирует не указано. При максимальной частоте ядра 80МГц синус из 100 точек проблемой не станет но без ДМА будет уже не комфортно.

100 точек - это перебор. Имхо. Но даже 200КS/sec - не проблема для такого МК. Через DMA конечно.

Цитата(редактор @ Sep 7 2016, 18:22) *
Не устраивают прерывания от DMA, там одно прерывание на весь модуль и надо программно искать, какой канал его вызвал, кроме того есть проблемы совместного использования прерываний DMA и АЦП (учитывая что требуются какие то измерения).

Если там (как утверждает ТС) DMA-контроллер - стандартный ARM-овский, как в Tiva, то у меня в Tiva прерывания завершения DMA-транзакций генерируются не по вектору DMA (который да, один), а по вектору периферии, обслуживаемой этим каналом DMA.
Но даже если бы и по вектору DMA, сомневаюсь, что там у ТС десятки периферийных узлов обслуживаются DMA. Скорее всего - 2-3. Обслужить все запросы завершения в одном ISR тогда не проблема.
Go to the top of the page
 
+Quote Post
Obam
сообщение Sep 7 2016, 13:06
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



А почему никто не посоветовал обратиться за поддержкой к производителю? "Западло" что ли "побеспокоить" не заграничного - своего-родного "вендора"? Или отфутболит?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Sep 7 2016, 17:45
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Konrad @ Sep 7 2016, 17:26) *
Спасибо, проглядел. В этом примере прерывание тоже используется. Значит иначе никак.

Стоит почитать форум на milandr.ru, довольно активный и описывается много тонкостей по этим контроллерам.
Go to the top of the page
 
+Quote Post
VAI
сообщение Sep 7 2016, 18:07
Сообщение #15


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Ещё на хабре был цикл статей с общим названием "Переходим с STM32 на российский микроконтроллер К1986ВЕ92QI".
Вот статья по Вашей теме. Остальные можно найти самому.
https://habrahabr.ru/post/255513/


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016