Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры Схемотехника.doc
Скачиваний:
7
Добавлен:
25.09.2019
Размер:
14.02 Mб
Скачать

Вопрос 14

последовательный ввод-вывод информации в AVR: каналы SPI и UART.

Аналоговый ввод-вывод (Аналоговый компаратор)

Микроконтроллер Atmega103 имеет два последовательных порта: SPI и UART

Последовательный периферийный интерфейс – SPI(Serial Peripheral Interface). Интерфейс обеспечивает высокоскоростной синхронный обмен данными. Основные возможности интерфейса:

- дуплексный 3-проводный синхронный обмен данными

- режим работы ведущий/ведомый

- обмен с передаваемыми первыми старшим или младшим битами

- 4 программируемые скорости обмена данными

- флаг прерывания по окончанию передачи

- активация из Idle режима (только в режиме ведомого)

Вывод PB1(SCK) является выходом тактового сигнала ведущего микроконтроллера и входом тактового сигнала ведомого. По записи ведущим процессором данных в регистр SPI начинает работать тактовый генератор SPI, и записанные данные сдвигаются через вывод вывода PB2(MOSI) ведущего микроконтроллера на вывод PB2(MOSI) входа ведомого микроконтроллера. После сдвига одного байта тактовый генератор SPI останавливается, устанавливает флаг окончания передачи (SPIF). Если в регистре SPCR установлен бит разрешения прерывания SPI(SPIE), произойдет запрос прерывания. Вход выбора ведомого PB0(SS#), для выбора индивидуального SPI устройства в качестве ведомого, устанавливается в низкий уровень. При установке высокого уровня на выводе PB0(SS#) вывод PB2(MOSI) может быть использован в качестве выхода входа. Режим ведущий/ведомый может быть установлен и программным способом установкой или очисткой бита MSTR в регистре управления SPI

Два сдвиговых регистра ведущего и ведомого микроконтроллеров можно рассматривать как один разнесенный 16-разрядный циклический сдвиговый регистр. При сдвиге данных из ведущего МК в ведомый одновременно происходит сдвиг данных из ведомого МК в ведущий, т.е. в течение одного цикла сдвига происходит обмен данными между ведущим и ведомым МК

В системе организованна одиночная буферизация передающей стороны и двойная буферизация приемной стороны. Передаваемые символы не могут быть записаны в регистр данных SPI прежде, чем будет полностью завершен цикл сдвига. При приёме данных принимаемый символ должен быть считан из регистра данных SPI прежде, чем будет завершен прием следующего символа, в противном случае предшествующий символ будет потерян.

При разрешенном SPI обмене направление данных на выводах MOSI, MISO, SCK и SS# настраиваются в соответствии с таблицей

Вывод

Направление ведущего

Направление ведомого

MOSI

Определяется пользователем

Вход

MISO

Вход

Определяется пользователем

SCK

Определяется пользователем

Вход

SS

Определяется пользователем

Вход

Регистр управления SPI –SPCR: адрес $0D($2D)

7 6 5 4 3 2 1 0 разряды

SPIE

SPE

DORD

MSTR

CPOL

CPHA

SPR1

SPR0

0 0 0 0 0 0 0 0 исходный

Код

Бит 7 – SPIE –разрешение прерывания SPI. Установка бита SPIE приводит к установке бита SPIF регистра SPSR и, при разрешении глобального прерывания, к выполнению прерывания SPI.

Бит 6 – SPE – разрешение SPI. Установка бита SPE разрешает подключение SS, MOSI, MISO и SCK к выводам PB4, PB5, PB6, PB7.

Бит 5 – DORD– порядок данных. При установленном бите DORD передача слова данных происходит вперед младшим байтом. При очищенном бите DORD первым передается старший байт слова данных

Бит 4 –MSTR – выбор режима ведущий/ведомый. При установленном бите MSTR порт SPI работает в режиме ведущего, а при очищенном бите – в режиме ведомого. Если SS# определен как вход и на него подан низкий уровень при установленном MSTR, то MSTR будет сброшен и будет установлен, бит SPIF в регистре SPSR. Чтобы вновь разрешить ведущий режим SPI, пользователь должен установить MSTR

SPR1

SPR0

Тактовая частотаSCK

0

0

fc/4

0

1

fc/16

1

0

fc/64

1

1

fc/128

Бит 3 – CPOL – полярность тактового сигнала. При установленном бите CPOL сигнал SCK в режиме Idle находится на высоком уровне. При сброшенном бите CPOL – на низком уровне

Бит 2 – CPHA – фаза тактового сигнала

Бит 1,0 - SPR1,SPR0 – выбор частоты тактового сигнала. Эти два бита управляют частотой тактового сигнала прибора, работающего в режиме ведущего. В режиме ведомо состояния битов влияние не оказывают.

Соотношение между частотой SCK и частотой генератора

Регистр состояния SPI –SPSR: адрес $0E($2E)

7 6 5 4 3 2 1 0 разряды

SPIF

WCOL

-

-

-

-

-

-

0 0 0 0 0 0 0 0 исходный

Код

Бит 7 - SPIF – флаг прерывания по SPI. По завершении обмена последовательными данными бит SPIF устанавливается и если бит SPIE в регистре SPCR установлено глобальное прерывание, прерывание по SPI обрабатывается. Бит SPIF очищается аппаратно при выполнении процедуры обработки соответствующего вектора прерывания. Бит SPIF может быть очищен также при первом чтении регистра состояния SPSR при установленном бите SPIF с последующем обращением к регистру данных SPDR.

Бит 6 –WCOL – флаг ошибки при записи. Бит WCOL устанавливается, если в процессе передачи данных выполнялась запись в регистр данных SPDR. Бит WCOL (и бит SPIF) аппаратно очищается при первом чтении регистра SPSR с установленным WCOL и последующим обращением к регистру данных SPDR.

Биты 5…..0 – Res- зарезервированные биты

Регистр данных SPI –SPDR: адрес $0F($2F)

7 6 5 4 3 2 1 0 разряды

MSB

LSB

0 0 0 0 0 0 0 0 исходный

Код

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

Универсальный асинхронный приемопередачик – UART.

Микроконтроллеры ATmega103 оснащены дуплексным универсальным приёмопередатчиком (UART). Его основные возможности :

- генератор обеспечивает любую скорость передачи информации в бодах

- высокая скорость передачи при низкой частоте XTAL

- 8-разрядный или 9-разрядный форматы данных

- обнаружение ошибок формирование кадров

- детектирование бита ложного старта

- три отдельных прерывания: по завершению передачи, по пустому регистру передаваемых данных и по завершению приёма.

ТХС -прерывание по завершению передач

UDRE -прерывание по пустому регистру сдвига

UDR – регистр данных сдвоенный (для передачи и для приёма) регистр

UCR – регистр управления

USR – регистр статуса

Передача данных инициируется записью передаваемых данных в регистр данных UDR. Данные пересылаются из UDR в сдвиговый регистр передатчика в следующих случаях:

- новый символ записан в UDR после того, как был выведен из регистра стоповый бит предшествующего символа. Сдвиговый регистр загружается немедленно

- новый символ записан в UDR прежде, чем был выведен стоповый бит предшествовавшего символа. Сдвиговый регистр загружается после выхода стопового бита передаваемого символа, находящегося в сдвиговом регистре.

Если 10(11)-разрядный сдвиговый регистр передатчика пуст, то данные из регистра UDR передаются в сдвиговый регистр. При этом устанавливается бит UDRE регистра USR. При установленном UDRE UART готов принять следующий символ. Запись в UDR очищает бит UDRE. Когда данные переданы из UDR в сдвиговый регистр, бит 0 сдвинутого регистра сбрасывается(состояние 0 стартовый бит), а старший бит устанавливается(состояние 1 –стоповый бит). Если в регистре управления UCR установлен бит CHR9(т.е. выбран режим 9-разрядного слова данных), то бит ТхB8 регистра UCR пересылает в бит 9 сдвигового регистра передатчика.

Сразу после пересылки данных в сдвиговый регистр импульсом синхросигнала стартовый бит выдвигается на вывод ТхD. За ним следуют биты данных, младший бит первым. Когда будет выдвинут стоповый бит, сдвиговый регистр загрузится новыми данными, если байт был записан в регистр UDR во время передачи. В процессе загрузки бит UDRE находится в установленном состоянии. Если новые данные не будут загружены в UDR до выдачи стопового бита, то флаг UDRE остается установленным. В этом случае, после того как стоповый бит будет присутствовать на выводе TхD в течение одного такта, в регистре статуса UART (USR) устанавливается флаг завершения передачи TХC

Регистр Данных UART – UDR: адрес $0С($2С)

7 6 5 4 3 2 1 0 разряды

MSB

LSB

0 0 0 0 0 0 0 0 исходный

Код

В действительности имя UDR представляет собой два физически разделенных регистра – регистр передачи данных и регистр приема данных, использующих один и тот же адрес. При записи в регистр запись производится в регистр передачи данных UART, а при чтении выполняется чтение содержимого регистра приема данных UART.

Регистр Статуса UART – USR(UART Status Register): адрес $0С($2С)

7 6 5 4 3 2 1 0 разряды

RxC

TxC

UDRE

FE

OR

-

-

-

0 0 0 0 0 0 0 0 исходный

Код

Регистр USR обеспечивает чтение информации о состоянии UART

Бит 7 - RxC –прием завершен. Этот бит устанавливается при пересылке принятого символа из сдвигового регистра приемника в регистр UDR вне зависимости от отсутствия или наличия ошибок приема кадра. При установленных в UCR бите RxCIE и в USR бите RxC выполняется прерывание по завершению приема UART. Бит RxC очищается при чтении UDR. При приеме данных по прерыванию процедура обработки прерывания после завершения приема должна прочитать UDR с тем, чтобы очистить RxC, иначе по ее окончании произойдет новое прерывание.

Бит 6 –Txc – передача завершена.Этот бит устанавливается когда весь символ(включая стоповый бит) выведен из сдвигового регистра передачи, а в регистр UDR не записаны новые данные. Этот флаг используется при полудуплексном протоколе обмена, когда оборудование передачи должно установить режим приема и освободить коммуникационную нишу сразу после завершения передачи.

Бит 5- UDRE – регистр данных пуст. Этот бит устанавливается когда весь символ записанный в UDR, пересылается в сдвиговый регистр передатчика. Установка этого бита означает, что передатчик готов к получению нового символа.

Бит 4 – FE – ошибка кадра. Этот бит устанавливается при обнаружении условий ошибочного приема кадра, т.е. когда при приеме стопового бита обнаружено состояние 0. Бит FE очищается при приеме стопового бита логическим уровнем 0.

Бит 3- DOR- переполнение данных. Бит DOR устанавливается при обнаружении условий переполнения, т.е. когда символ, уже находящийся в регистре UDR, не прочитан перед пересылкой нового символа из сдвигового регистра приемника. Бит DOR буферизирован, т.е. он будет оставаться установленным, пока не будут читаны правильные данные из UDR. Бит DOR очищается, когда данные приняты и пересланы в UDR.

Бит 2..0- Res – зарезервированные биты

Регистр управления UART – UCR(UART Control Register): адрес $0A($2A)

7 6 5 4 3 2 1 0 разряды

RxCIE

TxCIE

UDRIE

RxEN

TxEN

CHR9

RxB8

TxB8

0 0 0 0 0 0 0 0 исходный

Код

Бит 7- RxCIE – разрешение прерывания по завершению приема. При установленном 1 бите RxCIE и разрешении глобального прерывания установка бита RxC в регистре USR приведет к прерыванию после завершения приема.

Бит 6 - TxCIE - разрешение прерывания после завершения передачи. При установленном бите TxCIE и разрешении глобального прерывания установка бита TxC в регистре USR приведет к выполнению прерывания после завершения передачи.

Бит 5 - UDRIE - разрешение прерывания по пустому регистру данных. При установленном бите UDRIE и разрешении глобального прерывания установка бита UDRE в регистре USR приведет к прерыванию по пустому регистру данных UART.

Бит 4 - RxEN - разрешение приемника. Установленный бит RxEN разрешает использование приемника UART. Если приемник запрещен, то флаги статуса TXC, DOR и FE установить не возможно. Если эти флаги установлены, то очистка бита RxEN не приведет к очистке флагов.

Бит 3 - TxEN - разрешение передатчика. Установленный бит TxEN разрешает использование приемника UART.При запрещении передатчика во время передачи символа, передатчик не будет заблокирован до тех пор, пока не будут полностью переданы символ в сдвиговом регистре плюс любой находящийся в UDR следующий символ.

Бит 2- CHR9- режим 9-разрядных символов. При установленном бите CHR9 передаются и принимаются 9-разрядные символы плюс стартовый и стоповый бит. Девятые биты читаются и записываются с использованием битов RxB8 и TxB8 регистра UCR. Девятый бит данных может использоватся как дополнительный стоповый бит или бит контроля четности.

Бит 1- RxB8- прием 8-разрядных данных. При установленном бите CHR9 бит TxB8 является девятым битом данных принятого символа.

Бит 0 - TxB8- передача 8-разрядных данных. При установленном бите CHR9 бит TxB8 является девятым битом данных передаваемого символа.

Регистр формирования синхросигналаUART – UBRR: адрес $09($29)

7 6 5 4 3 2 1 0 разряды

MSB

LSB

0 0 0 0 0 0 0 0 исходный

Код

Формирователь синхросигнала последовательного обмена представляет делитель, генерирующий импульсы синхросигнала с частотой определяемой выражением.

BAUD=Fck/16(UBRR+1) где BAUD –частота в бодах; Fck- частота тактового генератора;

UBRR равно содержимому регистра UBRR(Baud Rate register=0..255),

Регистр UBRR является 8-разрядным регистром с возможностью чтения/записи. Числовое чтение в нем определяет скорость UART.

Аналоговый компаратор

Аналоговый компаратор сравнивает уровни напряжений на неинвертирующем входе AIN0 и инвертирующем входе AIN1. Если напряжение на неинвертирующем входе AIN0 превышает напряжение на инвертирующем входе AIN1, то выход аналогового компаратора ACO принимает единичное состояние. Выход компаратора может быть настроен для использования в качестве источника входного сигнала для схемы захвата фронтов таймера-счетчика 1. Кроме того, компаратор может генерировать собственный запрос на обработку прерывания. Пользователь может выбрать несколько событий, по которым возникает прерывание: нарастающий, падающий фронт на выходе компаратора или любое его изменение. Функциональная схема компаратора и связанной с ним логики представлена на рисунке 107.

Функциональная схема аналогового компаратора

Регистр специальных функций ввода-вывода – SFIOR

Разряд 3 – ACME: Выбор мультиплексора на входе аналогового компаратора

Если выключен аналогово-цифровой преобразователь (ADEN=0 в регистре ADCSRA) и в данный разряд записана лог. 1, то к инвертирующему входу аналогового компаратора подключен выход аналогового мультиплексора АЦП. Запись в данный разряд лог. 0 приведет к подключению инвертирующего входа аналогового компаратора к выводу микроконтроллера AIN1. Более подробно об использовании данной настройки см. в разделе “Мультиплексированный вход аналогового компаратора”.

Регистр состояния и управления аналогового компаратора – ACSR

Разряд 7 – ACD: Отключение аналогового компаратора

Запись в данный разряд лог. 1 приводит к снятию питания с аналогового компаратора. Данный разряд можно устанавливать в любой момент при необходимости отключения аналогового компаратора. Его использование позволяет снизить энергопотребление в активном режиме и режиме холостого хода. Перед изменением бита ACD необходимо отключить прерывание по аналоговому компаратору путем сброса бита ACIE в регистре ACSR. В противном случае может возникнуть прерывание после изменения значения данного бита.

Разряд 6 – ACBG: Подключение источника опорного напряжения к аналоговому компаратору

После установки данного бита к неинвертирующему входу компаратора подключается источник опорного напряжения. После сброса данного разряда неинвертирующий вход компаратора связан с выводом AIN0 микроконтроллера. См. также “Встроенный источник опорного напряжения”.

Разряд 5 – ACO: Выход аналогового компаратора

Данный бит выхода аналогового компаратора связан непосредственно с выходом ACO через цепь синхронизации. Синхронизация реализована как временная задержка на 1 – 2 машинных цикла.

Разряд 4 – ACI: Флаг прерывания аналогового компаратора

Данный разряд устанавливается аппаратно, при возникновении события в соответствии с установками бит ACIS1 и ACIS0. Запрос на обработку прерывания аналогового компаратора выполняется, если установлены биты ACIE и I в регистре SREG. ACI сбрасывается аппаратно при переходе на соответствующий вектор обработки прерывания. Альтернативно, бит ACI можно сбросить программно путем записи лог. 1 в данный флаг.

Разряд 3 – ACIE: Разрешение прерывания аналогового компаратора

Если в данный разряд записана лог. 1 и установлен бит I в регистре статуса, то прерывание по аналоговому компаратору активизируется. Запись в данный разряд лог. 0 приводит к отключению данного прерывания.

Разряд 2 – ACIC: Подключение аналогового компаратора к схеме захвата фронтов

Установка данного разряда приводит к разрешению совместной работы схемы захвата фронтов таймера-счетчика 1 и аналогового компаратора. В этом случае, выход аналогового компаратора непосредственно подключен к входному каскаду схемы захвата фронтов, позволяя к компаратору добавить функции подавления шумов и настройки фронтов прерывания по захвату фронта таймером-счетчиком 1.После записи в данный разряд лог. 0 связь между аналоговым компаратором и схемой захвата фронтов разрывается. Для активизации прерывания схемы захвата фронтов таймера-счетчика 1 по срабатыванию аналогового компаратора необходимо установить бит TICIE1 в регистре маски прерывания таймера (TIMSK).

Разряды 1, 0 – ACIS1, ACIS0: Выбор события прерывания аналогового компаратора

Данные разряды определяют какое событие приводит к генерации запроса на прерывание аналогового компаратора. Варианты установок данных разрядов и их назначение представлены в табл.

Таблица 93 - Установки разрядов ACIS1, ACIS0

ACIS1

ACIS0

Событие

0

0

Прерывание по любому изменению на выходе компаратора

0

1

Зарезервировано

1

0

Прерывание по падающему фронту на выходе компаратора

1

1

Прерывание по нарастающему фронту на выходе компаратора

Перед изменением бит ACIS1/ACIS0 необходимо отключить прерывание по аналоговому компаратору путем сброса бита разрешения прерывания в регистре ACSR. В противном случае может возникнуть прерывание при изменении значений данных бит.

Мультиплексированный вход аналогового компаратора

Имеется возможность использовать выводы ADC7..0 в качестве неинвертирующих входов аналогового компаратора. Для организации такого ввода используется мультиплексор АЦП и, следовательно, в этом случае АЦП должен быть отключен. Если установлен бит разрешения подключения мультиплексора к аналоговому компаратору (бит ACME в SFIOR) и выключен АЦП (ADEN=0 в регистре ADCSRA), то состояние разрядов MUX2..0 регистра ADMUX определяют какой вывод микроконтроллера подключен к неинвертирующему входу аналогового компаратора (см. табл. 94). Если ACME сброшен или установлен ADEN, то в качестве неинвертирующего входа аналогового компаратора используется вывод микроконтроллера AIN1.

Таблица 94 – Мультиплексированный вход аналогового компаратора

ACME

ADEN

MUX2..0

Неинвертирующий вход аналогового компаратора

0

x

xxx

AIN1

1

1

xxx

AIN1

1

0

000

ADC0

1

0

001

ADC1

1

0

010

ADC2

1

0

011

ADC3

1

0

100

ADC4

1

0

101

ADC5

1

0

110

ADC6

1

0

111

ADC7