Сборка на Arduino: регистры ввода-вывода

13

Вопрос: Какие регистры я использую для доступа к IO на Arduino Uno, когда я использую ассемблер для программирования?

Предыстория: мне было интересно практиковаться в ассемблере на Arduino (я думал, что будет легче включать / выключать светодиоды, чем беспокоиться о консольном вводе-выводе). Проведя предварительный поиск , я обнаружил, что AVR toolchain можно использовать для программирования Arduino. Тем не менее, я не совсем знаю, как найти соответствующие регистры для выводов ввода-вывода.

apnorton
источник

Ответы:

8

Таблицы для микроконтроллеров AVR достаточно хороши для чтения. Просто Google для точного контроллера на вашем Arduino (например, ATmege328) и найти «полную» таблицу данных на веб-сайте atmel.com . Не загружайте «Сводку», она не содержит много информации. Загрузите таблицу данных с atmel.com, это единственное место с самой последней документацией.

В базовом IO используются три регистра (см. Главу «Порты ввода-вывода»):

Где n - идентификатор порта, буква в диапазоне от A, B, C, ... в зависимости от количества выводов ввода-вывода, которые имеет ваш контроллер. Каждый бит в каждом регистре представляет один вывод GPIO (да, вам нужны базовые знания о двоичном коде, чтобы полностью это понять).

  • DDR n , регистр направления данных: это в основном конфигурирует вывод для входа (0) или выхода (1).
  • PORT n , Port n Data Register: когда вывод установлен как выходной, соответствующий бит переключает выходной вывод на высокий (1) или низкий (0). При настройке в качестве входа это обеспечивает слабый подтягивающий резистор на выходном контакте.
  • PIN n , регистр ввода n порта: используйте этот регистр для считывания текущего уровня на выводе, который настроен как вход.
jippie
источник
3
Эта. Шаг 1: Перестань думать об этом как о arduino. Это не. Это микроконтроллер ATmega на печатной плате. 2. Прочтите техническое описание. 3. Нет, на самом деле, прочитайте таблицу .
Коннор Вольф
Ах ... это именно то, что мне было нужно. Я думаю, что потратил так много времени на поиск учебных пособий, ориентированных на Arduino, что забыл, что просто программирую контроллер AVR и могу использовать его таблицу данных.
Апнортон
1

Проверьте это: http://arduino.cc/en/Reference/PortManipulation

Также: http://arduino.cc/en/Hacking/PinMapping168

Что касается других портов и выводов, проверьте размещение таблицы данных для вашего контроллера, они действительно полезны для людей, которые могут их понять! :)

Доктор
источник
3
Ответы только по ссылкам бесполезны для сайта, так как мы не пытаемся создать хранилище ссылок. Более того, ответ «только ссылка» бесполезен, если в будущем ссылка будет отключена. Было бы лучше обобщить или перефразировать содержание в самом ответе, чтобы пользователи могли сами найти то, что им нужно, или, по крайней мере, получить достаточный контекст, чтобы иметь возможность самим находить решения.
asheeshr