Параллельный ввод-вывод микроконтроллера AVR AT90S8515

Рассмотрим организацию параллельного ввода-вывода простейшего AVR микроконтроллера. Схема подключения внешнего вывода, показанная на рис. 3, дает пред­ставление о его работе.

Рисунок 3 Схема подключения внешнего вывода AVR

С каждым набором линий (который называется «пор­том») связано три адреса ввода-вывода, которые позволяют определять зна­чение данных, записанных в порт, направление передачи данных («I» — вывод, «О» — ввод) и реальное значение сигнала на внешнем выводе. Вследствие этого есть возможность «подтянуть» выводы порта к высокому потенциалу для работы в режиме ввода данных, и использовать состояние некоторых выводов в качестве запроса прерываний.

Чтение данных может быть выполнено либо непосредственно с внешне­го вывода, либо с выхода регистра данных порта. Такая возможность являет­ся важной особенностью работы порта. Если внешняя линия перегружена или случайно закорочена на «землю» или питание, то состояние внешнего выхода никогда не будет меняться. Поэтому в некоторых случаях очень важ­но иметь возможность прочитать содержимое регистра порта и сравнить его с реальным состоянием внешнего вывода.

Хотя линии ввода-вывода AVR работают подобно аналогичным линиям в других микроконтроллерах, они имеют одно существенное отличие. Оно зак­лючается в том, что «подтягивание» внешнего вывода к высокому потенциалу управляется не отдельными битами регистра, а для этого используется специальная комбинационная схема. Эта схема разрешает «подтягивание» только, когда внешний вывод работает в режиме ввода данных. На рис.4 показано, как работает линия ввода-вывода АУК при чтении состояния кноп­ки, которая подключает внешний вывод к «земле».

Рисунок 4 Подключение внешнего вывода к кнопке

Рассмотрим принцип работы портов ввода-вывода сначала на примере порта B.

Порт B 8-разрядный двунаправленный порт ввода/вывода. Для обслуживания порта отведено три регистра: регистр данных PORTB ($18, $38), регистр направления данных - DDRB ($17, $37) и ножки порта B ($16, $36). Адрес ножек порта B предназначен только для чтения, в то время как регистр данных и регистр направления данных - для чтения/записи.

Все выводы порта имеют отдельно подключаемые подтягивающие резисторы. Выходы порта B могут поглощать ток до 20 mA и непосредственно управлять светодиодными индикаторами. Если выводы PB0..PB7 используются как входы и замыкаются на землю, если включены внутренние подтягивающие резисторы, выводы являются источниками тока (Iil). Дополнительные функции выводов порта B приведены в таблице 8.

Таблица 16. Альтернативные функции выводов порта B

┌────────┬──────────────────────────────────────────────────────────┐

│Вывод │ Альтернативная функция │

├────────┼──────────────────────────────────────────────────────────┤

│PB0 │ AIN0 (Положительный вход аналогового компаратора) │

├────────┼──────────────────────────────────────────────────────────┤

│PB1 │ AIN1 (Отрицательный вход аналогового компаратора) │

├────────┼──────────────────────────────────────────────────────────┤

│PB3 │ OC1 (Выход совпадения таймера/счетчика1) │

├────────┼──────────────────────────────────────────────────────────┤

│PB5 │ MOSI (Вход данных для загрузки памяти) │

├────────┼──────────────────────────────────────────────────────────┤

│PB6 │ MISO (Выход данных для чиенмя памяти) │

├────────┼──────────────────────────────────────────────────────────┤

│PB7 │ SCK (Вход тактовых импульсов последовательного обмена) │

└────────┴──────────────────────────────────────────────────────────┘

При использовании альтернативных функций выводов, регистры DDRB и PORTB должны быть установлены в соответствии с описанием альтернативных функций.

РЕГИСТР ДАННЫХ ПОРТА B - PORTB

Бит 7 6 5 4 3 2 1 0

┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐

$18 ($38) │PORTB7│PORTB6│PORTB5│PORTB4│PORTB3│PORTB2│PORTB1│PORTB0│

└──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘

Чт./зап. R/W R/W R/W R/W R/W R/W R/W R/W

Нач.знач. 0 0 0 0 0 0 0 0

РЕГИСТР НАПРАВЛЕНИЯ ДАННЫХ ПОРТА B - DDRB

Бит

┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐

$17 ($37) │ DDB7 │ DDB7 │ DDB5 │ DDB4 │ DDB3 │ DDB2 │ DDB1 │ DDB0 │

