Работа периферийных устройств
Содержание
Введение
1. Параллельные порты ввода-вывода
2. Последовательный порт ввода-вывода SPI
3. Последовательный порт ввода-вывода UART
4. Последовательный порт ввода-вывода TWSI (I2C)
5. Таймеры-счетчики общего назначения
5.1 Таймер-счетчик типа А
5.2 Таймер-счетчик типа В
5.3 Таймер-счетчик типа С
5.4 Таймер-счетчик типа D
5.5 Таймер-счетчик типа Е
6. Сторожевой таймер
7. Аналого-цифровой преобразователь
8. Аналоговый компаратор
9. Программируемый аппаратный модулятор
10. Блок прерываний
Литература
В работе периферийных устройств участвуют регистры ввода-вывода. Работа периферийных устройств определяется состоянием разрядов регистров управления, а состояние периферийных устройств отражается состоянием разрядов регистров состояния. Имена и номера регистров ввода-вывода у микроконтроллеров разных типов указаны в приложении П4. Имена и номера разрядов регистров управления и разрядов регистров состояния приведена в приложении П5.
Число параллельных портов ввода-вывода, суммарное число выводов портов и суммарное число выводов, выполняющих альтернативные функции, у микроконтроллеров разных типов указано в табл.1.1 в колонках Р, I/O и ALT соответственно.
В табл.1 приведены имена портов и указано число выводов (в числителе) и число выводов, выполняющих альтернативные функции (в знаменателе) для каждого порта в отдельности.
В состав порта РХ (X = А, В, С, D, Е) входят три регистра ввода-вывода с именами DDRX, PORTX и PINX. Регистр PINX не имеет аппаратной реализации. Это имя используется в командах, по которых выполняется чтение байтов на выводах порта.
Число разрядов в регистрах равно числу выводов порта.
Таблица 1
Тип МК | Имя порта | |||||
PA | PB | PC | PD | PE | PF | |
t11 | 6/6 | |||||
t12 | 6/6 | |||||
t15 | 6/6 | |||||
2323 | 3/2 | |||||
2343 | 5/3 | |||||
1200 | 8/2 | 7/2 | ||||
2313 | 8/3 | 7/7 | ||||
t28 | 4/1 | 8/5* | 8/0 | |||
4433 | 6/6 | 6/6 | 8/8 | |||
8515 | 8/8 | 8/8 | 8/8 | 8/7 | ||
8535 | 8/8 | 8/8 | 8/2 | 8/8 | ||
m163 | 8/8 | 8/8 | 8/4 | 8/8 | ||
m103 | 8/8 | 8/8 | 8/8* | 8/7 | 8/8 | 8/8* |
* - PC - только выходы, PB, PF - только входы |
Состояние разряда DDRX. Y определяет направление передачи бита через вывод порта PX. Y. При DDRX. Y = 0 вывод PX. Y работает в режиме входа, при DDRX. Y = 1 - в режиме выхода.
В режиме входа состояние разряда PORTX. Y определяет состояние вывода PX. Y. При PORTX. Y = 0 вывод находится в высокоимпендансном состоянии (Z-состояние), при PORTX. Y = 1 вывод, порта через внутренний резистор с сопротивлением 30-120 кОм подключается к шине VCC. В режиме входа вывод PX. Y соединен с шиной данных ШД. Y.
Значение входного сигнала на отдельном выводе порта может быть определено с использованием команд условного перехода с мнемокодом SBIC PINX, Y (№ 113) или SBIS PINX, Y (№ 114). При одном значении сигнала выбирается одно продолжение программы, при другом значении сигнала - другое продолжение.
В режиме выхода разряд PORTX. Y определяет значение выходного сигнала на выводе PX. Y. При PORTX. Y = 0 выходной сигнал имеет низкий уровень напряжения (U0l), при PORTX. Y = 1 - высокий уровень напряжения (UOнI).
В табл.2 указано состояние вывода порта PX. Y при различных комбинациях состояний разрядов DDRX. Y и PORTX. Y.
Таблица 2
DORX. Y | PORTX. Y | PX. Y |
0 | 0 | Вход, (Z) |
0 | 1 | Вход, (R) |
1 | 0 | Выход, (U0L) |
1 | 1 | Выход, (UOH) |
В статическом состоянии при низком уровне выходного сигнала ток нагрузки IOL должен быть не более, чем 20 мА, при высоком уровне сигнала ток нагрузки IOH должен быть не более, чем 3 мА. При этом суммарный ток нагрузки для всех выводов микроконтроллера должен быть не более, чем некоторое пороговое значение (200-400 мА для микроконтроллеров разных типов) и суммарный ток нагрузки для выводов микроконтроллера, расположенных на одной стороне корпуса микросхемы, также должен быть не более, чем некоторое пороговое значение (100-200 мА для микроконтроллеров разных типов).
Задание значения выходного сигнала на отдельных выводах порта выполняется с использованием команд с мнемокодами CBI PORTX, Y (№ 65) (для низкого уровня) и SBI PORTX, Y (№ 66) для высокого уровня.
При совместном использовании всех разрядов порта для приема и выдачи байтов используются команды с мнемокодами IN Rd, PINX (№ 60) и OUT PORTX, Rr (№ 61) соответственно.
Обращение к параллельному порт) ' для приема и выдачи байтов может быть выполнено с использованием команд с обращением по адресам в адресном пространстве SRAM (№№ 34-57). При этом в качестве адресов используются номера регистров ввода-вывода, увеличенные на $20.
При пуске и перезапуске микроконтроллера все разряды регистров DDRX и PORTX всех портов сбрасываются в нулевое состояние и выводы портов работают в режиме входов и находятся в Z состоянии.
Исключением является разряд PORTA.2 регистра PORTA в микроконтроллере типа t28, который устанавливается в единичное состояние.
В микроконтроллере тина m163 при установке в единичное состояние разряда PUD регистра SFIOR (№ $30) во всех разрядах всех портов разрывается цепь, связывающая вывод порта с шпион VCC через резистор. В микроконтроллере типа t15 разряд PUD входит в регистр MCUCR (№ $35).
В микроконтроллере типа t28 выводы порта РВ подключаются через резисторы к шине VCC при единичном состоянии разряда PLUPB регистра MCUCS.
Порт SPI входит в состав периферийных устройств микроконтроллеров типа 4433, 8515, 8535, ml63 и t10З.
Основным элементом порта SPI является восьмиразрядный реверсивный сдвигающий регистр, который используется для параллельного ввода из шипы данных микроконтроллера байта, предназначенного для выдачи: последовательной выдачи байта на выход микроконтроллера с одновременным последовательным вводом байта со входа микроконтроллера и параллельной выдачи введенного байта в буферный регистр для последующей передачи в шину данных микроконтроллера. Сдвигающий регистр и буферный регистр имеют одно имя - SPDR (№ $0F). Запись байта в сдвигающий регистр выполняется по команде OUT SPDR, RI, чтение байта из буферного регистра - по команде IN Rd, SPDR.
В состав порта SPI входят также регистр управления SPCR (№ $0D), регистр состояния SPSR (№ $0Е) и элементы, управляющие работой порта. Структурная схема порта SPI изображена.
Порт SPI переводится в рабочее состояние при установке в единичное состояние разряда SPE регистра SPCR. При этом выводы порта MOSI, MISO, SCK и SS подключаются к внешним выводам микроконтроллера в соответствии с табл.3.
Таблица 3
Выводы порта SPI | Тип МК | ||||
4433 | 8515 | 8535 | ГП163 | m10З | |
MOSI | РВЗ | РВ5 | РВ5 | РВ5 | РВ2 |
MISO | РВ4 | РВ6 | РВ6 | РВ6 | РВЗ |
SCK | РВ5 | РВ7 | РВ7 | РВ7 | РВ1 |
SS | РВ2 | РВ4 | РВ4 | РВ4 | РВО |
Порт SPI может работать в режиме ведущего (master) или ведомого (slave). Выбор режима определяется состоянием разряда MSTR регистра SPCR. При MSTR = 1 порт работает в режиме ведущего. При этом вывод MOSI является выходом, вывод MISO - входом, вывод SCK - выходом. Функция вывода SS зависит от состояния разряда DDRB. X (X = 2, 4, 0) регистра DDRB. Если DDRB. X = 1 (вывод РВ. Х является выходом), вывод SS порта SPI не подключен к выводу РВ. Х порта РВ. Если DDRB. X = 0 (вывод РВ. Х является входом), значение сигнала на этом входе влияет на работу порта SPI. При единичном значении сигнала на этом входе порт работает в режиме ведущего, а при появлении нулевого значения сигнала он переводится в режим ведомого и для возвращения в режим ведущего после появления единичного значения сигнала на входе SS требуется вновь установить разряд MSTR регистра SPCR в единичное состояние.
В режиме ведущего обмен байтами начинается при записи байта в сдвигающий регистр SPDR (W). В схеме управления СУ1 вырабатывается серия из восьми импульсов, которая управляет сдвигом в регистре SPDR (W) и выдается на выход SCK для управления сдвигом в регистре ведомого порта.
Полярность импульсов определяется состоянием разряда CPOL регистра SPCR. При CPOL = 0 сигнал на выходе SCK в исходном состоянии имеет нулевое значение, импульс формируется при переходе сигнала к единичному значению. При CPOL=1 сигнал в исходном состоянии имеет единичное значение и импульс формируется при переходе сигнала к нулевому значению.
Направление сдвига в регистре и порядок следования битов на выходе MOSI определяется состоянием разряда DORD регистра SPCR. При DORD = 0 выдача байта начинается со старшего бита (D7), при DORD = 1 выдача начинается с младшего бита (DO). При выдаче каждого бита на выход MOSI соответствующий бит из ведомого порта поступает на вход MISO и вводится в сдвигающий регистр.
Серия из восьми импульсов в ведущем порте формируется из тактового сигнала СК путем деления частоты в пересчетной схеме ПС. Коэффициент деления К определяется комбинацией состояний разрядов SPR0 и SPR1 регистра SPCR в соответствии с табл.4. В микроконтроллере типа ml63 в регистре состояния SPSR есть дополнительный разряд SPI2X, при единичном состоянии которого скорость передачи увеличивается в два раза.
Таблица 4
SPR1 | SPR0 | к | КГ |
0 | 0 | 4 | 2 |
0 | 1 | 16 | 8 |
1 | 0 | 64 | 32 |
1 | 1 | 128 | 64 |
4 - в МК типа m163 при SPI2X = 1
При завершении выдачи/приема байта устанавливается в единичное состояние разряд SPIF регистра состояния SPSR и при единичном состоянии разряда SPIE регистра SPCR в блок прерываний поступает запрос прерывания SPI STC (SPI Serial Transfer Complete).