Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
44 Часть /. Общие принципы устройства и функционирования Аtте/ АVR мально возможного в байтовой адресации значения $ FF) . Для регистров в этом до полнительном пространстве не работают многие удобные команды: in/out, sЬi /cЬi и т. п., и их можно адресовать только универсальным способом - как ячейки па мяти. Между тем в это пространство могут «переехать» не только регистры допол нительных по отношению к младшим моделям устройств, но и многих из привыч ного состава периферии: регистры управления UART, Timer l и Тimer2, TWI и т. д. Чтобы не создавать лишних сложностей при изучении ассемблера, мы не станем пользоваться такими моделями контроллеров, - как вы увидите, для львиной доли любительских задач они просто не потребуются. Но, конечно, далее (см. главу 6) я расскажу в подробностях, как и чем можно заменить привычные команды при переходе к более «продвинутым» моделям, чтобы вы не потерялись при возникно вении такой задачи, - ведь среди них, между прочим, и ардуиновская ATmega328 . В отличие от «регистров ввода/вывода», в архитектуре АVR, как и в других архи тектурах МК, термин «порты ввода/вывода» (1/0 ports) обозначает параллельные порты для обмена данными с внешними устройствами. С них мы и начнем рас смотрение периферийных устройств. Порты ввода/вывода Портов ввода/вывода в разных моделях может быть от 1 до 7 . Номинально все пор ты 8-разрядные, в некоторых случаях разрядность ограничена числом выводов корпуса и может быть меньше восьми. Порты обозначаются буквами А, В, С, D и далее, причем необязательно по порядку - в младших моделях могут наличест вовать, например, только порты В и D (как в ATtiny23 1 3) или вообще только один порт В (как в младших Tiny) . Для сокращения числа контактов корпуса в подавляющем большинстве случаев внешние выводы, соответствующие портам, кроме своей основной функции (дву направленного ввода/вывода) несут также и дополнительную. Отметим, что ника кого специального переключения выводов портов не требуется - просто, если вы, к примеру, в своей программе инициализируете последовательный порт UART, то соответствующие выводы RxD и TxD (в ATmega8 они совпадают с выводами PDO и PD l порта D) будут работать именно в альтернативной функции - как ввод и вы вод UART. При этом в промежутках между таким специальным использованием выводов они остаются доступны как обычные двунаправленные выводы. На прак тике при одновременном использовании приходится применять схемотехнические меры для изоляции функций друг от друга, поэтому злоупотреблять этой возмож ностью не рекомендуется, - особенно это критично для выводов того порта (обычно это порт А), к которому подсоединены входы АЦП. Более того - при на личии АЦП не рекомендуется задействовать для выполнения логических функций другие выводы того же порта (которые в работе АЦП не участвуют), потому что это значительно увеличивает уровень помех (подробнее об этом рассказано в этой главе далее, а также в главе 1 1 ) . Выводы портов в достаточной степени автономны, и их режим может устанавли ваться независимо друг от друга. По умолчанию при включении питания все до-
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==