Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2021-ноя-28 06:29

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 8 сообщений ] 
Автор Сообщение
СообщениеДобавлено: 2021-окт-18 11:23 
Не в сети

Зарегистрирован: 2021-апр-08 09:23
Сообщения: 14
Организация: uuppo
Здравствуйте !
Еще раз спасибо за предыдущие ответы.
Сейчас такая ситуация:

RST_CLK_PCLKcmd(RST_CLK_PCLK_IWDG , ENABLE);

MDR_IWDG->KR = 0x5555; // РАЗРЕШАЕМ ЗАПИСЬ рекгистров PR и RLR

int16_t temp = 0x0000; // счетчик
temp |= 0x1FF << 0;
MDR_IWDG->RLR = temp;

temp = 0x0000; // делитель частоты
temp |= 0x6 << 0;
MDR_IWDG->PR = temp;


while(MDR_IWDG->SR); //ЗДЕСЬ ЗАВИСАЕТ
MDR_IWDG->KR = 0xCCCC; // включаем таймер
MDR_IWDG->KR = 0xAAAA; // перезагружаем счетчик

проблема в том, что регистры PR и RLR иногда записываются
иногда не записываются оба, иногда ,то один, то другой.
Но флаги не сбрасываются
И таймер не стартует.
Подскажите пожалуйста где проблема?
Спасибо.


Вернуться к началу
 Заголовок сообщения: Re: 1986BE92 сторожевой таймер IWDG
СообщениеДобавлено: 2021-окт-18 15:51 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 530
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
Открыть обращение пользователя
alhml писал(а): *
Здравствуйте !
Еще раз спасибо за предыдущие ответы.
Сейчас такая ситуация:

RST_CLK_PCLKcmd(RST_CLK_PCLK_IWDG , ENABLE);

MDR_IWDG->KR = 0x5555; // РАЗРЕШАЕМ ЗАПИСЬ рекгистров PR и RLR

int16_t temp = 0x0000; // счетчик
temp |= 0x1FF << 0;
MDR_IWDG->RLR = temp;

temp = 0x0000; // делитель частоты
temp |= 0x6 << 0;
MDR_IWDG->PR = temp;


while(MDR_IWDG->SR); //ЗДЕСЬ ЗАВИСАЕТ
MDR_IWDG->KR = 0xCCCC; // включаем таймер
MDR_IWDG->KR = 0xAAAA; // перезагружаем счетчик

проблема в том, что регистры PR и RLR иногда записываются
иногда не записываются оба, иногда ,то один, то другой.
Но флаги не сбрасываются
И таймер не стартует.
Подскажите пожалуйста где проблема?
Спасибо.
Закрыть
Здравствуйте!

Обратите, пожалуйста, внимание, что после настройки регистров PR и RLR блока IWDG, необходимо до запуска таймера выполнить перезагрузку счётчика (значение 0xAAAA в регистре KR) для обновления значения регистра RLR со значения по умолчанию (0xFFF) на пользовательское значение в регистре RLR. Данная информация приведена в описании на поле RLR[11:0] регистра RLR в актуальной версии спецификации на семейство микроконтроллеров 1986ВЕ9х (ТСКЯ.431296.001СП Версия 3.23.0 от 09.09.2021). Благодарим за обращение.

Дополнение: пример по работе с IWDG из состава установочного пака для IDE Keil был переработан (исправлены функции контроля статусного регистра блока IWDG, а также внедрена перезагрузка таймера сразу после настройки регистров PR и RLR, чтобы однозначно уйти от значения по умолчанию). Переработанный файл main.c для отладочной платы на базе 1986ВЕ92У во вложении к посту.


Вложения:
main.zip [1.86 КБ]
37 скачиваний

_________________
Отдел технической поддержки support@milandr.ru

Информационный портал отдела технической поддержки support.milandr.ru
Вернуться к началу
 Заголовок сообщения: Re: 1986BE92 сторожевой таймер IWDG
СообщениеДобавлено: 2021-окт-18 19:58 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 355
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
alhml писал(а): *
int16_t temp = 0x0000; // счетчик
temp |= 0x1FF << 0;
MDR_IWDG->RLR = temp;

temp = 0x0000; // делитель частоты
temp |= 0x6 << 0;
MDR_IWDG->PR = temp;
Зачем так сложно?
Упростите так:
uint32_t temp = 0x1FF << 0; // счетчик
MDR_IWDG->RLR = temp;

