Почему регистры таймера Arduino не равны 0?

Я пытаюсь использовать регистры таймера для измерения времени на моей Arduino Mega 2560.

Вывод следующего кода сбивает меня с толку:

void setup ()
{
    // Настройка последовательного соединения
    Serial.begin(9600);
    while (!Serial) {}

    // Печать регистров управления таймера 1
    Serial.println(TCCR1A); // Выводит 1
    Serial.println(TCCR1B); // Выводит 3
}

void loop () {}

Почему TCCR1A равен 1, а TCCR1B равен 3? В документации к чипу сказано, что начальные значения регистров равны нулю. Конечно, я мог бы установить их в ноль, но я хочу понять, почему это так работает. Значения для других 16-битных таймеров (3, 4 и 5) одинаковы.

, 👍5


1 ответ


Лучший ответ:

9

Ядро Arduino выполняет некоторые действия при запуске. Одной из таких задач является настройка таймеров для работы ШИМ.

Вот соответствующие фрагменты из init() в wiring.c:

    // установить коэффициент предварительного масштабирования таймера 1 на 64
    sbi(TCCR1B, CS11);
#if F_CPU >= 8000000L
    sbi(TCCR1B, CS10);
#endif

#if defined(TCCR1A) && defined(WGM10)
    sbi(TCCR1A, WGM10);
#endif
,