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


13

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

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

Ответы:


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 порта: используйте этот регистр для считывания текущего уровня на выводе, который настроен как вход.

3
Эта. Шаг 1: Перестань думать об этом как о arduino. Это не. Это микроконтроллер ATmega на печатной плате. 2. Прочтите техническое описание. 3. Нет, на самом деле, прочитайте таблицу .
Коннор Вольф

Ах ... это именно то, что мне было нужно. Я думаю, что потратил так много времени на поиск учебных пособий, ориентированных на Arduino, что забыл, что просто программирую контроллер AVR и могу использовать его таблицу данных.
Апнортон

1

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

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

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


3
Ответы только по ссылкам бесполезны для сайта, так как мы не пытаемся создать хранилище ссылок. Более того, ответ «только ссылка» бесполезен, если в будущем ссылка будет отключена. Было бы лучше обобщить или перефразировать содержание в самом ответе, чтобы пользователи могли сами найти то, что им нужно, или, по крайней мере, получить достаточный контекст, чтобы иметь возможность самим находить решения.
asheeshr
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.