Перейти к содержанию

IWDG на stm32f746

Всем доброго времени суток!

 

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

 

image.png

 

Скачки порядка 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 при этом все работает как надо

 

Может кто сталкивался с этим?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Едва ли IWDG может избирательно влиять исключительно на младшие биты принимаемых по SPI данных. Скорее, на ваш источник пролезает какая-то наводка от его RC-генератора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Может кто сталкивался с этим?

Подайте на АЦП постоянное напряжение, посмотрите на сколько разрядов шумит и насколько стабильно.

Возможно где-то переполнение буфера или неправильные адреса.

Или конденсатор по какому-то выводу питания не стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Едва ли IWDG может избирательно влиять исключительно на младшие биты принимаемых по SPI данных. Скорее, на ваш источник пролезает какая-то наводка от его RC-генератора.

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

 

Подайте на АЦП постоянное напряжение, посмотрите на сколько разрядов шумит и насколько стабильно.

Возможно где-то переполнение буфера или неправильные адреса.

Или конденсатор по какому-то выводу питания не стоит.

 

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

 

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

 

Но опять не понятно почему настройки вочдога не совпадают с его реальной работой. Как будто тактирование идет частотой, пожалуй, раз в 300 большей.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

A что у нас с кэшем данных? Инввлидация перед чтением по DMA делается?

Поделиться сообщением


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

Как бы хорошим тоном является при работе связки DMA+некая_периферия контролировать случаи переполнения FIFO SPI и DMA. Выставить ловушки на такие события. Это предохраняет от многих "чудес".

Да и бряк на точку старта программы бы поставить: а то может у вас этот WDT срабатывает периодически и программа перезапускается. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
A что у нас с кэшем данных? Инввлидация перед чтением по DMA делается?

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

 

Как бы хорошим тоном является при работе связки DMA+некая_периферия контролировать случаи переполнения FIFO SPI и DMA. Выставить ловушки на такие события. Это предохраняет от многих "чудес".

Да и бряк на точку старта программы бы поставить: а то может у вас этот WDT срабатывает периодически и программа перезапускается. :biggrin:

Вопрос почему без IWDG все нормально работает, а также с WWDG нормально работает остается открытым. Если бы FIFO SPI или DMA переполнялся - это было бы как с IWDG, так и без него. На счет рестарта - тоже маловероятно. в начале программы идет довольно длительная инициализация переферии (порядка 1 с) периодического сигнала мы бы не увидели.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конец оцифровки делается по прерыванию от DMA по TC или от ADC? Первый вариант мне кажется более правильными. Использовать двойной буфер - и точно использовать данные из не учавствующей в обмене части.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация