WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 | 2 || 4 |

«А. В. Евстифеев С Е Р И Я Микроконтроллеры AVR семейства Classic фирмы ATMEL 3 е издание, стереотипное Москва Издательский дом «Додэка XXI» 2006 — 1 — МИРОВАЯ ЭЛЕКТРОНИКА УДК 004.312 (035.5) ББК ...»

-- [ Страница 3 ] --

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

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

4.5.3. Внешние прерывания;

регистры GIMSK и GIFR Регистр GIMSK (General Interrupt Mask Register — общий регистр маски прерываний) предназначен для управления внешними прерываниями. Он расположен по адресу $3B ($5B). Содержимое этого регистра для различных моделей показано на Рис. 4.19, а описание его разрядов приведено в Табл. 4.7.

7 6 5 4 3 2 1 AT90S — INT0 — — — — — — AT90S/LS AT90S/LS Чтение(R)/Запись(W) R R/W R R R R R R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 INT1 INT0 — — — — — — Прочие Чтение(R)/Запись(W) R/W R/W R R R R R R Начальное значение 0 0 0 0 0 0 0 Рис. 4.19. Общий регистр маски прерываний GIMSK Таблица 4.7. Общий регистр маски прерываний GIMSK Разряд Название Описание Модель AT90S — Не используется, читается как «0» AT90S AT90S Флаг разрешения внешнего прерывания INT1. Если в этом разряде записана лог. «1» и флаг I регистра SREG также установлен в «1», то INT1 разрешаются внешние прерывания с вывода INT1. Условия генерации Прочие прерывания определяются содержимым разрядов ISC11 и ISC10 (ISC для AT90C8534) регистра MCUCR (см. п. 2.2.2.3) Флаг разрешения внешнего прерывания INT0. Если в этом разряде записана лог. «1» и флаг I регистра SREG также установлен в «1», 6 INT0 то разрешаются внешние прерывания с вывода INT01. Условия Все модели генерации прерывания определяются содержимым разрядов ISC01 и ISC00 (ISC0 для AT90C8534) регистра MCUCR (см. п. 2.2.2.3) 5…0 — Не используются, читаются как «0» Все модели Соответственно регистр GIFR (General Interrupt Flag Register — общий регистр флагов прерываний) предназначен для индикации наступления внешних прерываний. Он расположен по адресу $3A ($5A). Содержимое этого регистра для различных моделей показано на Рис. 4.20, а описание его разрядов приведено в Табл. 4.8.

— 170 — 4. Устройство управления 7 6 5 4 3 2 1 — INTF0 — — — — — — AT90S Чтение(R)/Запись(W) R R/W R R R R R R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 INTF1 INTF0 — — — — — — Прочие * Чтение(R)/Запись(W) R/W R/W R R R R R R Начальное значение 0 0 0 0 0 0 0 * Кроме AT90S1200;

в этой модели регистр GIFR отсутствует Рис. 4.20. Общий регистр флагов прерываний GIFR Таблица 4.8. Общий регистр флагов прерываний GIFR Разряд Название Описание Модель AT90S — Не используется, читается как «0» AT90S Флаг внешнего прерывания INT1. Если в результате события на выводе INT1 сформировался запрос на внешнее прерывание, этот разряд устанав INTF1 Прочие ливается в «1». Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно — записью в него лог. «1» Флаг внешнего прерывания INT0. Если в результате события на выводе INT0 сформировался запрос на внешнее прерывание, этот разряд устанав 6 INTF0 Все модели ливается в «1». Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно — записью в него лог. «1» 5…0 — Не используются, читаются как «0» Все модели Что касается самих внешних прерываний, то здесь необходимо сделать три замечания:

1. Прерывания генерируются даже в том случае, когда выводы внеш них прерываний сконфигурированы как выходы. Благодаря этой особенности можно генерировать программные прерывания.

2. В модели AT90S1200 пользователь не имеет непосредственного до ступа к флагу прерывания. Если ожидается внешнее прерывание по фронту импульса, этот флаг можно сбросить следующим способом:

• запретить внешние прерывания, очистив флаг INT0 в регистре GIMSK;

• выбрать прерывание по уровню;

• выбрать активный фронт прерывания;

• повторно разрешить внешние прерывания, установив INT0 в GIMSK.

— 171 — 4. Устройство управления 3. В модели AT90C8534 имеется один дополнительный регистр GIPR (General Interrupt Pin Register — регистр состояния входов внешних прерываний), расположенный по адресу $10 ($30). Два его разряда отражают состояние входов внешних прерываний INT1 и INT2. Со держимое этого регистра показано на Рис. 4.21, а описание его раз рядов приведено в Табл. 4.9.

7 6 5 4 3 2 1 — — — — IPIN1 IPIN0 — — Чтение(R)/Запись(W) R R R R R R R R Начальное значение 0 0 0 0 X X 0 Рис. 4.21. Регистр состояния входов внешних прерываний GIPR Таблица 4.9. Регистр состояния входов внешних прерываний GIPR Разряд Название Описание 7…4 — Не используются, читаются как «0» Флаг состояния вывода INT1. При чтении этого разряда 3 IPIN возвращается логический уровень, присутствующий на входе INT Флаг состояния вывода INT0. При чтении этого разряда 2 IPIN возвращается логический уровень, присутствующий на входе INT 1, 0 — Не используются, читаются как «0» 4.5.4. Прерывания от таймеров;

регистры TIMSK и TIFR Регистр TIMSK (Timer/Counter Interrupt Mask Register — регистр маски прерываний от таймеров/счетчиков) предназначен для управления пре рываниями от таймеров. Он расположен по адресу $39 ($59). Содержимое этого регистра для различных моделей показано на Рис. 4.22, а описание его разрядов приведено в Табл. 4.10. Для разрешения какого либо преры вания от таймера необходимо установить в «1» соответствующий разряд регистра TIMSK и, разумеется, флаг I регистра SREG.

Соответственно регистр TIFR (Timer/Counteer Interrupt Flag Register — регистр флагов прерываний от таймеров/счетчиков) предназначен для ин дикации наступления прерываний от таймеров. Он расположен по адресу $38 ($58). Содержимое этого регистра для различных моделей показано на Рис. 4.23, а описание его разрядов приведено в Табл. 4.11.

— 172 — 4. Устройство управления 7 6 5 4 3 2 1 AT90S — — — — — — TOIE0 — AT90S/LS AT90S/LS Чтение(R)/Запись(W) R R R R R R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S TOIE1 OCIE1A — — TICIE1 — TOIE0 — AT90S/LS AT90S/LS Чтение(R)/Запись(W) R/W R/W R R R/W R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S/LS OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 — TOIE AT90S/LS Чтение(R)/Запись(W) R/W R/W R/W R/W R/W R/W R R/W Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S TOIE1 OCIE1A OCIE1B — TICIE1 — TOIE0 — AT90S Чтение(R)/Запись(W) R/W R/W R/W R R/W R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 — — — — — TOIE1 — TOIE0 AT90C Чтение(R)/Запись(W) R R R R R R/W R R/W Начальное значение 0 0 0 0 0 0 0 Рис. 4.22. Регистр маски прерываний от таймеров/счетчиков TIMSK Таблица 4.10. Регистр маски прерываний от таймеров/счетчиков TIMSK Разряд Название Описание Модель AT90S AT90S Флаг разрешения прерывания TOIE1 AT90S по переполнению таймера /счетчика T AT90S AT90S Флаг разрешения прерывания по событию AT90S OCIE «Compare Match» («совпадение») таймера/счетчика T2 AT90S — Не используется, читается как «0» Прочие AT90S Флаг разрешения прерывания по событию OCIE1A AT90S «Compare Match A» («совпадение А») таймера/счетчика T AT90S Флаг разрешения прерывания по событию AT90S OCIE «Compare Match» («совпадение») таймера/счетчика T1 AT90S Флаг разрешения прерывания AT90S TOIE по переполнению таймера /счетчика T2 AT90S — Не используется, читается как «0» Прочие — 173 — 4. Устройство управления Таблица 4.10 (окончание) Разряд Название Описание Модель Флаг разрешения прерывания по событию AT90S OCIE1B «Compare Match B» («совпадение В») таймера/счетчика T1 AT90S 5 Флаг разрешения прерывания по событию AT90S TICIE «Input Capture» («захват») таймера/счетчика T1 AT90S — Не используется, читается как «0» Прочие Флаг разрешения прерывания по событию AT90S OCIE1A «Compare Match A» («совпадение А») таймера/счетчика T1 AT90S — Не используется, читается как «0» Прочие AT90S AT90S Флаг разрешения прерывания по событию TICIE1 AT90S «Input Capture» («захват») таймера/счетчика T AT90S AT90S Флаг разрешения прерывания по событию AT90S OCIE1B «Compare Match B» («совпадение В») таймера/счетчика T1 AT90S — Не используется, читается как «0» Прочие AT90S Флаг разрешения прерывания TOIE1 AT90S по переполнению таймера /счетчика T AT90C — Не используется, читается как «0» Прочие AT90S 1 — Не используется, читается как «0» AT90S AT90C Флаг разрешения прерывания TOIE0 Прочие по переполнению таймера /счетчика T AT90S Флаг разрешения прерывания 0 TOIE0 AT90S по переполнению таймера /счетчика T AT90C — Не используется, читается как «0» Прочие Таблица 4.11. Регистр флагов прерываний от таймеров/счетчиков TIFR Разряд Название Описание Модель AT90S AT90S 7 TOV1 Флаг устанавливается в «1» при переполнении таймера /счетчика T1 AT90S AT90S AT90S Флаг устанавливается в «1» при совпадении значения таймера/ AT90S OCF счетчика T2 с содержимым регистра OCR2 (событие «совпадение») AT90S — Не используется, читается как «0» Прочие — 174 — 4. Устройство управления Таблица 4.11 (окончание) Разряд Название Описание Модель Флаг устанавливается в «1» при совпадении значения таймера/счетчика AT90S OCF1A T1 AT90S с содержимым регистра OCR1A (событие «совпадение А») AT90S Флаг устанавливается в «1» при совпадении значения таймера/счетчика AT90S OCF T1 с содержимым регистра OCR1 (событие «совпадение») AT90S AT90S TOV2 Флаг устанавливается в «1» при переполнении таймера /счетчика T AT90S — Не используется, читается как «0» Прочие Флаг устанавливается в «1» при совпадении значения таймера/счетчика AT90S OCF1B T1 с содержимым регистра OCR1B (событие «совпадение B») AT90S 5 Флаг устанавливается в «1» при загрузке содержимого AT90S ICF таймера/счетчика T1 в регистр ICR1 (событие «захват») AT90S — Не используется, читается как «0» Прочие Флаг устанавливается в «1» при совпадении значения таймера/счетчика AT90S OCF1A T1 с содержимым регистра OCR1A (событие «совпадение A») AT90S — Не используется, читается как «0» Прочие AT90S AT90S Флаг устанавливается в «1» при загрузке содержимого ICF1 AT90S таймера/счетчика T1 в регистр ICR1 (событие «захват») AT90S AT90S Флаг устанавливается в «1» при совпадении значения таймера/счетчика AT90S OCF1B T1 с содержимым регистра OCR1B (событие «совпадение B») AT90S — Не используется, читается как «0» Прочие AT90S TOV1 Флаг устанавливается в «1» при переполнении таймера /счетчика T1 AT90S AT90C — Не используется, читается как «0» Прочие AT90S — Не используется, читается как «0» AT90S AT90C TOV0 Флаг устанавливается в «1» при переполнении таймера /счетчика T0 Прочие AT90S TOV0 Флаг устанавливается в «1» при переполнении таймера /счетчика T0 AT90S AT90C — Не используется, читается как «0» Прочие Примечание:

Kаждый флаг этого регистра сбрасывается аппаратно при запуске подпрограммы обра ботки соответствующего прерывания или программно — записью в него лог. «1».

— 175 — 4. Устройство управления 7 6 5 4 3 2 1 AT90S — — — — — — TOV0 — AT90S/LS AT90S/LS Чтение(R)/Запись(W) R R R R R R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S TOV1 OCF1A — — ICF1 — TOV0 — AT90S/LS AT90S/LS Чтение(R)/Запись(W) R/W R/W R R R/W R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S/LS OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 — TOV AT90S/LS Чтение(R)/Запись(W) R/W R/W R/W R/W R/W R/W R R/W Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S TOV1 OCF1A OCF1B — ICF1 — TOV0 — AT90S Чтение(R)/Запись(W) R/W R/W R/W R R/W R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 — — — — — TOV1 — TOV0 AT90C Чтение(R)/Запись(W) R R R R R R/W R R/W Начальное значение 0 0 0 0 0 0 0 Рис. 4.23. Регистр флагов прерываний от таймеров/счетчиков TIFR Для получения более подробной информации о функционировании таймеров и о событиях, вызываемых ими, обратитесь к главе 6.

Глава 5. Порты ввода/вывода 5.1. Общие сведения Kак и любые другие микроконтроллеры, микроконтроллеры AVR семейства Classic имеют порты ввода/вывода. Kаждый порт состоит из определенного числа выводов, через которые микроконтроллер может принимать или передавать цифровые сигналы. Kонфигурирование каждой лини порта (задание направления передачи данных) может быть произведено программно в любой момент времени. Входные бу феры портов построены по схеме триггера Шмитта. Для линий, скон фигурированных как входные, также имеется возможность подключе ния внутреннего подтягивающего резистора сопротивлением 35… кОм между входом и проводом питания VDD. Kроме того, если вывод (вход) с подключенным внутренним подтягивающим резистором под ключить к общему проводу, он может служить источником тока.

Максимальная нагрузочная способность выходных буферов портов ввода/вывода при лог. «0» на выходе составляет 20 мА. Благодаря это му микроконтроллер может непосредственно управлять светодиодны ми индикаторами.

Kоличество доступных портов, или, если точнее, количество кон тактов ввода/вывода, является одним из основных параметров, влия ющих на выбор конкретной модели микроконтроллера.

• AT90S1200 имеет два порта ввода/вывода: B (8 разрядный) и D ( разрядный). Общее количество контактов ввода/вывода равно 15;

• AT90S2313 также имеет два порта ввода/вывода: B (8 разрядный) и D (7 разрядный). Общее количество контактов ввода/вывода равно 15;

• AT90S/LS2323 имеет один 3 разрядный порт ввода/вывода B;

— 177 — 5. Порты ввода/вывода • AT90S/LS2343 имеет один 5 разрядный порт ввода/вывода B;

• AT90S/LS2333, AT90S/LS4433 имеют по три порта ввода/вывода: B (6 разрядный), C (6 разрядный) и D (8 разрядный). Общее количе ство контактов ввода/вывода равно 20;

• AT90S/LS4434, AT90S/LS8535 имеют по четыре 8 разрядных порта ввода/вывода A, B, C и D. Общее количество контактов ввода/выво да равно 32;

• AT90S4414, AT90S8515 также имеют по четыре 8 разрядных порта ввода/вывода A, B, C и D. Общее количество контактов ввода/выво да в этих моделях равно 32;

• AT90C8534 имеет один 7 разрядный порт вывода A и два входа внеш них прерываний. В данном микроконтроллере присутствует также и 6 разрядный аналоговый входной порт. Таким образом, общее коли чество контактов ввода/вывода в этой модели равно 15;

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

5.2. Обращение к портам ввода/вывода Обращение к портам производится через регистры ввода/вывода, причем под каждый порт в адресном пространстве ввода/вывода за резервировано по 3 адреса. По этим адресам размещаются три реги стра: регистр данных порта PORTx, регистр направления данных DDRx и регистр выводов порта PINx. Разряды этих регистров имеют названия: Px7…Px0 — для регистров PORTx, DDx7…DDx0 — для ре гистров DDRx и PINx7…PINx0 — для регистров PINx. Действитель ные названия регистров (и их разрядов) получаются подстановкой названия порта вместо символа «x», соответственно для порта A ре гистры называются PORTA, DDRA, PINA, для порта B — PORTB, DDRB, PINB и т.д. Положение этих регистров в адресном простран стве ввода/вывода приведено в Табл. 5.1. При сбросе микроконтрол лера регистры DDRx и PORTx очищаются, а все выводы портов по сле сброса устанавливаются в третье состояние.

— 178 — 5. Порты ввода/вывода Таблица. 5.1. Регистры портов ввода/вывода Название Порт Адрес регистра PORTA $1B ($3B) A DDRA $1A ($3A) PINA $19 ($39) PORTB $18 ($38) B DDRB $17 ($37) PINB $16 ($36) PORTC $15 ($38) C DDRC $14 ($37) PINC $13 ($36) PORTD $12 ($32) D DDRD $11 ($31) PIND $10 ($30) Следует заметить, что «регистры» PINx на самом деле регистрами не яв ляются, по этим адресам осуществляется доступ к физическим значениям сигналов на выводах порта. Соответственно, они доступны только для чте ния, тогда как регистры PORTx и DDRx доступны и для чтения, и для запи си. А в микроконтроллере AT90C8534 регистр выводов порта вообще отсут ствует, т.к. единственный порт этой модели является только портом вывода.

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

Таким образом, запись в порт означает запись требуемого состоя ния для каждого вывода порта в соответствующий регистр данных порта PORTx. А чтение состояния порта выполняется чтением либо регистра данных порта PORTx, либо регистра выводов порта PINx.

При чтении регистра выводов порта PINx происходит считывание ло гических уровней сигналов, присутствующих на выводах порта. А при чтении регистра данных порта PORTx происходит считывание данных, находящихся в регистре защелке порта. Причем сказанное справедли во как для входных, так и для выходных контактов.

— 179 — AT90S AT90S AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S AT90S AT90C 5. Порты ввода/вывода Предположим, что все выводы 8 разрядного порта A определены как выходы и требуется установить младшие 4 разряда в «1», а старшие 4 разряда — в «0». Это можно осуществить путем записи в этот порт со ответствующего значения, как показано ниже. Необходимо только предварительно задать конфигурацию выводов этого порта.

LDI r0,$0F ;

запись числа 0Fh в регистр r OUT $1B,r0 ;

запись числа 0Fh в порт A (0..3=«1», ;

4..7=«0») Теперь предположим, что все выводы порта A определены как входы и требуется узнать их состояние. Это осуществляется следующим образом:

IN r0,$1B ;

в регистре r0 – сигналы на выводах порта A Приведенные примеры сознательно упрощены. Все выводы ис пользуются либо только как входы, либо только как выходы. Разумеет 7 6 5 4 3 2 1 AT90S — — — — — — TOIE0 — AT90S/LS AT90S/LS Чтение(R)/Запись(W) R R R R R R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S TOIE1 OCIE1A — — TICIE1 — TOIE0 — AT90S/LS AT90S/LS Чтение(R)/Запись(W) R/W R/W R R R/W R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S/LS OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 — TOIE AT90S/LS Чтение(R)/Запись(W) R/W R/W R/W R/W R/W R/W R R/W Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S TOIE1 OCIE1A OCIE1B — TICIE1 — TOIE0 — AT90S Чтение(R)/Запись(W) R/W R/W R/W R R/W R R/W R Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 — — — — — TOIE1 — TOIE0 AT90C Чтение(R)/Запись(W) R R R R R R/W R R/W Начальное значение 0 0 0 0 0 0 0 Рис. 5.1. Упрощенная схема одного канала порта ввода/вывода — 180 — 5. Порты ввода/вывода ся, можно задать конфигурацию каждого вывода независимо от ос тальных, так что в одном порту будут находиться одновременно как входы, так и выходы. Подробно об этом будет рассказано в разделе 5.3.

Чтобы лучше понять, как функционируют порты ввода/вывода, на Рис. 5.1 приведена структурная схема одного из каналов порта ввода/вы вода, работающего только в качестве порта ввода/вывода общего назна чения (не имеющего дополнительных функций). В то же время логичес кие связи, показанные на Рис. 5.1, присутствуют во всех каналах любого порта ввода/вывода, поэтому данную схему можно считать упрощенной схемой любого канала ввода/вывода. Для сравнения на Рис. 5.2 показана полная структурная схема 1 го канала порта D (вывод PD1) микроконт роллера AT90S4434, являющегося также выходом данных UART.

RD & Сброс R Q D DDD C WD & Сброс R Pxn 1 Q D PORTD & C RL WP RP TXEN WP: Запись в PORTD WD: Запись в DDRD TXD RL: Чтение регистра–защелки порта RP: Чтение состояния вывода порта RD: Чтение регистра DDRD TXD: UART,передаваемые данные TXEN: UART,разрешение передачи Рис. 5.2. Полная структурная схема канала PD1 микроконтроллера AT90S — 181 — Шина данных 5. Порты ввода/вывода 5.3. Kонфигурирование портов ввода/вывода Kак уже было отмечено, порты имеют всего две возможности по конфигурированию:

• задание направления передачи данных (вход или выход);

• подключение/отключение внутреннего подтягивающего резистора.

Направление передачи данных определяется содержимым регистра передачи данных DDRx. Если разряд DDxn этого регистра установлен в «1», соответствующий n й вывод порта является выходом. Если же разряд DDxn этого регистра сброшен в «0», соответствующий вывод порта является входом.

А вот управление подтягивающим резистором осуществляется с помо щью регистра данных порта PORTx. Если разряд Pxn регистра PORTx уста новлен в «1» и соответствующий вывод порта является входом, между этим выводом и проводом питания подключается подтягивающий резистор.

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

В Табл. 5.2 приведены все возможные конфигурации выводов портов ввода/вывода. Kроме того, рекомендуем еще раз обратить внимание на схему, представленную на Рис. 5.1.

Таблица. 5.2. Влияние регистров DDRx и PORTx на конфигурацию выводов портов DDxn Pxn Функция вывода Резистор Примечания 0 0 вход отключен Третье состояние (Hi Z) При подключении вывода к общему проводу 0 1 вход подключен он является источником тока 1 0 выход отключен Выход установлен в «0» 1 1 выход отключен Выход установлен в «1» Примечание:

n = 7…0 — номер вывода (разряд порта).

И в заключение небольшое замечание по поводу конфигурирования выводов портов. Если вывод используется каким либо периферийным ус тройством микроконтроллера, то соответствующие этому выводу разряды регистров DDRx и PORTx, как правило, должны быть установлены в соот ветствии с дополнительной функцией вывода. Однако некоторые перифе рийные устройства при активизации самостоятельно переопределяют конфигурацию используемых выводов. Об этом будет упомянуто далее при описании конкретных периферийных устройств.

— 182 — Глава 6. Таймеры 6.1. Общие сведения Микроконтроллеры семействаc Classic, в зависимости от модели, имеют в своем составе от одного до трех таймеров/счетчиков общего назначения (см. Табл. 6.1).

Таблица 6.1. Таймеры/счетчики реального времени Таймер/счетчик Таймер/счетчик T0 Таймер/счетчик T1 Таймер/счетчик T Первый таймер (T0, 8 разрядный), имеющийся во всех моделях, может использоваться только для отсчета и измерения временных интервалов или как счетчик внешних событий. При переполнении счетного регистра тай мера генерируется запрос на прерывание. Два других таймера (16 разряд ный T1 и 8 разрядный T2) вводят дополнительные по отношению к тайме ру T0 функции. Оба таймера могут генерировать запрос на прерывание не только при переполнении счетного регистра, но и при наступлении ряда других событий. Также оба таймера могут использоваться в качестве широт но импульсных модуляторов. Таймер T2, кроме того, может работать в асинхронном (относительно тактового сигнала микроконтроллера) режиме.

А вот для модели AT90C8534 сказанное не совсем справедливо. Дело в том, что оба таймера/счетчика этого микроконтроллера (8 разрядный T — 183 — AT90S AT90S AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S AT90S AT90C 6. Таймеры и 16 разрядный T1) функционально идентичны и к тому же могут исполь зоваться только для формирования временных интервалов.

В составе всех микроконтроллеров семейства имеется также сторо жевой таймер, который является непременным атрибутом всех совре менных микроконтроллеров. Этот таймер используется для предот вращения зацикливания программы.

6.2. Назначение выводов таймеров/счетчиков Kаждый таймер/счетчик (кроме таймеров/счетчиков в AT90C8534) использует один или более выводов микроконтроллера. Kак правило, эти выводы — линии портов ввода/вывода общего назначения, а функции, реализуемые этими выводами при работе совместно с тай мерами/счетчиками, являются их альтернативными функциями.

Все выводы микроконтроллеров, относящиеся к таймерам/счетчи кам общего назначения, сведены в Табл. 6.2. Также в этой таблице при водятся функции этих выводов.

Таблица 6.2. Выводы, используемые таймерами/счетчиками общего назначения Название Описание T0 PD4 PD4 PB2 PD4 PB0 PB0 Вход внешнего сигнала таймера T T1 — PD5 — PD5 PB1 PB1 Вход внешнего сигнала таймера T ICP — PD6 — PB0 PD6 ICP* Вход захвата таймера T OC1 — PB3 — PB1 — — Выход схемы сравнения таймера T OC1A — — — — PD5 PD5 То же OC1B — — — — PD4 OC1B* То же OC2 — — — — PD7 — Выход схемы сравнения таймера T TOSC1 — — — — PC6 — Вход для подключения резонатора TOSC2 — — — — PC7 — Выход для подключения резонатора * Выделенный вывод микроконтроллера (не линия порта ввода/вывода).

Не забывайте о том, что при использовании альтернативных функ ций линий портов ввода/вывода необходимо, как правило, самостоя тельно сконфигурировать эти выводы в соответствии с их функцио нальным назначением (вход/выход).

— 184 — AT90S AT90S AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S/LS AT90S AT90S 6. Таймеры 6.3. Таймер/счетчик T Таймер/счетчик T0 (8 разрядный) может использоваться для формирова ния временных интервалов или для подсчета числа внешних событий (кроме AT90C8534). Структурная схема таймера/счетчика T0 приведена на Рис. 6.1.

Kак видно из рисунка, в его состав входят 2 регистра (регистр управления TCCR0 и счетный регистр TCNT0), а также блок управления таймером. Флаг переполнения счетного регистра таймера TOV0 находится в регистре флагов прерываний от таймеров TIFR. Разрешение и запрещение прерываний от таймера осуществляются установкой/сбросом флага TOIE0 регистра TIMSK.

Запрос на прерывание «Переполнение T/C0» & 8– разрядная шина данных Регистр управления Регистр TIMSK Регистр TIFR TCCR CK Счетный регистр Тактовый сигнал Блок (TCNT0) управления TO Рис. 6.1. Структурная схема таймера/счетчика T Счетный регистр таймера/счетчика TCNTO расположен по адресу $ ($52) и доступен в любой момент времени как для чтения, так и для запи си. При записи в регистр TCNT0 во время работы таймера счет будет про должен в следующем за командой записи машинном цикле. После пода чи напряжения питания в регистре TCNT0 находится нулевое значение.

При переходе таймера/счетчика из состояния «$FF» в состояние «$00» устанавливается флаг TOV0 регистра TIFR и генерируется запрос на пре рывание. Разрешение прерывания осуществляется установкой в «1» разря да TOIE0 регистра TIMSK (разумеется, флаг общего разрешения прерыва ний I регистра SREG также должен быть установлен в «1»).

— 185 — TOIE CSO CSO CSO TOV 6. Таймеры Таймер/счетчик T0 может работать в двух режимах:

1. Режим таймера. В этом режиме на вход таймера/счетчика посту пают импульсы тактового сигнала микроконтроллера (непо средственно или через предделитель);

2. Режим счетчика событий. В этом режиме инкремент содержи мого счетного регистра производится по активному фронту сиг нала на входе T0 микроконтроллера. В модели AT90C8534 дан ный режим отсутствует.

Выбор режима работы (источника тактового сигнала), а также запуск и остановка таймера/счетчика осуществляются с помощью разрядов CS02…CS00 регистра управления таймером TCCR0 (Рис. 6.2), располо женного по адресу $33 ($53). Соответствие между состоянием этих разря дов и режимом работы таймера/счетчика приведено в Табл. 6.3. Остальные разряды регистра доступны только для чтения и содержат «0».

7 6 5 4 3 2 1 — — — — — CS02 CS01 CS Чтение(R)/Запись(W) R R R R R R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 Рис. 6.2. Формат регистра TCCR Таблица 6.3. Выбор источника тактового сигнала для таймера/счетчика T CS02 CS01 CS00 Источник тактового сигнала 0 0 0 Таймер/счетчик остановлен 0 0 1 CK (тактовый сигнал микроконтроллера) 0 1 0 CK/ 0 1 1 CK/ 1 0 0 CK/ 1 0 1 CK/ 1 1 0 Вывод T0, инкремент счетчика производится по спадающему фронту импульсов* 1 1 1 Вывод T0, инкремент счетчика производится по нарастающему фронту импульсов* * В модели AT90C8534 значения «110» и «111» разрядов CS02…CS00 зарезервированы (режим счета внешних событий отсутствует).

При использовании таймера/счетчика в режиме счета внешних собы тий необходимо помнить, что сигнал, присутствующий на выводе T0, син хронизируется с частотой тактового генератора микроконтроллера (состо яние вывода T0 считывается по нарастающему фронту внутреннего такто вого сигнала). Поэтому для обеспечения корректной работы таймера от — 186 — 6. Таймеры внешнего сигнала промежуток времени между соседними импульсами должен быть больше периода тактового сигнала микроконтроллера.

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

6.4. Таймер/счетчик T Таймер/счетчик T1 (16 разрядный) имеет гораздо больше функций, чем таймер/счетчик T0 (во всех моделях, кроме AT90C8534). Прежде все го, как и таймер/счетчик T0, он может использоваться для формирования временных интервалов или для подсчета числа внешних событий. Во вто рых, таймер/счетчик T1 может по внешнему сигналу сохранять свое теку щее состояние в отдельном РВВ. В третьих, он может выполнять опреде ленные действия при равенстве содержимого счетного регистра заданно му значению. И наконец, он может работать как широтно импульсный модулятор. Причем генерация сигнала с ШИМ «вынесена» в отдельный режим работы таймера/счетчика, в котором недоступны остальные функ ции (кроме генерации прерываний). Режим генерации сигнала с ШИМ будем называть «режим ШИМ», а режим, в котором доступны остальные функции таймера/счетчика, — «режим таймера».

Существует три варианта рассматриваемого таймера/счетчика в за висимости от модели микроконтроллера. Структурные схемы всех трех вариантов приведены на Рис. 6.3…6.5.

Из рисунков видно, что в состав первого варианта таймера/счетчи ка входят три 16 разрядных регистра (счетный регистр TCNT1, ре гистр захвата ICR1 и регистр сравнения OCR1 или OCR1A), 16 раз рядный компаратор, два 8 разрядных управляющих регистра TCCR1A и TCCR1B, а также блок управления таймером. Второй вариант отли чается наличием дополнительного компаратора и регистра сравнения;

регистры сравнения в этом варианте называются OCR1A и OCR1B. А в модели AT90C8534 таймер/счетчик T1 идентичен таймеру/счетчику T0 (только счетный регистр TCNT1 — 16 разрядный).

Все флаги состояния таймера/счетчика (переполнения, совпадения и захвата) находятся в регистре флагов прерываний от таймеров TIFR, а разрешение/запрещение прерываний от таймера осуществляется ус тановкой/сбросом соответствующих флагов регистра TIMSK.

— 187 — 6. Таймеры Запрос на прерывание «Переполнение «Совпадение «Захват T/C1» T/C1» T/C1» & & & 8– разрядная шина данных Регистр управления A Регистр управления B Регистр TIMSK Регистр TIFR (TCCR1A) (TCCR1B) 15 8 7 CK Блок Регистр захвата (ICR1) управления T Триггер захвата 15 8 7 Сброс Тактовый сигнал Счетный регистр (TCNT1) Направление счета 15 8 7 16–разрядный компаратор 15 8 7 Регистр сравнения (OCR1A)* * OCR1 в моделях AT90S/LS2333 и AT90S/LS Примечание: Позиции разрядов регистров TIMSK и TIFR показаны условно Рис. 6.3. Структурная схема таймера/счетчика T1 моделей AT90S2313, AT90S/LS2333 и AT90S/LS — 188 — TOIE OCIE1A TICIE CS CS CS CTC ICF ICF ICES ICNC TOV TOV PWM PWM OCF1A OCF1A COM1A COM1A 6. Таймеры Запрос на прерывание «Переполнение «Совпадение A «Совпадение B «Захват T/C1» T/C1» T/C1» T/C1» & & & & 8– разрядная шина данных Регистр управления A Регистр управления B Регистр TIMSK Регистр TIFR (TCCR1A) (TCCR1B) 15 8 7 CK Блок Регистр захвата (ICR1) управления T Триггер захвата 15 8 7 Сброс Тактовый сигнал Счетный регистр (TCNT1) Направление счета 15 8 7 0 15 8 7 16–разрядный компаратор 16–разрядный компаратор 15 8 7 0 15 8 7 Регистр сравнения (OCR1A) Регистр сравнения (OCR1B) Примечание: Позиции разрядов регистров TIMSK и TIFR показаны условно Рис. 6.4. Структурная схема таймера/счетчика T1 моделей AT90S/LS4434, AT90S/LS8535 и AT90S4414/ — 189 — TOIE OCIE1A OCIE1B TICIE CS CS CS CTC ICF ICF ICES ICNC TOV TOV PWM PWM OCF1A OCF1A OCF1B OCF1B COM1A COM1A COM1B COM1B 6. Таймеры Запрос на прерывание «Переполнение T/C1» & 8– разрядная шина данных Регистр Регистр Регистр управления TIMSK TIFR TCCR 15 Счетный регистр Тактовый Блок CK (TCNT1) сигнал управления Рис. 6.5. Структурная схема таймера/счетчика T1 модели AT90C Счетный регистр таймера/счетчика T1 реализован как суммирую щий (в режиме ШИМ — как суммирующий/вычитающий) счетчик и доступен в любой момент времени как для чтения, так и для записи.

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

Физически регистр TCNT1 размещен в двух регистрах TCNT1H:TCNT1L, расположенных по адресам $2D:$2C (адреса в ад ресном пространстве ОЗУ, соответственно, $4D:$4C). Чтобы при обра щении ЦПУ микроконтроллера к этим регистрам запись или чтение обоих байтов содержимого счетного регистра происходило одновре менно, обращение производится с использованием специального разрядного регистра TEMP (этот регистр используется только процес сором и программно недоступен). Этот же регистр используется и при обращении к остальным 16 разрядным регистрам таймера/счетчика T1: OCR1 (OCR1A и OCR1B) и ICR1. Прерывания на время обраще ния к любому из этих регистров должны быть запрещены.

Собственно запись и чтение регистра TCNT1 происходят следую щим образом:

— 190 — TOIE CS CS CS TOV 6. Таймеры Запись в регистр TCNT При записи старшего байта значения в регистр TCNT1H он поме щается в регистр TEMP. Далее, при записи младшего байта в регистр TCNT1L он объединяется с содержимым регистра TEMP и оба байта записываются в регистр TCNT1 одновременно. Из сказанного видно, что для выполнения полного цикла записи в 16 разрядный регистр первым должен быть загружен старший байт (регистр TCNT1H).

Чтение регистра TCNT При чтении регистра TCNT1L (младший байт) содержимое регистра TCNT1H пересылается в регистр TEMP. А при последующем чтении реги стра TCNT1H возвращается значение, сохраненное в регистре TEMP. Сле довательно, для выполнения полной операции чтения 16 разрядного ре гистра первым должен быть прочитан младший байт (регистр TCNT1L).

Управление таймером/счетчиком T1 осуществляется с помощью двух регистров управления TCCR1A и TCCR1B (в модели AT90C8534 — с по мощью одного регистра TCCR1). Эти регистры расположены по адресам $2F ($4F) (регистр TCCR1A) и $2E ($4E) (регистры TCCR1B, TCCR1).

Формат регистра TCCR1A приведен на Рис. 6.6, а регистров TCCR1B и TCCR1 — на Рис. 6.7. Значение отдельных разрядов этих регистров будет описано далее в этой главе. Неиспользуемые разряды регистров доступны только для чтения и содержат «0».

7 6 5 4 3 2 1 COM1A1 COM1A0 — — — — PWM11 PWM10 AT90S Чтение(R)/Запись(W) R/W R/W R R R R R/W R/W Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S/LS COM11 COM10 — — — — PWM11 PWM AT90S/LS Чтение(R)/Запись(W) R/W R/W R R R R R/W R/W Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 0 AT90S/LS AT90S/LS COM1A1 COM1A0 COM1B1 COM1B0 — — PWM11 PWM AT90S Чтение(R)/Запись(W) R/W R/W R/W R/W R R R/W R/W AT90S Начальное значение 0 0 0 0 0 0 0 Рис. 6.6. Формат регистра TCCR1A — 191 — 6. Таймеры 7 6 5 4 3 2 1 ICNC1 ICES1 — — CTC1 CS12 CS11 CS Чтение(R)/Запись(W) R/W R/W R R R/W R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 — — — — — CS12 CS11 CS Чтение(R)/Запись(W) R R R R R R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 Рис. 6.7. Формат регистров: a — TCCR1B;

б — TCCR 6.4.1. Выбор источника тактового сигнала По отношению к тактовому сигналу таймер/счетчик T1 может ра ботать в двух режимах:

1. Режим таймера. В этом режиме на вход таймера/счетчика посту пают импульсы тактового сигнала микроконтроллера (непо средственно или через предделитель).

2. Режим счетчика событий. В этом режиме инкремент содержи мого счетного регистра производится по активному фронту сиг нала на входе T1 микроконтроллера. В модели AT90C8534 дан ный режим отсутствует.

Выбор источника тактового сигнала, а также запуск и остановка тайме ра/счетчика осуществляются с помощью разрядов CS12…CS10 регистра управления таймером TCCR1B. Соответствие между состоянием этих раз рядов и режимом работы таймера/счетчика приведено в Табл. 6.4.

Таблица 6.4. Выбор источника тактового сигнала для таймера/счетчика T Регистр TCCR1B (TCCR1) Источник тактового сигнала CS12 CS11 CS 0 0 0 Таймер/счетчик остановлен 0 0 1 CK (тактовый сигнал микроконтроллера) 0 1 0 CK/ 0 1 1 CK/ 1 0 0 CK/ 1 0 1 CK/ 1 1 0 Вывод T1, инкремент счетчика производится по спадающему фронту импульсов* 1 1 1 Вывод T1, инкремент счетчика производится по нарастающему фронту импульсов* * В модели AT90C8534 значения «110» и «111» разрядов CS12…CS10 зарезервированы (ре жим счета внешних событий отсутствует).

— 192 — 6. Таймеры При использовании внешнего тактового сигнала необходимо по мнить, что он синхронизируется с частотой тактового генератора ми кроконтроллера (состояние вывода T1 считывается по нарастающему фронту внутреннего тактового сигнала). Поэтому для обеспечения корректной работы таймера от внешнего сигнала промежуток време ни между соседними импульсами должен быть больше периода так тового сигнала микроконтроллера.

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

6.4.2. Режим таймера Принцип работы таймера/счетчика T1 в этом режиме такой же, как и таймера/счетчика T0. По каждому импульсу, поступающему на так товый вход таймера/счетчика, производится инкремент содержимого счетного регистра TCNT1. При переходе таймера/счетчика из состоя ния «$FFFF» в состояние «$0000» устанавливается флаг TOV1 регист ра TIFR и генерируется запрос на прерывание. Разрешение прерыва ния осуществляется установкой в «1» разряда TOIE1 регистра TIMSK (разумеется, флаг общего разрешения прерываний I регистра SREG также должен быть установлен в «1»). Однако, как уже было сказано, для всех моделей, кроме AT90C8534, в этом режиме таймера/счетчика T1 доступны и дополнительные функции.

6.4.2.1. Функция захвата (Capture) Данная функция заключается в сохранении в определенный мо мент времени состояния таймера/счетчика в регистре захвата ICR1.

Это действие может производиться либо по активному фронту сигна ла на выводе ICP микроконтроллера, либо по сигналу от аналогового компаратора (см. описание аналогового компаратора в главе 7). При этом устанавливается флаг ICF1 регистра TIFR и генерируется запрос на прерывание. Разрешение прерывания осуществляется установкой в «1» разряда TICIE1 регистра TIMSK.

Упрощенная структурная схема узла, выполняющего данную функ цию, приведена на Рис. 6.8.

— 193 — 6. Таймеры ICP Подавление Выбор ICF помех фронта ICNC1 ICES ACIC ACO ACIC: Разрешение захвата по ACO ACO : Выход компаратора Рис. 6.8. Структурная схема узла захвата Для управления схемой захвата используются два разряда регистра TCCR1B: ICNC1 и ICES1. Разряд ICNC1 управляет схемой подавления по мех. Если этот разряд сброшен в «0», схема подавления помех выключена и захват производится по первому же активному фронту на выводе ICP мик роконтроллера. Если же этот разряд установлен в «1», то при появлении ак тивного фронта на выводе ICP производится 4 выборки с частотой, равной тактовой частоте микроконтроллера. Захват будет выполнен только в том случае, если все выборки имеют уровень, соответствующий активному фронту сигнала (лог. «1» для нарастающего и лог. «0» для спадающего).

Активный фронт сигнала, т.е. фронт, по которому будет выполнено со хранение содержимого счетного регистра в регистре захвата, определяется состоянием разряда ICES1. Если этот разряд сброшен в «0», то активным является спадающий фронт. Если же этот разряд установлен в «1», то ак тивным является нарастающий фронт. Разумеется, вывод ICP должен быть сконфигурирован как входной, т.е. разряд регистра управления пор том DDRx, соответствующий данному выводу, должен быть сброшен в «0».

Физически регистр захвата ICR1 размещен в двух регистрах ICR1H:ICR1L, расположенных по адресам $27:$26 (адреса в адресном про странстве ОЗУ соответственно $47:$46) и доступных только для чтения. По скольку регистр захвата является 16 разрядным, при его чтении, как уже было сказано, используется специальный временный регистр TEMP. При чтении регистра ICR1L (младший байт) содержимое этого регистра пере сылается в ЦПУ, а содержимое регистра ICRH (старший байт) сохраняется в регистре TEMP. При чтении регистра ICR1H возвращается значение, со храненное в регистре TEMP. Следовательно, при чтении регистра ICR1 пер вым должен быть прочитан регистр ICR1L. Прерывания на время обраще ния к регистру ICR1 должны быть запрещены.

— 194 — 6. Таймеры 6.4.2.2. Функция сравнения (Compare) Данная функция заключается в непрерывном (каждый машинный цикл) сравнении содержимого счетного регистра таймера/счетчика с числом, находящемся в регистре сравнения. При совпадении содер жимого этих регистров устанавливается флаг соответствующего пре рывания, а также могут выполняться другие действия.

Kоличество регистров сравнения, а также их названия отличаются в различных моделях микроконтроллеров (см. Табл. 6.5). Причем в мо делях, имеющих по два регистра сравнения, операция сравнения про изводится независимо для каждого регистра.

Таблица 6.5. Регистры сравнения таймера/счетчика T Регистр сравнения Модель первый второй AT90S2313 OCR1A — AT90S/LS OCR1 — AT90S/LS AT90S/LS OCR1A OCR1B AT90S/LS AT90S4414/8515 OCR1A OCR1B Если состояние таймера/счетчика становится равным числу, находя щемуся в регистре сравнения, то в следующем машинном цикле устанав ливается соответствующий этому регистру флаг прерывания в регистре TIFR (для регистра OCR1 — флаг OCF1, для регистра OCR1A — флаг OCF1A, для регистра OCR1B — флаг OCF1B) и генерируется запрос на прерывание. Разрешение прерываний осуществляется установкой в «1» соответствующих флагов регистра TIMSK (OCIE1, OCIE1A и OCIE1B для регистров OCR1, OCR1A и OCR1B соответственно).

Наряду с установкой флага в регистре TIFR при равенстве счетного ре гистра и регистра сравнения могут выполняться и другие действия:

• сброс таймера/счетчика (только для регистров OCR1 и OCR1A);

• изменение состояния определенного вывода микроконтроллера (для всех регистров).

Поведение микроконтроллера, т.е. выполнение или невыполнение указанных действий, определяется несколькими разрядами регистров управления TCCR1A и TCCR1B. Названия этих разрядов и их описа ние приведены в Табл. 6.6.

— 195 — 6. Таймеры Таблица 6.6. Управление работой схемы сравнения таймера/счетчика T Регистр Название Модель Описание AT90S Управление выводом OC1A (OC1)* микроконтроллера AT90S Состояние этих разрядов определяет поведение вывода OC1A (OC1) AT90LS при совпадении содержимого счетного регистра и регистра сравнения COM1A1, AT90S OCR1A (OCR1). При изменении состояния этих разрядов соответству COM1A AT90LS ющее прерывание от компаратора таймера/счетчика рекомендуется за AT90S претить (во избежание ложной генерации прерывания).

AT90S Чтобы таймер/счетчик мог управлять этим выводом, он должен быть сконфигурирован как выходной.

Поведение вывода задается следующим образом:

7, COM1A1 COM1A Описание AT90S (COM11) (COM10) COM11, AT90LS Таймер/счетчик T1 отключен от вывода OC1A 0 COM10 AT90S (OC1) AT90LS 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в «0» 1 1 Вывод устанавливается в «1» Управление выводом OC1B микроконтроллера Состояние этих разрядов определяет поведение вывода OC1B при совпадении содержимого счетного регистра и регистра сравнения OCR1B. При изменении состояния этих разрядов соответствующее прерывание от компаратора таймера/счетчика рекомендуется запре AT90S тить (во избежание ложной генерации прерывания).

AT90LS Чтобы таймер/счетчик мог управлять этим выводом, он должен быть COM1B1, AT90S 5, 4 сконфигурирован как выходной.

COM1B0 AT90LS Поведение вывода задается следующим образом:

AT90S COM1B1 COM1B0 Описание AT90S 0 0 Таймер/счетчик T1 отключен от вывода OC1B 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в «0» 1 1 Вывод устанавливается в «1» Сброс таймера/счетчика Если этот разряд установлен в «1», то при совпадении содержимого 3 CTC1 Все счетного регистра и регистра сравнения OCR1A (OCR1) производится сброс таймера/счетчика в состояние «$0000»** * Для AT90S2313, AT90S/LS2333 и AT90S/LS2343 — OC1, для AT90S/LS4434, AT90S/LS8535 и AT90S4414/8515 — OC1A.

** Поскольку сброс выполняется в машинном цикле, следующем за тем, во время ко торого произошло совпадение, поведение таймера/счетчика зависит от установлен ного коэффициента деления предделителя таймера (см. Табл. 6.4). При коэффици енте деления, равном 1, состояние таймера/счетчика меняется следующим образом:

… C–2 C–1 C 0 1 … а при коэффициенте деления, не равном 1:

… (C–2, …, C–2) (C–1, …, C–1) (C, 0, …, 0) …, где С — число, находящееся в регистре сравнения.

— 196 — TCCR1A TCCR1B 6. Таймеры Kаждый регистр сравнения физически размещается в двух регист рах ввода вывода РВВ:

OCR1 — OCR1H:OCR1L, адреса $2B:$2A ($4B:$4A);

OCR1A — OCR1AH:OCR1AL, адреса $2B:$2A ($4B:$4A);

OCR1B — OCR1BH:OCR1BL, адреса $29:$28 ($49:$48).

Поскольку регистры сравнения являются 16 разрядными, при их чтении и записи используется специальный временный регистр TEMP. Подробно процесс записи и чтения 16 разрядных регистров описан выше на примере регистра TCNT1. Здесь повторим только, что при записи регистра сравнения первым должен записываться регистр OCR1xH (старший байт), а при чтении первым должен считываться регистр OCR1xL (младший байт). Прерывания на время обращения к регистру сравнения должны быть запрещены.

6.4.3. Режим ШИМ В этом режиме таймер/счетчик T1 представляет собой одинарный или сдвоенный, в зависимости от модели, широтно импульсный мо дулятор. Широтно импульсная модуляция является одним из видов непрерывной импульсной модуляции, при котором ширина импульса пропорциональна значению модулирующего сигнала. Соответственно в данном случае широтно импульсная модуляция заключается в гене рировании сигнала с программируемыми частотой и скважностью.

Для перевода таймера/счетчика T1 в режим ШИМ и задания частоты ШИМ сигнала используются разряды PWM11:PWM10 регистра управле ния таймером TCCR1A. Соответствие между состоянием этих разрядов и режимом работы таймера/счетчика T1 приведено в Табл. 6.7.

Таблица 6.7. Управление режимом ШИМ таймера/счетчика T Регистр TCCR1A Описание PWM11 PWM 0 0 Режим ШИМ таймера/счетчика T1 выключен 0 1 8 разрядный широтно импульсный модулятор 1 0 9 разрядный широтно импульсный модулятор 1 1 10 разрядный широтно импульсный модулятор Для генерации сигнала с ШИМ используется схема сравнения тайме ра/счетчика, поэтому в моделях AT90S2313, AT90S/LS2333 и AT90S/LS4433 модулятор является одинарным (один регистр сравнения), — 197 — 6. Таймеры а в моделях AT90S/LS4434, AT90S/LS8535 и AT90S4414/8515 — сдвоенным (два регистра сравнения). Названия регистров сравнения, их адреса и пра вила обращения к ним были описаны в предыдущем параграфе. Соответ ственно сигнал снимается с выхода схемы сравнения таймера/счетчика.

В рассматриваемом режиме счетный регистр таймера/счетчика функционирует как реверсивный счетчик, модуль счета которого (TOP) зависит от режима работы модулятора. Значение модуля счета и соответствующая частота ШИМ сигнала для каждого режима работы модулятора приведены в Табл. 6.8.

Таблица 6.8. Модуль счета счетного регистра и частота ШИМ сигнала Разрешение модулятора Модуль счета (TOP) Частота ШИМ сигнала 8 разрядов $00FF (255) fTCK1/ 9 разрядов $01FF (511) fTCK1/ 10 разрядов $03FF (1023) fTCK1/ Примечание:

fTCK1 — частота тактового сигнала таймера/счетчика T1.

При работе таймера/счетчика T1 в режиме ШИМ состояние счет ного регистра изменяется от $000 до значения TOP, а затем снова до $000, после чего цикл повторяется. При равенстве состояния счетчика и содержимого регистра сравнения состояние соответствующего это му регистру вывода микроконтроллера изменяется согласно Табл. 6. (см. также Рис. 6.9). Таким образом, длительность импульса равна уд военному значению содержимого регистра сравнения.

Таблица 6.9. Поведение выходов схемы сравнения в режиме ШИМ Регистр TCCR1A Поведение вывода OC1x (OC1) COM1x1 COM1x (COM11) (COM10) 0 0 Таймер/счетчик T1 отключен от вывода 0 1 Таймер/счетчик T1 отключен от вывода Сбрасывается в «0» при прямом счете и устанавливается в «1» при обратном 1 счете (неинвертированный ШИМ сигнал) Устанавливается в «1» при прямом счете и сбрасывается в «0» при обратном сче 1 те (инвертированный ШИМ сигнал) Примечание:

x — A или B.

— 198 — 6. Таймеры Состояние счетчика Регистр сравнения Выходной сигнал Рис. 6.9. Формирование ШИМ сигнала Соответственно если в счетный регистр записать значение $000 или TOP, то при следующем совпадении состояния счетчика и содержимо го регистра сравнения выход схемы сравнения переключится в устой чивое состояние согласно Табл. 6.10.

Таблица 6.10. Устойчивые состояния выхода схемы сравнения Регистр TCCR1A Регистр OCR1x Состояние вывода OC1x COM1x1 COM1x (OCR1) (OC1) (COM11) (COM10) 1 0 $000 1 0 TOP 1 1 $000 1 1 TOP Примечание:

x — A или B.

Особенностью работы таймера/счетчика T1 в режиме ШИМ является то, что при записи в регистр сравнения младшие 10 разрядов записываемо го числа на самом деле сохраняются в специальном временном регистре (не путать с регистром TEMP). А изменение содержимого регистра сравне ния происходит только в момент достижения счетчиком максимального значения (TOP). Благодаря такому решению исключается появление не симметричных выбросов сигнала на выходе модулятора (помех), которые были бы неизбежны при непосредственной записи в регистр сравнения.

Соответственно при чтении регистра сравнения в промежутке меж ду записью в него и его действительным изменением возвращается со держимое временного регистра. То есть всегда возвращается значение, записанное последним.

И несколько слов о прерываниях. При работе таймера/счетчика T в режиме ШИМ может генерироваться прерывание по переполнению счетного регистра таймера/счетчика, а также прерывания от схемы — 199 — 6. Таймеры сравнения. Флаги прерываний устанавливаются в «1» при изменении счетчиком направления счета: флаг TOV1 — в точке $000, а флаги OCF1 (для регистра OCR1), OCF1A (для регистра OCR1A) и OCF1B (для регистра OCR1B) — в точке TOP. Разрешение и обработка соот ветствующих прерываний выполняются как обычно.

6.5 Таймер/счетчик T Таймер/счетчик T2 (8 разрядный) присутствует только в моделях AT90S/LS4434 и AT90S8535 микроконтроллеров семейства. Он может работать в двух режимах:

• режим таймера;

в этом режиме таймер/счетчик T2 может исполь зоваться для формирования временных интервалов, а также вы полнять определенные действия при равенстве содержимого счетного регистра заданному значению;

• режим ШИМ;

в этом режиме таймер/счетчик T2 работает как широтно импульсный модулятор.

Основным отличием таймера/счетчика T2 от рассмотренных ранее является его возможность работать в асинхронном режиме (от допол нительного кварцевого резонатора).

Структурная схема таймера/счетчика T2 приведена на Рис. 6.10.

Kак видно из рисунка, в состав таймера/счетчика T2 входят два ра бочих регистра (счетный регистр TCNT2 и регистр сравнения OCR2), 8 разрядный компаратор, регистр управления TCCR2, регистр состоя ния для асинхронного режима ASSR, а также блоки управления тайме ром и синхронизации.

Все флаги состояния таймера/счетчика (переполнения, совпадения и захвата) находятся в регистре флагов прерываний от таймеров TIFR, а разрешение/запрещение прерываний от таймера осуществляется ус тановкой/сбросом соответствующих флагов регистра TIMSK.

Счетный регистр таймера/счетчика T2 реализован как суммирующий (в режиме ШИМ — как суммирующий/вычитающий) счетчик и доступен в любой момент времени как для чтения, так и для записи. Расположен он по адресу $24 ($44). При записи в регистр TCNT2 во время работы тайме ра счет будет продолжен по следующему за операцией записи импульсу тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNT2 находится нулевое значение.

— 200 — 6. Таймеры «Переполнение «Совпадение T/C2» T/C2» & & Регистр управления Регистр TIMSK Регистр TIFR (TCCR2) 7 Сброс Счетный регистр Тактовый сигнал CK Блок (TCNT2) Направление счета управления TOSC 8–разрядный компаратор Регистр состояния Регистр сравнения (OCR1A) (ASSR) CK Синхронизатор Рис. 6.10. Структурная схема таймера/счетчика T Для управления таймером/счетчиком T2 предназначен регистр уп равления TCCR2, расположенный по адресу $25 ($45). Формат этого регистра приведен на Рис. 6.11. Значение отдельных разрядов этих ре гистров будет описано далее. Неиспользуемые разряды регистров до ступны только для чтения и содержат «0».

7 6 5 4 3 2 1 — PWM2 COM21 COM20 CTC2 CS22 CS21 CS Чтение(R)/Запись(W) R R/W R/W R/W R/W R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 Рис. 6.11. Формат регистра TCCR — 201 — OCIE TOIE CS CS CS CTC PWM TOV TOV OCF OCF COM COM 8 разрядная шина данных 8 разрядная асинхронная шина данных AS TC2UB ICR2UB OCR2UB 6. Таймеры 6.5.1. Управление тактовым сигналом Таймер/счетчик работает от тактового сигнала, который поступает на вход счетчика с предделителя, входящего в состав блока управле ния. А на предделитель, в свою очередь, может подаваться либо такто вый сигнал микроконтроллера, либо сигнал от дополнительного квар цевого резонатора (асинхронный режим работы).

Выбор коэффициента деления предделителя, а также запуск и останов ка таймера/счетчика осуществляются с помощью разрядов CS22…CS20 ре гистра управления таймером TCCR2. Соответствие между состоянием этих разрядов и режимом работы таймера/счетчика приведено в Табл. 6.11.

Таблица 6.11. Управление предделителем таймера/счетчика T Регистр TCCR Kоэффициент деления предделителя CS22 CS21 CS 0 0 0 Таймер/счетчик остановлен 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 6.5.2. Режим таймера Принцип работы таймера/счетчика T2 в этом режиме такой же, как и у рассмотренных ранее. По каждому импульсу, поступающему на тактовый вход таймера/счетчика, производится инкремент содержимого счетного регистра TCNT2. При переходе таймера/счетчика из состояния «$FF» в со стояние «$00» устанавливается флаг TOV2 регистра TIFR и генерируется запрос на прерывание. Разрешение прерывания осуществляется установ кой в «1» разряда TOIE2 регистра TIMSK (разумеется, флаг общего разре шения прерываний I регистра SREG также должен быть установлен в «1»).

Таймер/счетчик T2 имеет также функцию сравнения, которая заключа ется в непрерывном (каждый машинный цикл) сравнении содержимого счетного регистра таймера/счетчика с содержимым регистра сравнения OCR2, расположенного по адресу $23 ($43). При совпадении содержимого этих регистров в следующем машинном цикле устанавливается флаг OCF — 202 — 6. Таймеры регистра TIFR и генерируется запрос на прерывание. Разрешение прерыва ния осуществляется установкой в «1» разряда OCIE2 регистра TIMSK.

Наряду с установкой флага в регистре TIFR при равенстве счетного ре гистра и регистра сравнения могут выполняться и другие действия:

• сброс таймера/счетчика;

• изменение состояния вывода OC2.

Поведение микроконтроллера, т.е. выполнение или невыполнение указанных действий, определяется состоянием разрядов COM21:COM20 и CTC2 регистра управления TCCR2 согласно Табл. 6.12.

Таблица 6.12. Управление работой схемы сравнения таймера/счетчика T Название разряда Описание Управление выводом OC2 микроконтроллера Состояние этих разрядов определяет поведение вывода OC2 при совпадении содер жимого счетного регистра и регистра сравнения OCR2.

Чтобы таймер/счетчик мог управлять этим выводом, он должен быть сконфигуриро ван как выходной.

COM21, Поведение вывода задается следующим образом:

COM COM21 COM20 Описание 0 0 Таймер/счетчик T2 отключен от вывода OC 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в «0» 1 1 Вывод устанавливается в «1» Сброс таймера/счетчика Если этот разряд установлен в «1», то при совпадении содержимого счетного CTC регистра и регистра сравнения OCR2 производится сброс таймера/счетчика в состояние «$00»* * Поскольку сброс выполняется в машинном цикле, следующем за тем, во время ко торого произошло совпадение, поведение таймера/счетчика зависит от установлен ного коэффициента деления предделителя таймера (см. Табл. 6.12). При коэффици енте деления, равном 1, состояние таймера/счетчика меняется следующим образом:

… C–2 C–1 C 0 ® 1 … а при коэффициенте деления, не равном 1:

… (C–2, …, C–2) (C–1, …, C–1) (C, 0, …, 0) …, где С — число, находящееся в регистре сравнения.

6.5.3. Режим ШИМ В этом режиме таймер/счетчик T2 представляет собой одинарный 8 разрядный широтно импульсный модулятор. Для перевода тайме ра/счетчика T2 в этот режим необходимо установить в «1» разряд PWM2 регистра TCCR2.

— 203 — 6. Таймеры Счетный регистр таймера/счетчика в рассматриваемом режиме функ ционирует как реверсивный счетчик c модулем счета, равным «$FF» (255).

Частота сигнала соответственно равна fTCK2/510, где fTCK2 — частота так тового сигнала. Состояние счетчика изменяется от $00 до $FF, а затем сно ва до $00, после чего цикл повторяется. При равенстве состояния счетчи ка и содержимого регистра сравнения состояние вывода OC2 микроконт роллера изменяется согласно Табл. 6.13 (см. также Рис. 6.9).

Таблица 6.13. Поведение выходов схемы сравнения в режиме ШИМ Регистр TCCR Поведение вывода OC COM21 COM 0 0 Таймер/счетчик T2 отключен от вывода 0 1 Таймер/счетчик T2 отключен от вывода Сбрасывается в «0» при прямом счете и устанавливается в «1» при обратном счете 1 (неинвертированный ШИМ сигнал) Устанавливается в «1» при прямом счете и сбрасывается в «0» при обратном счете 1 (инвертированный ШИМ сигнал) Соответственно если в счетный регистр записать значение $00 или $FF, то при следующем совпадении состояния счетчика и содержимо го регистра сравнения выход схемы сравнения переключится в устой чивое состояние согласно Табл. 6.14.

Таблица 6.14. Устойчивые состояния выхода схемы сравнения Регистр TCCR Регистр OCR2 Состояние вывода OC COM21 COM 1 0 $00 1 0 $FF 1 1 $00 1 1 $FF Kак и в случае таймера/счетчика T1, при записи значения в регистр OCR2 записываемое число на самом деле сохраняется в специальном временном регистре. А изменение содержимого регистра OCR2 про исходит только в момент достижения счетчиком значения $FF.

Соответственно при чтении регистра OCR2 в промежутке между записью в него и его действительным изменением возвращается со держимое временного регистра. То есть всегда возвращается значение, записанное последним.

— 204 — 6. Таймеры И несколько слов о прерываниях. При работе таймера/счетчика T2 в ре жиме ШИМ может генерироваться как прерывание по переполнению счет ного регистра таймера/счетчика, так и прерывание от схемы сравнения. Фла ги прерываний устанавливаются в «1» при изменении счетчиком направле ния счета: флаг TOV2 — в точке $00, а флаг OCF2 — в точке $FF. Разрешение и обработка соответствующих прерываний выполняется как обычно.

6.5.4 Асинхронный режим работы Отличительной особенностью таймера/счетчика T2 является его воз можность работать в асинхронном режиме. В этом режиме на вход предде лителя поступает сигнал с вывода TOSC1, что позволяет использовать тай мер/счетчик в качестве часов реального времени. Источником сигнала может быть как кварцевый резонатор частотой 32768 Гц, подключаемый к выводам TOSC1 и TOSC2 микроконтроллера, так и внешняя схема. Не смотря на то, что тактовый генератор таймера/счетчика настроен на час тоту 32768 Гц, частота сигнала от внешней схемы может лежать в пределах 0…256 кГц. При этом частота внешнего сигнала должна быть в четыре ра за меньше частоты тактового сигнала микроконтроллера.

Непосредственная запись в регистры TCNT2, OCR2 и TCCR2 в асин хронном режиме синхронизируется с тактовым сигналом таймера/счетчи ка. При записи числа в любой из указанных регистров оно сохраняется в специальном временном регистре, своем для каждого регистра тайме ра/счетчика. А пересылка содержимого временного регистра в рабочий регистр таймера/счетчика осуществляется по третьему после записи поло жительному фронту сигнала на выводе TOSC1. Соответственно запись но вого значения можно производить только после пересылки содержимого временного регистра в регистр таймера/счетчика.

Для определения момента действительного изменения регистров TCNT2, OCR2 и TCCR2, а также для переключения таймера/счетчика в асинхронный режим предназначен регистр ASSR, расположенный по адресу $22 ($42). Формат этого регистра приведен на Рис. 6.12, а описание отдельных его разрядов приведено в Табл. 6.15.

7 6 5 4 3 2 1 — — — — AS2 TCN2UB OCR2UB TCR2UB Чтение(R)/Запись(W) R R R R R/W R R R Начальное значение 0 0 0 0 0 0 0 Рис. 6.12. Формат регистра ASSR — 205 — 6. Таймеры Таблица 6.15. Регистр состояния асинхронного режима ASSR Разряд Название Описание 7…4 — Зарезервированы, читаются как «0» Переключение режима работы Если разряд установлен в «1», на вход предделителя таймера/счетчика T2 по ступают импульсы с вывода TOSC1 микроконтроллера (асинхронный режим). В этом режиме выводы TOSC1 и TOSC2 используются для подключения кварцевого резонатора и, соответственно, не могут использоваться как контакты ввода/выво 3 AS2 да общего назначения.

Если разряд сброшен в «0», на вход предделителя поступает внутренний такто вый сигнал микроконтроллера. В этом случае выводы TOSC1 и TOSC2 являются контактами ввода/вывода общего назначения.

При изменении состояния этого разряда содержимое регистров TCNT2, OCR и TCCR2 может быть повреждено Состояние обновления регистра TCNT При записи в регистр TCNT2 этот флаг устанавливается в «1», а после пересыл ки записываемого значения в этот регистр флаг аппаратно сбрасывается в «0». Та 2 TCN2UB ким образом, сброшенный флаг TCN2UB означает, что регистр TCNT готов для записи в него нового значения.

Запись в регистр TCNT2 при установленном флаге TCN2UB может привести к повреждению прежнего содержимого регистра и к генерации прерывания Состояние обновления регистра OCR При записи в регистр OCR2 этот флаг устанавливается в «1», а после пересыл ки записываемого значения в этот регистр флаг аппаратно сбрасывается в «0». Та 1 OCR2UB ким образом, сброшенный флаг OCR2UB означает, что регистр OCR готов для записи в него нового значения.

Запись в регистр OCR2 при установленном флаге OCR2UB может привести к повреждению прежнего содержимого регистра и к генерации прерывания Состояние обновления регистра TCCR При записи в регистр TCCR2 этот флаг устанавливается в «1», а после пересыл ки записываемого значения в этот регистр флаг аппаратно сбрасывается в «0». Та 0 TCR2UB ким образом, сброшенный флаг TCR2UB означает, что регистр TCCR готов для записи в него нового значения.

Запись в регистр TCCR2 при установленном флаге TCR2UB может привести к повреждению прежнего содержимого регистра и к генерации прерывания Необходимо отметить, что при переключении между синхронным и асинхронным режимами содержимое регистров таймера/счетчика может быть повреждено. Чтобы этого избежать, рекомендуется при держиваться следующей последовательности действий:

1. Запретить прерывания от таймера/счетчика T2 (разряды TOIE и OCIE2 регистра TIMSK).

2. Переключить таймер/счетчик в требуемый режим.

3. Записать новые значения в регистры TCNT2, OCR2 и TCCR2.

— 206 — 6. Таймеры 4. В случае переключения в асинхронный режим — ждать, пока флаги TCN2UB, OCR2UB и TCR2UB не будут сброшены.

5. Разрешить прерывания (если требуется).

При работе таймера/счетчика T2 в асинхронном режиме установка флагов прерываний от него производится синхронно с тактовым сиг налом микроконтроллера. Для синхронизации требуется 3 машинных цикла плюс один период тактового сигнала таймера/счетчика. Поэто му к моменту, когда микроконтроллер сможет прочитать состояние счетчика, вызвавшее установку флага прерывания, оно изменится по меньшей мере на единицу. Изменение состояния вывода OC2 произ водится по тактовому сигналу таймера/счетчика и не синхронизирует ся с тактовым сигналом микроконтроллера.

Отдельно следует сказать о «взаимодействии» асинхронного режи ма таймера/счетчика T2 с режимами пониженного энергопотребления микроконтроллера Power Down и Power Save.