temp = 0x6 << 0; // делитель частоты
MDR_IWDG->PR = temp;
Или так:
MDR_IWDG->RLR = 0x1FF << 0;
MDR_IWDG->PR = 0x6 << 0;
Заметьте, что я сделал тип временной переменной temp совпадающим с типом регистра, куда производится запись - uint32_t.


Вернуться к началу
 Заголовок сообщения: Re: 1986BE92 сторожевой таймер IWDG
СообщениеДобавлено: 2021-окт-19 02:42 
Не в сети

Зарегистрирован: 2021-апр-08 09:23
Сообщения: 14
Организация: uuppo
Делали разные варианты.
Это просто последний вариант.
И последовательность команд, и тип переменной.
И запись в регистр напрямую.
Главное, что в регистр KR команды не записываются.
И даже со значениями по умолчанию таймер не стартует и не перезагружает микроконтроллер.


Вернуться к началу
 Заголовок сообщения: Re: 1986BE92 сторожевой таймер IWDG
СообщениеДобавлено: 2021-окт-19 03:14 
Не в сети

Зарегистрирован: 2021-апр-08 09:23
Сообщения: 14
Организация: uuppo
Вставил код, который Вы мен прислали.
Результат то же самый - в регистр КР не записывает, зависает в ожидании сброса флага


Вернуться к началу
 Заголовок сообщения: Re: 1986BE92 сторожевой таймер IWDG
СообщениеДобавлено: 2021-окт-19 09:20 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 530
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
alhml писал(а): *
Делали разные варианты.
Это просто последний вариант.
И последовательность команд, и тип переменной.
И запись в регистр напрямую.
Главное, что в регистр KR команды не записываются.
И даже со значениями по умолчанию таймер не стартует и не перезагружает микроконтроллер.
Здравствуйте!

Обратите, пожалуйста, внимание, что регистр KR блока IWDG является write-only, то есть доступен только для записи, поэтому если считать данный регистр, то всегда будет возвращено значение 0x0000 - информация об этом имеется в таблице 475 "Регистр KR" и в таблице 476 "Описание бит регистра KR" актуальной версии спецификации на семейство микроконтроллеров 1986ВЕ9х. Проверить корректность записи в регистр KR и другие регистры блока достаточно просто: необходимо записать в регистр KR значение 0x5555, после этого можно производить запись в регистры PR и RLR, при этом контролировать ход записи регистров PR и RLR удобно в ходе отладочной сессии с применением SVD-файла, без предварительной записи регистра KR значением 0x5555, значения PR и RLR обновляться не будут.

Пожалуйста, используйте в качестве основы приложенный проект из прошлого ответного письма, который изначально входит в состав установочного пака для IDE Keil. Обратите, пожалуйста, внимание, что проект собран для отладочной платы производства компании Миландр на базе 1986ВЕ92У, поэтому в нём используются свои линии для индикации, и при использовании в связке с собственной платой необходимо перенастроить индикацию, если светодиоды предусмотрены схемотехникой Вашей платы. Дополнительно контролировать процесс сброса позволит внедрение постоянно светящегося светодиода в начале программы до конфигурации блока IWDG, когда как в бесконечном цикле удобно использовать именно моргание. Если возникнут дополнительные вопросы, пожалуйста, обращайтесь.

_________________
Отдел технической поддержки support@milandr.ru

Информационный портал отдела технической поддержки support.milandr.ru


Вернуться к началу
 Заголовок сообщения: Re: 1986BE92 сторожевой таймер IWDG
СообщениеДобавлено: 2021-окт-19 09:26 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 546
Мне кажется надо поменять последовательность.
В руководстве сказано "Чтение и запись этого регистра (PR) допустимы только, если бит PVU = 0 в регистре SR"
Аналогично про регистр RLR (правда там строка в таблицу не влезла :-) )
while(MDR_IWDG->SR & (1<<1)); // ждем готовности RVU
MDR_IWDG->RLR = 0x1FF << 0;
while(MDR_IWDG->SR & (1<<0)); // ждем готовности PVU
MDR_IWDG->PR = 0x6 << 0;
В железе не пробовал.


Вернуться к началу
 Заголовок сообщения: Re: 1986BE92 сторожевой таймер IWDG
СообщениеДобавлено: 2021-окт-19 10:39 
Не в сети

Зарегистрирован: 2021-апр-08 09:23
Сообщения: 14
Организация: uuppo
Спасибо за помощь !
Вы дали нам толчок подумать в другом направлении.
Дело оказалось в нашем железе.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 8 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и 6 гостей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB