ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 апреля
1105890
NeoPower (03.06.2021 11:30, просмотров: 16) m16
Fuse CKDIV8 + WDR = проблема. Принесли тут платку с занятной ситуацией: Atmega1281-16AU с кристаллом 14.7456 Mhz на 3.3V. Т.к. по даташиту для 3.3 частота <= 8Mhz, то ее просто поделили на 2 через CLKPR – Clock Prescale Register и для надежности включили фуз CKDIV8 - чип стартует на 14.7456 / 8 = 1.8432, а затем переключается на 7.3756. При этом отвалился ватчдог, остальное работает. Выключение CKDIV8 возвращает ватчдог. Порядок инициализации: 

void main(void)

{

__disable_interrupt();

__watchdog_reset();

WDTCSR = (1 << WDCE)| (1 << WDE );

WDTCSR = (1 << WDE )| (1 << WDP3); // Цикл 4 с (Vcc +5В)


__delay_cycles(50);


CLKPR = (1 << CLKPCE); // Разрешаем изменение делителя частоты

CLKPR = (1 << CLKPS0); // DIV / 2