Первое замечание касается использования прерываний от тайме ра/счетчика T2 для «пробуждения» микроконтроллера. В этом случае при переводе микроконтроллера в режим Power Save после записи в регистры таймера/счетчика необходимо убедиться, что операция записи завершена (флаги TCN2UB, OCR2UB и TCR2UB сброшены). Наиболее важно это в случае, когда для «пробуждения» микроконтроллера используется преры вание от схемы сравнения. Дело в том, что во время записи в регистры TCNT2 и OCR2 функция сравнения выключена. Соответственно если пе реход в режим Power Save произойдет до окончания операции записи в указанные регистры, прерывания от схемы сравнения никогда не про изойдет и микроконтроллер не сможет выйти из спящего режима.

Вторая особенность связана с синхронизацией установки флагов пре рываний от таймера/счетчика. При выходе микроконтроллера из режима Power Save по прерыванию от таймера/счетчика флаг соответствующего прерывания устанавливается только спустя 3 машинных цикла после запу ска тактового генератора микроконтроллера. Во время этих циклов про цессор выполняет команды, следующие за командой SLEEP, и только по том переходит к обработке прерывания (если оно разрешено).

Kроме того, необходимо быть осторожным при повторном перехо де в режим Power Save после выхода из него по прерыванию от тайме ра/счетчика T2. Дело в том, что в этом случае для запуска схемы пре рываний требуется промежуток времени, равный одному периоду — 207 — 6. Таймеры сигнала на выводе TOSC1. Если же промежуток времени между «про буждением» и повторным переходом в режим Power Save будет мень ше указанного, генерации прерывания и, соответственно, «пробуж дения» микроконтроллера не произойдет. Для формирования задерж ки требуемой длительности рекомендуется после «пробуждения» ми кроконтроллера выполнить запись в какой либо из регистров тайме ра/счетчика и дождаться завершения этой операции.

После подачи напряжения питания, а также после «пробуждения» ми кроконтроллера из режима Power Down таймер/счетчик рекомендуется использовать только спустя секунду после указанных событий. Эта за держка необходима для запуска тактового генератора таймера/счетчика.

Соответственно при выходе из режима Power Down содержимое всех реги стров таймера/счетчика T2 можно считать потерянным (из за нестабиль ности тактового сигнала во время запуска генератора).

6.6. Сторожевой таймер Основная функция сторожевого таймера — защита устройства от сбоев. Благодаря сторожевому таймеру можно прервать выполнение зациклившейся программы или выйти из других непредвиденных си туаций, препятствующих нормальному выполнению программы.

Структурная схема сторожевого таймера приведена на Рис. 6.13.

Генератор 1 МГц при VCC = 5 B Предделитель 350 кГц при VCC = 3 B сторожевого таймера Сброс сторожевого таймера WDP WDP1 MUX Регистр WDP WDTCR WDE & Сброс микроконтроллера Рис. 6.13. Структурная схема сторожевого таймера — 208 — OSC/16к OSC/32к OSC/64к OSC/128к OSC/256к OSC/512к OSC/1024к OSC/2048к 6. Таймеры Сторожевой таймер имеет независимый генератор, поэтому он ра ботает даже во время нахождения микроконтроллера в режиме Power Down. Частота этого генератора зависит от напряжения питания уст ройства, температуры, технологического разброса. Типовое значение частоты равно 1 МГц при VCC = 5.0 В и 350 кГц при VCC = 3.0 В.

Если сторожевой таймер включен, то через определенные промежутки времени (при наступлении тайм аута) выполняется сброс микроконтролле ра. Подробнее процесс сброса описан в Главе 4. Чтобы избежать сброса ми кроконтроллера при нормальном выполнении программы, сторожевой тай мер необходимо регулярно сбрасывать через промежутки времени, меньше его периода. Сброс сторожевого таймера осуществляется командой WDR.

Для управления сторожевым таймером предназначен регистр WDTCR, расположенный по адресу $21 ($41). Формат этого регистра приведен на Рис. 6.14.

7 6 5 4 3 2 1 — — — WDTOE WDE WDP2 WDP1 WDP Чтение(R)/Запись(W) R R R R/W R/W R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 Рис. 6.14. Формат регистра WDTCR Для включения/выключения сторожевого таймера используются два разряда регистра WDTCR — WDE и WDTOE. Если разряд WDE ус тановлен в «1», сторожевой таймер включен, если сброшен в «0» — вы ключен. Непосредственно перед включением таймера рекомендуется также выполнять его сброс командой WDR.

Чтобы избежать непреднамеренного выключения таймера счетчика, предназначен разряд WDTOE. Дело в том, что выключение сторожевого таймера (сброс разряда WDE) можно осуществить только при установлен ном разряде WDTOE. Причем через 4 машинных цикла после установки в «1» этот разряд аппаратно сбрасывается, благодаря чему практически ис чезает возможность случайного выключения сторожевого таймера.

Исходя из сказанного, для выключения сторожевого таймера реко мендуется следующая последовательность действий:

1. Одной командой записать лог. «1» в разряды WDE и WDTOE.

2. В течение следующих четырех машинных циклов записать лог.

«0» в разряд WDE.

— 209 — 6. Таймеры Период наступления тайм аута сторожевого таймера задается с по мощью разрядов WDP2…WDP0 регистра WDTCR согласно Табл. 6.17.

Таблица 6.16. Задание периода сторожевого таймера Период наступления тайм аута (типовое значение) Число тактов ге WDP2 WDP1 WDP нератора VCC = 3.0 В VCC = 5.0 В 0 0 0 16·1024 47 мс 15 мс 0 0 1 32·1024 91 мс 30 мс 0 1 0 64·1024 0.19 с 60 мс 0 1 1 128·1024 0.38 с 0.12 с 1 0 0 256·1024 0.75 с 0.24 с 1 0 1 512·1024 1.5 с 0.49 с 1 1 0 1024·1024 3.0 с 0.97 с 1 1 1 2048·1024 6.0 с 1.9 с Чтобы избежать непреднамеренного сброса микроконтроллера при изменении периода сторожевого таймера, необходимо перед записью разрядов WDP2:WDP0 либо запретить работу сторожевого таймера, либо сбросить его.

Глава 7. Аналоговый компаратор 7.1. Общие сведения Все микроконтроллеры семейства за исключением моделей AT90S/LS2323, AT90S/LS2343 и AT90C8534 содержат в своем составе аналоговый компаратор. Будучи включенным, этот компаратор позво ляет сравнивать значения напряжений, присутствующих на двух выво дах микроконтроллера. Результатом сравнения является логическое значение, которое может быть прочитано из программы. По результа ту сравнения может быть сгенерировано прерывание, а также выпол нена функция захвата таймера/счетчика T1.

Используемые компаратором выводы являются контактами портов ввода/вывода общего назначения. Kакими именно — зависит от моде ли микроконтроллера (см. Табл. 7.1).

Таблица. 7.1. Выводы, используемые аналоговым компаратором AT90S/LS2333 AT90S/LS4434 AT90S Название AT90S1200 AT90S2313 Назначение AT90S/LS4433 AT90S/LS8535 AT90S AIN0 PB0 PB0 PD6 PB2 PB2 Неинвертирующий вход AIN1 PB1 PB1 PD7 PB3 PB3 Инвертирующий вход Чтобы указанные линии портов ввода/вывода могли использоваться аналоговым компаратором, они, разумеется, должны быть сконфигуриро ваны как входы (соответствующий разряд регистра DDRx установлен в «1»). Kроме того, необходимо отключить внутренние подтягивающие ре зисторы записью лог. «0» в соответствующий разряд регистра PORTx.

— 211 — 7. Аналоговый компаратор 7.2. Функционирование компаратора Структурная схема аналогового компаратора приведена на Рис. 7.1.

Обратите внимание, что источник опорного напряжения и мульти плексор, показанные на схеме, имеются только в моделях AT90S/LS2333 и AT90S/LS4433.

VCC Внутренний ИОН (1.22 ± 0.05 В) ACD ACIE AINBG Запрос на Формирование & прерывание от флага прерывания компаратора MUX ACI AIN ACIC ACIS1 ACIS К схеме захвата AIN ACO таймера/счетчика Т Рис. 7.1. Структурная схема аналогового компаратора Управление компаратором и контроль его состояния осуществля ются с помощью регистра ACSR, расположенного по адресу $08 ($28).

Формат этого регистра приведен на Рис. 7.2. Kраткое описание функ ций разрядов регистра приведено в Табл. 7.2.

ACD — ACO ACI ACIE — ACIS1 ACIS0 AT90S Чтение(R)/Запись(W) R/W R R R/W R/W R R/W R/W Начальное значение 0 0 N/A 0 0 0 0 7 6 5 4 3 2 1 0 AT90S AT90S/LS ACD — ACO ACI ACIE ACIC ACIS1 ACIS AT90S/LS Чтение(R)/Запись(W) R/W R R R/W R/W R/W R/W R/W AT90S Начальное значение 0 0 N/A 0 0 0 0 0 AT90S 7 6 5 4 3 2 1 AT90S/LS ACD AINBG ACO ACI ACIE ACIC ACIS1 ACIS AT90S/LS Чтение(R)/Запись(W) R/W R/W R R/W R/W R/W R/W R/W Начальное значение 0 0 N/A 0 0 0 0 Рис. 7.2. Формат регистра ACSR — 212 — 7. Аналоговый компаратор Таблица. 7.2. Регистр ACSR Разряд Название Описание Модель 7 ACD Выключение компаратора (0 — включен, 1 — выключен) Все Подключение к неинвертирующему входу компаратора AT90S/LS 6 AINBG внутреннего ИОН (0 — не подключен, 1 — подключен) AT90S/LS 5 ACO Результат сравнения (выход компаратора) Все 4 ACI Флаг прерывания от компаратора Все 3 ACIE Разрешение прерывания от компаратора Все Подключение компаратора к схеме захвата Kроме 2 ACIC таймера/счетчика T1 (1 — подключен, 0 — отключен) AT90S 1, 0 ACIS1:ACIS0 Условие возникновения прерывания от компаратора Все По своему действию рассматриваемый узел микроконтроллера яв ляется обычным компаратором. Если напряжение на выводе AIN (неинвертирующий вход) больше напряжения на выводе AIN1(инвер тирующий вход), то результат сравнения будет равен «1». В противном случае результат сравнения будет равен «0». Этот результат (состояние выхода компаратора) сохраняется в разряде ACO регистра ACSR.

Разряд ACD отвечает за включение и выключение компаратора.

При включении напряжения питания все разряды регистра ACSR сбрасываются в «0», поэтому компаратор автоматически включается при подаче напряжения питания на микроконтроллер. Чтобы его вы ключить, разряд ACD следует установить в «1». При изменении состо яния этого разряда необходимо запретить прерывание от компаратора.

Kак уже было сказано, в соответствии с результатом сравнения схе ма компаратора может генерировать запрос на прерывание. Если со стояние выхода компаратора (разряд ACO) изменилось заданным об разом, устанавливается флаг прерывания ACI регистра ACSR и гене рируется запрос на прерывание. Kак и для других прерываний, этот флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно — записью в него лог. «1». Для разреше ния прерывания необходимо установить в «1» разряд ACIE регистра ACSR и, разумеется, флаг I регистра SREG.

Условие генерации запроса на прерывание от компаратора опреде ляется состоянием разрядов ACIS1:ACIS0 регистра ACSR в соответст вии с Табл. 7.3. При изменении этих разрядов прерывание от компа ратора (как и для разряда ACD) должно быть запрещено.

— 213 — 7. Аналоговый компаратор Таблица. 7.3. Условия генерации запроса на прерывание от компаратора ACIS1 ACIS0 Условие 0 0 Любое изменение состояния выхода компаратора 0 1 Зарезервировано 1 0 Изменение состояния выхода компаратора с «1» на «0» 1 1 Изменение состояния выхода компаратора с «0» на «1» Помимо генерации прерывания компаратор также может управлять схемой захвата таймера/счетчика T1. Эта возможность определяется со стоянием разряда ACIC регистра ACSR (в модели AT90S1200 таймер/счет чик T1 отсутствует, соответственно данный разряд регистра зарезервиро ван). Чтобы выход аналогового компаратора мог управлять схемой захвата таймера/счетчика T1, разряд ACIC следует установить в «1». При этом вы ход компаратора подключается к схеме захвата вместо вывода ICP микро контроллера. Если же разряд ACIC сброшен в «0», компаратор полностью отключен от схемы сравнения таймера/счетчика.

В микроконтроллерах AT90S/LS2333 и AT90S/LS4433 аналоговый компаратор имеет одну дополнительную возможность. Если включена схема BOD (см. п. 4.4.4), то к неинвертирующему входу компаратора вместо вывода AIN0 микроконтроллера может быть подключен внут ренний источник опорного напряжения величиной 1.22 ±0.05 В. Для этого необходимо установить в «1» разряд AINBG регистра ACSR.

И в заключение предлагаем вашему вниманию Табл. 7.4, в которой представлены основные параметры аналогового компаратора.

Таблица. 7.4. Параметры аналогового компаратора Обозначение Параметр Условия min typ max Ед. изм.

VCC = 5 В, VACIO Входное напряжение смещения 40.0 мВ VIN = VCC/ VCC = 5 В, IACLK Ток утечки на входе –50.0 50.0 нА VIN = VCC/ VCC = 2.7 В tACPD Время отклика нс VCC = 4.0 В — 214 — Глава 8. Аналого цифровой преобразователь 8.1. Общие сведения Ряд моделей микроконтроллеров семейства, а именно AT90S/LS2333, AT90S/LS4433, AT90S/LS4434, AT90S/LS8535 и AT90C8534, имеет в своем составе многоканальный 10 разрядный АЦП последовательного прибли жения. Число каналов зависит от модели и равно 6 (AT90S/LS2333, AT90S/LS4433 и AT90C8534) или 8 (AT90S/LS4434 и AT90S/LS8535). В ка честве входов модуля АЦП в моделях AT90S/LS2333 и AT90S/LS4433 ис пользуются выводы порта C, а в моделях AT90S/LS4434 и AT90S/LS8535 — выводы порта A. Входы АЦП в микроконтроллере AT90C8534 вообще яв ляются единственными входными контактами устройства, если не считать двух входов внешних прерываний.

Для питания модуля АЦП в микроконтроллере предусмотрены вывода: AVCC (напряжение питания) и AGND (аналоговая «земля»).

Напряжение на выводе AVCC не должно отличаться от напряжения питания микроконтроллера больше чем на ±0.3 В, а аналоговая «зем ля» соединена с цифровой в одной точке. Все модели, кроме AT90C8534, также имеют вывод AREF для подключения к АЦП внеш него источника опорного напряжения. Напряжение, подаваемое на этот вывод, должно находиться в диапазоне 0…VCC.

АЦП всех моделей могут работать в двух режимах:

• режим одиночного преобразования: в этом режиме запуск каждо го преобразования инициируется пользователем;

• режим непрерывного преобразования: в этом режиме запуск пре образований выполняется непрерывно через определенные ин тервалы времени.

— 215 — 8. Аналого цифровой преобразователь 8.2. Функционирование модуля АЦП Структурная схема модуля АЦП приведена на Рис. 8.1. Обратите внимание, что источник опорного напряжения, показанный на схеме, имеется только в моделях AT90S/LS2333 и AT90S/LS4433.

Запрос на прерывание «Преобразование АЦП завершено» & 8– разрядная шина данных Внешнее опорное напряжение Регистр управления Регистр управления Регистр данных АЦП мультиплексором и состояния АЦП (ADCH:ADCL) (ADMUX) (ADCSR) 10–разрядный Схема ЦАП преобразования Компаратор выборки–хранения Внутренний ИОН (1.22 ± 0.05 В) Аналоговые Мультиплексор входы 6 или 8 каналов Рис. 8.1. Структурная схема модуля АЦП — 216 — ADIF ADIE MUX MUX MUX ADIF ADIE ADFR ADEN ADSC ADCBG ADPS ADPS ADPS 8. Аналого цифровой преобразователь Управление модулем АЦП и контроль его состояния осуществляет ся с помощью регистра ADCSR, расположенного по адресу $06 ($26).

Формат этого регистра приведен на Рис. 8.2, а краткое описание функ ций разрядов регистра приведено в Табл. 8.1. Подробно использование различных разрядов регистра будет описано далее.

7 6 5 4 3 2 1 ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS Чтение(R)/Запись(W) R/W R/W R/W R/W R/W R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 Рис. 8.2. Формат регистра ADCSR Таблица. 8.1. Регистр ADCSR Разряд Название Описание 7 ADEN Разрешение АЦП (1 — включено, 0 — выключено) 6 ADSC Запуск преобразования (1 — начать преобразование) 5 ADFR Выбор режима работы АЦП (0 — одиночное преобр.) 4 ADIF Флаг прерывания от компаратора 3 ADIE Разрешение прерывания от компаратора 2…0 ADPS2:ADPS0 Выбор частоты преобразования Перед началом использования АЦП требуется разрешить его рабо ту. Для этого необходимо записать лог. «1» в разряд ADEN регистра ADCSR, а для запрета соответственно лог. «0». Причем если АЦП бу дет заблокировано во время цикла преобразования, то преобразование завершено не будет (в регистре данных АЦП останется результат пре дыдущего преобразования).

Режим работы АЦП определяется состоянием разряда ADFR. Ес ли он установлен в «1», АЦП работает в режиме непрерывного пре образования. В этом режиме запуск каждого следующего преобразо вания осуществляется автоматически после окончания текущего.

Если же разряд ADFR сброшен в «0», АЦП работает в режиме оди ночного преобразования и запуск каждого преобразования осуще ствляется по команде пользователя.

— 217 — 8. Аналого цифровой преобразователь Запуск преобразования осуществляется установкой в «1» разряда ADSC регистра ADCSR, а сам цикл преобразования начинается по первому нарастающему фронту тактового сигнала после установки этого разряда. Длительность цикла составляет 13 тактов;

выборка и запоминание входного сигнала осуществляется в течение первых 1. такта. Через 13 тактов преобразование завершается, разряд ADSC аппаратно сбрасывается в «0» (в режиме одиночного преобразова ния), и результат преобразования сохраняется в регистре данных АЦП. Одновременно устанавливается флаг прерывания ADIF реги стра ADCSR и генерируется запрос на прерывание. Kак и флаги ос тальных прерываний, флаг ADIF сбрасывается аппаратно при запу ске подпрограммы обработки прерывания от АЦП или программно — записью в него лог. «1». Разрешение прерывания осуществляется установкой в «1» разряда ADIE регистра ADCSR (разумеется, флаг I регистра SREG также должен быть установлен в «1»).

Если АЦП работает в режиме непрерывного преобразования, новый цикл начнется сразу же после записи результата. В режиме одиночного преобразования новое преобразование может быть запущено сразу же по сле сброса разряда ADSC (до сохранения результата текущего преобразо вания). Однако реально цикл преобразования начнется не ранее чем через один такт после окончания текущего преобразования. Временные диа граммы, иллюстрирующие сказанное, приведены на Рис. 8.3.

При написании программ необходимо учитывать одну особен ность: для первого после включения АЦП преобразования требует ся на 12 тактов больше, чем для всех последующих. Это связано с тем, что при запуске первого преобразования сначала выполняется одно «холостое» преобразование, инициализирующее АЦП (см.

Рис. 8.4). Разряд ADSC в этом случае сбрасывается только после окончания рабочего преобразования.

Таким образом, длительность преобразования зависит от режима рабо ты АЦП и от порядкового номера преобразования. Соответствующие дан ные приведены в Табл. 8.2 (нумерация циклов — согласно Рис. 8.3 и 8.4).

Тактовым сигналом модуля АЦП является сигнал с предделителя, на вход которого, в свою очередь, поступает тактовый сигнал микро контроллера. Kоэффициент деления предделителя и, соответственно, длительность преобразования определяется состоянием разрядов ADPS2…ADPS0 регистра ADCSR (см. Табл. 8.3).

— 218 — 8. Аналого цифровой преобразователь № такта 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 Тактовый сигнал АЦП ADSC Строб выборки ADIF ADCH:ADCL Результат Текущее преобразование а) № такта 11 12 13 1 Тактовый сигнал АЦП ADSC Строб выборки ADIF ADCH:ADCL Результат Текущее Следующее преобразование преобразование б) Рис. 8.3. Временные диаграммы работы АЦП:

а — режим одиночного преобразования, б — режим непрерывного преобразования № такта 1 2 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 1 Тактовый сигнал АЦП ADEN ADSC Строб выборки ADIF Результат ADCH:ADCL «Холостое» Первое Второе преобразование преобразование преобразование Рис. 8.4. Временные диаграммы работы АЦП при первом преобразовании (режим одиночного преобразования) — 219 — 8. Аналого цифровой преобразователь Таблица. 8.2. Длительность преобразования АЦП Выборка сигнала Готовность результата Общее время преобра Условия (номер такта) (номер такта) зования (тактов) Непрерывный, 1 е преобразование 14 25 Одиночный, 1 е преобразование 14 25 Режим непрерывного преобразования 2 13 Режим одиночного преобразования 2 13 Таблица. 8.3. Задание коэффициента деления предделителя АЦП ADPS2 ADPS1 ADPS0 Kоэффициент деления 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 Наибольшая точность преобразования достигается, если тактовая час тота модуля АЦП находится в определенном диапазоне: 80…170 кГц для AT90C8534 и 50…200 кГц для остальных моделей. Соответственно коэф фициент деления предделителя рекомендуется выбирать таким, чтобы тактовая частота модуля АЦП находилась в указанном диапазоне.

Kак уже было сказано, результат преобразования сохраняется в регис тре данных АЦП. Поскольку АЦП — 10 разрядный, этот регистр физиче ски размещен в двух регистрах ввода/вывода ADCH:ADCL, доступных только для чтения. Эти регистры расположены по адресам $05:$04 (адреса в адресном пространстве ОЗУ соответственно $25:$24) и при включении питания содержат значение «$0000». Обращение к этим регистрам (для получения результата преобразования) должно выполняться в определен ной последовательности: сначала необходимо прочитать регистр ADCL, а затем ADCH. Это требование связано с тем, что после обращения к реги стру ADCL процессор блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не будет прочитан регистр ADCH. Благодаря этому можно быть уверенным, что при чтении регистров в них будут находиться составляющие одного и того же результата. Соответственно, если очеред ное преобразование завершится до обращения к регистру ADCH, резуль тат преобразования будет потерян.

— 220 — 8. Аналого цифровой преобразователь Управление входным мультиплексором модуля АЦП осуществляет ся с помощью регистра ADMUX, расположенного по адресу $07 ($27).

Формат этого регистра приведен на Рис. 8.5.

7 6 5 4 3 2 1 AT90S/LS — — — — — MUX2 MUX1 MUX0 AT90S/LS AT90C Чтение(R)/Запись(W) R R R R R R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 7 6 5 4 3 2 1 AT90S/LS — ADCBG — — — MUX2 MUX1 MUX AT90S/LS Чтение(R)/Запись(W) R R/W R R R R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 Рис. 8.5. Формат регистра ADMUX Разряды MUX2…MUX0 этого регистра определяют номер активно го канала (номер аналогового входа, подключенного к входу АЦП).

Состояние этих разрядов можно изменить в любой момент, однако, если это будет сделано во время цикла преобразования, смена канала произойдет только после завершения преобразования. Благодаря это му в режиме непрерывного преобразования можно легко реализовать сканирование каналов. Под этим термином в данном случае понима ется последовательное преобразование сигналов нескольких каналов.

В микроконтроллерах AT90S/LS2333 и AT90S/LS4433 имеется допол нительная функция, связанная с наличием в этих моделях схемы BOD (см. п. 4.4.4). Если схема BOD включена, к входу АЦП можно подключить внутренний источник опорного напряжения величиной 1.22 ±0.05 В.

Для этого необходимо установить в «1» разряд ADCBG регистра ADMUX.

Состояние разрядов MUX2…MUX0 при этом не имеет значения.

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

Известно, что работающий микроконтроллер является источником электромагнитных помех. Чтобы свести к минимуму помехи, наводи мые ядром процессора, в АЦП реализована возможность работы в ре — 221 — 8. Аналого цифровой преобразователь жиме Idle. Для этого необходимо выполнить следующее:

1. Убедиться, что АЦП включен и не занят преобразованием. За тем переключить АЦП в режим одиночного преобразования и разрешить прерывание от АЦП.

2. Перевести микроконтроллер в режим Idle. Сразу же после оста новки процессора начнется цикл преобразования.

3. При завершении преобразования будет сгенерировано преры вание от АЦП, которое переведет микроконтроллер в рабочий режим, и начнется выполнение подпрограммы обработки это го прерывания.

Однако помехи генерируются не только ядром процессора, но и другими схемами, в том числе расположенными вне микроконтролле ра. Для уменьшения этих помех при разработке конструкции и развод ке печатной платы рекомендуется придерживаться следующих правил:

1. На печатной плате необходимо предусмотреть область (или да же слой) сплошной металлизации под аналоговую «землю».

Аналоговая часть микроконтроллера и аналоговая часть всего устройства должны располагаться над этой областью. Аналого вая и цифровая «земли» должны соединяться друг с другом в единственной точке печатной платы.

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

3. Вывод AVСС должен быть подключен к источнику питания VCC через LC–фильтр, как показано на Рис. 8.6 (расположение выво дов показано условно).

4. Если какие либо выводы порта используются как цифровые вы ходы, они не должны переключаться во время преобразования (это замечание не относится к модели AT90C8534). Показанный на рисунке LC фильтр в этом случае должен быть исключен.

— 222 — 8. Аналого цифровой преобразователь A ADC ADC ADC ADC AREF 1. AGND AVCC Рис. 8.6. Подключение цепей питания АЦП 8.4. Параметры АЦП Основные параметры АЦП приведены в Табл. 8.4. Все значения указаны для диапазона температур окружающей среды –40…+80°C.

Таблица. 8.4. Параметры АЦП Обозначение Параметр Условия min typ max Ед. изм. Модель Разрешение 10 бит Все VREF = 4 В 1 2 МЗР fADC = 200 кГц VREF = 4 В 4 МЗР AT90S…1) Абсолютная fADC = 1 МГц погрешность VREF = 4 В 16 МЗР fADC = 2 МГц AVCC= 3.3…6.0 В 2 МЗР AT90C VREF > 2 В 0.5 МЗР AT90S…1) Интегральная INL нелинейность AVCC= 3.3…6.0 В 1 МЗР AT90C VREF > 2 В 0.5 МЗР AT90S…1) Дифференциальная DNL нелинейность AVCC= 3.3…6.0 В 2 МЗР AT90C 1 МЗР AT90S…1) Ошибка смещения AVCC= 3.3…6.0 В 0.5 МЗР AT90C 65 260 мкс AT90S…1) Время преобразования 76 175 мкс AT90C — 223 — A CC V GND ADC ADC ADC 10 мкГн 8. Аналого цифровой преобразователь Таблица. 8.4 (окончание) Обозначение Параметр Условия min typ max Ед. изм. Модель 50 200 кГц AT90S…1) fADC Тактовая частота 80 170 кГц AT90C AVCC Напряжение питания VCC – 0.3 2) VCC + 0.3 2) В Все VREF Опорное напряжение AGND AVCC AT90S…1) Входное RREF сопротивление 6 10 13 кОм Все канала опорного напряжения Входное RAIN сопротивление 100 МОм Все аналогового входа 1) Все модели с АЦП, кроме AT90C8534.

2) Диапазон допустимых значений для AVCC тот же, что и для VCC.

Глава 9. Универсальный асинхронный приемопередатчик 9.1. Общие сведения Все микроконтроллеры семейства Classic, за исключением моделей AT90S1200, AT90S/LS2323, AT90S/LS2343 и AT90C8534, имеют в своем со ставе модуль полнодуплексного универсального асинхронного приемопе редатчика (UART). Через него осуществляется прием и передача инфор мации, представленной последовательным кодом, поэтому модуль UART часто называют также последовательным портом. С помощью этого моду ля микроконтроллер может обмениваться данными с различными внеш ними устройствами.

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

Известно, что при передаче данных могут происходить различные сбои. Модуль UART, реализованный в микроконтроллерах семейства Classic, может обнаруживать и сигнализировать о следующих внештатных ситуациях:

• переполнение;

• ошибка кадрирования;

• неверный старт бит.

Для уменьшения вероятности сбоев в модуле реализована такая полез ная функция, как фильтрация помех.

Для взаимодействия с программой в модуле предусмотрены 3 раздель ных прерывания, запрос на которые генерируется при наступлении следу ющих событий: «передача завершена», «регистр данных передатчика пуст» и «прием завершен».

— 225 — 9. Универсальный асинхронный приемопередатчик Выводы микроконтроллера, используемые модулем UART, являются линиями порта D. В качестве входа приемника (RXD) используется вывод PD0, а в качестве выхода передатчика (TXD) — вывод PD1.

9.2. Управление работой UART Управление работой приемопередатчика осуществляется с помощью регистра управления UCR (в моделях AT90S/LS233 и AT90S/LS4433 — UCSRB), расположенного по адресу $0A ($2A). А текущее состояние при емопередатчика определяется с помощью регистра состояния USR (в мо делях AT90S/LS233 и AT90S/LS4433 — UCSRA), расположенного по адре су $0A ($2A). Формат регистра UCR (UCSRB) приведен на Рис. 9.1, а ре гистра USR (UCSRA) — на Рис. 9.2. Значение разрядов этих регистров описано в Табл. 9.1 и 9.2 соответственно. Неиспользуемые разряды реги стров доступны только для чтения и содержат «0».

7 6 5 4 3 2 1 RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB Чтение(R)/Запись(W) R/W R/W R/W R/W R/W R/W R R/W Начальное значение 0 0 0 0 0 0 1 Рис. 9.1. Формат регистра UCR (UCSRB) Таблица 9.1. Описание регистра UCR (UCSRB) Разряд Название Описание Разрешение прерывания по завершении приема Если данный разряд установлен в «1», то при установке флага RXC в регистре USR 7 RXCIE (UCSRA) происходит запуск подпрограммы обработки прерывания «прием завершен» (если прерывания разрешены) Разрешение прерывания по завершении передачи Если данный разряд установлен в «1», то при установке флага TXC в регистре USR 6 TXCIE (UCSRA) происходит запуск подпрограммы обработки прерывания «передача заверше на» (если прерывания разрешены) Разрешение прерывания при очистке регистра данных UART Если данный разряд установлен в «1», то при установке флага UDRE в регистре USR 5 UDRIE (UCSRA) происходит запуск подпрограммы обработки прерывания «регистр данных пуст» (если прерывания разрешены) Разрешение приема При установке данного разряда в «1» разрешается работа приемника UART. Если 4 RXEN приемник выключен, флаги TXC, OR и FE не могут быть установлены. При сбросе раз ряда RXEN эти флаги не сбрасываются — 226 — 9. Универсальный асинхронный приемопередатчик Таблица 9.1 (окончание) Разряд Название Описание Разрешение передачи При установке данного разряда в «1» разрешается работа передатчика UART. Если 3 TXEN разряд сбрасывается в «0» во время передачи, выключение передатчика произойдет только после завершения передачи текущего слова и слова, находящегося на момент выключения в регистре данных UDR Формат посылок Если разряд установлен в «1», производится передача и прием 9 разрядных данных.

2 CHR При передаче значение старшего (8 го) разряда берется из разряда TXB8 регистра, а при приеме записывается в разряд RXB 8 й разряд принимаемых данных 1 RXB8 Если флаг CHR9 установлен в «1», этот разряд содержит значение старшего разряда принятого слова 8 й разряд передаваемых данных 0 TXB8 Если флаг CHR9 установлен в «1», содержимое этого разряда передается как стар ший разряд слова USR 7 6 5 4 3 2 1 0 AT90S AT90S/LS RXC TXC UDRE FE OR — — — AT90S/LS Чтение(R)/Запись(W) R R/W R R R R R R AT90S Начальное значение 0 0 1 0 0 0 0 0 AT90S UCSRA 7 6 5 4 3 2 1 AT90S/LS RXC TXC UDRE FE OR — — MPCM AT90S/LS Чтение(R)/Запись(W) R R/W R R R R R R/W Начальное значение 0 0 1 0 0 0 0 Рис. 9.2. Формат регистра USR (UCSRA) Таблица 9.2. Описание регистра USR (UCSRA) Разряд Название Описание Флаг завершения приема Данный флаг устанавливается при пересылке принятого слова из сдвигового регист ра приемника в регистр данных UDR (установка происходит даже при обнаружении ошибок кадрирования).

7 RXC Если разряд RXCIE регистра UCR (UCSRB) установлен, то при установке флага RXC генерируется запрос на прерывание «прием завершен». Сбрасывается флаг аппа ратно, при чтении регистра UDR. Соответственно, если прерывание используется, этот регистр обязательно должен быть прочитан в обработчике прерывания — 227 — 9. Универсальный асинхронный приемопередатчик Таблица 9.2 (окончание) Разряд Название Описание Флаг завершения передачи Данный флаг устанавливается в «1» после передачи всех разрядов слова (включая стоп бит) из сдвигового регистра передатчика, при условии, что в регистр данных UDR не было загружено новое значение. Этот флаг наиболее полезен при полудуплексной связи, при которой передающее устройство должно освободить линию и перейти в ре 6 TXC жим приема сразу же после окончания передачи.

Если разряд TXCIE регистра UCR (UCSRB) установлен, то при установке флага TXC генерируется запрос на прерывание «передача завершена». Флаг сбрасывается аппарат но при выполнении подпрограммы обработки прерывания или программно записью в него лог. «1» Регистр данных пуст Данный флаг устанавливается в «1» после пересылки байта из регистра данных UDR в сдвиговый регистр передатчика. Установка этого флага означает, что передатчик готов к получению нового значения для передачи.

5 UDRE Если разряд UDRIE регистра UCR (UCSRB) установлен, генерируется запрос на прерывание «регистр данных пуст». Сбрасывается флаг аппаратно при записи регистра UDR. Соответственно, если прерывание используется, в обработчике прерывания сле дует обязательно произвести запись в этот регистр. В противном случае после оконча ния обработки прерывания оно будет вызвано снова Флаг ошибки кадрирования Данный флаг устанавливается в «1», при обнаружении ошибки кадрирования, т.е. ес 4 FE ли стоп бит принятого слова равен «0».

Флаг сбрасывается при приеме стоп бита, равного «1» Флаг переполнения Данный флаг устанавливается в «1», если в сдвиговом регистре приемника находится новое принятое слово, а старое содержимое регистра UDR не прочитано. Флаг остается 3 OR установленным до тех пор, пока не будет прочитано содержимое регистра UDR.

Флаг сбрасывается при пересылке принятых данных из сдвигового регистра прием ника в регистр UDR 2, 1 — Зарезервированы, читаются как «0» Флаг режима мультипроцессорного обмена Данный разряд используется для перехода в режим мультипроцессорного обмена.

Этот флаг устанавливается в «1», когда ведомый микроконтроллер ожидает приема ад 0 MPCM ресного байта. При распознавании ведомым микроконтроллером своего адреса он дол жен сбросить флаг MPCM и начать прием данных. Для получения более подробной информации обратитесь к разделу 9.5.

Только в моделях AT90S/LS2333 и AT90S/LS Принимаемые и передаваемые данные (младшие 8 разрядов) хранятся в регистре данных UDR, который расположен по адресу $0C ($2C). Физи чески регистр UDR состоит из двух отдельных регистров, один из которых используется для передачи данных, другой — для приема. При чтении ре гистра UDR выполняется обращение к регистру приемника, при записи — к регистру передатчика.

— 228 — 9. Универсальный асинхронный приемопередатчик 9.3. Передача данных Структурная схема передатчика модуля UART приведена на Рис. 9.3.

Работа передатчика разрешается установкой в «1» разряда TXEN реги стра UCR (UCSRB). Если этот разряд сброшен (передатчик выключен), вывод PD1 (TXD) может использоваться как контакт ввода/вывода обще го назначения. При установке разряда TXEN этот вывод подключается к передатчику UART и начинает функционировать как выход независимо от состояния разряда DDD1 регистра DDRD.

Шина данных Регистр данных Контроллер BAUD (UDR) XTAL скорости / передачи Cохранить UDR Разрешить сдвиг 10(11)–разрядный 1 Схема Схема BAUD TXD сдвиговый регистр управления PD управления передатчика выводом Режим ожидания Только в AT90S/LS AT90S/LS Регистр управления Регистр состояния (UCR/UCSRB) (USR/UCSRA) Шина данных & & «Передача завершена» «UDR пуст» Запрос на прерывание Рис. 9.3. Структурная схема передатчика UART — 229 — RXEN TXEN CHR RXB TXB RXC FE OR MPCM TXC TXC UDRE UDRE TXCIE RXCIE UDRIE 9. Универсальный асинхронный приемопередатчик Передача инициируется записью передаваемых данных в регистр дан ных UART — UDR. После этого данные пересылаются из регистра UDR в сдвиговый регистр передатчика. При этом возможны два варианта:

• новое значение записывается в регистр UDR после того, как был пе редан стоп бит предыдущего слова. В этом случае данные пересыла ются в сдвиговый регистр сразу же после записи в регистр UDR;

• новое значение записывается в регистр UDR во время передачи. В этом случае данные пересылаются в сдвиговый регистр после пере дачи стоп бита текущего слова.

После пересылки содержимого регистра UDR в сдвиговый регистр флаг UDRE регистра USR (UCSRA) устанавливается в «1», что означает готовность передатчика к получению нового значения. В этом состоя нии флаг остается до новой записи в регистр UDR. Одновременно с пе ресылкой формируется служебная информация: 0 й разряд сдвигового регистра сбрасывается в «0» (старт бит), а 9 й (10 й) разряд устанавли вается в «1» (стоп бит). Если включен режим передачи 9 разрядных данных (разряд CHR9 регистра UCR (UCSRB) установлен в «1»), то зна чение разряда TXB8 регистра UCR (UCSRB) копируется в 9 й разряд сдвигового регистра.

После загрузки сдвигового регистра его содержимое начинает сдви гаться вправо и поступать на вывод TXD в следующем порядке: старт бит, данные (начиная с младшего разряда), стоп бит. Сдвиг осуществляется по тактовому сигналу, вырабатываемому контроллером скорости передачи.

Если во время передачи в регистр UDR было записано новое значение, то после передачи стоп бита оно пересылается в сдвиговый регистр. Если же к моменту окончания передачи стоп бита такой записи выполнено не бы ло, устанавливается флаг завершения передачи TXC регистра USR (UCSRA).

9.4. Прием данных Структурная схема приемника модуля UART приведена на Рис. 9.4.

Прием данных разрешается установкой разряда RXEN регистра UCR (UCSRB). Если этот разряд сброшен (приемник выключен), вывод PD (RXD) может использоваться как контакт ввода/вывода общего назначе ния. При установке разряда RXEN этот вывод подключается к приемнику UART и начинает функционировать как вход независимо от состояния разряда DDD0 регистра DDRD.

— 230 — 9. Универсальный асинхронный приемопередатчик Шина данных Контроллер Регистр данных BAUD x16 BAUD XTAL скорости /16 (UDR) передачи Cохранить UDR Схема Блок 10(11)–разрядный RXD PD0 управления восстановления сдвиговый регистр выводом данных приемника Только в AT90S/LS AT90S/LS Регистр управления Регистр состояния (UCR/UCSRB) (USR/UCSRA) Шина данных & «Прием завершен» Запрос на прерывание Рис. 9.4. Структурная схема приемника UART Работает приемник следующим образом. Схема предварительной об работки опрашивает вход приемника с частотой, в 16 раз превышающей скорость передачи данных (для обработки одного разряда принимаемой последовательности производится 16 выборок входного сигнала). Обнару жение лог. «0» в режиме ожидания интерпретируется как появление перед него (спадающего) фронта старт бита. После этого проверяется значение 8 й, 9 й и 10 й выборок входного сигнала. Если значение хотя бы двух вы борок из указанных равно лог. «1», старт бит считается ложным (помеха), а приемник переходит к ожиданию следующего изменения входного сиг нала с лог. «1» на лог. «0». В противном случае считается, что обнаружен старт бит новой последовательности.

— 231 — RXEN TXEN CHR RXB TXB TXC UDRE FE OR MPCM RXC RXC TXCIE RXCIE UDRIE 9. Универсальный асинхронный приемопередатчик После обнаружения старт бита начинается обработка разрядов слова данных. Решение о значении принятого разряда принимается также по ре зультатам 8 й, 9 й и 10 й выборок входного сигнала (см. Рис. 9.5). Состо янием разряда считается логическое значение, которое было получено по меньшей мере в двух из трех выборок. По мере распознавания разрядов принимаемой последовательности они помещаются, сдвигаясь влево, в сдвиговый регистр приемника.

Распознавание стоп бита производится также по трем выборкам вход ного сигнала. Стоп бит считается принятым, если значение хотя бы двух из трех выборок входного сигнала равно лог. «1». В противном случае фиксируется ошибка кадрирования и флаг FE регистра USR (UCSRA) ус танавливается «1». Перед чтением регистра данных UDR следует всегда проверять состояние этого флага.

RXD Старт– Стоп– D0 D1 D2 D3 D4 D5 D6 D бит Выборки бит входного сигнала Рис. 9.5. Обработка принимаемых данных Независимо от того был или не был обнаружен стоп бит в конце при нимаемой посылки, принятое слово пересылается в регистр данных UDR и устанавливается флаг RXC регистра USR (UCSRA). При обмене 9 раз рядными данными 9 й разряд принятого слова загружается в разряд RXB регистра UCR (UCSRB) при пересылке содержимого сдвигового регистра приемника в регистр данных.

Если новое слово будет принято до того, как из регистра UDR будут считаны предыдущие данные, возникает переполнение. Об этом сигнали зирует флаг OR регистра USR (UCSRA), который в этом случае устанавли вается в «1». Установка этого флага означает, что принятые данные не мо гут быть пересланы из сдвигового регистра в регистр данных и, соответст венно, являются потерянными. Сбрасывается указанный флаг только по сле обращения к регистру данных. Поэтому при высоких скоростях пере дачи либо при большой загрузке процессора пользователь после каждого чтения содержимого регистра UDR должен проверять состояние флага OR регистра USR (UCSRA) для обнаружения возможного переполнения.

— 232 — 9. Универсальный асинхронный приемопередатчик 9.5. Мультипроцессорный режим работы UART Сразу следует сказать, что данный режим реализован только в микро контроллерах AT90S/LS2333 и AT90S/LS4433.

Режим многопроцессорного обмена позволяет осуществлять связь между несколькими ведомыми микроконтроллерами и одним ведущим. В этом режиме каждый ведомый микроконтроллер имеет свой уникальный адрес. Если ведущий микроконтроллер хочет что либо передать, он посы лает адресный байт, определяющий, к какому из микроконтроллеров он собирается обратиться. Если какой либо из ведомых микроконтроллеров распознал свой адрес, он переходит в режим приема данных и, соответст венно, принимает последующие байты как данные. Остальные ведомые микроконтроллеры игнорируют принимаемые байты до посылки веду щим нового адресного байта.

В модуле UART микроконтроллера, являющегося ведущим, должен быть установлен режим передачи 9 разрядных данных (разряд CHR9 реги стра UCR установлен в «1»). При передаче адресного байта девятый разряд должен устанавливаться в «1», а при передаче байтов данных он должен сбрасываться в «0».

В ведомых микроконтроллерах механизм приема слегка отличается в зависимости от режима работы приемника. При приеме 8 разрядных дан ных (разряд CHR9 регистра UCR (UCSRB) сброшен в «0») стоп бит адрес ного байта равен «1», а байта данных — «0». При приеме 9 разрядных дан ных 9 й разряд равен «1» для адресного байта и «0» для байта данных.

Стоп бит всегда будет равен «1».

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

1. Все ведомые микроконтроллеры переключаются в режим мульти процессорного обмена установкой в «1» разряда MPCM регистра USR (UCSRA).

2. Ведущий микроконтроллер посылает адресный байт, а все ведомые микроконтроллеры его принимают. Соответственно в каждом из ведомых микроконтроллеров устанавливается флаг RXC регистра USR (UCSRA).

3. Kаждый из ведомых микроконтроллеров считывает содержимое ре гистра UDR. Микроконтроллер, адрес которого совпал с адресом, посланным ведущим, сбрасывает флаг MPCM регистра USR (UCSRA).

— 233 — 9. Универсальный асинхронный приемопередатчик 4. Для каждого принятого байта данных в ведомом микроконтроллере устанавливается флаг завершения приема RXC регистра USR (UCSRA). Kроме того, если UART ведомого микроконтроллера ра ботает в режиме приема 8 разрядных данных, будет генерироваться ошибка кадрирования, поскольку стоп бит будет равен «0». В дру гих ведомых микроконтроллерах флаг MPCM установлен, поэтому байты данных будут игнорироваться. Содержимое регистра UDR и состояние флагов RXC и FE регистра USR (UCSRA) не изменяется.

5. После передачи последнего байта данных процесс повторяется с пункта № 2.

9.6. Скорость приема/передачи Управление скоростью приема и передачи данных осуществляется контроллером скорости передачи, который является обыкновенным дели телем частоты. Скорость передачи зависит от содержимого регистра кон троллера. В моделях AT90S/LS2333 и AT90S/LS4433 этот регистр является 12 разрядным и физически размещается в двух РВВ UBRRHI:UBRR, рас положенных по адресам $03:$09 ($23:$29). В остальных моделях он разме щается в одном регистре UBRR, расположенном по адресу $09 ($29). Соб ственно скорость передачи определяется следующим выражением:

f CLK BAUD = 16 (UBR + 1) где BAUD — скорость передачи (в бодах);

fCLK — тактовая частота микроконтроллера, Гц;

UBR — содержимое регистра контроллера скорости передачи (0…4095 для моделей AT90S/LS2333 и AT90S/LS4433 и 0…255 для осталь ных моделей).

Kак известно, существует ряд значений скорости передачи данных, яв ляющихся, по сути дела, стандартными. Значения регистра UBR, позволя ющие получить эти скорости передачи при использовании различных ре зонаторов, а также величины ошибок получаемых значений относительно их теоретического значения приведены в Табл. 9.3.

— 234 — 9. Универсальный асинхронный приемопередатчик Таблица 9.3. Значения регистра UBR для различных значений тактовой частоты микроконтроллера Скорость Ошибка Ошибка Ошибка Ошибка 1 МГц 1.8432 МГц 2 МГц 2.4576 МГц [бод] [%] [%] [%] [%] 2400 UBR = 25 0.2 UBR = 47 0.0 UBR = 51 0.2 UBR = 63 0. 4800 UBR = 12 0.2 UBR = 23 0.0 UBR = 25 0.2 UBR = 31 0. 9600 UBR = 6 7.5 UBR = 11 0.0 UBR = 12 0.2 UBR = 15 0. 14400 UBR = 3 7.8 UBR = 7 0.0 UBR = 8 3.7 UBR = 10 3. 19200 UBR = 2 7.8 UBR = 5 0.0 UBR = 6 7.5 UBR = 7 0. 28800 UBR = 1 7.8 UBR = 3 0.0 UBR = 3 7.8 UBR = 4 6. 38400 UBR = 1 22.9 UBR = 2 0.0 UBR = 2 7.8 UBR = 3 0. 57600 UBR = 0 7.8 UBR = 1 0.0 UBR = 1 7.8 UBR = 2 12. 76800 UBR = 0 22.9 UBR = 1 33.3 UBR = 1 22.9 UBR = 1 0. 115200 UBR = 0 84.3 UBR = 0 0.0 UBR = 0 7.8 UBR = 0 25. Скорость Ошибка Ошибка Ошибка Ошибка 3.2768 МГц 3.6864 МГц 4 МГц 4.608 МГц [бод] [%] [%] [%] [%] 2400 UBR = 84 0.4 UBR = 95 0.0 UBR = 103 0.2 UBR = 119 0. 4800 UBR = 42 0.8 UBR = 47 0.0 UBR = 51 0.2 UBR = 59 0. 9600 UBR = 20 1.6 UBR = 23 0.0 UBR = 25 0.2 UBR = 29 0. 14400 UBR = 13 1.6 UBR = 15 0.0 UBR = 16 2.1 UBR = 19 0. 19200 UBR = 10 3.1 UBR = 11 0.0 UBR = 12 0.2 UBR = 14 0. 28800 UBR = 6 1.6 UBR = 7 0.0 UBR = 8 3.7 UBR = 9 0. 38400 UBR = 4 6.3 UBR = 5 0.0 UBR = 6 7.5 UBR = 7 6. 57600 UBR = 3 12.5 UBR = 3 0.0 UBR = 3 7.8 UBR = 4 0. 76800 UBR = 2 12.5 UBR = 2 0.0 UBR = 2 7.8 UBR = 3 6. 115200 UBR = 4 12.5 UBR = 1 0.0 UBR = 1 7.8 UBR = 2 20. Скорость Ошибка Ошибка Ошибка Ошибка 7.3728 МГц 8 МГц 9.216 МГц 11.059 МГц [бод] [%] [%] [%] [%] 2400 UBR = 191 0.0 UBR = 207 0.2 UBR = 239 0.0 UBR = 287 — 4800 UBR = 95 0.0 UBR = 103 0.2 UBR = 119 0.0 UBR = 143 0. 9600 UBR = 47 0.0 UBR = 51 0.2 UBR = 59 0.0 UBR = 71 0. 14400 UBR = 31 0.0 UBR = 34 0.8 UBR = 39 0.0 UBR = 47 0. 19200 UBR = 23 0.0 UBR = 25 0.2 UBR = 29 0.0 UBR = 35 0. 28800 UBR = 15 0.0 UBR = 16 2.1 UBR = 19 0.0 UBR = 23 0. 38400 UBR = 11 0.0 UBR = 12 0.2 UBR = 14 0.0 UBR = 17 0. 57600 UBR = 7 0.0 UBR = 8 3.7 UBR = 9 0.0 UBR = 11 0. 76800 UBR = 5 0.0 UBR = 6 7.5 UBR = 7 6.7 UBR = 8 0. 115200 UBR = 3 0.0 UBR = 3 7.8 UBR = 4 0.0 UBR = 5 0. — 235 — 9. Универсальный асинхронный приемопередатчик Значения регистра UBR, при которых получаемая скорость передачи отличается от требуемого значения меньше чем на 2%, выделены в табли це жирным шрифтом. Однако поскольку при увеличении ошибки помехо защищенность линии передачи снижается, скорости передачи, имеющие ошибку установки более 1%, использовать не рекомендуется.

Глава 10. Последовательный периферийный интерфейс SPI 10.1. Общие сведения Последовательный периферийный интерфейс SPI (Serial Peripheral Interface), реализованный в микроконтроллерах семейства, имеет два назначения. Прежде всего через него может быть осуществлено про граммирование микроконтроллера (так называемый режим последо вательного программирования). Использование интерфейса SPI в этом качестве будет описано в следующей главе.

Вторым назначением интерфейса является организация высоко скоростного обмена данными между микроконтроллером и различны ми периферийными устройствами, такими как цифровые потенцио метры ЦАП/АЦП, Flash ПЗУ и др. Посредством этого интерфейса также может производиться обмен данными между несколькими мик роконтроллерами AVR. Использование интерфейса SPI в качестве вы сокоскоростного канала связи и рассматривается в данной главе. Од нако такой возможностью обладают не все модели, а только AT90S/LS2333, AT90S/LS4433, AT90S/LS4434, AT90S/LS8535, AT90S4414 и AT90S8515.

При обмене данными по интерфейсу SPI микроконтроллер AVR может работать как в режиме Master, так и в режиме Slave. При этом пользователь может задать следующие параметры:

• скорость передачи (четыре программируемых значения);

• формат передачи (от младшего разряда к старшему или наобо рот);

Дополнительной возможностью подсистемы SPI является «пробужде ние» микроконтроллера из режима Idle при поступлении данных.

— 237 — 10. Последовательный периферийный интерфейс SPI 10.2. Функционирование модуля SPI Структурная схема модуля SPI приведена на Рис. 10.1.

Модуль SPI использует четыре вывода микроконтроллера. Kак и для большинства прочих периферийных устройств, эти выводы явля ются линиями порта ввода/вывода общего назначения (см. Табл. 10.1).

S MISO M C3P M3P XTAL M MOSI 8–разрядный S сдвиговый регистр Делитель Приемный буфер /4/16/64/ Тактовый сигнал Тактовый сигнал SPI SCK Селектор (MASTER) Управление S тактовым —— сигналом M SS MSTR Управление SPE модулем SPI SPIE Регистр Регистр состояния SPI управления SPI 8 8 Внутреняя шина данных Запрос на прерывание SPI Рис. 10.1. Структурная схема модуля SPI Таблица. 10.1. Выводы, используемые модулем SPI AT90S/LS2333 AT90S/LS4434 AT90S Название Описание AT90S/LS4433 AT90S/LS8535 AT90S SCK PB5 PB7 PB7 Выход (master)/вход (slave) тактового сигнала MISO PB4 PB6 PB6 Вход (master)/выход (slave) данных MOSI PB3 PB5 PB5 Выход (master)/вход (slave) данных PB2 PB4 PB4 Выбор ведомого устройства SS — 238 — выводами Схема управления SPR SPR SPE MSTR DORD SPIF WCOL SPIE SPE DORD MSTR CPOL CPHA SPR SPR 10. Последовательный периферийный интерфейс SPI При включенном модуле SPI режим работы указанных выводов (направление передачи данных) переопределяется согласно Табл. 10.2.

Таблица. 10.2. Переназначение режима работы выводов модуля SPI Вывод Режим Master Режим Slave MOSI Определяется пользователем* Вход MISO Вход Определяется пользователем* SCK Определяется пользователем* Вход Определяется пользователем* Вход SS * Направление передачи данных определяется состоянием соответствующего разряда регистра DDRB.

Kак видно из таблицы, в некоторых случаях пользователь должен самостоятельно задать режим работы вывода, используемого модулем SPI, в соответствии с его назначением (см. далее по тексту). Причем возможность управления внутренними подтягивающими резисторами выводов, работающих как входы, сохраняется независимо от способа управления их режимом работы.

Для управления модулем SPI предназначен регистр управления SPCR, расположенный по адресу $0D ($2D). Формат этого регистра приведен на Рис. 10.2, а краткое описание функций разрядов регистра приведено в Табл. 10.2. Подробно использование различных разрядов регистра будет описано далее.

7 6 5 4 3 2 1 SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR Чтение(R)/Запись(W) R/W R/W R/W R/W R/W R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 Рис. 10.2. Формат регистра SPCR Таблица. 10.3. Регистр SPCR Разряд Название Описание 7 SPIE Разрешение прерывания от SPI 6 SPE Включение/выключение SPI 5 DORD Порядок передачи данных 4 MSTR Выбор режима работы (Master/Slave) 3 CPOL Полярность тактового сигнала 2 CPHA Фаза тактового сигнала 1, 0 SPR1:SPR0 Скорость передачи — 239 — 10. Последовательный периферийный интерфейс SPI Kонтроль состояния модуля осуществляется с помощью регистра состояния SPSR (доступен только для чтения), расположенного по ад ресу $0E ($2E). Формат этого регистра приведен на Рис. 10.3, а назна чение его разрядов описано в Табл. 10.4.

7 6 5 4 3 2 1 SPIF WCOL — — — — — — Чтение(R)/Запись(W) R R R R R R R R Начальное значение 0 0 0 0 0 0 0 Рис. 10.3. Формат регистра SPSR Таблица. 10.3. Описание регистра SPSR Разряд Название Описание Флаг прерывания от SPI Данный флаг устанавливается в «1» по окончании передачи очередного байта.

Если флаг SPIE регистра SPCR установлен в «1» и прерывания разрешены, одновременно с установкой флага генерируется прерывание от SPI. Также флаг 7 SPIF SPIF устанавливается в «1» при переводе микроконтроллера из режима Master SS в режим Slave посредством вывода (см. раздел 10.3).

Флаг сбрасывается аппаратно либо при старте подпрограммы обработки прерывания, либо после чтения регистра состояния SPI с последующим обращением к регистру данных SPI (SPDR) Флаг конфликта записи Данный флаг устанавливается в «1» при попытке записи в регистр данных (SPDR) 6 WCOL во время передачи очередного байта.

Флаг сбрасывается аппаратно после чтения регистра состояния SPI с последующим обращением к регистру данных SPI 5…0 — Зарезервированы, читаются как «0» Передаваемые данные записываются, а принимаемые — считываются из регистра данных SPDR, расположенного по адресу $0F ($2F). Запись в этот регистр инициирует начало передачи, а при его чтении считывается содержимое приемного буфера сдвигового ре гистра. Поэтому этот регистр можно назвать буфером между регистро вым файлом микроконтроллера и сдвиговым регистром модуля SPI.

Соединение двух микроконтроллеров (ведущий—ведомый) по ин терфейсу SPI показано на Рис. 10.4. Вывод SCK ведущего микроконт роллера является выходом тактового сигнала, а ведомого микроконт роллера — входом.

— 240 — 10. Последовательный периферийный интерфейс SPI MASTER SLAVE C3P M3P C3P M3P MISO MISO 8–разрядный 8–разрядный сдвиговый регистр сдвиговый регистр MOSI MOSI Генератор SCK SCK тактового —— —— сигнала SPI SS SS VCC Рис. 10.4. Соединение микроконтроллеров по интерфейсу SPI Перед выполнением обмена необходимо прежде всего разрешить рабо ту модуля SPI. Для этого следует установить в «1» разряд SPE регистра SPCR. Режим работы определяется состоянием разряда MSTR этого реги стра: если разряд установлен в «1», микроконтроллер работает в режиме Master (ведущий), если сброшен в «0» — в режиме Slave (ведомый).

Передача данных осуществляется следующим образом. При записи в регистр данных SPI ведущего микроконтроллера запускается генератор тактового сигнала модуля SPI, и данные начинают поразрядно выдаваться на вывод MOSI и, соответственно, поступать на вывод MOSI ведомого ми кроконтроллера. Порядок передачи разрядов данных определяется состо янием разряда DORD регистра SPCR. Если разряд установлен в «1», пер вым передается младший разряд байта, если же сброшен в «0» — старший разряд. После выдачи последнего разряда текущего байта генератор такто вого сигнала останавливается с одновременной установкой в «1» флага «Kонец передачи» (SPIF). Если прерывания от модуля SPI разрешены (флаг SPIE регистра SPCR установлен в «1»), генерируется запрос на пре рывание. При подключении к ведущему устройству нескольких ведомых, что разрешено спецификацией SPI, выбор конкретного ведомого устрой SS ства осуществляется подачей на его вход сигнала НИЗKОГО уровня.

Образно говоря, два сдвиговых регистра ведомого и ведущего уст ройств можно считать одним распределенным 16 разрядным цикличе ским сдвиговым регистром, как показано на Рис. 10.4. Одновременно с передачей данных от ведущего к ведомому происходит передача и в обратном направлении. Таким образом, в каждом цикле сдвига проис ходит обмен данными между устройствами.

— 241 — 10. Последовательный периферийный интерфейс SPI В модуле используется одинарная буферизация при передаче и двойная — при приеме. Это означает, что готовый для передачи байт данных не может быть записан в регистр данных SPI до окончания предыдущего цикла обмена. При попытке изменить содержимое ре гистра данных во время передачи устанавливается в «1» флаг WCOL регистра SPSR. Сбрасывается этот флаг после чтения регистра SPSR с последующим обращением к регистру данных SPI.

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

10.3. Режимы передачи данных Спецификация интерфейса SPI предусматривает 4 режима передачи данных. Эти режимы различаются соответствием между фазой (момент считывания сигнала) тактового сигнала SCK, его полярностью и переда ваемыми данными. Всего существует 4 такие комбинации, определяемые состоянием разрядов CPHA и CPOL регистра SPCR (см. Табл. 10.4).

Таблица. 10.4. Задание режима передачи данных Разряд Описание Полярность тактового сигнала 0 — генерируются импульсы положительной полярности, при отсутствии импульсов CPOL на выводе присутствует НИЗKИЙ уровень;

1 — генерируются импульсы отрицательной полярности, при отсутствии импульсов на выводе присутствует ВЫСОKИЙ уровень Фаза тактового сигнала 0 — обработка данных производится по переднему фронту импульсов сигнала SCK CPHA (для CPOL = 0 — по нарастающему, а для CPOL = 1 — по спадающему фронту).

1 — обработка производится по заднему фронту импульсов сигнала SCK Соответствующие этим режимам форматы обмена данными через SPI приведены на Рис. 10.5 и 10.6 (передача ведется от старшего разря да к младшему).

Частота тактового сигнала SCK и, соответственно, скорость пере дачи данных по интерфейсу определяются состоянием разрядов SPR1:SPR0 регистра SPCR (см. Табл. 10.5). Разумеется, речь идет о ми кроконтроллере, работающем в режиме Master, т.к. именно он являет ся источником тактового сигнала. Для устройства, находящегося в ре жиме Slave, состояние этих разрядов безразлично.

— 242 — 10. Последовательный периферийный интерфейс SPI Такт SCK 1 2 3 4 5 6 7 (для справки) SCK (CPOL=0) SCK (CPOL=1) MOSI (от ведущего) C3P 6 5 4 3 2 1 M3P MISO C3P 6 5 4 3 2 1 M3P (от ведомого) * —— SS (к ведомому) Моменты выборок * Не определено (как правило, С3Р только что принятого байта) Рис. 10.5. Передача данных при CPHA = 0 и DORD = Такт SCK 1 2 3 4 5 6 7 (для справки) SCK (CPOL=0) SCK (CPOL=1) MOSI (от ведущего) C3P 6 5 4 3 2 1 M3P MISO C3P 6 5 4 3 2 1 M3P (от ведомого) * —— SS (к ведомому) Моменты выборок * Не определено (как правило, М3Р только что переданного байта) Рис. 10.6. Передача данных при CPHA = 1 и DORD = Таблица. 10.5. Задание частоты тактового сигнала SCK SPR1 SPR0 Частота сигнала SCK 0 0 FCLK/4* 0 1 FCLK/ 1 0 FCLK/ 1 1 FCLK/ * FCLK — тактовая частота микроконтроллера.

— 243 — 10. Последовательный периферийный интерфейс SPI 10.4. Использование вывода F Вообще этот вывод предназначен для выбора активного ведомого уст ройства и в режиме Slave всегда является входом. При подаче на него на пряжения НИЗKОГО уровня модуль SPI активируется и вывод MOSI пе реключается в режим вывода данных (если это задано пользователем). Ос тальные выводы модуля SPI являются в этом режиме входами. А при по SS даче на вывод напряжения ВЫСОKОГО уровня все выводы модуля SPI переключаются в режим ввода данных. При этом модуль переходит в неактивное состояние и прием данных не производится.

Следует помнить, что каждый раз, когда на вывод подается на SS пряжение ВЫСОKОГО уровня, происходит сброс модуля SPI. Соот ветственно, если изменение состояния этого вывода произойдет во время передачи данных, и прием и передача немедленно прекратятся, а передаваемый и принимаемый байты будут потеряны.

Если же микроконтроллер находится в режиме Master (разряд MSTR регистра SPCR установлен в «1»), направление передачи данных через вы SS вод определяется пользователем. Если вывод сконфигурирован как выход, он работает как линия вывода общего назначения и не влияет на работу модуля SPI. Если же он сконфигурирован как вход, то для обеспе чения нормальной работы модуля SPI на него должен быть подан сигнал ВЫСОKОГО уровня. Дело в том, что подача на этот вход сигнала НИЗKОГО уровня от какой либо внешней схемы будет воспринята моду лем SPI как выбор данного микроконтроллера в качестве ведомого и, со ответственно, начало передачи ему данных. Во избежание конфликта на шине система SPI в таких случаях выполняет следующие действия:

1. Флаг MSTR регистра SPCR сбрасывается, и микроконтроллер переключается в режим Slave. Kак следствие, выводы MOSI и SCK начинают функционировать как входы.

2. Устанавливается флаг SPIF регистра SPSR, генерируя запрос на прерывание от SPI. Если прерывания от SPI разрешены и флаг I регистра SREG установлен в «1», происходит запуск подпро граммы обработки прерывания.

Таким образом, если ведущий микроконтроллер использует передачу дан ных, управляемую прерыванием, и существует вероятность подачи на вход SS сигнала НИЗKОГО уровня, в подпрограмме обработки прерывания от SPI обязательно должна осуществляться проверка состояния флага MSTR.

При обнаружении сброса этого флага он должен быть программно установ лен обратно в «1» для обратного перевода микроконтроллера в режим Master.

— 244 — Глава 11. Программирование микроконтроллеров 11.1. Общие сведения При программировании микроконтроллера полученный в результате компиляции программы машинный код загружается в память программ, а требуемые данные заносятся в ЭСППЗУ (EEPROM память). Подавляю щее большинство микроконтроллеров семейства поддерживает 2 режима программирования:

• режим параллельного программирования при высоком напряжении;

• режим программирования по последовательному каналу.

Исключение составляют лишь модели AT90S/LS2323 и AT90S/LS2343, в которых вместо режима параллельного программирования используется режим последовательного программирования при высоком напряжении, а также модель AT90C8534, программирование которой может быть про изведено только в параллельном режиме. Под «высоким» напряжением здесь понимается управляющее напряжение (12В), подаваемое на вывод RESET микроконтроллера для перевода последнего в режим программи рования. При этом независимо от режима программирование FLASH и EEPROM памяти осуществляется всегда побайтно.

В процессе программирования могут выполняться следующие операции:

• стирание кристалла (Chip erase);

• чтение/запись Flash памяти программ;

• чтение/запись EEPROM памяти данных;

• чтение/запись конфигурационных ячеек;

• чтение/запись ячеек защиты;

• чтение ячеек идентификатора;

Все модели микроконтроллеров поставляются со стертой памятью программ и памятью данных (во всех ячейках находится число $FF) и при годны к немедленному программированию.

— 245 — 11. Программирование микроконтроллеров 11.2. Защита кода и данных Содержимое FLASH памяти (памяти программ), а также содержимое EEPROM памяти (память данных) может быть защищено от записи и/или чтения посредством программирования ячеек защиты (Lock Bits) LB1 и LB2. Возможные режимы защиты, соответствующие различным состоя ниям этих ячеек, приведены в Табл. 11.1.

Таблица 11.1. Режимы защиты Ячейки защиты Описание № режима LB1 LB 1 1 1 Защита кода и данных отключена 2 0 1 Последующая запись FLASH и EEPROM запрещена 3 0 0 Запрещена как запись, так и чтение FLASH и EEPROM При использовании параллельного режима программирования (для AT90S/LS2323 и AT90S/LS2343 — последовательного программирования при высоком напряжении) в режимах 2 и 3 запрещается также изменение конфигурационных ячеек (см. далее). Поэтому включение защиты следу ет выполнять в самую последнюю очередь, после программирования ос тальных областей памяти микроконтроллера.

В исходном (незапрограммированном) состоянии в этих ячейках со держится «1», после программирования — «0». Стирание ячеек защиты (запись в них лог. «1») может быть произведено только при выполнении команды «Стирание кристалла», уничтожающей также содержимое FLASH и EEPROM памяти.

11.3. Kонфигурационные ячейки Kак следует из названия, конфигурационные ячейки (Fuse Bits) опре деляют ряд параметров конфигурации микроконтроллера. Эти ячейки расположены в отдельном адресном пространстве, доступном только при программировании. Состав этих ячеек зависит от конкретной модели ми кроконтроллера (в модели AT90C8534 они вообще отсутствуют). Наличие той или иной ячейки в конкретном микроконтроллере можно определить по Табл. 11.2, в которой указаны состояния конфигурационных ячеек по умолчанию для всех моделей семейства (кроме AT090C8534). Соответст венно пустая ячейка таблицы означает, что в данном микроконтроллере эта конфигурационная ячейка отсутствует.

Pages:     | 1 | 2 || 4 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.