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

 
 
> 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
 
Start new topic
Ответов
редактор
сообщение Sep 7 2016, 12:22
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- Konrad   Sinus 2kHz на К1986ВЕ92QI   Sep 6 2016, 19:46
- - amiller   Цитата(Konrad @ Sep 6 2016, 23:46) По зав...   Sep 7 2016, 03:25
- - ViKo   А еще у STM32 есть прерывание на половине буфера П...   Sep 7 2016, 05:08
- - jcxz   Цитата(Konrad @ Sep 7 2016, 01:46) но в п...   Sep 7 2016, 06:34
|- - ViKo   Цитата(jcxz @ Sep 7 2016, 09:34) Я могу в...   Sep 7 2016, 08:25
|- - jcxz   Цитата(ViKo @ Sep 7 2016, 14:25) Так, мож...   Sep 7 2016, 08:33
- - редактор   Не обязательно использовать прерывание, можно пере...   Sep 7 2016, 07:26
- - HardEgor   В примерах в Milandr.MDR1986BExx.1.4.2.pack есть г...   Sep 7 2016, 08:23
|- - Konrad   Цитата(HardEgor @ Sep 7 2016, 12:23) В пр...   Sep 7 2016, 10:26
|- - jcxz   Цитата(Konrad @ Sep 7 2016, 16:26) Ну, эт...   Sep 7 2016, 11:21
|- - HardEgor   Цитата(Konrad @ Sep 7 2016, 17:26) Спасиб...   Sep 7 2016, 17:45
- - Obam   А почему никто не посоветовал обратиться за поддер...   Sep 7 2016, 13:06
- - VAI   Ещё на хабре был цикл статей с общим названием ...   Sep 7 2016, 18:07
- - Lerk   Цитата(Konrad @ Sep 6 2016, 22:46) Коллег...   Sep 8 2016, 07:30
- - Konrad   Цитата(Lerk @ Sep 8 2016, 11:30) Если вам...   Sep 9 2016, 10:02
- - Lerk   Цитата(Konrad @ Sep 9 2016, 13:02) в точк...   Sep 12 2016, 07:05
- - Konrad   Цитата(Lerk @ Sep 12 2016, 11:05) Вероятн...   Sep 16 2016, 18:14


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

 


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


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