my504 2 21 февраля Опубликовано 21 февраля · Жалоба Задавал вопрос в разных местах. Пока никто ответа не дал. Решил попробовать тут. Итак. Включаем цепочку семплирующий таймер->АЦП->ДМА->обработчик прерывания ДМА (останов таймера). При одном канале АЦП ничего подозрительного в массиве ДМА обычно не наблюдается (но это не значит, что нет ниже описанного явления). Если же АЦП настроить на три, например, канала преобразования на один запуск АЦП от таймера, то первый проход дает идеальный упорядоченный массив, где в нулевом индексе массива сидит первый по счету канал АЦП заданный в соответствующем регистре. При последующих запусках массив сдвигается на один элемент в нулевой индекс попадает последний канал в группе. Есть такое мнение, что до остановки таймера происходит еще один запуск АЦП и данные где то зависают до следующего кадра, вылезая как первый отсчет. Попытка читать регистр данных АЦП и сбрасывать флаги между кадрами ни к чему не привела. Внимание, вопрос. Где прячется этот отсчет между кадрами? Что нужно перезапустить перед запуском таймера? Описанное выше наблюдал в AT32F407, но есть обоснованное предположение, что это явление есть и на аналогичных чипах других производителей, включая STM32. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 21 21 февраля Опубликовано 21 февраля · Жалоба Предположение неверное. Периферия у каждого производителя своя, особенно это касается разных китайских поделок 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 21 февраля Опубликовано 21 февраля · Жалоба Вообще то предположение верное. Это подсказывает опыт сравнения Artery и STM. Тем более, что Artery не делает клоны, просто IP-блоки периферийных модулей в их части идентичны таким же у STM. Ибо STM не являются их автором. Однако вопрос был не про разницу, а про полученное явление. Возможно кто то столкнулся с таким же. Например. мой родной брат тоже столкнулся немногим ранее, но пока ответ не нашел. Собственно мне нужен механизм, а не исправление ситуации. Я должен быть уверен, что если смещу нумерацию при сортировке, то это будет сохраняться и в других режимах или правке кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 37 21 февраля Опубликовано 21 февраля · Жалоба Есть такое мнение, что до остановки таймера происходит еще один запуск АЦП STM32L451: семплирующий таймер->АЦП(однократно, 10 каналов)->ДМА->обработчик прерывания ДМА(флаг готовности данных), самовольного запуска АЦП не замечено. Таймер остановлен - АЦП молчит. Если уж совпало, остановка и переполнение таймера, то всё законно - 10 отсчётов будут получены, но однократно. В буфере (откуда в 10 массивов данные раскладываются) смещения тоже не наблюдается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 22 февраля Опубликовано 22 февраля · Жалоба 9 hours ago, Obam said: смещения тоже не наблюдается. Разобрался. Проблема никак не связана с производителем МК. Все строго по даташиту. Когда завершается очередная сессия ДМА в кадре, таймер останавливается в прерывании по ДМА и остается в позиции в конце своего периода. После обнуления таймера при подготовке очередной сессии на выходе канала запускающего АЦП формируется ФРОНТ, который и запускает АЦП, но поскольку ДМА не запущен, данные никуда не улетают, НО ТРИГГЕР ДМА В АЦП ВЗВОДИТСЯ. И это приводит к тому, что как только разрешается работа ДМА (таймер еще не запущен - окно захвата сигнала (ДМА) наступит заметно позже подготовки) уже взведенный триггер ДМА в АЦП тут же выбрасывает последние данные в массив ДМА по нулевому индексу. Это и приводит к сдвигу данных в массиве. Лечение очень простое. Нужно после завершения сессии ДМА отключить бит разрешения ДМА в АЦП и включить его только перед новой сессией, сильно позже обнуления тела таймера. Всем спасибо за участие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 23 февраля Опубликовано 23 февраля · Жалоба В 21.02.2024 в 15:16, my504 сказал: Вообще то предположение верное. Это подсказывает опыт сравнения Artery и STM. Предположение неверное. Каждый производитель по своему реализует работу периферии. И думаю - всех возможных реализаций вы не знаете. Например у XMC4xxx результаты АЦП падают в его FIFO, которое производит обработку этих результатов и формирует запросы к DMA в соответствии с запрограммированным алгоритмом работы FIFO (прохождением потоков данных внутри FIFO). И никаких проблем с взаимодействием ADC<->DMA на XMC4xxx ни разу не наблюдал. При том, что работал с 4-мя одновременно работающими АЦП, по несколько активных каналов на каждом. В 21.02.2024 в 15:16, my504 сказал: Тем более, что Artery не делает клоны На Artery с STM32 свет клином не сошёлся. Впрочем есть проект на STM32F4xx. Там тоже есть АЦП+DMA на несколько каналов и никаких проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 24 февраля Опубликовано 24 февраля · Жалоба Quote Предположение неверное... ...Там тоже есть АЦП+DMA на несколько каналов и никаких проблем. Предположение верное. Вы не прочли решение проблемы. Каждый производитель МК покупает такие IP блоки периферии, какие считает нужными. Поэтому таймеры у Артери идентичны до неразличимости таймерам у СТМ. АЦП так же идентичны. Предположить, что две сотни человек в фаблесс-компании исследуют чипы СТМ и копируют топологию может только большой фантазер. Тем более, что Артери не совсем китайская компания, а ее штаб-квартира переехала в Тайбей. И не куда-нибудь, а прямо в кампус TSMC. отгадайте где они делают чипы с одного раза... 😁 Такшта проблема с вероятностью 99,9(9) процентов воспроизведется. Если конечно повторить мои условия работы, а не вольно фантазировать. Так, если в качестве семплирующего таймера применить первый или восьмой, а количество семплов забить в репетишн регистр, то все будет ништяк-ништяк. Только мне такой вариант не подходит, ибо таймеры уже расписаны по проекту, а количество семплов 512. И это превышает возможности репетишн регистра. Ну и свет клином сошелся именно на Артери, поскольку речь вообще то в теме была о ней, так же свет распространил свой "клин" на СТМ, патамушта о нем так же была речь. А вот про Инфинеон вообще никто не говорил. Кроме вас, конечно. К чему - непонятно. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться