Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IWDG на stm32f746
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
_lexa_
Всем доброго времени суток!

В настоящем случае по SPI3 (через DMA) принимаются данные от АЦП. Когда включаю независимый вочдог, получаю странное искажение сигнала



Скачки порядка 1000-1500 е.м.р.

Код настройки и пуска вочдога:
Код
IWDG->KR = 0x0000CCCCu;
    IWDG->KR = 0x00005555u;
    IWDG->PR = 2;
    IWDG->RLR = 1;
    while(IWDG->SR);
    IWDG->KR = 0x0000AAAAu;

При этом частота и величина скачков не зависит от от настройки регистров PR и RLR. Без IWDG все нормально работает.
Кроме того, настраиваю (например) вочдог на частоту сброса 1 мс. Перезагрузку его счетчика в программе произвожу с частотой 15-30 мкс. Однако при запуске программы контроллер сбрасывается, т.е. программа не успевает перезагрузить счетчик вочдога

С WWDG при этом все работает как надо

Может кто сталкивался с этим?
aaarrr
Едва ли IWDG может избирательно влиять исключительно на младшие биты принимаемых по SPI данных. Скорее, на ваш источник пролезает какая-то наводка от его RC-генератора.
HardEgor
Цитата(_lexa_ @ Jun 10 2018, 13:22) *
Может кто сталкивался с этим?

Подайте на АЦП постоянное напряжение, посмотрите на сколько разрядов шумит и насколько стабильно.
Возможно где-то переполнение буфера или неправильные адреса.
Или конденсатор по какому-то выводу питания не стоит.
_lexa_
Цитата(aaarrr @ Jun 10 2018, 08:12) *
Едва ли IWDG может избирательно влиять исключительно на младшие биты принимаемых по SPI данных. Скорее, на ваш источник пролезает какая-то наводка от его RC-генератора.

Я включал LSI генератор отдельно, без вочдога - сигнал был чистый.

Цитата(HardEgor @ Jun 10 2018, 10:06) *
Подайте на АЦП постоянное напряжение, посмотрите на сколько разрядов шумит и насколько стабильно.
Возможно где-то переполнение буфера или неправильные адреса.
Или конденсатор по какому-то выводу питания не стоит.


Судя по картинке на участках с минимальной производной (считаем там напряжение постоянным) выбросов нет и с уменьшением производной сигнала выбросы уменьшаются.

Если увеличить картинку, складывается впечатление, что выбросы - это просто старые значения. По уровню они вроде как совпадают (разрешение картинки не очень, эксперимент пока повторить не могу). Здесь буду думать в этом направлении.

Но опять не понятно почему настройки вочдога не совпадают с его реальной работой. Как будто тактирование идет частотой, пожалуй, раз в 300 большей.
Genadi Zawidowski
A что у нас с кэшем данных? Инввлидация перед чтением по DMA делается?
jcxz
Цитата(_lexa_ @ Jun 10 2018, 15:29) *
Если увеличить картинку, складывается впечатление, что выбросы - это просто старые значения. По уровню они вроде как совпадают (разрешение картинки не очень, эксперимент пока повторить не могу). Здесь буду думать в этом направлении.

Как бы хорошим тоном является при работе связки DMA+некая_периферия контролировать случаи переполнения FIFO SPI и DMA. Выставить ловушки на такие события. Это предохраняет от многих "чудес".
Да и бряк на точку старта программы бы поставить: а то может у вас этот WDT срабатывает периодически и программа перезапускается. biggrin.gif
_lexa_
Цитата(Genadi Zawidowski @ Jun 10 2018, 16:38) *
A что у нас с кэшем данных? Инввлидация перед чтением по DMA делается?

В моем случае данные расположены в DTCM RAM. Кэш не участвует в процессе

Цитата(jcxz @ Jun 11 2018, 05:45) *
Как бы хорошим тоном является при работе связки DMA+некая_периферия контролировать случаи переполнения FIFO SPI и DMA. Выставить ловушки на такие события. Это предохраняет от многих "чудес".
Да и бряк на точку старта программы бы поставить: а то может у вас этот WDT срабатывает периодически и программа перезапускается. biggrin.gif

Вопрос почему без IWDG все нормально работает, а также с WWDG нормально работает остается открытым. Если бы FIFO SPI или DMA переполнялся - это было бы как с IWDG, так и без него. На счет рестарта - тоже маловероятно. в начале программы идет довольно длительная инициализация переферии (порядка 1 с) периодического сигнала мы бы не увидели.
Genadi Zawidowski
Конец оцифровки делается по прерыванию от DMA по TC или от ADC? Первый вариант мне кажется более правильными. Использовать двойной буфер - и точно использовать данные из не учавствующей в обмене части.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.