└──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘

Чт./зап. R/W R/W R/W R/W R/W R/W R/W R/W

Нач.знач. 0 0 0 0 0 0 0 0

ВЫВОДЫ ПОРТА B - PINB

Бит

┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐

$16 ($36) │PINB7 │PINB7 │PINB5 │PINB4 │PINB3 │PINB2 │PINB1 │PINB0 │

└──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘

Чт./зап. R R R R R R R R

Нач.знач. Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z

PINB не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов порта B. При чтении PORTB, читаются данные из регистра-защелки, при чтении PINB читаются логические значения присутствующие на выводах порта.

ПОРТ B, КАК ПОРТ ВВОДА/ВЫВОДА ОБЩЕГО НАЗНАЧЕНИЯ

Все 8 бит порта B при использовании для ввода/вывода одинаковы.

Бит DDBn регистра DDRB выбирает направление передачи данных. Если бит установлен (1), вывод сконфигурирован как выход. Если бит сброшен(0) - вывод сконфигурирован как вход. Если PORTBn установлен и вывод сконфигурирован как вход, включается КМОП подтягивающий резистор. Для отключения резистора, PORTBn должен быть сброшен (0) или вывод должен быть сконфигурирован как выход.

Таблица 17. Влияние DDBn на выводы порта B

┌────┬──────┬───────┬───────────┬───────────────────────────────────┐

│DDBn│PORTBn│Вх/Вых │Подт.резист│Комментарий │

├────┼──────┼───────┼───────────┼───────────────────────────────────┤

│0 │0 │Вход │Нет │Третье состояние (Hi-Z) │

├────┼──────┼───────┼───────────┼───────────────────────────────────┤

│0 │1 │Вход │Да │PBn источник тока Iil, если извне │

│ │ │ │ │соединен с землей │

├────┼──────┼───────┼───────────┼───────────────────────────────────┤

│1 │0 │Выход │Нет │Выход установлен в 0 │

├────┼──────┼───────┼───────────┼───────────────────────────────────┤

│1 │1 │Выход │Нет │Выход установлен в 1 │

└────┴──────┴───────┴───────────┴───────────────────────────────────┘

n = 7,6...0 - номер вывода

АЛЬТЕРНАТИВНЫЕ ФУНКЦИИ PORTB

SCK - PORTB, Bit 7 - вход тактовой частоты для загрузки/чтения памяти.

MISO - PORTB, Bit 6 - выход данных для чтения памяти

MOSI - PORTB, Bit 5 - вход данных для загрузки памяти

OC1 - PORTB, Bit 3 - Выход совпадения. Этот вывод может быть сконфигурирован для внешнего вывода события совпадения таймера1. Для этого бит DDB3 должен быть установлен в 1 (вывод сконфигурирован как выход).

AIN1 - PORTB, Bit 1 - Отрицательный вход аналогового компаратора. Если этот вывод сконфигурирован как вход (DDB1=0) и отключен внутренний подтягивающий резистор, этот вывод работает как отрицательный вход внутреннего аналогового компаратора.

AIN0 - PORTB, Bit 0 - Положительный вход аналогового компаратора. Если этот вывод сконфигурирован как вход (DDB0=0) и отключен внутренний подтягивающий резистор, этот вывод работает как положительный вход внутреннего аналогового компаратора.

Порт D

Для порта D зарезервированы 3 ячейки памяти - регистр PORTD $12 ($32), регистр направления данных - DDRD $11 ($31) и выводы порта D - PIND $10 ($30). Регистры данных и направления данных могут читаться/записываться, ячейка PIND - только для чтения.

Порт D - 7-разрядный двунаправленный порт с встроенными подтягивающими регистрами. Выходные буферы порта могут поглощать ток до 20 mA. Если выводы используются как входы и на них подан низкий уровень, они являются источниками тока Iil, если подключены подтягивающие резисторы. Некоторые из выводов порта имеют альтернативные функции, как показано в таблице 18.

Если выводы порта используются для обслуживания альтернативных функций, они должны быть сконфигурированы на ввод/вывод в соответствии с описанием функции.

Таблица 18. Альтернативные функции порта D

┌───────────┬────────────────────────────────────────┐

│Вывод порта│Альтернативная функция │

├───────────┼────────────────────────────────────────┤

│ PD0 │ RXD (вход данных UART) │

├───────────┼────────────────────────────────────────┤

│ PD1 │ TXD (выход данных UART) │

