Jump to content
    

Задавал вопрос в разных местах. Пока никто ответа не дал. Решил попробовать тут.

Итак. Включаем цепочку семплирующий таймер->АЦП->ДМА->обработчик прерывания ДМА (останов таймера).

При одном канале АЦП ничего подозрительного в массиве ДМА обычно не наблюдается (но это не значит, что нет ниже описанного явления). Если же АЦП настроить на три, например, канала преобразования на один запуск АЦП от таймера, то первый проход дает идеальный упорядоченный массив, где в нулевом индексе массива сидит первый по счету канал АЦП заданный в соответствующем регистре. При последующих запусках массив сдвигается на один элемент в нулевой индекс попадает последний канал в группе. Есть такое мнение, что до остановки таймера происходит еще один запуск АЦП и данные где то зависают до следующего кадра, вылезая как первый отсчет. Попытка читать регистр данных АЦП и сбрасывать флаги между кадрами ни к чему не привела.

Внимание, вопрос. Где прячется этот отсчет между кадрами? Что нужно перезапустить перед запуском таймера?

Описанное выше наблюдал в AT32F407, но есть обоснованное предположение, что это явление есть и на аналогичных чипах других производителей, включая STM32.

Share this post


Link to post
Share on other sites

Предположение неверное. Периферия у каждого производителя своя, особенно это касается разных китайских поделок

Share this post


Link to post
Share on other sites

Вообще то предположение верное. Это подсказывает опыт сравнения Artery и STM. Тем более, что Artery не делает клоны, просто IP-блоки периферийных модулей в их части идентичны таким же у STM. Ибо STM не являются их автором.

Однако вопрос был не про разницу, а про полученное явление. Возможно кто то столкнулся с таким же. Например. мой родной брат тоже столкнулся немногим ранее, но пока ответ не нашел.

Собственно мне нужен механизм, а не исправление ситуации. Я должен быть уверен, что если смещу нумерацию при сортировке, то это будет сохраняться и в других режимах или правке кода.

Share this post


Link to post
Share on other sites

Есть такое мнение, что до остановки таймера происходит еще один запуск АЦП
STM32L451: семплирующий таймер->АЦП(однократно, 10 каналов)->ДМА->обработчик прерывания ДМА(флаг готовности данных), самовольного запуска АЦП не замечено. Таймер остановлен - АЦП молчит. Если уж совпало, остановка и переполнение таймера, то всё законно - 10 отсчётов будут получены, но однократно.
В буфере (откуда в 10 массивов данные раскладываются) смещения тоже не наблюдается.

Share this post


Link to post
Share on other sites

9 hours ago, Obam said:

смещения тоже не наблюдается.

Разобрался. Проблема никак не связана с производителем МК. Все строго по даташиту.

Когда завершается очередная сессия ДМА в кадре, таймер останавливается в прерывании по ДМА и остается в позиции в конце своего периода. После обнуления таймера при подготовке очередной сессии на выходе канала запускающего АЦП формируется ФРОНТ, который и запускает АЦП, но поскольку ДМА не запущен, данные никуда не улетают, НО ТРИГГЕР ДМА В АЦП ВЗВОДИТСЯ. И это приводит к тому, что как только разрешается работа ДМА (таймер еще не запущен - окно захвата сигнала (ДМА) наступит заметно позже подготовки) уже взведенный триггер ДМА в АЦП тут же выбрасывает последние данные в массив ДМА по нулевому индексу. Это и приводит к сдвигу данных в массиве.

Лечение очень простое. Нужно после завершения сессии ДМА отключить бит разрешения ДМА в АЦП и включить его только перед новой сессией, сильно позже обнуления тела таймера.

Всем спасибо за участие.

Share this post


Link to post
Share on other sites

В 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 на несколько каналов и никаких проблем.

Share this post


Link to post
Share on other sites

 

Quote

Предположение неверное...

...Там тоже есть АЦП+DMA на несколько каналов и никаких проблем.

Предположение верное. Вы не прочли решение проблемы.

Каждый производитель МК покупает такие IP  блоки периферии, какие считает нужными.

Поэтому таймеры у Артери идентичны до неразличимости таймерам у СТМ.

АЦП так же идентичны.

Предположить, что две сотни человек в фаблесс-компании исследуют чипы СТМ и копируют топологию может только большой фантазер. Тем более, что Артери не совсем китайская компания, а ее штаб-квартира переехала в Тайбей. И не куда-нибудь, а прямо в кампус TSMC. отгадайте где они делают чипы с одного раза... 😁 

Такшта проблема с вероятностью 99,9(9) процентов воспроизведется.

Если конечно повторить мои условия работы, а не вольно фантазировать.

Так, если в качестве семплирующего таймера применить первый или восьмой, а количество семплов забить в репетишн регистр, то все будет ништяк-ништяк. Только мне такой вариант не подходит, ибо таймеры уже расписаны по проекту, а количество семплов 512. И это превышает возможности репетишн регистра.

Ну и свет клином сошелся именно на Артери, поскольку речь вообще то в теме была о ней, так же свет распространил свой "клин" на СТМ, патамушта о нем так же была речь.

А вот про Инфинеон вообще никто не говорил. Кроме вас, конечно. К чему - непонятно.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...