ozforester 0 23 июня Опубликовано 23 июня (изменено) · Жалоба 49 minutes ago, _Sergey_ said: нужно альтернативную функцию вывода задействовать? Да, подключаются через альтернативные функции порта и регистры захвата/сравнения. Вы на верном пути, просто спешите. (= Кстати, в референсе есть аппендикс с примерами кода. Часто экономит время. Изменено 23 июня пользователем ozforester Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ozforester 0 14 июля Опубликовано 14 июля · Жалоба День добрый. Продолжаю изучать режим захвата. Вынужден внести поправку в предыдущие достижения. В реальном окружении (spi, i2c, другие прерывания) скорость захвата получается раз в 30-40 меньше тактовой. Алгоритм такой: Таймер вызывает пдп при захвате. Пдп забирает и после двух переносов вызывает прерывание. В прерывании сбрасываются флаги и устанавливается переменная готовности буфера. Подвисания случаются. Пока не разобрался почему. Временно "вылечил" с помощью iwdg-таймера, так как причина может быть не связанной ни с захватом, ни с пдп. Казалось бы очевидно, что это таймер после сброса флагов сразу же устанавливает флаги заново, но попробовал в начале прерывания пдп останавливать захват таймера и без эффекта. Чешу затылок, читаю рефренс.. Может быть кому-то эта ситуация кажется знакомой, и у неё есть простое объяснение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 14 июля Опубликовано 14 июля · Жалоба Разумеется она будет сильно меньше тактовой, если DMA срабатывает каждый второй захват. Сделайте захват сотни фронтов, чтобы прерывания от DMA не так часто возникали. Второй вариант - использовать входной делитель перед входом захвата. Тогда будет захватываться каждый N-ный фронт входной частоты, соотвесственно реже возникают захваты при той же самой входной частоте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ozforester 0 14 июля Опубликовано 14 июля (изменено) · Жалоба Тогда не получится измерить период, когда всего два импульса, что несколько ограничивает применение. С размером буфера экспериментировал, делал прерывание после тысячи захватов, не помогает. Полагал, что между прерываниями буду успевать обарботать первые два значения. Чисто экспериментировал, так как планировал останавливать захват после двух импульсов и запускать уже после обработки предыдущей серии. Но при высокой частоте код подвисает, как будто до отключения захвата в прерывании пдп дело не доходит. С отладчиком не прбовал, так как пока не умею на мегагенцах вылавливать события. Просто предварительно погашенный отладочный светодиод включал в самом прерывании пдп, и убеждался, что при подвисании он не включается. Изменено 14 июля пользователем ozforester Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 14 июля Опубликовано 14 июля · Жалоба Нужно понимать, что между событием и DMA-транзакцией для этого события проходит время. Насколько я помню, порядка 12 тактов (для Cortex-M3). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ozforester 0 14 июля Опубликовано 14 июля (изменено) · Жалоба Да, и ещё на вход в прерывание, где остановка захвата таймера, примерно столько же тратится. Но, на входе меандр 1 МГц при тактировании 48 МГц. Думал, хватит с запасом. Непонятно также, почему первые несколько выборок отрабатывают корректно, и только затем процесс подвисает. Условно - чем ниже частота на входе, тем больше удачных выборок перед сбоем. Буду упрощать код до минимума, может изменится поведение. (По отладчику - не установлена переменная флаг готовности данных, который устанавливается в прерывании пдп, которое после двух захватов таймера, которые выключаются только в прервании пдп, которое не выполнилось, так как флаг не установлен. Меандр на входе никуда не девается.) (= Изменено 14 июля пользователем ozforester Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 15 июля Опубликовано 15 июля · Жалоба Если требуется измерять быстрые сигналы, то быть может лучше не мучить котёнка и взять более быстрый МК? На 480 МГц например, STM32H750. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ozforester 0 15 июля Опубликовано 15 июля · Жалоба Такой способ подходит для решения конкретной задачи. Мне бы сейчас разобраться, почему после двух вызовов пдп не получается отработать прерыванию и остановить таймер. Есть надежда, что упрощенная конфигурация поможет. По опыту, в большинстве случаев нахожу собственную ошибку, может и здесь отыщется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться