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

Конструктор значений регистров AVR

Выберите микроконтроллер, блок периферии и регистр, включите нужные биты и режимы — конструктор покажет значение регистра и готовую строку кода на C и ассемблере. Начальное значение — то, что регистр получает после сброса.

Загружаем регистры ATmega328P…

Расчёт выполнен по формулам и данным из источников, приведённых на этой странице, и не заменяет проверку: параметры компонентов у разных производителей и даже партий различаются. Перед применением сверяйте результат с документацией на конкретные детали.

Конструктор регистров собирает значение 8-битного регистра AVR из полей, как их описывает даташит: отдельные биты включаются галочками, многобитные поля (делитель таймера, режим, скорость) выбираются из списка с названиями режимов. Результат — значение в шестнадцатеричном и двоичном виде, строка на C для avr-gcc и две строки на ассемблере Microchip.

Сейчас доступны девять микроконтроллеров — ATmega328P, ATmega2560, ATmega8, ATmega16A, ATmega32A, ATmega32U4, ATtiny85, ATtiny13A и ATtiny2313A — со всеми блоками периферии, у которых есть 8-битные управляющие регистры. Подробные описания регистров с таблицами битов — на страницах регистров каждого микроконтроллера, например регистры ATmega328P.

Как пользоваться

  1. Выберите микроконтроллер и блок: таймер, АЦП, USART, порты, прерывания.
  2. Выберите регистр — начальное значение равно значению после сброса.
  3. Включите биты и выберите режимы многобитных полей.
  4. Скопируйте строку на C или ассемблерный код.

Какой код получается

C (avr-gcc). Значение записывается через имена битов из заголовка avr/io.h: TCCR1B = (1 << WGM12) | (1 << CS11) | (1 << CS10);. Это то же, что TCCR1B = 0x0B;, но читается без даташита. Нулевое значение — TCCR1B = 0;.

Ассемблер Microchip. Значение загружается в рабочий регистр и записывается в регистр периферии:

ldi r16, 0x0B
sts TCCR1B, r16

Регистры в пространстве ввода-вывода записываются командой out — она короче и быстрее, а регистры с адресами в расширенном пространстве — только командами записи в память, как sts. Имена регистров берутся из файла определений устройства (m328Pdef.inc для ATmega328P).

Ограничения

  • Конструктор присваивает регистру значение целиком. Чтобы изменить отдельные биты, не трогая остальные, в программе используют |= и &= ~.
  • Порядок записи регистров важен для некоторых блоков: например, временные последовательности сторожевого таймера и смена тактирования требуют записи в определённом порядке за ограниченное число тактов — это описано на страницах регистров.
  • 16-битные регистры (счётчики, регистры сравнения) в конструкторе не собираются — у них нет битовых полей.

Частые вопросы

Как получить значение регистра TCCR1B для делителя 64?

Выберите ATmega328P, блок «Таймер-счётчик 1» и регистр TCCR1B, а в поле CS12:0 — значение 011. Конструктор покажет 0x03 и строку TCCR1B = (1 << CS11) | (1 << CS10);. Если нужен ещё и режим CTC с OCR1A, добавьте WGM12 — значение станет 0x0B.

Почему код на ассемблере то с OUT, то с STS?

Регистры с адресами в пространстве ввода-вывода (до 0x5F в адресах памяти) доступны командой OUT, а регистры с большими адресами — только командами работы с памятью, например STS. Конструктор выбирает команду по адресу регистра; в обоих случаях значение сначала загружается в r16 командой LDI.

Откуда взяты регистры и описания битов?

Из файлов описания устройств Microchip (ATDF из паков ATmega_DFP и ATtiny_DFP, лицензия Apache-2.0), сверенных с даташитами и заголовочными файлами компилятора. Расхождения — например, сдвинутые биты TWAM в заголовке ATmega328P — исправлены по даташиту; список поправок есть на страницах регистров.

Почему строка на C иногда записана числом, а не именами битов?

Если в значении включены биты без имени или имена битов в заголовке компилятора неверны, конструктор пишет число в шестнадцатеричном виде: так код гарантированно соответствует выбранным битам.

Источники

  1. Microchip. ATmega Series Device Support (ATmega_DFP) и ATtiny Series Device Support (ATtiny_DFP), файлы описания устройств atdf — регистры, поля, значения полей, адреса, значения после сброса; лицензия Apache-2.0
  2. Microchip. Даташиты ATmega328P (DS40002061B), ATmega2560, ATmega8, ATmega16A, ATmega32A, ATmega32U4, ATtiny85, ATtiny13A, ATtiny2313A — сводки регистров и описания битов, по которым сверены данные пака
  3. Заголовочные файлы avr/io*.h из паков Microchip — имена битов, которые использует строка на C
Встроить калькулятор на свой сайт

Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах

<iframe src="https://gaw.ru/embed/register-constructor/" title="Конструктор значений регистров AVR" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/register-constructor/">Конструктор значений регистров AVR</a> — GAW.ru</p>
Автоподстройка высоты рамки

Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.

<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>

Обновлено .

Нашли ошибку в расчёте?