├───────────┼────────────────────────────────────────┤

│ PD2 │ INT0 (вход внешнего прерывания 0) │

├───────────┼────────────────────────────────────────┤

│ PD3 │ INT1 (вход внешнего прерывания 1) │

├───────────┼────────────────────────────────────────┤

│ PD4 │ T0 (внешний вход таймера счетчика 0) │

├───────────┼────────────────────────────────────────┤

│ PD5 │ T1 (внешний вход таймера счетчика 1) │

├───────────┼────────────────────────────────────────┤

│ PD6 │ ICP (вход захвата таймера счетчика 1)│

└───────────┴────────────────────────────────────────┘

РЕГИСТР ДАННЫХ ПОРТА D - PORTD

Бит

┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐

$12 ($32) │ - │PORTD6│PORTD5│PORTD4│PORTD3│PORTD2│PORTD1│PORTD0│

└──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘

Чт./зап. R R/W R/W R/W R/W R/W R/W R/W

Нач.знач. 0 0 0 0 0 0 0 0

РЕГИСТР НАПРАВЛЕНИЯ ДАННЫХ ПОРТА B - DDRB

Бит

┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐

$11 ($31) │ - │ DDD7 │ DDD5 │ DDD4 │ DDD3 │ DDD2 │ DDD1 │ DDD0 │

└──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘

Чт./зап. R R/W R/W R/W R/W R/W R/W R/W

Нач.знач. 0 0 0 0 0 0 0 0

ВЫВОДЫ ПОРТА B - PINB

Бит

┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐

$10 ($30) │PIND7 │PIND7 │PIND5 │PIND4 │PIND3 │PIND2 │PIND1 │PIND0 │

└──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘

Чт./зап. R R R R R R R R

Нач.знач. Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z

PIND не является регистром, по этому адресу осуществляется доступ

к физическим значениям каждого из выводов порта D. При чтении PORTD, читаются данные из регистра-защелки, при чтении PIND читаются логические значения присутствующие на выводах порта.

Порт D, как порт ввода/вывода общего назначения

Бит DDDn регистра DDRD выбирает направление передачи данных. Если бит установлен (1), вывод сконфигурирован как выход. Если бит сброшен (0) - вывод сконфигурирован как вход. Если PORTDn установлен и вывод сконфигурирован как вход, включается КМОП подтягивающий резистор. Для отключения резистора, PORTDn должен быть сброшен (0) или вывод должен быть сконфигурирован как выход.

Таблица 19. Влияние DDDn на выводы порта D

┌────┬──────┬───────┬───────────┬───────────────────────────────────┐

│DDDn│PORTDn│Вх/Вых │Подт.резист│Комментарий │

├────┼──────┼───────┼───────────┼───────────────────────────────────┤

│0 │0 │Вход │Нет │Третье состояние (Hi-Z) │

├────┼──────┼───────┼───────────┼───────────────────────────────────┤

│0 │1 │Вход │Да │PDn источник тока Iil, если извне │

│ │ │ │ │соединен с землей │

├────┼──────┼───────┼───────────┼───────────────────────────────────┤

│1 │0 │Выход │Нет │Выход установлен в 0 │

├────┼──────┼───────┼───────────┼───────────────────────────────────┤

│1 │1 │Выход │Нет │Выход установлен в 1 │

└────┴──────┴───────┴───────────┴───────────────────────────────────┘

n = 6...0 - номер вывода

Альтернативные функции порта D

ICP - Порт D, бит 6 - вход захвата таймера/счетчика 1. Подробнее см. описание таймера.

T1 - Порт D, бит 5 - тактовый вход таймера/счетчика 1. Подробнее см. описание таймера.

T0 - Порт D, бит 4 - тактовый вход таймера/счетчика 0. Подробнее см. описание таймера.

INT1 - Порт D, бит 3 - вход внешних прерываний 1. Подробнее см. описание прерываний.

INT0 - Порт D, бит 2 - вход внешних прерываний 0. Подробнее см. описание прерываний.

TXD - Порт D, бит 1 - выход передатчика UART. Если разрешена работа передатчика UART, независимо от состояния DDRD1 этот вывод сконфигурирован как выход.

RXD - Порт D, бит 0 - выход приемника UART. Если разрешена работа приемника UART, независимо от состояния DDRD0 этот вывод сконфигурирован как выход. Когда UART использует вывод для приема данных, единица в PORTD0 подключает встроенный подтягивающий резистор.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: