WatchDog

32-разрядные микроконтроллеры разработки ОАО "НИИЭТ"

Модераторы: pip, _sva_

Ответить
steksor
Сообщения: 3
Зарегистрирован: 28 апр 2017, 14:23
Предприятие: Сумма Технологии

WatchDog

Сообщение steksor » 03 июл 2017, 18:17

Здравствуйте.

Проблема такая.
На частоте 100 МГц при тактировании МК от PLL_DIV от внешнего кварца на 16 МГц вачдог зависает.
При этом тестовая программа запускается, зажигает диодик и ровно через сконфигурированное время
диодик гаснет и МК зависает. То есть вачдог отсчитывает время правильно и тактирование МК работает верно.
В HardFault программа не попадает.

НО. На частоте 72 МГц от кварца и PPL_DIV вачдог работает нормально. Все сбрасывается и временные
интервалы верны.
При настройке в п.1 ниже коэффициенты подобраны так, что Fvco = 200000000 Гц. А должно быть
больше. При этом вачдог нормально работает на частоте 100 МГц. Если же поправить коэффициенты так, чтобы
удовлетворять ограничениям, то вачдог на 100 МГц зависает.

Согласно errata_K1921VK01T вачдог должен работать только от PLL_DIV. Но при настройках на частоту
72 МГц от PLL в п.6 ниже нарушая условие Fvco = 144 МГц (должно быть Fvco > 200 МГц) МК и вачдог
работают исправно от PLL без делителя.

Рассчеты и проверку коэффициентов делал согласно даташиту на К1921ВК01Т п.4.1 (стр.28)


Код тестовой программы:

int main()
{
// Тест вачдога
pin_init(LED1);

// Настраиваем тактирование МК
NT_COMMON_REG->PLL_CTRL_bit.REFSEL = 0; // 0 - XI_OSC (кварц) Источник тактирования для PLL

NT_COMMON_REG->PLL_CTRL_bit.PLL_DIV = 0; // N = 2*(PLL_DIV+1) Делитель на выходе PLL
NT_COMMON_REG->PLL_OD = 1; // NO = PLL_OD (м.б.: выкл, 1/2, 1/4)
NT_COMMON_REG->PLL_NR = 2; // NR = PLL_NR+2 (PLL_NR: 0..31)
NT_COMMON_REG->PLL_NF = 98; // NF = PLL_NF+2 (PLL_NF: 0..255)

NT_COMMON_REG->SYS_CLK = 4; // 3 - PLL без делителя, 4 - с делителем. Источник тактовой частоты МК
while (NT_COMMON_REG->SYS_CLK_bit.CURR_SRC != 4) {}

delay_ms (200);
pin_set(LED1);

// Запускаем вачдог
NT_COMMON_REG->APB_CLK |= RCC_PeriphClk_WD;
NT_COMMON_REG->PER_RST0 |= (1<<RCC_PeriphRst_WD);
NT_WDT->LOAD = 8000000;
NT_WDT->CTRL_bit.RESEN = (uint32_t)1; // ENABLE
NT_WDT->CTRL_bit.INTEN = (uint32_t)1; // ENABLE

while (1){}
}

Варианты настройки тактирования для вачдога:

1)
SYS_CLK = 4; // такирование от PLLDIV
FIN = 16000000
PLL_DIV = 0 N_DIV = 2
PLL_OD = 0 NO = 1
PLL_NR = 0 NR = 2
PLL_NF = 23 NF = 25

Fvco = 200000000 (должно быть больше 200 МГц)

FOUT_PLL = 200000000
FOUT_PLLDIV = 100000000

WDT Работает от кварца, но Fvco = 200000000
WDT также работает и от POR


2)
SYS_CLK = 4 // Тактирование от PLL_DIV
FIN = 16000000
PLL_DIV = 0 N_DIV = 2
PLL_OD = 1 NO = 2
PLL_NR = 2 NR = 4
PLL_NF = 98 NF = 100

Fvco = 400 МГц (ОК)
Fref = 2 МГц (ОК)

FOUT_PLL = 200000000
FOUT_PLLDIV = 100000000

WDT зависает от кварца
WDT от POR тоже зависает


3)
SYS_CLK = 4 // Тактирование от PLL_DIV
FIN = 16000000
PLL_DIV = 0 N_DIV =2
PLL_OD = 1 NO = 2
PLL_NR = 2 NR = 4
PLL_NF = 70 NF = 72

Fref = 2 МГц (ОК)
Fvco = 288 МГц (ОК)

FOUT_PLL = 144000000
FOUT_PLLDIV = 72000000

WDT работает от кварца
WDT от POR тоже работает


4)
SYS_CLK = 4 // Тактирование от PLL_DIV
FIN = 16000000
PLL_DIV = 0 N_DIV = 2
PLL_OD = 1 NO = 2
PLL_NR = 2 NR = 4
PLL_NF = 84 NF = 86

Fref = 2 МГц (ОК)
Fvco = 344 МГц (ОК)

FOUT_PLL = 172000000
FOUT_PLLDIV = 86000000

WDT работает от кварца
WDT от POR не работает

// -------------------------------------------------------------------------
// От PLL не должно работать по даташиту
// -------------------------------------------------------------------------
5)
SYS_CLK = 3 // Тактирование от PLL напрямую
FIN = 16000000
PLL_DIV = 0 N_DIV = 2
PLL_OD = 3 NO = 4
PLL_NR = 0 NR = 2
PLL_NF = 48 NF = 50

Fref = 4 МГц (ОК)
Fvco = 400 МГц (ОК)

FOUT_PLL = 100000000
FOUT_PLLDIV = 50000000

WDT зависает
WDT от POR зависает


6)
SYS_CLK = 3 // Тактирование от PLL напрямую
FIN = 16000000
PLL_DIV = 0 N_DIV = 2
PLL_OD = 1 NO = 2
PLL_NR = 2 NR = 4
PLL_NF = 34 NF = 36

Fref = 2 МГц (ОК)
Fvco = 144 МГц (должно быть больше 200 МГц)

FOUT_PLL = 72000000
FOUT_PLLDIV = 36000000

WDT работает, но Fvco = 144000000
WDT от POR работает

bkolbov
Сообщения: 96
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: WatchDog

Сообщение bkolbov » 04 июл 2017, 09:40

Здравствуйте!

Возможно, ТО и errata требуют некоторых уточнений.
Использование пониженного Fvco не есть хорошо, однако, нет ничего страшного в том, что вы используете Fvco = 200 МГц.

Кроме применения внешнего делителя в конфигурациях где необходим сброс, стоит также ограничить Fvco сверху, которая должна быть меньше 300 МГц. А еще лучше Fvco<250. Впрочем, вы сами своими экспериментами это подтвердили.

steksor
Сообщения: 3
Зарегистрирован: 28 апр 2017, 14:23
Предприятие: Сумма Технологии

Re: WatchDog

Сообщение steksor » 04 июл 2017, 12:44

Тогда еще пару вопросов

1) Когда будут внесены изменения в ТО и errata по вачдогу и тактированию?

2) Вы или кто-то еще из пользователей К1921ВК01Т использовали вачдог с данными настройками так,
что МК зависает?

bkolbov
Сообщения: 96
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: WatchDog

Сообщение bkolbov » 04 июл 2017, 14:20

1) В errata изменение внести и выложить дело нескольких дней. Правки в ТО - не ранее нескольких недель.
2) Никто пока не обращался с подобным.

Ответить

Вернуться в «32-разрядные микроконтроллеры на ядре ARM Cortex»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя