ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
752923 Топик полностью
Apтём (29.04.2017 01:16, просмотров: 400) ответил Ксения на Ответ:
Вы бы задачу описали...Типа с какой частотой АЦП ацепировать, сколько каналов (конвейерно или нет), надо ли двойной канал ДМА или стандартный сойдёт... 
ADC упомянут лишь вскользь, а в прилагаемом программном примере не упомянут вовсе.
Это потому наверное, что там всё очень просто с ДМА - оно простое как три копейки.
Я просто боюсь использовать код, на который жалуется сам его автор.
А кто он - этот автор? Есть библиотеки от Атмела, которые в основном все рабочие (хотя не всегда - мне попадалась из библиотека для работы с блоком CRC - вообще не работала, но остальное у них вполне на уровне, можно брать и использовать).
Тем более что я бы написала примерно такой же код, как у него. Из-за этого подозреваю наличие каких-то подводных камней, о которых мне неизвестно.
Пробовал работать с ДМА в связке с АЦП в разных режимах, DAC, таймерами, AES, CRC, Event system, memory to memory copy, UART RX и UART TX - всё работает. Не работал с - SPI в slave режиме только (не надо было) - Double Buffering (4 канала - это мало потому что, куда там их объединять-то) - xmega E - там EDMA какое-то - не было под них задач, да и сырые они вроде. Какие подводные камни? Не было ничего такого.
а потому меня интересует только отсос данных из него.
Там же всё просто настроить - размеры транзакции, блока, burst-а - TriggerSource - завершение преобразования по "какому надо" каналу или событию Event system или таймеру - задать адреса destination и source - режимы перезагрузки destination и source - уровень прерывания ДМА канала В прерывании ДМА запустить новую транзакцию (если надо) и установит флаг готовности данных.
Т.е. писать свой код я пока не пробовала, а лишь смотрела, как "страдают" другие.
Да что там смотреть-то? Чай не scatter-gatter DMA...Всё по мануалу легко настраивается, в xmega manual и надо смотреть.
Советы про АЦП могут понадобиться только в том случае, если в связке с DMA надо что-то менять в настройках АЦП.
Тем более, АЦП-то в xmega куда посложнее ДМА.
Мне бы код, подобный этому:
Ну, можно и так написать, через регистры. Скажите только что.
Не люблю такой код - из него сложно что-то понять.
Ну, на вкус и цвет друзей нет. Но в принципе согласен - для меня плюснутые template тоже тяжеловаты, но написал dma_template.h потому что все операции с ДМА - шаблонные (одни и те действия, только каналы разные) и проще функции написать, чем каждый раз регистры вспоминать.