█ (перевод с англ. Ю.Андриенко) █ █ Fidonet - 2:461/44.14, █ █ E-Mail - yurik@aqua.kharkov.ua █ █ Phone - (057-2) 98-07-58, 44-85-40 █ Микроконтроллер AT90S2313 фирмы Atmel AT90S2313 - экономичный 8 битовый КМОП микроконтроллер, построен- ный с использованием расширенной RISC архитектуры AVR. Исполняя по од- ной команде за период тактовой частоты, AT90S2313 имеет производитель- ность около 1MIPS на МГц, что позволяет разработчикам создавать систе- мы оптимальные по скорости и потребляемой мощности. В основе ядра AVR лежит расширенная RISC архитектура, объединяю- щая развитый набор команд и 32 регистра общего назначения. Все 32 ре- гистра непосредственно подключены к арифметико-логическому устройству (АЛУ), что дает доступ к любым двум регистрам за один машинный цикл. Подобная архитектура обеспечивает десятикратный выигрыш в эффективнос- ти кода по сравнению с традиционными CISC микроконтроллерами. AT90S2313 предлагает следующие возможности: 2кБ загружаемой флэш памяти; 128 байт EEPROM; 15 линий ввода/вывода общего назначения; 32 рабочих регистра; настраиваемые таймеры/счетчики с режимом совпадения; внешние и внутренние прерывания; программируемый универсальный после- довательный порт; программируемый строжевой таймер со встроенным гене- ратором; SPI последовательный порт для загрузки программ; два выбирае- мых программно режима низкого энергопотребления. Холостой режим (Idle Mode) отключает ЦПУ, оставляя в рабочем состоянии регистры, тайме- ры/счетчики, SPI порт и систему прерываний. Экономичный режим (Power Down Mode) сохраняет содержимое регистров, но отключает генератор, за- прещая функционирование всех встроенных устройств до внешнего прерыва- ния или аппаратного сброса. Микросхемы производятся с использованием технологии энергонезави- симой памяти высокой плотности фирмы Atmel. Загружаемая флэш память на кристалле может быть перепрограммирована прямо в системе через после- довательный интерфейс SPI или доступным программатором энергонезависи- мой памяти. Объединяя на одном кристалле усовершенствованный 8-бито- вый RISC процессор с загружаемой флэш памятью, AT90S2313 является мощ- ным микроконтроллером, который позволяет создавать достаточно гибкие и эффективные по стоимости устройства. AT90S2313 поддерживается полной системой разработки включающей в себя макроассемблер, программный отладчик/симулятор, внутрисхемный эмулятор и отладочный комплект. ОПИСАНИЕ ВЫВОДОВ VCC - вывод источника питания GND - земля Port B (PB7..PB0) - Порт B является 8-битовым двунаправленным портом ввода/вывода. Для выводов порта предусмотренны внутренние под- тягивающие резисторы (выбираются для каждого бита). Выводы PB0 и PB1 также являются положительным (AIN0) и отрицательным (AIN1) входами встроенного аналогового компаратора. Выходные буферы порта B могут по- глощать ток до 20мА и непосредственно управлять светодиодными индика- торами. Если выводы PB0..PB7 используются как входы и извне устанавли- ваются в низкое состояние, они являются источниками тока, если включе- ны внутренние подтягивающие резисторы. Кроме того Порт B обслуживает некоторые специальные функции, которые будут описаны ниже. ┌────┬┬────┐ RESET ┌┤1 └┘ 20├┐ VCC └┤ ├┘ PD0/RXD ┌┤2 19├┐ PB7/SCK └┤ ├┘ PD1/TXD ┌┤3 18├┐ PB6/MISO └┤ ├┘ XTAL2 ┌┤4 17├┐ PB5/MOSI └┤ ├┘ XTAL1 ┌┤5 16├┐ PB4 └┤ ├┘ PD2/INT0 ┌┤6 15├┐ PB3/OC1 └┤ ├┘ PD3 ┌┤7 14├┐ PB2 └┤ ├┘ PD4/T0 ┌┤8 13├┐ PB1/AIN1 └┤ ├┘ PD5/T1 ┌┤9 12├┐ PB0/AIN0 └┤ ├┘ GND ┌┤10 11├┐ PD8/ICP └┤ ├┘ └──────────┘ Port D (PD6..PD0) - Порт D является 7-битовым двунаправленным портом с внутренними подтягивающими резисторами. Выходные буферы порта D могут поглощать ток до 20мА. Как входы установленные в низкое состо- яние, выводы порта D являются источниками тока, если задействованы подтягивающие резисторы. Кроме того Порт D обслуживает некоторые спе- циальные функции, которые будут описаны ниже. RESET - Вход сброса. Удержание на входе низкого уровня в течение двух машинных циклов (если работает тктовый генератор), сбрасывает ус- тройство. XTAL1 - Вход инвертирующего усилителя генератора и вход внешнего тактового сигнала. XTAL2 - Выход инвертирующего усилителя генератора. КВАРЦЕВЫЙ ГЕНЕРАТОР XTAL1 и XTAL2 являются входом и выходом инвертирующего усилителя, на котором можно собрать генератор тактовых импульсов. Можно использо- вать как кварцевые, так и керамические резонаторы. При подключении внешнего тактового сигнала вывод XTAL2 остается неподключенным, а XTAL1 подключается в выходу внешнего генератора. Обзор архитектуры AT90S2313 Регистровый файл быстрого доступа содержит 32 8-разрядных регист- ра общего назначения, доступ к которым осуществляется за один машинный цикл. Поэтому за один машинный цикл исполняется одна операция АЛУ. Два операнда выбираются из регистрового файла, выполняется операция, ре- зультат ее записывается в регистровый файл - все за один машинный цикл. Шесть из 32 регистров можно использовать как три 16-разрядных указателя в адресном пространстве данных, что дает возможность исполь- зовать высокоэффективную адресную арифметику (16-разрядные регистры X, Y и Z). Один из трех адресных указателей (регистр Z) можно использо- вать для адресации таблиц в памяти программ. Это X-, Y- и Z-регистры. ││ │ │ ┌──┤├───┬────┤XTAL2 не подключен ──┤XTAL2 │ ││ ──┴── │ │ │ ┌───┐ │ │ │ └───┘ │ │ │ ││ ──┬── │ сигнал │ ├──┤├───┴────┤XTAL1 внешнего ──────┤XTAL1 │ ││ │ генератора │ │ │ │ │ │ ├─┴────────────┤GND ├────┤GND │ │ │ │ Подключение кристалла Подключение внешнего генератора АЛУ поддерживает арифметические и логические операции c регистра- ми, с константами и регистрами. Операции над отдельными регистрами также выполняются в АЛУ. Кроме регистровых операций, для работы с регистровым файлом могут использоваться доступные режимы адресации, поскольку регистровый файл занимает адреса $00-$1F в области данных, обращаться к ним можно как к ячейкам памяти. Пространство ввода состоит из 64 адресов для периферийных функций процессора, таких как управляющие регистры , тамеры/счетчики и другие. Доступ к пространству ввода/вывода может осуществляться непосредствен- но, как к ячейкам памяти расположенным после регистрового файла ($20- $5F). Процессоры AVR построены по гарвардской архитектуре с раздельными областями памяти программ и данных. Доступ к памяти програм осуществ- ляется при помощи одноуровнего буфера. Во время выполнения команды, следующая выбирается из памяти программ. Подобная концепция дает воз- можность выполнять по одной команде за каждый машинный цикл. Память программ - это внутрисистемная загружаемая флэш-память. При помощи команд относительных переходов и вызова подпрограмм осуществляется доступ ко всему адресному пространству. Большая часть команд AVR имеет размер 16-разрядов, одно слово. Каждый адрес в памяти программ содержит одну 16- или 32-разрядную команду. При обработке прерываний и вызове подпрограмм адрес возврата за- поминается в стеке. Стек размещается в памяти данных общего назначе- ния, соответственно размер стека ограничен только размером доступной памяти данных и ее использованием в программе. Все программы пользова- теля должны инициализировать указатель стека (SP) в программе выполня- емой после сброса (до того как вызываются подпрограммы и разрешаются прерывания). 8-разрядный указатель стека доступен для чтения/записи в области ввода/вывода. Доступ к 128 байтам статического ОЗУ, регистровому файлу и регис- трам ввода/вывода осуществляется при помощи пяти лоступных режимов ад- ресации поддерживаемых архитектурой AVR. Все пространство памяти AVR является линейным и непрерывным. Гибкий модуль прерываний имеет собственный управляющий регистр в пространстве ввода/вывода, и флаг глобального разрешения прерываний в регистре состояния. Каждому прерыванию назначен свой вектор в началь- ной области памяти программ. Различные прерывания имеют приоритет в соответствии с расположением их векторов. По младшим адресам располо- жены векторы с большим приоритетом. Файл регистров общего назначения Все команды оперирующие регистрами прямо адресуются к любому из регистров за один машинный цикл. Единственное исключение - пять команд оперирующих с константами SBCI, SUBI, CPI, ANDI, ORI и команда LDI, загружающая регистр константой. Эти команды работают только со второй половиной регистрового файла - R16..R31. Команды SBC, SUB, CP, AND и OR, также как и все остальные, применимы ко всему регистровому файлу. Каждому регистру присвоен адрес в пространстве данных, они отоб- ражаются на первые 32 ячейки ОЗУ. Хотя регистровый файл физически раз- мещен вне ОЗУ, подобная организация памяти дает гибкий доступ к регис- трам. Регистры X, Y и Z могут использоваться для индексации любого регистра. Кроме обычных функций, регистры R26..R31 имеют дополнительные функции, эти регистры можно использовать как адресные указатели в об- ласти памяти данных. Эти регистры обозначаются как X,Y,Z и определены следующим образом: 15 0 ┌──────────────────┬──────────────────┐ Регистр X │7 0│7 0│ └──────────────────┴──────────────────┘ R27($1B) R26($1A) 15 0 ┌──────────────────┬──────────────────┐ Регистр Y │7 0│7 0│ └──────────────────┴──────────────────┘ R29($1D) R28($1C) 15 0 ┌──────────────────┬──────────────────┐ Регистр Z │7 0│7 0│ └──────────────────┴──────────────────┘ R31($1F) R30($1E) При различных режимах адресации эти регистры могут использоваться как фиксированный адрес, для адресации с автоинкрементом или с автоде- крементом. Арифметико-логическое устройство - АЛУ АЛУ процессора непосредственно подключено к 32 регистрам общего назначения. За один машинный цикл АЛУ производит операции между регис- трами регистрового файла. Команды АЛУ разделены на три основных кате- гории - арифметические, логические и битовые. Загружаемая память программ. AT90S2313 содержит 2кБ загружаемой флэш памяти для хранения про- грамм. Поскольку все команды занимают одно 16- или 32-разрядное слово, флэш память организована как 1Kx16. Флэш-память выдерживает не менее 1000 циклов перезаписи. Программный счетчик имеет ширину 10 бит и позволяет адресоваться к 1024 словам программной флэш-памяти. Подробно загрузка флэш памяти будет рассмотрена дальше. Таблицы констант могут располагаться в диапазоне адресов 0-2K. (см. описание команды LPM). EEPROM память данных AT90S2313 содержит 128 байт электрически стираемой энергонезави- симой памяти (EEPROM). EEPROM организована как отдельная область дан- ных, каждый байт которой может быть прочитан и перезаписан. EEPROM вы- держивает не менее 100000 циклов записи/стирания. Доступ к энергонеза- висимой памяти данных рассмотрен ниже и задается регистрами адреса, данных и управления. Дальше будет рассмотрена загрузка данных в EEPROM через SPI ин- терфейс. Статическое ОЗУ данных На следующем рисунке показана организация памяти данных в AT90S2313: Регистровый файл Область адресов данных ┌─────────────┐ ┌─────────────┐ │ R0 │ │ $00 │ ├─────────────┤ ├─────────────┤ │ R1 │ │ $01 │ ├─────────────┤ ├─────────────┤ │ ... │ │ ... │ │ ... │ │ ... │ ├─────────────┤ ├─────────────┤ │ R30 │ │ $1E │ ├─────────────┤ ├─────────────┤ │ R31 │ │ $1F │ └─────────────┘ └─────────────┘ Регистры вв\выв. ┌─────────────┐ ┌─────────────┐ │ $00 │ │ $20 │ ├─────────────┤ ├─────────────┤ │ $01 │ │ $21 │ ├─────────────┤ ├─────────────┤ │ ... │ │ ... │ │ ... │ │ ... │ ├─────────────┤ ├─────────────┤ │ $3E │ │ $5E │ ├─────────────┤ ├─────────────┤ │ $3F │ │ $5F │ └─────────────┘ └─────────────┘ Встроенное ОЗУ ┌─────────────┐ │ $60 │ ├─────────────┤ │ $61 │ ├─────────────┤ │ ... │ │ ... │ ├─────────────┤ │ $DE │ ├─────────────┤ │ $DF │ └─────────────┘ 224 ячейки памяти включают в себя регистровый файл, память вво- да/вывода и статическое ОЗУ данных. Первые 96 адресов используются для регистрового файла и памяти ввода/вывода, следующие 128 - для ОЗУ данных. При обращении к памяти используются пять различных режимов адре- сации: прямой, непосредственный со смещением, непосредственный, непо- средственный с предварительным декрементом и непосредственный с по- стинкрементом. Регисты R26..R31 регистрового файла используются как указатели для непосредственной адресации. Прямая адресация имеет доступ ко всей памяти данных. Непосредственная адресация со смещением используется для доступа к 63 ячейкам базовый адрес которых задается содержимым регистров Y или Z. Для непосредственной адресации с инкрементом и декрементом адреса используются адресные регистры X, Y и Z. При помощи любого из этих режимов производится доступ ко всем 32 регистрам общего назначения, 64 регистрам ввода/вывода и 128 ячейкам ОЗУ. Время выполнения команд. ЦПУ процессора AVR управляется системной частотой генерируемой внешним резонатором. Внутреннее деление частоты генератора не исполь- зуется. В процессоре организован буфер (pipeline) команд, при выборе команды из памяти программ происходит выполнение предыдущей команды. Подобная концепция позволяет достичь быстродействия 1MIPS на MHz, уни- кальных показателей стоимости, быстродействия и потребления процессо- ра. Таблица 1. Пространство ввода/вывода AT90S2313 ┌────────┬───────┬───────────────────────┬───────────────────────────┐ │$3F($5F)│SREG │Status REGister │Регистр Состояния │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$3D($5D)│SPL │Stack pointer low │Указатель стека, мл. байт │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$3B($5B)│GIMSK │General Interrupt │Общий регистр маски │ │ │ │MaSK register │прерываний │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$3A($5A)│GIFR │General Interrupt │Общий регистр флагов │ │ │ │Flag Register │прерываний │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$39($59)│TIMSK │Timer/counter Inter- │Регистр маски прерываний от│ │ │ │rupt mask register │таймера/счетчика │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$38($58)│TIFR │Timer/counter Inter- │Регистр флага прерывания │ │ │ │rupt Flag register │таймера/счетчика │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$35($55)│MCUCR │MCU general Control │общий регистр управления │ │ │ │Register │микроконтроллером │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$33($53)│TCCR0 │Timer/Counter 0 │Регистр управления таймером│ │ │ │Control Register │счетчиком 0 │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$32($52)│TCNT0 │Timer/Counter 0 │Таймер/счетчик 0 (8 бит) │ │ │ │(8-бит) │ │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$2F($4F)│TCCR1A │Timer/Counter 1 │Рег. A управления таймером│ │ │ │Control Register A │счетчиком 1 │ └────────────────────────────────────────────────────────────────────┘ Таблица 1 (продолжение) ┌────────────────────────────────────────────────────────────────────┐ │$2E($4E)│TCCR1B │Timer/Counter 1 │Рег. B управления таймером│ │ │ │Control Register B │счетчиком 1 │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$2D($4D)│TCNT1H │Timer/Counter 1 │Таймер/счетчик 1 │ │ │ │High byte │старший байт │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$2C($4C)│TCNT1L │Timer/Counter 1 │Таймер/счетчик 1 │ │ │ │Low byte │младший байт │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$2B($4B)│OCR1H │Output Compare Register│Выход регистра слвпаден. 1 │ │ │ │1 high byte │старший бвйт │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$2A($4A)│OCR1L │Output Compare Register│Выход регистра совпаден. 1 │ │ │ │1 low byte │младший бвйт │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$25($45)│ICR1H │T/C 1 Input Cupture Re-│Регистр захвата Т\С 1 │ │ │ │gister High Byte │старший бвйт │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$24($44)│ICR1L │T/C 1 Input Cupture Re-│Регистр захвата Т\С 1 │ │ │ │gister Low Byte │младший бвйт │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$21($41)│WDTCR │Watchdog Timer │Регистр управления сторо- │ │ │ │Control Register │жевым таймером │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$1E($3E)│EEAR │EEPROM Address Register│Регистр адреса энергонеза- │ │ │ │ │висимой памяти │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$1D($3D)│EEDR │EEPROM Data Register │Регистр данных энергонеза- │ │ │ │ │висимой памяти │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$1C($3C)│EECR │EEPROM Control Register│Регистр управления энерго- │ │ │ │ │независимой памяти │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$18($38)│PORTB │Data Register, Port B │Регистр данных порта B │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$17($37)│DDRB │Data Direction Register│Регистр направления данных │ │ │ │Port B │порта B │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$16($36)│PINB │Input pins, Port B │Выводы порта B │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$12($32)│PORTD │Data Register, Port D │Регистр данных порта D │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$11($31)│DDRD │Data Direction Register│Регистр направления данных │ │ │ │Port D │порта D │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$10($30)│PIND │Input pins, Port D │Выводы порта D │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$0C($2C)│UDR │UART Data Register │Регистр данных последова- │ │ │ │ │тельного порта │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$0B($2B)│USR │UART Status Register │Регистр состояния последо- │ │ │ │ │вательного порта │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$0A($2A)│UCR │UART Control Register │Регистр управления последо-│ │ │ │ │вательного порта │ └────────────────────────────────────────────────────────────────────┘ Таблица 1 (продолжение) ┌────────────────────────────────────────────────────────────────────┐ │$09($29)│UBRR │UART Baud Rate Register│Регистр скорости последо-│ │ │ │ │вательного порта │ ├────────┼───────┼───────────────────────┼───────────────────────────┤ │$08($28)│ACSR │Analog Comparator Cont-│Регистр управления и состо-│ │ │ │rol and Status Register│яния аналогового компарат. │ └────────┴───────┴───────────────────────┴───────────────────────────┘ Примечание: зарезервированные и неиспользуемые ячейки непоказаны Все устройства ввода/вывода и периферийные устройства AT90S2313 располагаются в пространстве ввода/вывода. Различные ячейки этого про- странства доступны через команды IN и OUT, пересылающие данные между одним из 32-х регистров общего назаначения и пространством ввода/выво- да. К регистрам $00..$1F можно осуществлять побитовый доступ командами SBI и CBI. Значение отдельного бита этих регистров можно проверить командами SBIC и SBIS. Дополнительную информацию по этому вопросу мож- но найти в описании системы команд. При использовании специальных команд IN, OUT, SBIS и SBIC, должны использоваться адреса $00..$3F. При доступе к регистру ввода/вывода как к ячейке ОЗУ, к его адресу необходимо добавить $20. В приведенной выше таблице адреса регистров в памяти данных приведены в скобках. Регистр состояния - SREG Регистр состояния расположен по адресу $3F ($5F) пространства ввода/вывода и определен следующим образом: Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬───┬───┬───┐ $3F ($5F) │ I │ T │ H │ S │ V │ N │ Z │ C │ SREG └───┴───┴───┴───┴───┴───┴───┴───┘ Чт./зап.(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 0 Бит 7 - I: Общее разрешение прерываний. Для разрешения прерываний этот бит должен быть установлен в единицу. Управление отдельными пре- рываниями производится регистрами маски прерываний - GIMSK и TIMSK. Если флаг сброшен (0), независимо от состояния GIMSK/TIMSK прерывания запрещены. Бит I очищается аппаратно после входа в прерывание и вос- станавливается командой RETI, для разрешения обработки последующих прерываний. Бит 6 - T: Хранение копируемого бита. Команды копирования битов BLD (Bit LoaD) и BST (Bit STore) используют этот бит как источник и прием- ник обрабатываемого бита. Бит из регистра регистрового файла может быть скопирован в T командой BST, бит T может быть скопирован в бит регистрового файла командой BLD. Бит 5 - H: Флаг половинного переноса. Этот флаг индицирует перенос из младшей половины байта при некоторых арифметических операциях. Более подробно об этом можно прочитать в описании системы команд. Бит 4 - S: бит знака, S = N XOR V. Бит S всегда равен исключающему ИЛИ между флагами N (отрицательный результат) и V (переполнение допол- нения до двух). Более подробно об этом можно прочитать в описании сис- темы команд. Бит 3 - V: Флаг переполнения дополнения до двух. Этот флаг поддержи- вает арифметику с дополнением до двух. Более подробно об этом можно прочитать в описании системы команд. Бит 2 - N: Флаг отрицательного результата. Этот флаг индицирует отри- цательный результат различных арифметических и логических операций. Более подробно об этом можно прочитать в описании системы команд. Бит 1 - Z: Флаг нулевого результата. Этот флаг индицирует нулевой ре- зультат различных арифметических и логических операций. Более подробно об этом можно прочитать в описании системы команд. Бит 0 - C: Флаг переноса. Этот флаг индицирует перенос в арифметичес- ких и логических операциях. Более подробно об этом можно прочитать в описании системы команд. Указатель стека SP Этот 8-разрядный регистр с адресом $3D ($5D) хранит указатель стека процессора AT90S2313. 8-ми разрядов достаточно, для адресации ОЗУ в пределах $60-$DF. Бит 7 6 5 4 3 2 1 0 ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $3D ($5D) │ SP7 │ SP6 │ SP5 │ SP4 │ SP3 │ SP2 │ SP1 │ SP0 │SPL └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R/W R/W R/W R/W R/W R/W R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 Указатель стека указывает на область памяти в которой расположен стек вызова подпрограмм и прерваний. Область стека в ОЗУ должна быть задана до того как произойдет любой вызов подпрограммы или будут раз- решены прерывания. Указатель стека уменьшается на 1 при записи данных в стек командой PUSH и уменьшается на 2 при вызове подпрограммы коман- дой CALL или обработке прерывания. Указатель стека увеличивается на 1 при выборе данных из стека командой POP и увеличивается на 2 при вы- полнении команд возврата из подпрограммы или обработчика прерывания (RET или RETI). Сброс и обработка прерываний. В AT90S2313 предусмотрены 10 источников прерываний. Эти прерыва- ния и сброс имеют различные векторы в области памяти программ. Каждому из прерываний присвоен отдельный бит разрешающий данное прерывание при установке бита в 1, если бит I регистра состояния разрешает общее об- служивание прерываний. Самые младшие алреса памяти программ определены как векторы сбро- са и прерываний. Подный список векторов прерываний приведен в таблице 2. Этот список определяет и приоритет различных прерываний. Меньшие адреса соответствуют более высокому уровню приоритета. Самый высокий уровень у сброса, следующий приоритет у INT0 - внешнего запроса пре- рывания 0 и т.д. Ниже приведена типичная программа обработки сброса и векторов прерыванияй: Address Labels Code Comments $000 rjmp RESET ; Обработка сброса $001 rjmp EXT_INT0 ; Обработка IRQ0 $002 rjmp EXT_INT1 ; Обработка IRQ1 $003 rjmp TIM_CAPT1 ; Обработка захвата таймера 1 $004 rjmp TIM_COMP1 ; Обработка совпадения таймера 1 $005 rjmp TIM_OVF1 ; Обработка переполнения таймера 1 $006 rjmp TIM_OVF0 ; Обработка переполнения таймера 0 $007 rjmp UART_RXC ; Обработка приема байта $008 rjmp UART_DRE ; Обработка освобождения UDR $009 rjmp UART_TXC ; Обработка передачи байта $00a rjmp ANA_COMP ; Обработка аналогового компаратора $00b MAIN: xxx ; Начало основной программы _ _ _ _ Таблица 2. Сброс и векторы прерываний. ┌─────────────┬──────┬──────────────┬────────────────────────────────┐ │Номер вектора│ Адрес│Источник │ Описание прерывания │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 1 │ $000 │RESET │ Ножка сброса и сброс от сторо- │ │ │ │ │ жевого таймера │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 2 │ $001 │INT0 │ Внешнее прерывание 0 │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 3 │ $002 │INT1 │ Внешнее прерывание 1 │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 4 │ $003 │TIMER1 CAPT1 │ Захват таймера/счетчика 1 │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 5 │ $004 │TIMER1 COMP1 │ Совпаден. таймера/счетчика 1 │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 6 │ $005 │TIMER1 OVF1 │ Переполнение таймера/счетчика 1│ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 7 │ $006 │TIMER0 OVF0 │ Переполнение таймера/счетчика 0│ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 8 │ $007 │UART RX │ Последоват.порт прием закончен │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 9 │ $008 │UART UDRE │ Посл.порт регистр данных пуст │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 10 │ $009 │UART TX │ Посл.порт передача закончена │ ├─────────────┼──────┼──────────────┼────────────────────────────────┤ │ 11 │ $00A │ANA_COMP │ Аналоговый компаратор │ └─────────────┴──────┴──────────────┴────────────────────────────────┘ ИСТОЧНИКИ СБРОСА AT90S2313 имеет три источника сброса. * Сброс по включению питания. Процессор сбрасывается при подаче питания на выводы VCC и GND. * Внешний сброс. Процессор сбрасывается при подаче низкого уровня на вывод RESET на время более двух периодов тактовой частоты. * Сброс от сторожевого таймера. Процессор сбрасывается по оконча- нию времени отработки сторожевого таймера, если разрешена его работа. Во время сброса все регистры ввода/вывода устанавливаются в на- чальные значения, программа начинает выполняться с адреса $000, по этому адресу должна быть записана команда RJMP - относительный переход на программу обработки сброса. Если в программе не разрешаются преры- вания и векторы прерываний не используются, в первых адресах памяти может быть записана программа. СБРОС ПО ВКЛЮЧЕНИЮ ПИТАНИЯ Цепь сброса по включению питания обеспечивает запрет включения процессора до тех пор, пока напряжение питания не достигнет безопасно- го уровня. После того, как напряжение питания достигнет уровня включе- ния, процессор не включается до тех пор, пока встроенный таймер не об- работает несколько рабочих периодов сторожевого таймера. Общее время сброса состоит из суммы времени Tpor и времени Tout (см. таблицу ниже) Таблица 3. Характеристики сброса.(Vcc=5.0V) ┌──────┬─────────────────────────────────┬──────┬───────┬───────┬────┐ │ │ │ Min │ Typ │ Max │ │ ├──────┼─────────────────────────────────┼──────┼───────┼───────┼────┤ │Vpor │Напряжение срабатывания сброса по│ 1.8 │ 2 │ 2.2 │ V │ │ │включению питания │ │ │ │ │ ├──────┼─────────────────────────────────┼──────┼───────┼───────┼────┤ │Vrst │Напряжение срабатывания сброса │ │ VCC/2 │ │ V │ │ │по выводу RESET │ │ │ │ │ ├──────┼─────────────────────────────────┼──────┼───────┼───────┼────┤ │Tpor │Сигн. сброса по вкл. питания │ 2 │ 3 │ 4 │ mS │ ├──────┼─────────────────────────────────┼──────┼───────┼───────┼────┤ │Ttout │Задержка на отработку сброса │ 11 │ 16 │ 21 │ mS │ │ │FSTRT незапрограммирован │ │ │ │ │ ├──────┼─────────────────────────────────┼──────┼───────┼───────┼────┤ │Ttout │Задержка на отработку сброса │ 1.0 │ 1.1 │ 1.2 │ mS │ │ │FSTRT запрограммирован │ │ │ │ │ └──────┴─────────────────────────────────┴──────┴───────┴───────┴────┘ Если к процессору подключен керамический резонатор или другой, обеспе- чивающий быстрое включение, для уменьшения времени сброса можно запро- граммировать бит-перемычку FSTRT. Поскольку к выводу RESET подключен подтягивающий резистор, этот вывод может оставаться неподключенным, если не требуется внешний сброс. Подключение вывода RESET к напряжению питания дает тот же эффект. Время включения после подачи питания может быть увеличено удержанием вывода сброса на низком уровне. ВНЕШНИЙ СБРОС Внешний сброс обрабатывается по низкому уровню на выводе RESET. Вывод должен удерживаться в низком состоянии по крайней мере два периода тактовой частоты. После достижения напряжения Vrst запускается таймер задержки, через промежуток времени Tout процессор запускается. СБРОС ПО СТОРОЖЕВОМУ ТАЙМЕРУ После отработки цикла сторожевого таймера, он вырабатывает короткий импульс сброса. По спадающему фронту этого импульса запускается внутренний счетчик, отсчитывающий время Tout. ОБРАБОТКА ПРЕРЫВАНИЙ AT90S2313 имеет два регистра маски прерываний GIMSK - общий ре- гистр маски прерываний и TIMSK - регистр маски прерываний от таймера/счетчика. Когда возникает прерывание бит глобального разрешения прерываний I сбрасывается (ноль) и все прерывания запрещаются. Программа пользователя может установить этот бит для разрешения прерываний. Флаг разрешения прерываний I устанавливается в 1 при выполнении команды выхода из прерывания - RETI. Для прерываний включаемых статическими событиями (напр. совпадение значения счетчика/таймера 1 с регистром совпадения) флаг прерывания взводится при возникновении события. Если флаг прерывания очищен и присутствует условие возникновения прерывания, флаг не будет установлен, пока не произойдет следующее событие. Когда программный счетчик устанавливается на текущий вектор пре- рывания для его обработки, соответствующий флаг, сгенерерованный пре- рыванием, аппаратно сбрасывается. Некоторые флаги прерывания могут быть сброшены записью логической единицы в бит соответствующий флагу. ОБЩИЙ РЕГИСТР МАСКИ ПРЕРЫВАНИЙ GIMSK Бит 7 6 5 4 3 2 1 0 ┌─────┬────┬───┬───┬───┬───┬───┬───┐ $3B($5B) │ INT0│INT0│ - │ - │ - │ - │ - │ - │ GIMSK └─────┴────┴───┴───┴───┴───┴───┴───┘ Чт./зап.(R/W) R R/W R R R R R R Начальн.знач. 0 0 0 0 0 0 0 0 Бит 7 - INT1: Запрос внешнего прерывания 1 разрешен. Когда этот бит установлен, а также установлен бит I регистра состояния, разрешается прерывание от внешнего вывода. Биты управления запуском прерывания (ISC11 и ISC10) в регистре управления микроконтроллером (MCUCR) опре- деляют по какому событию отрабатывается прерывание - по спадающему или нарастающему фронту или же по уровню. Активность на выводе приводит к возникновению прерываний даже если вывод сконфигурирован как выход. При возникновении прерывания выполняется программа, начинающаяся с адреса $002 в памяти программ. (см. также "Внешние прерывания"). Бит 6 - INT0: Запрос внешнего прерывания 0 разрешен. Когда этот бит установлен, а также установлен бит I регистра состояния, разрешается прерывание от внешнего вывода. Биты управления запуском прерывания (ISC01 и ISC00) в регистре управления микроконтроллером (MCUCR) опре- деляют по какому событию отрабатывается прерывание - по спадающему или нарастающему фронту или же по уровню. Активность на выводе приводит к возникновению прерываний даже если вывод сконфигурирован как выход. При возникновении прерывания выполняется программа, начинающаяся с адреса $001 в памяти программ. (см. также "Внешние прерывания"). Биты 5..0 - зарезервированы. В AT90S2313 эты биты зарезервированы и всегда читаются как 0. ОБЩИЙ РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ Бит 7 6 5 4 3 2 1 0 ┌─────┬─────┬───┬───┬───┬───┬───┬───┐ $3B($5B) │INTF1│INTF0│ - │ - │ - │ - │ - │ - │ GIFR └─────┴─────┴───┴───┴───┴───┴───┴───┘ Чт./зап.(R/W) R R/W R R R R R R Начальн.знач. 0 0 0 0 0 0 0 0 Бит 7 - INTF1: Флаг внешнего прерывания 1: При возникновении на вы- воде INT1 события вызывающего прерывание, INTF1 устанавливается в "1". Если установлены бит I регистра SREG и бит INT1 в GIMSK, происходит переход на вектор прерывания по адресу $002. Флаг очищается после вы- полнения обработчика прерывания. Кроме того, флаг можно очистить, за- писав в него логическую единицу. Бит 6 - INTF0: Флаг внешнего прерывания 0: При возникновении на вы- воде INT0 события вызывающего прерывание, INTF0 устанавливается в "1". Если установлены бит I регистра SREG и бит INT0 в GIMSK, происходит переход на вектор прерывания по адресу $001. Флаг очищается после вы- полнения обработчика прерывания. Кроме того, флаг можно очистить, за- писав в него логическую единицу. Биты 5..0 - зарезервированы. В AT90S2313 эты биты зарезервированы и всегда читаются как 0. РЕГИСТР МАСКИ ПРЕРЫВАНИЯ ОТ ТАЙМЕРА/СЧЕТЧИКА - TIMSK Бит 7 6 5 4 3 2 1 0 ┌─────┬──────┬─────┬─────┬──────┬─────┬─────┬─────┐ $39($59) │TOIE1│OCIE1A│ - │ - │TICIE1│ - │TOIE0│ - │TIMSK └─────┴──────┴─────┴─────┴──────┴─────┴─────┴─────┘ Чт./зап. R/W R/W R/W R/W R/W R/W R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 Бит 7 - TOIE1: Разрешение прерывания по переполнению таймера/счет- чика 1: Если установлен этот бит и бит разрешения прерываний в регист- ре состояния, разрешены прерывания по переполнению таймера/счетчика 1. Соответствующее прерывание (вектор $005) выполняется при переполнении таймера/счетчика 1. В регистре флагов таймеров/счетчиков (TIFR) уста- навливается флаг переполнения. Если таймер/счетчик 1 работает в режиме ШИМ, флаг переполнения устанавливается при изменении направления сче- та, при значении $0000. Бит 6 - OCIE1A: Разрешение прерывания по совпадению таймера/счетчи- ка 1: Если установлены бит OCIE1A и бит разрешения прерывания в регис- тре состояния, разрешены прерывания по совпадению таймера/счетчика 1. Прерывание (вектор $004) выполняется при равенстве таймера/счетчика 1 и регистра совпадения. Во флаговом регистре TIFR устанавливается ("1") флаг совпадения. Биты 5,4 - зарезервированы; в AT90S2313 эти биты зарезервированы и всегда читаются как 0. Бит 3 - TICIE1: Разрешение прерывания по входу захвата: Если уста- новлены бит TICIE1 и бит разрешения прерывания в регистре состояния, разрешены прерывания по входу захвата. Соответствующее прерывание (вектор $003) выполняется по сигналу захвата на выводе 11 (PD6/ICP). Во флаговом регистре TIFR устанавливается ("1") флаг захвата. Бит 2 - зарезервирован; в AT90S2313 этот бит зарезервирован и все- гда читается как 0. Бит 1 - TOIE0: Разрешение прерывания по переполнению таймера/счетчи- ка 0. Если этот бит установлен в 1, и бит I в регистре состояния уста- новлен в 1, разрешены прерывания по переполнению таймера/счетчика 0. При возникновении переполнения выполняется соответствующий вектор пре- рывания ($006). Флаг переполнения (TOV0) во флаговом регистре прерыва- ний (TIFR) таймеров/счетчиков устанавливается в 1. Бит 0 - зарезервирован; в AT90S2313 этот бит зарезервирован и все- гда читается как 0. РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ ОТ ТАЙМЕРОВ/СЧЕТЧИКОВ - TIFR Бит 7 6 5 4 3 2 1 0 ┌─────┬──────┬─────┬─────┬──────┬─────┬─────┬─────┐ $38($58) │TOV1 │OCF1A │ - │ - │ ICF1 │ - │TOV0 │ - │TIFR └─────┴──────┴─────┴─────┴──────┴─────┴─────┴─────┘ Чт./зап. R/W R/W R/W R/W R/W R/W R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 Бит 7 - TOV1: Флаг переполнения таймера/счетчика 1: Флаг TOV1 уста- навливается ("1") при возникновении переполнения таймера/счетчика 1. Флаг TOV1 сбрасывается аппаратно при выполнении соответствующего век- тора обработки прерывания. Кроме того, флаг можно сбросить, записав в него логическую единицу. Если установлены бит I в SREG и бит TOIE1 в TIMSK, при установке бита TOV1 выполняется прерывание по переполнению твймера/счетчика 1. В режиме ШИМ этот бит устанавливается, когда тай- мер/счетчик 1 изменяет направление счета при значении $0000. Бит 6 - OCF1A: Флаг выхода совпадения 1А: флаг устанавливается в "1" если происходит совпадение значения таймера/счетчика 1 и данных в регистре OCR1A. Флаг очищается аппаратно при выполнении соответствую- щего вектора прерывания. Кроме того, флаг можно сбросить записав в не- го логическую единицу. Если установлены бит I в SREG и бит OCIE1A в TIMSK, при установке бита OCF1A выполняется прерывание. Биты 5,4 - зарезервированы; в AT90S2313 эти биты зарезервированы и всегда читаются как 0. Бит 3 - ICF1: флаг входа захвата 1: бит устанавливается ("1") при возникновении события захвата по входу, он индицирует, что значение таймера/счетчика 1 скопировано в регистр захвата по входу ICR1. ICF1 очищается при выполнении соответствующего вектора обработки прерыва- ния. Кроме того, флаг можно очистить, записав в него логическую едини- цу. Бит 2 - зарезервирован; в AT90S2313 этот бит зарезервирован и все- гда читается как 0. Бит 1 - TOV0: Флаг переполнения таймера счетчика 1: Флаг TOV0 уста- навливается ("1") при переполнении таймера/счетчика 0. Флаг сбрасыва- ется аппаратно при выполнении соответствующего вектора прерывания. Кроме того, флаг можно очистить записав в него логическую единицу. Ес- ли установлены бит I в SREG и бит TOIE0 в TIMSK, при установке бита TOV0 выполняется прерывание по переполнению твймера/счетчика 0. Бит 0 - зарезервирован; в AT90S2313 этот бит зарезервирован и все- гда читается как 0. ВНЕШНИЕ ПРЕРЫВАНИЯ Внешние прерывания управляются выводами INT0 и INT1. Заметим, что прерывания обрабатываются даже когда выводы сконфигурированы как выхо- ды. Это позволяет генерировать программные прерывания. Внешние преры- вания могут возникать по спадающему или нарастающему фронту, а также по низкому уровню. Это устанавливается в регистре управления процессо- ром MCUCR. Если внешние прерывания разрешены и сконфигурированы на от- работку по уровню, прерывание будет вырабатываться до тех пор, пока вывод удерживается в низком состоянии. Управление работой внешних прерываний рассмотрено при описании регистра управления процессором MCUCR. ВРЕМЯ РЕАКЦИИ НА ПРЕРЫВАНИЕ Минимальное время реакции на любое из предусмотренных в процессо- ре прерываний - 4 периода тактовой частоты. После четырех циклов вы- зывается программный вектор обрабатывающий данное прерывание. За эти 4 цикла программный счетчик записывается в стек, указатель стека уменьшается на 2. Программный вектор представляет собой относительный переход на подпрограмму обслуживания прерывания и этот переход занима- ет 2 периода тактовой частоты. Если прерывание происходит во время вы- полнения команды длящейся несколько циклов, перед вызовом прерывания завершается выполнение этой команды. Выход из программы обслуживания прерывания занимает 4 периода так- товой частоты. За эти 4 периода из стека восстанавливается программный счетчик. После выхода из прерывания процессор всегда выполняет еще од- ну команду прежде чем обслужить любое отложенное прерывание. Заметим, что регистр состояния SREG аппаратно не обрабатывается процессором, как при вызове подпрограмм, так и при обслуживании преры- ваний. Если программа требует сохранения SREG, оно должно произво- диться программой пользователя. РЕГИСТР УПРАВЛЕНИЯ МИКРОКОНТРОЛЛЕРОМ - MCUCR Этот регистр содержит биты общего управления микроконтроллером. Бит 7 6 5 4 3 2 1 0 ┌───┬───┬────┬────┬┬─────┬──────┬─────┬───────┐ $35($55) │ - │ - │ SE │ SM ││ISC11│ ISC10│ISC01│ ISC00 │ MCUCR └───┴───┴────┴────┴┴─────┴──────┴─────┴───────┘ Чт./зап.(R/W) R R R/W R/W R R R/W R/W Начальн.знач. 0 0 0 0 0 0 0 0 Биты 7,6 - зарезервированы. В AT90S2313 эти биты зарезервированы и всегда читаются как 0. Бит 5 - SE: Разрешение режима Sleep: Этот бит должен быть установлен в 1, чтобы при выполнении команды SLEEP процессор переходил в режим пониженного энергопотребления. Этот бит должен быть устанавлен в 1 до исполнения команды SLEEP. Бит 4 - SM: Режим Sleep: Этот бит выбирает один из двух режимов по- ниженного энергопотребления. Если бит сброшен (0), в качестве режима Sleep выбирается холостой режим (Idle mode). Если бит установлен, - выбирается экономичный режим (Power down). Особенности каждого из ре- жимов будут рассмотрены ниже. Биты 3,2 - ISC11, ISC10: биты упраления срабатыванием прерывания 1: Внешнее прерывание активируется выводом INT1 если установлен флаг I регистра состояния SREG и установлена соответствующая маска в регистре GIMSK. Срабатывание по уровню и фронтам задается следующим образом: Таблица 4. Управление срабатыванием прерывания 1. ┌─────┬─────┬────────────────────────────────────────────────────────┐ │ISC11│ISC10│Описание │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │0 │0 │Запрос на прерыв.генерир-ся по низк.уровню на входе INT1│ ├─────┼─────┼────────────────────────────────────────────────────────┤ │0 │1 │Зарезервировано │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │1 │0 │Запрос на прерывание по спадающему фронту на входе INT1 │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │1 │1 │Запрос на прерывание по нарастающ. фронту на входе INT1 │ └─────┴─────┴────────────────────────────────────────────────────────┘ ПРИМЕЧАНИЕ: При изменении битов ISC11/ISC10 прерывание INT1 должно быть запрещено очисткой соответствующего бита в регистре GIMSK. Иначе прерывание может возникнуть во время изменения битов. Таблица 5. Управление срабатыванием прерывания 0. ┌─────┬─────┬────────────────────────────────────────────────────────┐ │ISC01│ISC00│Описание │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │0 │0 │Запрос на прерыв.генерир-ся по низк.уровню на входе INT0│ ├─────┼─────┼────────────────────────────────────────────────────────┤ │0 │1 │Зарезервировано │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │1 │0 │Запрос на прерывание по спадающему фронту на входе INT0 │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │1 │1 │Запрос на прерывание по нарастающ. фронту на входе INT0 │ └─────┴─────┴────────────────────────────────────────────────────────┘ ПРИМЕЧАНИЕ: При изменении битов ISC01 и ISC00, прерывания по входу INT0 должны быть запрещены сбросом бита разрешения прерывания в регис- тре GIMSK. Иначе прерывание может произойти при изменении значения би- тов. Биты 1,0 - ISC01, ISC00: биты упраления срабатыванием прерывания 0: Внешнее прерывание активируется выводом INT0 если установлен флаг I регистра состояния SREG и установлена соответствующая маска в регистре GIMSK. В таблице 5 приведена установка битов для задания срабатывания по уровню и фронтам. РЕЖИМЫ ПОНИЖЕННОГО ЭНЕРГОПОТРЕБЛЕНИЯ. Для запуска режима пониженного энергопотребления должен быть ус- тановлен (1) бит SE регистра MCUCR, и должна быть исполнена команда SLEEP. Если во время нахождения в режиме пониженного потребления про- исходит одно из разрешенных прерываний, процессор начинает работать, исполняет подпрограмму обработки прерывания и продолжает выполнение программы с команды следующей за SLEEP. Содержимое регистрового файла и памяти ввода/вывода не изменяется. Если в режиме пониженного потреб- ления происходит сброс, процессор начинает выполнение программы с век- тора сброса. Если для вывода из экономичного режима используется прерывание по уровню, низкий уровень должен удерживаться на время достаточное для запуска генератора тактовых импульсов - 16 mS. Иначе флаг прерывания может вернуться в 0 до того как процессор начнет работу. Режим холостого хода. Когда бит SM сброшен (0), команда SLEEP переводит процессор в ре- жим холостого хода (Idle mode). ЦПУ останавливается, но Таймеры/Счет- чики, сторожевой таймер и система прерываний продолжают работать. Это позволяет процессору возобновлять работу как от внешних прерываний, так и по переполнению таймеров/счетчиков или по сбросу от сторожевого таймера. Если прерывание от аналогового компаратора не требуется, ана- логовый компаратор может быть отключен установкой бита ACD регистра ACSR. Это уменьшает потребляемую мощность в режиме холостого хода. Экономичный режим. Когда бит SM установлен (1), команда SLEEP переводит процессор в экономичный режим (Power Down Mode). В этом режиме останавливается внешний генератор тактовых импульсов. Пользователь может разрешить ра- боту сторожевого таймера в этом режиме. Если сторожевой таймер разре- шен, процессор выходит из экономичного режима после отработки периода сторожевого таймера. Если сторожевой таймер запрещен, выход из эконо- мичного режима может прозойти только по внешнему сбросу или внешнему прерыванию по уровню. ТАЙМЕРЫ/СЧЕТЧИКИ В AT90S2313 предусмотрены два таймера/счетчика общего назначения. 8-разрядный и 16-разрядный. Каждый из таймеров индивидуально подключа- ется к одному из выходов 10-разрядного предварительного делителя час- тоты. Оба таймера могут использоваться как таймеры с внутренним источ- ником испульсов или счетчики импульсов поступающих извне. В качестве источника импульсов для таймеров можно выбрать сигнал с тактовой частотой процессора (CK), импульсы предварительного делите- ля (CK/8, CK/64, CK/256 или CK/1024) или импульсы с соответствующего внешнего вывода. Кроме того, таймеры могут быть остановлены, запретом прохождения импульсов на них. 8-РАЗРЯДНЫЙ ТАЙМЕР/СЧЕТЧИК 0 8-разрядный таймер/счетчик может получать импульсы тактовой час- тоты - CK, импульсы с предварительного делителя (CK/8, CK/64, CK/256 или CK/1024), импульсы с внешнего вывода или быть остановлен соответ- ствующими установками регистра TCCR0. Флаг переполнения таймера нахо- дится в регистре TIFR. Биты управления таймером расположены в регистре TCCR0. Разрешение и запрещение прерываний от таймера управляется реги- стром TIMSK. При работе таймера/счетчика от внешнего сигнала, внешний сигнал синхронизируется с тактовым генератором ЦПУ. Для правильной обработки внешнего сигнала, минимальное время между соседними импульсами должно превышать период тактовой частоты процессора. Сигнал внешнего источни- ка обрабатывается по спадающему фронту тактовой частоты процессора. 8-разрядный таймер/счетчик можно использовать как счетчик с высо- ким разрешением, так и для точных применений с низким коэффициентом деления тактовой частоты. Более высокие коэффициенты деления можно ис- пользовать для медленных функций или измерения временных интервалов между редкими событиями. РЕГИСТР УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 0 - TCCR0 Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬────┬────┬────┐ $33($53)│ - │ - │ - │ - │ - │CS02│CS01│CS00│ TCCR0 └───┴───┴───┴───┴───┴────┴────┴────┘ Чт./зап.(R/W) R R R R R R/W R/W R/W Начальн.знач. 0 0 0 0 0 0 0 0 Биты 7..3 - зарезервированы. В AT90S2313 эты биты зарезервированы и всегда читаются как 0. Биты 2,1,0 - CS02, CS01, CS00 - выбор тактовой частоты. Эти биты за- дают коэффициент деления предварительного делителя. Таблица 6. Выбор коэффициента предварительного деления ┌────┬────┬────┬─────────────────────────────────────────────────────┐ │CS02│CS01│CS00│Описание │ ├────┼────┼────┼─────────────────────────────────────────────────────┤ │0 │0 │0 │Таймер/счетчик остановлен │ ├────┼────┼────┼─────────────────────────────────────────────────────┤ │0 │0 │1 │CK │ ├────┼────┼────┼─────────────────────────────────────────────────────┤ │0 │1 │0 │CK/8 │ ├────┼────┼────┼─────────────────────────────────────────────────────┤ │0 │1 │1 │CK/64 │ ├────┼────┼────┼─────────────────────────────────────────────────────┤ │1 │0 │0 │CK/256 │ ├────┼────┼────┼─────────────────────────────────────────────────────┤ │1 │0 │1 │CK/1024 │ ├────┼────┼────┼─────────────────────────────────────────────────────┤ │1 │1 │0 │Внешний вывод T0, нарастающий фронт │ ├────┼────┼────┼─────────────────────────────────────────────────────┤ │1 │1 │1 │Внешний вывод T0, спадающий фронт │ └────┴────┴────┴─────────────────────────────────────────────────────┘ Условие Stop запрещает/разрешает функционирование таймера/счетчика. В режимах деления используется частота тактового генератора. При исполь- зовании работы от внешнего источника предварительно должен быть уста- новлен соответствующий бит регистра направления данных (0 - включает ножку на ввод). ТАЙМЕР/СЧЕТЧИК 0 - TCNT0. Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬───┬───┬───┐ $32($52) │MSB│ - │ - │ - │ - │ - │ - │LSB│ TCNT0 └───┴───┴───┴───┴───┴───┴───┴───┘ Чт./зап.(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 0 Таймер/счетчик реализован как нарастающий счетчик с возможностью чтения и записи. При записи таймера/счетчика, если присутствуют такто- вые импульсы, таймер/счетчик продолжает счет в следующем за операцией записи тактовом цикле таймера. 16-РАЗРЯДНЫЙ ТАЙМЕР/СЧЕТЧИК 1 16-разрядный таймер/счетчик может получать импульсы тактовой час- тоты - CK, импульсы с предварительного делителя (CK/8, CK/64, CK/256 или CK/1024), импульсы с внешнего вывода или быть остановлен соответ- ствующими установками регистра TCCR1A. Флаги состояния таймера (пере- полнения, совпадения и захвата) и управляющие сигналы находится в ре- гистре TIFR. Разрешение и запрещение прерываний от таймера 1 управля- ется регистром TIMSK. При работе таймера/счетчика 1 от внешнего сигнала, внешний сигнал синхронизируется с тактовым генератором ЦПУ. Для правильной обработки внешнего сигнала, минимальное время между соседними импульсами должно превышать период тактовой частоты процессора. Сигнал внешнего источни- ка обрабатывается по спадающему фронту тактовой частоты процессора. 16-разрядный таймер/счетчик 1 можно использовать как счетчик с высоким разрешением, так и для точных применений с низким коэффициен- том деления тактовой частоты. Более высокие коэффициенты деления можно использовать для медленных функций или измерения временных интервалов между редкими событиями. Таймер/счетчик 1 поддерживает функцию совпадения используя ре- гистр совпадения OCR1A в качестве источника для сравнения с содержимым счетчика. Функция совпадения поддерживает очистку счетчика и переклю- чение выхода по совпадению. Таймер/счетчик 1 можно использовать как 8-, 9- или 10-разрядный широтно-импульсный модулятор. В этом режиме счетчик и регистр OCR1 ра- ботают как защищенный от дребезга независимый ШИМ с отцентрованными импульсами. Подробно эта функция будет описана ниже. Функция захвата по входу предусматривает захват содержимого тай- мера/счетчика 1 в регистр захвата ICR1 и управляется внешним сигналом на входе захвата - ICP. Работа режима захвата определяется управляющим регистром TCCR1. При работе захвата по входу, может быть включена схема подавления шума, при этом сигнал захвата возникает только в том случае, если со- бытие управляющее захватом наблюдается на протяжении 4-х машинных цик- лов. РЕГИСТР A УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 1 - TCCR1A Бит 7 6 5 4 3 2 1 0 ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $2F($4F) │COM1A1│COM1A0│ -- │ -- │ -- │ -- │PWM11 │PWM10 │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R/W R/W R R R R R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 Биты 7,6 - COM1A1, COM1A0: Режим выхода совпадения, биты 1 и 0: Эти управляющие биты задают отклик вывода OC1 процессора на совпадение ре- гистра сравнения и таймера/счетчика 1. Поскольку это альтернативная функция порта, соответствующий бит направления должен устанавливать вывод на выход. Конфигурация управляющих бит показана в следующей таб- лице: Таблица 7. Установка режима совпадения ┌──────┬──────┬─────────────────────────────────────────────────────┐ │COM1A1│COM1A0│ Описание │ ├──────┼──────┼─────────────────────────────────────────────────────┤ │ 0 │ 0 │Таймер/счетчик 1 отключен от вывода OC1 │ ├──────┼──────┼─────────────────────────────────────────────────────┤ │ 0 │ 1 │Переключение выхода OC1 │ ├──────┼──────┼─────────────────────────────────────────────────────┤ │ 1 │ 0 │Сброс (0) вывода OC1 │ ├──────┼──────┼─────────────────────────────────────────────────────┤ │ 1 │ 1 │Установка (1) вывода OC1 │ └──────┴──────┴─────────────────────────────────────────────────────┘ В режиме ШИМ эти биты имеют другие функции, которые указаны в та- блице 11. При изменении битов COM1A1 и COM1A0 прерывание по совпадению дол- жно быть запрещено, очисткой соответствующего бита в регистре TIMSK. Иначе, прерывание может пройзойти во время изменения битов. Биты 5..2 - зарезервированы. В AT90S2313 эты биты зарезервированы и всегда читаются как 0. Биты 1,0 - PWM11, PWM10: Биты установки ШИМ: Эти биты устанавливают режим работы таймера/счетчика 1 в качестве ШИМ (см. табл. 8). Подроб- нее этот режим будет расмотрен ниже. Таблица 8. Установка режима работы ШИМ ┌─────┬──────┬─────────────────────────────────────────────────────┐ │PWM11│PWM10 │ Описание │ ├─────┼──────┼─────────────────────────────────────────────────────┤ │ 0 │ 0 │ Работа ШИМ запрещена │ ├─────┼──────┼─────────────────────────────────────────────────────┤ │ 0 │ 1 │ 8-разрядный ШИМ │ ├─────┼──────┼─────────────────────────────────────────────────────┤ │ 1 │ 0 │ 9-разрядный ШИМ │ ├─────┼──────┼─────────────────────────────────────────────────────┤ │ 1 │ 1 │ 10-разрядный ШИМ │ └─────┴──────┴─────────────────────────────────────────────────────┘ РЕГИСТР B УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 1 - TCCR1B Бит 7 6 5 4 3 2 1 0 ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $2E($4E) │ICNC1 │ICES1 │ -- │ -- │ CTC1 │ CS12 │ CS11 │ CS10 │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R/W R/W R R R/W R/W R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 Бит7 - ICNC1: Подавитель входного шума входа захвата: Если этот бит сброшен (0), подавление входного шумв входа захвата запрещено. При это захват срабатывает по первому заданному (нарастающему или спадающему) фронту сигнала на выводе ICP. При установке бита обрабатываются четы- ре последовательные выборки сигнала на выводе ICP. Для срабатывания захвата все выборки должны соответствовать уровню заданному битом ICES1. Частота выборок равна тактовой частоте процессора. Бит 6 - ICES1: выбор фронта сигнала захвата: Если бит ICES1 сброшен (0) содержимое таймера/счетчика 1 переписывается в регистр захвата по спадающему фронту сигнала на выводе ICP. Если бит установлен - по на- растающему фронту сигнала. Биты 5,4 - зарезервированы. В AT90S2313 эты биты зарезервированы и всегда читаются как 0. Бит 3 - CTC1: Очистка таймера счетчика 1 по совпадению: Если бит ус- тановлен (1), таймер/счетчик 1 устанавливается в $0000 в такте сле- дующем за событием совпадения. Если бит сброшен, таймер/счетчик 1 про- должает считать пока не будет остановлен, сброшен, произойдет его пе- реполнение или изменение направления счета. В режиме ШИМ этот бит не работает. Биты 2,1,0 - CS12, CS11, CS10: выбор тактирования: Эти биты определя- ют источник счетных импульсов для таймера/счетчика 1. Таблица 9. Выбор источника счетных импульсов ┌────┬────┬────┬─────────────────────────────────────────────────┐ │CS12│CS11│CS10│ Описание │ ├────┼────┼────┼─────────────────────────────────────────────────┤ │0 │0 │0 │Таймер/счетчик 1 остановлен │ ├────┼────┼────┼─────────────────────────────────────────────────┤ │0 │0 │1 │CK │ ├────┼────┼────┼─────────────────────────────────────────────────┤ │0 │1 │0 │CK/8 │ ├────┼────┼────┼─────────────────────────────────────────────────┤ │0 │1 │1 │CK/64 │ ├────┼────┼────┼─────────────────────────────────────────────────┤ │1 │0 │0 │CK/256 │ ├────┼────┼────┼─────────────────────────────────────────────────┤ │1 │0 │1 │CK/1024 │ ├────┼────┼────┼─────────────────────────────────────────────────┤ │1 │1 │0 │Спадающий фронт на выводе T1 │ ├────┼────┼────┼─────────────────────────────────────────────────┤ │1 │1 │1 │Нарастающий фронт на выводе T1 │ └────┴────┴────┴─────────────────────────────────────────────────┘ ТАЙМЕР/СЧЕТЧИК 1 - TCNT1H И TCNT1L Начальн.знач. 0 0 0 0 0 0 0 0 Чт./зап.(R/W) R/W R/W R/W R/W R/W R/W R/W R/W Бит 15 14 13 12 11 10 9 8 ┌───┬───┬───┬───┬───┬───┬───┬───┐ $2D($4D) │MSB│ - │ - │ - │ - │ - │ - │ │ TCNT1H ├───┼───┼───┼───┼───┼───┼───┼───┤ $2C($4C) │ │ - │ - │ - │ - │ - │ - │LSB│ TCNT1L └───┴───┴───┴───┴───┴───┴───┴───┘ Бит 7 6 5 4 3 2 1 0 Чт./зап.(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 0 Это 16-разрядный регистр, содержащий текущее значение таймера/счет- чика 1. Чтобы чтение и запись двух байт счетчика происходило синхрон- но, для работы с ним ипользуется временный регистр (TEMP). - Запись в таймер счетчик 1: При записи старшего байта в TCNT1H, записываемые данные помещаются в регистр TEMP. Затем, при записи млад- шего байта, он вместе с данными из TEMP переписывается в таймер/счет- чик 1. Таким образом, при записи 16-разрядного значения первым должен записываться байт в TCNT1H. - Чтение таймера/счетчика 1: При чтении младшего байта из TCNT1L, он посылается в процессор, а данные из TCNT1H переписываются в регистр TEMP, то есть одноыременно читаются все 16-разрядов. При последующем чтении регистра TCNT1H, данные берутся из регистра TEMP. Таймер/счетчик 1 организован как суммирующий счетчик (в режиме ШИМ - суммирующий/вычитающий) с возможностью чтения и записи. Если вы- бран источник тактовых импульсов для таймера/счетчика 1, после записи в него нового значения, он продолжает счет в следующем после записи периоде тактовой частоты. РЕГИСТР СОВПАДЕНИЯ A ТАЙМЕРА/СЧЕТЧИКА 1 - OCR1AH И OCR1AL Начальн.знач. 0 0 0 0 0 0 0 0 Чт./зап.(R/W) R/W R/W R/W R/W R/W R/W R/W R/W Бит 15 14 13 12 11 10 9 8 ┌───┬───┬───┬───┬───┬───┬───┬───┐ $2B($4B) │MSB│ - │ - │ - │ - │ - │ - │ │ OCR1AH ├───┼───┼───┼───┼───┼───┼───┼───┤ $2A($4A) │ │ - │ - │ - │ - │ - │ - │LSB│ OCR1AL └───┴───┴───┴───┴───┴───┴───┴───┘ Бит 7 6 5 4 3 2 1 0 Чт./зап.(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 0 Регистр совпадения - 16-разрядный регистр, доступный для чтения и записи. В этом регистре хранятся данные, которые непрерывно сравниваются с текущим значением таймера/счетчика 1. Действие по совпадению задает- ся регистрами управления таймером/счетчиком 1 и регистром состояния. Поскольку регистр OCR1A является 16-разрядным, при записи нового значения в регистр, для того чтобы оба байта регистра записывались од- новременно, используется временный регистр. При записи старшего байта, данные помещаются во временный регистр, который переписывается в OCR1AH при записи младшего байта в OCR1AL. Таким образом, для записи в регистр первым должен записываться старший байт. РЕГИСТР ЗАХВАТА ТАЙМЕРА/СЧЕТЧИКА 1 - ICR1H И ICR1L Начальн.знач. 0 0 0 0 0 0 0 0 Чт./зап.(R/W) R R R R R R R R Бит 15 14 13 12 11 10 9 8 ┌───┬───┬───┬───┬───┬───┬───┬───┐ $25($45) │MSB│ - │ - │ - │ - │ - │ - │ │ ICR1H ├───┼───┼───┼───┼───┼───┼───┼───┤ $24($44) │ │ - │ - │ - │ - │ - │ - │LSB│ ICR1L └───┴───┴───┴───┴───┴───┴───┴───┘ Бит 7 6 5 4 3 2 1 0 Чт./зап.(R/W) R R R R R R R R Начальн.знач. 0 0 0 0 0 0 0 0 Регистр захвата 16-разрядный регистр доступный только для чтения. По нарастающему или спадающему фронту (в соответствии с выбором фронта импульса захвата ICES1) сигнала на выводе ICP текущее значение таймера/счетчика 1 переписывается в регистр захвата ICR1. В это же время устанавливается флаг захвата ICF1. Поскольку регистр захвата является 16-разрядным, для чтения его значения, чтобы оба байта прочитались одновременно, используется вре- менный регистр. При чтении младшего байта ICR1L, он посылается в ЦПУ, а старший байт регистра ICR1H переписывается во временный регистр. При чтении старшего байта, он принимается из временного регистра. Таким образом для чтения 16-разрядного регистра первым должен читаться млад- ший байт. ТАЙМЕР/СЧЕТЧИК В РЕЖИМЕ ШИМ При выборе режима широтно-импульсной модуляции (ШИМ), тай- мер/счетчик 1 и регистр совпадения OCR1A формируют 8, 9 или 10-разряд- ный непрерывный свободный от "дрожания" и правильный по фазе сигнал, выводимый на ножку PB3(OC1). Таймер/счетчик 1 работает как реверсивный счетчик считающий от 0 до конечного значения (см. табл.10). При дости- жении конечного значения счетчик начинает считать в обратную сторону до нуля, после чего рабочий цикл повторяется. Когда значение счетчика совпадает с 8, 9 или 10-ю младшими битами регистра OCR1A, вывод PD1(OC1) устанавливается или сбрасывается в соответствии с установками бит COM1A1 и COM1A0 в регистре TCCR1 (см. табл.11). Табл. 10. Конечное значение таймера и частота ШИМ. ┌──────────────┬─────────────────────────┬──────────────┐ │Разрешение ШИМ│Конечное значение таймера│Частота ШИМ │ ├──────────────┼─────────────────────────┼──────────────┤ │8 бит │$00FF (255) │ Ftc1/510 │ ├──────────────┼─────────────────────────┼──────────────┤ │9 бит │$01FF (511) │ Ftc1/1022 │ ├──────────────┼─────────────────────────┼──────────────┤ │10 бит │$03FF (1023) │ Ftc1/2046 │ └──────────────┴─────────────────────────┴──────────────┘ В режиме ШИМ, при записи в регистр OCR1A, 10 младших бит переда- ются во временный регистр и переписываются только при достижении тай- мером/счетчиком конечного значения. При этом устраняется появление не- симметричных импульсов (дрожания), которые неизбежны при асинхронной записи OCR1A. Таблица 12. Установка режима совпадения при работе ШИМ ┌──────┬───────┬─────────────────────────────────────────────────────┐ │COM1A1│COM1A0 │Влияние на вывод OC1 │ ├──────┼───────┼─────────────────────────────────────────────────────┤ │0 │0 │не подключен │ ├──────┼───────┼─────────────────────────────────────────────────────┤ │0 │1 │не подключен │ ├──────┼───────┼─────────────────────────────────────────────────────┤ │1 │0 │очищается при совпадении, для возрастания счетчика и│ │ │ │сбрасывается для уменьшения (неинвертирующий ШИМ) │ ├──────┼───────┼─────────────────────────────────────────────────────┤ │1 │1 │очищается при совпадении, для уменьшения счетчика и │ │ │ │сбрасывается для возрастания (инвертирующий ШИМ) │ └──────┴───────┴─────────────────────────────────────────────────────┘ Если OCR1A содержит значение $0000 или конечное значение (TOP), вывод OC1 остается в том состоянии, которое определяется установками COM1A1 и COM1A0. Это показано в табл. 12. Таблица 12. Выход ШИМ для OCR=$0000 или TOP ┌──────┬───────┬───────┬──────────┐ │COM1A1│COM1A0 │OCR1A │вывод OC1 │ ├──────┼───────┼───────┼──────────┤ │1 │0 │$0000 │низкий │ │ │ │ │ │ │1 │0 │TOP │высокий │ ├──────┼───────┼───────┼──────────┤ │1 │1 │$0000 │высокий │ │ │ │ │ │ │1 │1 │TOP │низкий │ └──────┴───────┴───────┴──────────┘ В режиме ШИМ флаг переполнения таймера 1 (TOV1) учтанавливается когда счетчик изменяет направление счета в точке $0000. Прерывание по переполнению таймера 1 работает как при нормальном режиме работы таймера/счетчика, т.е. оно выполняется, если устанавлен флаг TOV1 и разрешены соответствующие прерывания. То же самое касается флага сов- падения и прерывания по совпадению. СТОРОЖЕВОЙ ТАЙМЕР Сторожевой таймер работает от отдельного встроенного генератора работающего на частоте 1 MHz (это типовое значение частоты для питания 5В). Управляя предварительным делителем сторожевого таймера можно за- давать интервал сброса таймера от 16 до 2048 mS. Команда WDR сбрасыва- ет сторожевой таймер. Для работы сторожевого таймера можно выбрать од- но из 8-ми значений частоты, что позволяет в широких пределах изменять время между исполнением команды WDR и сбросом процессора. При отработ- ке периода работы сторожевого таймера, если не поступила команда WDR, AT90S2313 сбрасывается, выполнение программы продолжается с вектора сброса. Для предотвращения нежелательного отключения сторожевого таймера, для его запрещения должна выполняться определеннвя последовательность, которая описана при рассмотрении регистра WDTCR. РЕГИСТР УПРАВЛЕНИЯ СТОРОЖЕВЫМ ТАЙМЕРОМ - WDTCR Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬─────┬───┬────┬────┬────┐ $21($41) │ - │ - │ - │WDTOE│WDE│WDP2│WDP1│WDP0│ WDTCR └───┴───┴───┴─────┴───┴────┴────┴────┘ Чт./зап.(R/W) R R R R R/W R/W R/W R/W Начальн.знач. 0 0 0 0 0 0 0 0 Биты 7..5 - зарезервированы. В AT90S2313 эти биты зарезервированы и всегда читаются как 0. Бит 4 - WDTOE - разрешение выключения сторожевого таймера. При очис- тке бита WDE этот бит должен быть установлен (1). Иначе, работа сторо- жевого таймера не прекращается. Через четыре такта после установки этого бита, он аппаратно сбрасывается. Бит 3 - WDE- разрешение сторожевого таймера. Если бит установлен (1), работа сторожевого таймера разрешена, если бит сброшен - запреще- на. Сброс бита производится только в том случае, если бит WDTOE уста- новлен в 1. Для запрещения включенного сторожевого таймера должна ис- полняться слудующая процедура: 1. Одной командой записать 1 в WDTOE и WDE. Единица в WDE должна записываться даже в том случае если этот бит был установлен пе- ред началом процедуры остановки таймера 2. В течение следующих четырех тактов процессора необходимо запи- сать в WDE логический 0, при этом работа сторожевого таймера запрещается. Биты 2..0 - WDP2..0 - Биты предварительного делителя сторожевого таймера. Если работа сторожевого таймера разрешена, эти биты определя- ют предварительный коэффициент деления для сторожевого таймера. В таб- лице 13 приведены различные значения установок предварительного дели- теля и соответствующие им временные интервалы для напряжения питания Vcc=5V. Таблица 13. Установки предварительного делителя сторожевого таймера ┌────┬────┬────┬──────────────┐ ┌────┬────┬────┬──────────────┐ │WDP2│WDP1│WDP0│Период времени│ │WDP2│WDP1│WDP0│Период времени│ ├────┼────┼────┼──────────────┤ ├────┼────┼────┼──────────────┤ │0 │0 │0 │16 mS │ │1 │0 │0 │256 mS │ ├────┼────┼────┼──────────────┤ ├────┼────┼────┼──────────────┤ │0 │0 │1 │32 mS │ │1 │0 │1 │512 mS │ ├────┼────┼────┼──────────────┤ ├────┼────┼────┼──────────────┤ │0 │1 │0 │64 mS │ │1 │1 │0 │1024 mS │ ├────┼────┼────┼──────────────┤ ├────┼────┼────┼──────────────┤ │0 │1 │1 │128 mS │ │1 │1 │1 │2048 mS │ └─────────────────────────────┘ └────┴────┴────┴──────────────┘ ЧТЕНИЕ И ЗАПИСЬ В ЭНЕРГОНЕЗАВИСИМУЮ ПАМЯТЬ Регисты доступа к энергонезависимой памяти (EEPROM) расположены в пространстве ввода/вывода. Время записи лежит в диапазоне 2.5-4 mS и зависит от напряжения питания. Это самотактируемая функция которая, однако, позволяет поль- зователю определить, можно ли записывать следующий байт. Если програм- ма пользователя производит запись в энергонезависимую память, должны быть предприняты некоторые меры предосторожности. При использовании в источнике питания конденсаторов большой емкости, напряжение питания нарастает и спадает достоточно медленно. Это приводит к тому, что про- цессор некоторое время работает при напряжении питания ниже минимума достаточного для нормальной работы схем тактирования. При этом ЦПУ мо- жет совершать нежелательные переходы, попадая на части программы, про- изводящие запись в EEPROM. В таких случаях, для защиты содержимого EEPROM, необходимо использовать внешние схемы формирующие сигнал сбро- са при уменьшении напряжения питания. Для защиты от нежелательной записи в EEPROM необходимо следовать некоторым правилам, которые будут рассмотрены ниже, при описании уп- равляющего регистра энергонезависимой памяти. При записи или чтении EEPROM процессор приостанавливается на 2 машинных цикла до начала выполнения следующей команды. РЕГИСТР АДРЕСА EEPROM - EEAR Бит 7 6 5 4 3 2 1 0 ┌───┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ $1E ($3E) │ - │EEAR6│EEAR5│EEAR4│EEAR3│EEAR2│EEAR1│EEAR0│ EEAR └───┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Чт./зап.(R/W) R R/W R/W R/W R/W R/W R/W R/W Начальн.знач. 0 0 0 0 0 0 0 0 Бит 7 - зарезервирован. В AT90S2313 этот бит зарезервирован и всегда читается как 0. Биты 6..0 - EEAR6..0 - Адрес EEPROM. Адресный регистр EEPROM задает адрес в 128-байтном пространстве EEPROM. Байты данных EEPROM адресуются линейно в диапазоне 0..127. РЕГИСТР ДАННЫХ EEPROM - EEDR Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬───┬───┬───┐ $1D ($3D) │MSB│ - │ - │ - │ - │ - │ - │LSB│ EEDR └───┴───┴───┴───┴───┴───┴───┴───┘ Чт./зап.(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 0 Биты 7..0 - EEDR7..0 - Данные EEPROM. При записи регистр EEDR содер- жит данные, которые записываются в EEPROM по адресу в регистре EEAR. Для операции чтения в этот регистр читаются данные прочитанные из EEPROM по адресу заданному в регистре EEAR. РЕГИСТР УПРАВЛЕНИЯ EEPROM - EECR Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬─────┬────┬────┐ $1C ($3C) │ - │ - │ - │ - │ - │EEMWE│EEWE│EERE│ EEDR └───┴───┴───┴───┴───┴─────┴────┴────┘ Чт./зап.(R/W) R R R R R R/W R/W R/W Начальн.знач. 0 0 0 0 0 0 0 0 Биты 7..3 - зарезервированы. В AT90S2313 эти биты зарезервированы и всегда читаются как 0. Бит 2 - EEMWE - Управление разрешением записи. Этот бит определяет, будут ли записаны данные при установке EEWE. Если бит EEMWE установ- лен, при установке EEWE данные записываются по выбранному адресу EEPROM. Если этот бит сброшен, установка EEWE не имеет эффекта. После программной установки этот бит сбарасывается аппаратно через четыре такта процессора. Бит 1 - EEWE - Разрешение записи в EEPROM. Сигнал EEWE является стробом записи в EEPROM. После установки правильных адреса и данных для записи в EEPROM необходимо установить бит EEWE. При записи "1" в бит EEWE должен быть установлен бит EEMWE, тогда происходит запись в EEPROM. Для записи в EEPROM должна соблюдаться следующая последовательность: 1. Ждем обнуления EEWE 2. Записываем адрес в EEAR (не обязательно) 3. Записываем данные в EEDR (не обязательно) 4. Устанавливаем в 1 бит EEMWE 5. Не позже чем через 4 такта после установки EEMWE устанавливаем EEWE После того как время записи истечет (типично 2.5 mS для Vcc=5V и 4mS для Vcc=2.7), бит EEWE очищается аппаратно. Пользователь может от- слеживать этот бит и ожидать его установки в ноль, перед тем как запи- сывать следующий байт. При установке EEWE, ЦПУ останавливается на два цикла перед исполнением следующей команды. Бит 0 - EERE - разрешение чтения из EEPROM. Сигнал EERE является стробом чтения из EEPROM. После установки нужного адреса в регистре EEAR, необходимо установить бит EERE. После того как бит EERE будет аппаратно очищен, в регистре EEDR. Чтение EEPROM занимает одну команду и не требует отслеживания бита EERE. При установке бита EERE, ЦПУ ос- танавливается на два цикла перед тем как будет выполнена следующая команда. Перед чтением пользователь должен проверять состояние бита EEWE, если регистры данных или адреса изменяются во время операции записи, запись в ячейку прервывается и результат операции записи ста- новится неопределенным. УНИВЕРСАЛЬНЫЙ АСИНХРОННЫЙ ПРИЕМО-ПЕРЕДАТЧИК В состав AT90S2313 входит универсальный асинхронный приемо-пере- датчик (UART), его основные особенности: - генерация произвольных значений скорости - высокая скорость при низких тактовых частотах - 8 или 9 бит данных - фильтрация шума - Определение переполнения - Детектирование ошибки кадра - Определение неверного стартового бита - Три раздельных прерывания - завершение передачи, очистка регист- ра передачи и завершение приема. Передача данных Передача данных инициируется записью передаваемых даных в регистр ввода/вывода данных UART - UDR. Данные пересылаются из UDR в сдвиговый регистр передатчика когда: - новый символ записывается в UDR после того как был выдвинут стоповый бит для предыдущего символа. При этом сдвиговый регистр за- гружается сразу. - новый символ записывается в UDR до того как выдвинут стоповый бит для предыдущего символа. При этом сдвиговый регистр записывается сразу после того, как будет выдвинут стоповый бит предыдущего символа. При этом в регистре состояния UART - USR устанавливается бит-при- знак очистки решистра данных - UDRE/ Когда этот бит установлен, UART готов к приему следующего символа. Пре перезаписи UDR в 10(11)- разря- дный сдвиговый регистр, бит 0 сдвигового регистра обнуляется (старто- вый бит), а бит 9 или 10 устанавливается (стоповый бит). Если выбрано 9-битовое слово данных (установлен бит CHR9 в регистре UCR), бит TXB8 из UCR переписывается в 9-й бит сдвигового регистра передатчика. После тактового импульса, следующего с частотой передачи, старто- вый бит выдвигается на вывод TXD. Затем выдвигаются даные, начиная с младшего бита. Послег того как выдвинут стоповый бит, в сдвиговый ре- гистр загружаются новые данные, если они были записаны в UDR во время передачи. При загрузке устанавливается бит UDRE. Если до выдвижения стопового бита в регистр UDR не поступают новые данные, UDRE остается установленным до последующй записи UDR. Если новые данные не поступили и на выводе TXD появляется стоповый бит, в регистре USR устанавливает- ся флаг окончания передачи - TXC. Установка бита TXEN в UCR разрешает работу передатчика. При очис- тке бита TXEN, вывод PD1 моожно использовать для ввода/вывода данных. Если бит TXEN установлен, передатчик UART подключен к выводу PD1 неза- висимо от установки бита DDD1 в регистре DDRD. Прием данных Логическая схема приемника обрабатывает сигнал на выводе RXD с частотой в 16 больше скорости передачи (для обработки одного бита при- нимаемой последовательности, производится 16 выборок входного сигна- ла). В состоянии ожидания одна выборка логического нуля интерпретиру- ется как спадающий фронт стартового бита, после чего запускается по- следовательность обнаружения стартового бита. Если в первой выборке сигнала обнаружен нулевой отсчет, приемник обрабатывает 8, 9 и 10 вы- борки сигнала на выводе RXD. Если хотя бы две из трех выборок равны логической единице, стартовый бит считается шумом и приемник ждет сле- дующего перехода из 1 в 0. Если обнаружен стартовый бит, начинается обработка бит данных. Решение об уровне данных также производится по 8, 9 и 10 выборкам вхо- дного сигнала, уровень входного сигнала определяется по равенству двух выборок. После того как уровень данных определен, данные вдвигаются в сдвиговый регистр приемника. Для определения стопового бита хотя бы две из трех выборок вход- ного сигнала должны быть равны 1. Если это условие не выполняется, в регистре USR устанавливается флаг ошибки кадра FE. Перед чтением дан- ных из регистра UDR пользователь должен проверять бит FE для обнаруже- ния ошибок кадра. Независимо от принятия правильного стопового бита по окончанию приема символа принятые данные переписываются в UDR и устанавливается флаг RXC в регистре USR. Физически регистр UDR состоит из двух отдель- ных регистров, один используется для передачи данных, другой - для приема. При чтении UDR происходит доступ к регистру приемника, при за- писи - к регистру передатчика. При обмене 9-битовыми данными 9-й бит принятых данных записывается в бит RXB8 регистра UCR. Если при приеме символа из регистра UDR не был прочитан предыду- щий символ, в регистре UCR устанавливается флаг переполнения - OR. Ус- тановка этого бита означает, что последний принятый байт данных не пе- реписывается из сдвигового регистра в регистр UDR и будет потерян. Бит OR буферирован и обновляется при чтении правильных данных из UDR. Та- ким образом, пользователь всегда может проверить состояние OR после чтения UDR и обнаружить происшедшее переполнение. При сбросе бита RXEN в регистре UCR прием данных запрещается. При этом вывод PD0 можно использовать для ввода/вывода общего назначения. При установке RXEN, приемник подключен к выводу PD0 независимо от со- стояния бита DDD0 в регистре DDRD. Управление UART РЕГИСТР ВВОДА/ВЫВОДА UART Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬───┬───┬───┐ $0C ($2C) │MSB│ - │ - │ - │ - │ - │ - │LSB│ UDR └───┴───┴───┴───┴───┴───┴───┴───┘ Чт./зап.(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 0 Физически регистр UDR является двумя отдельными регистрами, до- ступ к которым происходит по одному адресу. При записи происходит за- пись в регистр передатчика, при чтении - читается регистр приемника. РЕГИСТР СОСТОЯНИЯ UART (USR) Бит 7 6 5 4 3 2 1 0 ┌───┬───┬────┬───┬───┬───┬───┬───┐ $0B ($2B) │RXC│TXC│UDRE│FE │OR │ - │ - │ - │ USR └───┴───┴────┴───┴───┴───┴───┴───┘ Чт./зап.(R/W) R R R R R R R R Начальн.знач. 0 0 1 0 0 0 0 0 Регистр USR доступен только для чтения, в нем хранится информация о состоянии UART. Bit 7 - RXC - прием завершен. Этот бит устанавливается в 1 когда принятый символ переписывается из сдвигового регистра приемника в ре- гистр UDR. Бит устанавливается независимо от обнаружения ошибки кадра. Если установлен бит RXCIE в регистре UCR, при установке бита выполня- ется прерывание по завершению приема символа. RXC сбрасываетcя при чтении UDR. При использовании приема данных по пррыванию, обработчик прерывания должен читать регистр UDR для сброса RXC, иначе при выходе из прерывания оно будет вызвано снова. Bit 6 - TXC - передача завершена. Этот бит устанавливается в 1 если символ из сдвигового регистра передатчика (включая стоповый бит) передан, а в регистр UDR не были записаны новые данные. Этот флаг осо- бенно полезен при полудуплексной связи, когда предающее устройство должно перейти в режим приема и освободить линию связи сразу по окон- чанию передачи. Если установлен бит TXIE в регистре UCR, при установке TXC выполняется прерывания по окончанию передачи. TXC сбрасывается ап- паратно при выполнении соответствующего вектора прерывания. Кроме то- го, бит можно сбросить записав в него 1. Bit 5 - UDRE - регистр данных UART пуст. Этот бит устанавливается в 1 когда даные, записанные в UDR переписываются в регистр сдвига пе- редатчика. Установка этого бита означает, что передатчик готов принять следующий символ для передачи. Если установлен бит UDRIE в регистре UCR, при утсановке этого бита выполняется прерывание окончания переда- чи. Бит UDRE сбрасывается при записи регистра UDR. При использовании передачи управляемой прерыванием, подпрограмма обслуживания прерывания должна записывать UDR, чтобы сбросить бит UDRE, иначе при выходе из прерывания оно будет вызвано снова. При сбросе этот бит устанавливает- ся в 1, чтобы проиндицировать готовность передатчика. Bit 4 - FE - ошибка кадра. Этот бит устанавливается при обнаруже- нии условия ошибки кадра, т.е. если стоповый бит принятого байта равен 0. Бит FE сбрасывается при приеме единичного стопового бита. Bit 3 - OR - переполнение. Этот бит устанавливается при обнаруже- нии условия переполнения, т.е. когда символ из регистра UDR не был прочитан до того, как заполнился сдвиговый регистр приемника. Этот бит буферирован, т.е. остается установленным до тех пор, пока из регистра UDR не будут прочитаны правильные данные. Бит OR сбрасывается когда принятые данные переписываются в UDR. Биты 2..0 - зарезервированы. В AT90S2313 эти биты зарезервированы и всегда читаются как 0. РЕГИСТР УПРАВЛЕНИЯ UART (UCR) Бит 7 6 5 4 3 2 1 0 ┌─────┬─────┬─────┬────┬────┬────┬────┬────┐ $0A ($2A) │RXCIE│TXCIE│UDRIE│RXEN│TXEN│CHR9│RXB8│TXB8│ UCR └─────┴─────┴─────┴────┴────┴────┴────┴────┘ Чт./зап.(R/W) R/W R/W R/W R/W R/W R/W R W Начальн.знач. 0 0 0 0 0 0 0 0 Бит 7 - RXCIE - Разрешение прерывани по окончанию приема. Если этот бит установлен (1), установка бита RXC в регистре USR приводит к вы- полнению прерывания по окончанию приема (при условии что разрешены прерывания) Бит 6 - TXCIE - Разрешение прерывания по окончанию передачи. Если этот бит установлен, установка бита TXC в USR приводит к выполнению прерывания по окончанию передачи (при условии, что прерывания разоеше- ны). Бит 5 - UDRIE - Прерывание по очистке регистра данных последователь- ного порта. Если этот бит установлен, установка бита UDRE в USR приво- дит к выполнению прерывания по очистке регистра данных UART (при усло- вии, что прерывания разоешены). Бит 4 - RXEN - Разрешение приемника. При установке этого бита разре- шается работа приемника UART. Если приемник выключен, флаги TXC, OR и FE не устанавливаются. Если эти флаги установлены, сброс RXEN не очи- щает их. Бит 3 - TXEN - Разрешение передатчика. При утсановке этого бита раз- решается работа передатчика UART. При запрещении работы передатчика во время передачи символа, он продолжает работать пока не будет очищен сдвиговый регистр и не будет передан символ, помещенный в UDR. Бит 2 - CHR9 - 9-битовые посылки. Если этот бит установлен, принима- емые и передаваемые символы имеют длину 9 бит. Для передачи и приема 9-го символа используются биты RXB8 и TXB8 соответственно. 9-й бит мо- жно использовать как дополнительный стоповый бит или как признак чет- ности. Бит 1 - RXB8 - Бит 8 принимаемых данных. Если установлен бит CHR9, сюда записывается 9-й бит принятых данных. Бит 0 - TXB8 - Бит 8 передаваемых данных. Если установлен бит CHR9, отсюда берется 9-й бит передаваемых данных. ГЕНЕРАТОР СКОРОСТИ ПЕРЕДАЧИ Генератор скорости передачи этот делитель частоты, который гене- рирует скорости в соответствии с нижеприведенным выражением: BAUD = Fck / (16*(UBRR+1)) здесь BAUD - скорость передачи (бод) Fck - частота тактового генератора процессора UBRR - содержимое регистра скорости передачи UART В следующей таблице приведены значения ргеистра UBRR и процентное отклонение от стандартной скорости передачи для стандартных частот кварцевых генераторов. Табл.14 ┌──────┬──────┬─────╥──────┬───────┬─────╥──────┬──────┬──────┐ │Скор.,│1.0000│ Ош. ║Скор.,│1.8432 │Ош. ║Скор.,│2.0000│ Ош. │ │бод │ MHz │ % ║бод │ MHz │% ║бод │ MHz │ % │ ├──────┼──────┼─────╫──────┼───────┼─────╫──────┼──────┼──────┤ │ 2400│25 │0.2 ║ 2400│47 │0 ║ 2400│51 │0.2 │ │ 4800│12 │0.2 ║ 4800│23 │0 ║ 4800│25 │0.2 │ │ 9600│6 │7.5 ║ 9600│11 │0 ║ 9600│12 │0.2 │ │ 14400│3 │7.8 ║ 14400│7 │0 ║ 14400│8 │3.7 │ │ 19200│2 │7.8 ║ 19200│5 │0 ║ 19200│6 │7.5 │ │ 28800│1 │7.8 ║ 28800│3 │0 ║ 28800│3 │7.8 │ │ 57600│0 │7.8 ║ 57600│1 │0 ║ 57600│1 │7.8 │ │115200│0 │84.3 ║115200│0 │0 ║115200│0 │7.8 │ ┌──────┬──────┬─────╫──────┬───────┬─────╫──────┬──────┬──────┐ │Скор.,│2.4576│ Ош. ║Скор.,│3.2768 │Ош. ║Скор.,│3.6864│ Ош. │ │бод │ MHz │ % ║бод │ MHz │% ║бод │ MHz │ % │ ├──────┼──────┼─────╫──────┼───────┼─────╫──────┼──────┼──────┤ │ 2400│63 │0.0 ║ 2400│84 │0.4 ║ 2400│95 │0.0 │ │ 4800│31 │0.0 ║ 4800│42 │0.8 ║ 4800│47 │0.0 │ │ 9600│15 │0.0 ║ 9600│20 │1.6 ║ 9600│23 │0.0 │ │ 14400│10 │3.1 ║ 14400│13 │1.6 ║ 14400│15 │0.0 │ │ 19200│7 │0.0 ║ 19200│10 │3.1 ║ 19200│11 │0.0 │ │ 28800│4 │6.3 ║ 28800│6 │1.6 ║ 28800│7 │0.0 │ │ 57600│2 │12.5 ║ 57600│3 │12.5 ║ 57600│3 │0.0 │ │115200│0 │25.0 ║115200│1 │12.5 ║115200│1 │0.0 │ ┌──────┬──────┬─────╫──────┬───────┬─────╫──────┬──────┬──────┐ │Скор.,│4.0000│ Ош. ║Скор.,│4.6080 │Ош. ║Скор.,│7.3728│ Ош. │ │бод │ MHz │ % ║бод │ MHz │% ║бод │ MHz │ % │ ├──────┼──────┼─────╫──────┼───────┼─────╫──────┼──────┼──────┤ │ 2400│103 │0.2 ║ 2400│119 │0.0 ║ 2400│191 │0.0 │ │ 4800│51 │0.2 ║ 4800│59 │0.0 ║ 4800│95 │0.0 │ │ 9600│25 │0.2 ║ 9600│29 │0.0 ║ 9600│47 │0.0 │ │ 14400│16 │2.1 ║ 14400│19 │0.0 ║ 14400│31 │0.0 │ │ 19200│12 │0.2 ║ 19200│14 │0.0 ║ 19200│23 │0.0 │ │ 28800│8 │3.7 ║ 28800│9 │0.0 ║ 28800│15 │0.0 │ │ 57600│3 │7.8 ║ 57600│4 │0.0 ║ 57600│7 │0.0 │ │115200│1 │7.8 ║115200│2 │20.0 ║115200│3 │0.0 │ ┌──────┬──────┬─────╫──────┬───────┬─────╫──────┬──────┬──────┐ │Скор.,│8.0000│ Ош. ║Скор.,│9.2160 │Ош. ║Скор.,│11.059│ Ош. │ │бод │ MHz │ % ║бод │ MHz │% ║бод │ MHz │ % │ ├──────┼──────┼─────╫──────┼───────┼─────╫──────┼──────┼──────┤ │ 2400│207 │0.2 ║ 2400│239 │0.0 ║ 2400│287 │--- │ │ 4800│103 │0.2 ║ 4800│119 │0.0 ║ 4800│143 │0.0 │ │ 9600│51 │0.2 ║ 9600│59 │0.0 ║ 9600│71 │0.0 │ │ 14400│34 │0.8 ║ 14400│39 │0.0 ║ 14400│47 │0.0 │ │ 19200│25 │0.2 ║ 19200│29 │0.0 ║ 19200│35 │0.0 │ │ 28800│16 │2.1 ║ 28800│19 │0.0 ║ 28800│23 │0.0 │ │ 57600│8 │3.7 ║ 57600│9 │0.0 ║ 57600│11 │0.0 │ │115200│3 │7.8 ║115200│4 │0.0 ║115200│5 │0.0 │ └──────┴──────┴─────╨──────┴───────┴─────╨──────┴──────┴──────┘ Табл.14 ┌──────┬──────┬─────╥──────┬───────┬─────╥──────┬──────┬──────┐ │Скор.,│14.746│ Ош. ║Скор.,│16.000 │Ош. ║Скор.,│18.432│ Ош. │ │бод │ MHz │ % ║бод │ MHz │% ║бод │ MHz │ % │ ├──────┼──────┼─────╫──────┼───────┼─────╫──────┼──────┼──────┤ │ 2400│383 │--- ║ 2400│416 │--- ║ 2400│479 │--- │ │ 4800│191 │0.0 ║ 4800│207 │0.2 ║ 4800│239 │0.0 │ │ 9600│95 │0.0 ║ 9600│103 │0.2 ║ 9600│119 │0.0 │ │ 14400│63 │0.0 ║ 14400│68 │0.6 ║ 14400│79 │0.0 │ │ 19200│47 │0.0 ║ 19200│51 │0.2 ║ 19200│59 │0.0 │ │ 28800│31 │0.0 ║ 28800│34 │0.8 ║ 28800│39 │0.0 │ │ 57600│15 │0.0 ║ 57600│16 │2.1 ║ 57600│19 │0.0 │ │115200│7 │0.0 ║115200│8 │3.7 ║115200│9 │0.0 │ └──────┴──────┴─────╨──────┴───────┴─────╨──────┴──────┴──────┘ РЕГИСТР СКОРОСТИ ПЕРЕДАЧИ (UBRR) Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬───┬───┬───┐ $09 ($29) │MSB│ - │ - │ - │ - │ - │ - │LSB│ UBRR └───┴───┴───┴───┴───┴───┴───┴───┘ Чт./зап.(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 0 Это 8-разрядный регистр, который задает скорость передачи последова- тельного порта в соответствии с выражением приведенным выше. АНАЛОГОВЫЙ КОМПАРАТОР Аналоговый компаратор сравнивает входные напряжение на положи- тельном входе PB0 (AIN0) и отрицательном входе PB1(AIN1). Когда напря- жение на положительном входе больше напряжения на отрицательном, уста- навливается бит ACO (Analog Comparator Output). Выход аналогового ком- паратора можно установить на работу с функцией захвата Таймера/Счетчи- ка1. Кроме того, компратор может вызывать свое прерывание. Пользова- тель может установить установить срабатывание прерывания по нарастаю- щему или спадающему фронту, или по переключению. РЕГИСТР УПРАВЛЕНИЯ И СОСТОЯНИЯ АНАЛОГОВОГО КОМПАРАТОРА (ACSR). Бит 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬────┬────┬─────┬─────┐ $08 ($28) │ACD│ - │ACO│ACI│ACIE│ACIC│ACIS1│ACIS0│ ACSR └───┴───┴───┴───┴────┴────┴─────┴─────┘ Чт./зап.(R/W) R/W R R R/W R/W R/W R/W R/W Начальн.знач. 0 0 0 0 0 0 0 0 Бит 7 - ACD - Запрещение аналогового компаратора. Когда этот бит ус- тановлен, питание от аналогового компаратора отключается. Для отключе- ния компаратора этот бит можно установить в любое время. Обычно это свойство используется если критично потребление процессора в холостом режиме и восстановление работы процессора от аналогового компаратора не требуется. При изменении бита ACD прерывания от аналогового компа- ратора должны быть запрещены сбросом ACIE в регистре ACSR. В противном случае прерывание может произойти во время изменения бита. Бит 6 - зарезервирован. В AT90S2313 этот бит зарезервирован и всегда читается как 0. Бит 5 - ACO - Выход аналогового компаратора. Бит ACO непосредственно подключен к выходу аналогового компаратора. Бит 4 - ACI - Флаг прерывания от аналогового компаратора. Этот бит устанавливается когда переключение выхода компаратора совпадает с ре- жимом прерывания установленным битами ACIS1 и ACIS0. Программа обрабо- тки прерывания от аналогового компаратора выполняется если установлен бит ACIE (1) и установлен бит I в регистре состояния. ACI сбрасывается аппаратно при выполнении соответствующего вектора прерывания. Другой способ очистить ACI - записать во флаг логическую единицу. Бит 3 - ACIE - Разрешение прерывания от аналогового компаратора. Ко- гда установлен этот бит и бит I регистра состояния, прерывания от ана- логового компаратора отрабатываются. Если бит очищен (0), прерывания запрещены. Бит 2 - ACIC - Захват по выходу аналогового компаратора. Емли этот бит установлен, функция захвата таймера/счетчика1 управляется выходом аналогового компаратора. При этом выход компаратора подключается непо- средственно к схеме обработки захвата, предоставляя удобные средства подавления шума и выбора фронта предусмотренные прерыванием захвата по входу. Когда бит очищен, схема захвата и компаратор разъединены. Чтобы компаратор мог управлять функцией захвата таймера/счетчика1, должен быть установлен бит TICIE1 в регистре TIMSK. Биты 1,0 - ACIS1, ACIS0 - Выбор режима прерывания аналогового компа- ратора. Различные установки приведены в табл.7. Таблица 15. Установки ACIS1/ACIS0 ┌─────┬─────┬────────────────────────────────────────────────────────┐ │ACIS1│ACIS0│Описание │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │0 │0 │Прерывание от компаратора по переключению выхода │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │0 │1 │Зарезервировано │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │1 │0 │Прерывание от компаратора по спадающему фронту выхода │ ├─────┼─────┼────────────────────────────────────────────────────────┤ │1 │1 │Прерывание от компаратора по нарастающему фронту выхода │ └─────┴─────┴────────────────────────────────────────────────────────┘ Примечание: При изменении битов ACIS1/ACIS0 прерывания от аналогового компаратора должны быть запрещены сбросом бита разрешения прерывания в регистре ACSR. Иначе прерывание может произойти при изменении битов. ПОРТЫ ВВОДА/ВЫВОДА Порт B Порт B 8-разрядный двунаправленный порт ввода/вывода. Для обслуживания порта отведено три регистра: регистр данных PORTB ($18, $38), регистр направления данных - DDRB ($17, $37) и ножки порта B ($16, $36). Адрес ножек порта B предназначен только для чте- ния, в то время как регистр данных и регистр направления данных - для чтения/записи. Все выводы порта имеют отдельно подключаемые подтягивающие резис- торы. Выходы порта B могут поглощать ток до 20 mA и непосредственно управлять светодиодными индикаторами. Если выводы PB0..PB7 используют- ся как входы и замыкаются на землю, если включены внутренние подтяги- вающие резисторы, выводы являются источниками тока (Iil). Дополнитель- ные функции выводов порта B приведены в таблице 8. Таблица 16. Альтернативные функции выводов порта B ┌────────┬──────────────────────────────────────────────────────────┐ │Вывод │ Альтернативная функция │ ├────────┼──────────────────────────────────────────────────────────┤ │PB0 │ AIN0 (Положительный вход аналогового компаратора) │ ├────────┼──────────────────────────────────────────────────────────┤ │PB1 │ AIN1 (Отрицательный вход аналогового компаратора) │ ├────────┼──────────────────────────────────────────────────────────┤ │PB3 │ OC1 (Выход совпадения таймера/счетчика1) │ ├────────┼──────────────────────────────────────────────────────────┤ │PB5 │ MOSI (Вход данных для загрузки памяти) │ ├────────┼──────────────────────────────────────────────────────────┤ │PB6 │ MISO (Выход данных для чиенмя памяти) │ ├────────┼──────────────────────────────────────────────────────────┤ │PB7 │ SCK (Вход тактовых импульсов последовательного обмена) │ └────────┴──────────────────────────────────────────────────────────┘ При использовании альтернативных функций выводов. регистры DDRB и PORTB должны быть установлены в соответствии с описанием альтернатив- ных функций. РЕГИСТР ДАННЫХ ПОРТА B - PORTB Бит 7 6 5 4 3 2 1 0 ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $18 ($38) │PORTB7│PORTB6│PORTB5│PORTB4│PORTB3│PORTB2│PORTB1│PORTB0│ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R/W R/W R/W R/W R/W R/W R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 РЕГИСТР НАПРАВЛЕНИЯ ДАННЫХ ПОРТА B - DDRB Бит ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $17 ($37) │ DDB7 │ DDB7 │ DDB5 │ DDB4 │ DDB3 │ DDB2 │ DDB1 │ DDB0 │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R/W R/W R/W R/W R/W R/W R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 ВЫВОДЫ ПОРТА B - PINB Бит ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $16 ($36) │PINB7 │PINB7 │PINB5 │PINB4 │PINB3 │PINB2 │PINB1 │PINB0 │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R R R R R R R R Нач.знач. Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z PINB не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов порта B. При чтении PORTB, читаются данные из регистра-защелки, при чтении PINB читаются логичес- кие значения присутствующие на выводах порта. ПОРТ B, КАК ПОРТ ВВОДА/ВЫВОДА ОБЩЕГО НАЗНАЧЕНИЯ Все 8 бит порта B при использовании для ввода/вывода одинаковы. Бит DDBn регистра DDRB выбирает направление передачи данных. Если бит установлен (1), вывод сконфигурирован как выход. Если бит сброшен (0) - вывод сконфигурирован как вход. Если PORTBn установлен и вывод сконфигурирован как вход, включается КМОП подтягивающий резистор. Для отключения резистора, PORTBn должен быть сброшен (0) или вывод должен быть сконфигурирован как выход. Таблица 17. Влияние DDBn на выводы порта B ┌────┬──────┬───────┬───────────┬───────────────────────────────────┐ │DDBn│PORTBn│Вх/Вых │Подт.резист│Комментарий │ ├────┼──────┼───────┼───────────┼───────────────────────────────────┤ │0 │0 │Вход │Нет │Третье состояние (Hi-Z) │ ├────┼──────┼───────┼───────────┼───────────────────────────────────┤ │0 │1 │Вход │Да │PBn источник тока Iil, если извне │ │ │ │ │ │соединен с землей │ ├────┼──────┼───────┼───────────┼───────────────────────────────────┤ │1 │0 │Выход │Нет │Выход установлен в 0 │ ├────┼──────┼───────┼───────────┼───────────────────────────────────┤ │1 │1 │Выход │Нет │Выход установлен в 1 │ └────┴──────┴───────┴───────────┴───────────────────────────────────┘ n = 7,6...0 - номер вывода АЛЬТЕРНАТИВНЫЕ ФУНКЦИИ PORTB SCK - PORTB, Bit 7 - вход тактовой частоты для загрузки/чтения памя- ти. MISO - PORTB, Bit 6 - выход данных для чтения памяти MOSI - PORTB, Bit 5 - вход данных для загрузки памяти OC1 - PORTB, Bit 3 - Выход совпадения. Этот вывод может быть сконфи- гурирован для внешнего вывода события совпадения таймера1. Для этого бит DDB3 должен быть установлен в 1 (вывод сконфигурирован как выход). AIN1 - PORTB, Bit 1 - Отрицательный вход аналогового компаратора. Ес- ли этот вывод сконфигурирован как вход (DDB1=0) и отключен внутренний подтягивающий резистор, этот вывод работает как отрицательный вход внутреннего аналогового компаратора. AIN0 - PORTB, Bit 0 - Положительный вход аналогового компаратора. Ес- ли этот вывод сконфигурирован как вход (DDB0=0) и отключен внутренний подтягивающий резистор, этот вывод работает как положительный вход внутреннего аналогового компаратора. Порт D Для порта D зарезервированы 3 ячейки памяти - регистр PORTD $12 ($32), регистр направления данных - DDRD $11 ($31) и выводы порта D - PIND $10 ($30). Регистры данных и направления данных могут читать- ся/записываться, ячейка PIND - только для чтения. Порт D - 7-разрядный двунаправленный порт с встроенными подтягги- вающими регистрами. Выходные буферы порта могут поглощать ток до 20 mA. Если выводы используются как входы и на них подан низкий уровень, они являются источниками тока Iil, если подключены подтягивающие рези- сторы. Некоторые из выводов порта имеют альтернативные функции, как показано в таблице 18. Если выводы порта используются для обслуживания альтернативных функций, они должны быть сконфигурированы на ввод/вывод в соответствии с описанием функции. Таблица 18. Альтернативные функции порта D ┌───────────┬────────────────────────────────────────┐ │Вывод порта│Альтернативная функция │ ├───────────┼────────────────────────────────────────┤ │ PD0 │ RXD (вход данных UART) │ ├───────────┼────────────────────────────────────────┤ │ PD1 │ TXD (выход данных UART) │ ├───────────┼────────────────────────────────────────┤ │ PD2 │ INT0 (вход внешнего прерывания 0) │ ├───────────┼────────────────────────────────────────┤ │ PD3 │ INT1 (вход внешнего прерывания 1) │ ├───────────┼────────────────────────────────────────┤ │ PD4 │ T0 (внешний вход таймера счетчика 0) │ ├───────────┼────────────────────────────────────────┤ │ PD5 │ T1 (внешний вход таймера счетчика 1) │ ├───────────┼────────────────────────────────────────┤ │ PD6 │ ICP (вход захвата таймера счетчика 1)│ └───────────┴────────────────────────────────────────┘ РЕГИСТР ДАННЫХ ПОРТА D - PORTD Бит ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $12 ($32) │ - │PORTD6│PORTD5│PORTD4│PORTD3│PORTD2│PORTD1│PORTD0│ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R R/W R/W R/W R/W R/W R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 РЕГИСТР НАПРАВЛЕНИЯ ДАННЫХ ПОРТА B - DDRB Бит ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $11 ($31) │ - │ DDD7 │ DDD5 │ DDD4 │ DDD3 │ DDD2 │ DDD1 │ DDD0 │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R R/W R/W R/W R/W R/W R/W R/W Нач.знач. 0 0 0 0 0 0 0 0 ВЫВОДЫ ПОРТА B - PINB Бит ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ $10 ($30) │PIND7 │PIND7 │PIND5 │PIND4 │PIND3 │PIND2 │PIND1 │PIND0 │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Чт./зап. R R R R R R R R Нач.знач. Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z PIND не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов порта D. При чтении PORTD, читаются данные из регистра-защелки, при чтении PIND читаются логичес- кие значения присутствующие на выводах порта. Порт D, как порт ввода/вывода общего назначения Бит DDDn регистра DDRD выбирает направление передачи данных. Если бит установлен (1), вывод сконфигурирован как выход. Если бит сброшен (0) - вывод сконфигурирован как вход. Если PORTDn установлен и вывод сконфигурирован как вход, включается КМОП подтягивающий резистор. Для отключения резистора, PORTDn должен быть сброшен (0) или вывод должен быть сконфигурирован как выход. Таблица 19. Влияние DDDn на выводы порта D ┌────┬──────┬───────┬───────────┬───────────────────────────────────┐ │DDDn│PORTDn│Вх/Вых │Подт.резист│Комментарий │ ├────┼──────┼───────┼───────────┼───────────────────────────────────┤ │0 │0 │Вход │Нет │Третье состояние (Hi-Z) │ ├────┼──────┼───────┼───────────┼───────────────────────────────────┤ │0 │1 │Вход │Да │PDn источник тока Iil, если извне │ │ │ │ │ │соединен с землей │ ├────┼──────┼───────┼───────────┼───────────────────────────────────┤ │1 │0 │Выход │Нет │Выход установлен в 0 │ ├────┼──────┼───────┼───────────┼───────────────────────────────────┤ │1 │1 │Выход │Нет │Выход установлен в 1 │ └────┴──────┴───────┴───────────┴───────────────────────────────────┘ n = 6...0 - номер вывода Альтернативные функции порта D ICP - Порт D, бит 6 - вход захвата таймера/счетчика 1. Подробнее см. описание таймера. T1 - Порт D, бит 5 - тактовый вход таймера/счетчика 1. Подробнее см. описание таймера. T0 - Порт D, бит 4 - тактовый вход таймера/счетчика 0. Подробнее см. описание таймера. INT1 - Порт D, бит 3 - вход внешних прерываний 1. Подробнее см. опи- сание прерываний. INT0 - Порт D, бит 2 - вход внешних прерываний 0. Подробнее см. опи- сание прерываний. TXD - Порт D, бит 1 - выход передатчика UART. Если разрешена работа передатчика UART, независимо от состояния DDRD1 этот вывод сконфигури- рован как выход. RXD - Порт D, бит 0 - выход приемника UART. Если разрешена работа приемника UART, независимо от состояния DDRD0 этот вывод сконфигуриро- ван как выход. Когда UART использует вывод для приема данных, единицв в PORTD0 подключает встроенный подтягивающий резистор. ПРОГРАММИРОВАНИЕ ПАМЯТИ Программирование битов блокировки памяти Микроконтроллер AT90S2313 имеет два бита блокировки, которые мо- гут быть оставлены незапрограммированными (1) или программироваться (0), при этом достигаются свойства приведенные в таблице 20. Таблица 20. Режимы защиты и биты блокировки ┌───────────────────┬──────────────────────────────────────────┐ │ Биты блокировки │ Тип защиты │ ├──────┬───┬────────┼──────────────────────────────────────────┤ │ Режим│LB1│LB2 │ │ ├──────┼───┼────────┼──────────────────────────────────────────┤ │ 1 │1 │1 │ защита не установлена │ ├──────┼───┼────────┼──────────────────────────────────────────┤ │ 2 │0 │1 │ дальнейшее программирование флэш памяти│ │ │ │ │ и EEPROM запрещено │ ├──────┼───┼────────┼──────────────────────────────────────────┤ │ 3 │0 │0 │ как режим 2, но запрещено и чтение │ └──────┴───┴────────┴──────────────────────────────────────────┘ Примечание: биты блокировки стираются только при полном стирании памяти Биты конфигурации (Fuse bits) В AT90S2313 предусмотрено два бита конфигурации - SPIEN и FSTRT. Когда запрограммирован бит SPIEN (0) разрешен режим последовательного программирования. По умолчанию бит запрограммирован (0). Когда запрограммирован бит FSTRT (0), используется укороченное время запуска. По умолчанию этот бит не запрограммирован (1). Можно заказывать микросхемы с предварительно запрограммированным битом. Эти биты недоступны при последовательном программировании и не изменяются при стирании памяти. Код устройства Все микроконтроллеры фирмы Atmel имеют 3-байтовый сигнатурный код, по которому идентифицируется устройство. Этот код может быть про- читан в параллельном и последовательном режимах. Эти три байта разме- щены в отдельном адресном пространстве и для AT90S2313 имеют следующие значения: 1. $000: $1E - код производителя - Atmel 2. $001: $91 - 2 кБ флэш памяти 3. $002: $01 - при $01=$91 - м/сх AT90S2313 Если запрограммированы биты блокировки, байты сигнатуры в после- довательном режиме не читаются. Программирование флэш памяти и EEPROM AT90S2313 имеет 2кБ перепрограммируемой флэш памяти программ и 128 байт энергонезависимой памяти данных. При поставке AT90S2313 флэш память и память данных стерты (содер- жат $FF) и готовы к программированию. Эта микросхема поддерживает вы- соковольтный (12В) параллельный режим программирования и низковольтный режим последовательного программирования. Напряжение +12В использует- ся только для разрешения программирования, этот вывод не потребляет тока. Последовательный режим программирования предусмотрен для загруз- ки программы и данных в AT90S2313 в системе пользователя (внутрисисте- мное программирование). Память программ и данных в AT90S2313 программируются байт за бай- том в обоих режимах программирования. Для энергонезависимой памяти предусмотрен режим автоматического стирания при последовательном про- граммировании. Параллельное программирование. Ниже рассмотрено параллельное программирование флэш памяти про- грамм, энергонезависимой памяти данных, битов блокировки и конфигура- ции. Некоторые выводы AT90S2313 ниже называются именами, отражающими функциональное назначение сигналов при параллельном программировании. Выводы не приведенные в следующей таблице называются своими обычными именами. Таблица 13. Имена выводов ┌───────────────┬──────┬───┬────────────────────────────────┐ │Имя сигнала при│Имя │Вх/│ │ │программирован.│вывода│Вых│Функция │ ├───────────────┼──────┼───┼────────────────────────────────┤ │RDY/BSY │PD1 │Вых│0:м/сх занята программированием │ │ │ │ │1:м/сх готова к приему команды │ ├───────────────┼──────┼───┼────────────────────────────────┤ │OE │PD2 │Вх │Разрешение выходов (активный 0) │ ├───────────────┼──────┼───┼────────────────────────────────┤ │WR │PD3 │Вх │Импульс записи (активный 0) │ ├───────────────┼──────┼───┼────────────────────────────────┤ │BS │PD4 │Вх │Выбор байта │ ├───────────────┼──────┼───┼────────────────────────────────┤ │XA0 │PD5 │Вх │Действие XTAL бит 0 │ ├───────────────┼──────┼───┼────────────────────────────────┤ │XA1 │PD6 │Вх │Действие XTAL бит 1 │ └───────────────┴──────┴───┴────────────────────────────────┘ Биты XA0 и XA1 определяют действие происходящее по положительному им- пульсу XTAL1. Установки битов приведены в следующей таблице: Таблица 22. Установка XA1 и XA0 ┌───┬───┬────────────────────────────────────────────────────────────┐ │XA1│XA0│Действие при подаче импульса XTAL1 │ ├───┼───┼────────────────────────────────────────────────────────────┤ │ 0 │ 0 │Загрузка адреса памяти программ или данных (старший/младший │ │ │ │байт задается выводом BS │ ├───┼───┼────────────────────────────────────────────────────────────┤ │ 0 │ 1 │Загрузка данных (старший/младший байт для флэш памяти зада- │ │ │ │ется выводом BS) │ ├───┼───┼────────────────────────────────────────────────────────────┤ │ 1 │ 0 │Загрузка команды │ ├───┼───┼────────────────────────────────────────────────────────────┤ │ 1 │ 1 │Не работает, холостой ход │ └───┴───┴────────────────────────────────────────────────────────────┘ По импульсу WR или OE загружается команда определяющая действие по вводу или выводу. В байте команды каждому биту присвоена функция, как показано в таблице 23. Таблица 23. Биты конфигурации командного байта ┌───┬─────────────────────────────────────────────────────────────────┐ │Бит│Значение при установке │ ├───┼─────────────────────────────────────────────────────────────────┤ │ 7 │Стирание кристалла │ ├───┼─────────────────────────────────────────────────────────────────┤ │ 6 │Запись битов конфигурации, расположенных в следующих позициях │ │ │байта данных: D5 - SPIEN, D0 - RCEN (0 для программирования, │ │ │1 для стирания) │ ├───┼─────────────────────────────────────────────────────────────────┤ │ 5 │Запись битов блокировки, расположенных в следующих позициях байта│ │ │данных: D2 - LB2, D1 - LB1 (для программирования устанавливать 0)│ ├───┼─────────────────────────────────────────────────────────────────┤ │ 4 │Запись памяти программ или данных (определяется битом 0) │ ├───┼─────────────────────────────────────────────────────────────────┤ │ 3 │Чтение сигнатуры │ ├───┼─────────────────────────────────────────────────────────────────┤ │ 2 │Чтение битов блокировки и конфигурации, расположнных в следующих │ │ │позициях байта данных: D7 - LB1, D6 - LB2, D5 - SPIEN, D0 - RCEN│ └─────────────────────────────────────────────────────────────────────┘ ┌───┬─────────────────────────────────────────────────────────────────┐ │Бит│Значение при установке │ ├───┼─────────────────────────────────────────────────────────────────┤ ├───┼─────────────────────────────────────────────────────────────────┤ │ 1 │Чтение памяти программ или данных (определяется битом 0) │ ├───┼─────────────────────────────────────────────────────────────────┤ │ 0 │0 - доступ к памяти программ, 1 - к памяти данных │ └───┴─────────────────────────────────────────────────────────────────┘ ВХОД В РЕЖИМ ПРОГРАММИРОВАНИЯ Следующий алгоритм переводит устройство в режим параллельного программирования: 1. Подать напряжение 4.5...5.5В на выводы питания. 2. Установить RESET и BS в 0 и выдержать не меньше 100 нС. 3. Подать 12В на RESET и выждать не менее 100 нС перед изменением BS. Любая активность на выводе BS в течение этого времени при- ведет к тому, что микросхема не включится в режим программро- вания. СТИРАНИЕ КРИСТАЛЛА При стирании кристалла стираются память программ и данных, а так- же биты блокировки. Биты блокировки не сбрасываются до полного стира- ния памяти программ и данных. Биты конфигурации не изменяются. (Стира- ние кристалла производится перед его программированием). Загрузка команды "стереть кристалл" 1. Установить XA1,XA0 в '10'. Это разрешает загрузку команды. 2. Установить BS в 0 3. Установить PB в '1000 0000'. Это команда стирания кристалла. 4. Подать положительный импульс на XTAL1. При этом загружается команда и начинается стирание памяти программ и данных. После импульса XTAL1, подать отрицательный импульс на WR, чтобы раз- решить стирание битов блокировки по окончанию цикла стирания. Подождать около 10 мС до окончания цикла стирания. Стирание кристалла не генерирует сигнала RDY/BSY. ПРОГРАММИРОВАНИЕ ФЛЭШ ПАМЯТИ Загрузить команду "программирование флэш памяти" 1. Установить XA1,XA0 в '10'. Это разрешает загрузку команды. 2. Установить BS в 0 3. Установить PB в '0001 0000'. Это команда программирования флэш памяти 4. Подать положительный импульс на XTAL1. При этом загружается команда. Загрузить младший байт адреса 1. Установить XA1,XA0 в '00'. Это разрешает загрузку адреса. 2. Установить BS в 0. Это выбирает младший байт адреса. 3. Установить на PB младший байт адреса. 4. Подать положительный импульс на XTAL1. При этом загружается младший байт адреса. Загрузить старший байт адреса 1. Установить XA1,XA0 в '00'. Это разрешает загрузку адреса. 2. Установить BS в 1. Это выбирает старший байт адреса. 3. Установить на PB старший байт адреса. ($00..$01) 4. Подать положительный импульс на XTAL1. При этом загружается старший байт адреса. Загрузить байт данных 1. Установить XA1,XA0 в '01'. Это разрешает загрузку данных. 2. Установить на PB младший байт данных. 3. Подать положительный импульс на XTAL1. При этом загружается младший байт данных. Запись младшего байта данных. 1. Установить BS в '0'. Это выбирает младший байт данных 2. Подать на WR отрицательный импульс. Это инициирует программи- рование байта. RDY/BSY переходит в низкое состояние. 3. Перед программированием следующего байта подождать, пока RDY/BSY перейдет в высокое состояние. Загрузить байт данных 1. Установить XA1,XA0 в '01'. Это разрешает загрузку данных. 2. Установить на PB старший байт данных. 3. Подать положительный импульс на XTAL1. При этом загружается старший байт данных. Запись старшего байта данных. 1. Установить BS в '1'. Это выбирает старший байт данных 2. Подать на WR отрицательный импульс. Это инициирует программи- рование байта. RDY/BSY переходит в низкое состояние. 3. Перед программированием следующего байта подождать, пока RDY/BSY перейдет в высокое состояние. Загруженные адрес и данные сохраняются в устройстве после про- граммирования, при этом процесс программирования упрощается. * Команду программирования флэш памяти необходимо подать только пе- ред программированием первого байта * Старший байт адреса можно менять только перед программированием следующей страницы памяти программ (256 слов). ПРОГРАММИРОВАНИЕ ПАМЯТИ ДАННЫХ Алгоритм программирования памяти данных следующий (обратитесь к программированию памяти программ за описанием загрузки команды, адреса и данных): 1. Загрузить команду '0001 0001'. 2. Загрузить младший адрес памяти данных ($00 - $7F). 3. Загрузить младший байт данных 4. Подать отрицательный импульс на WR и подождать перевода RDY/BSY в 1. Загрузка команды необходима только перед программированием перво- го байта. ЧТЕНИЕ ПАМЯТИ ПРОГРАММ Алгоритм чтения флэш памяти следующий (обратитесь к программиро- ванию памяти программ за описанием загрузки команды, адреса и данных): 1. Загрузить команду '0000 0010' 2. Загрузить младший байт адреса ($00 - $FF) 3. Загрузить старший байт адреса ($00 - $03) 4. Установить OE в '0', BS в '0'. Теперь на выводах PB можно про- читать младший байт данных. 5. Установить BS в '1'. Теперь на выводах PB можно прочитать старший байт данных. 6. Установить OE в '1'. Загрузка команды необходима только перед чтением первого байта. ЧТЕНИЕ ПАМЯТИ ДАННЫХ Алгоритм чтения памяти данных следующий (обратитесь к программи- рованию памяти программ за описанием загрузки команды, адреса и дан- ных): 1. Загрузить команду '0000 0011' 2. Загрузить младший байт адреса ($00 - $7F) 3. Установить OE в '0', BS в '0'. Теперь на выводах PB можно про- читать байт данных. 4. Установить OE в '1'. Загрузка команды необходима только перед чтением первого байта. ПРОГРАММИРОВАНИЕ БИТОВ КОНФИГУРАЦИИ Алгоритм программирования битов конфигурации следующий (обрати- тесь к программированию памяти программ за описанием загрузки команды, адреса и данных): 1. Загрузить команду '0100 0000' 2. Загрузить данные Бит5=0 - программировать бит SPIEN, Бит5=1 - стереть бит SPIEN Бит0=0 - программировать бит FSTRT, Бит0=1 - стереть бит FSTRT 3. Подать на WR отрицательный импульс и ждать перехода RDY/BSY в единицу. ВНИМАНИЕ! WR должен удерживаться в низком состоянии не меньше 1mS. ПРОГРАММИРОВАНИЕ БИТОВ БЛОКИРОВКИ Алгоритм программирования битов блокировки следующий (обратитесь к программированию памяти программ за описанием загрузки команды, ад- реса и данных): 1. Загрузить команду '0010 0000' 2. Загрузить данные Бит2=0 - программировать бит LB2 Бит1=0 - программировать бит LB1 3. Подать на WR отрицательный импульс и ждать перехода RDY/BSY в единицу. Биты блокировки стираются только при стирании всей микросхемы. ЧТЕНИЕ БИТОВ КОНФИГУРАЦИИ И БЛОКИРОВКИ Алгоритм чтения битов блокировки и конфигурации следующий (обра- титесь к программированию памяти программ за описанием загрузки коман- ды, адреса и данных): 1. Загрузить команду '0000 0100' 2. Установить OE в '0', BS в '1'. Теперь на выводах PB можно про- читать биты блокировки и конфигурации. Бит7 - LB1 - '0' запрограммирован Бит6 - LB2 - '0' запрограммирован Бит5 - SPIEN - '0' запрограммирован Бит0 - FSTRT - '0' запрограммирован 3. Установить OE в '1'. Следите чтобы бит BS был установлен в '1'. ЧТЕНИЕ БАЙТОВ СИГНАТУРЫ Алгоритм чтения байтов сигнатуры следующий (обратитесь к програм- мированию памяти программ за описанием загрузки команды, адреса и дан- ных): 1. Загрузить команду 0000 1000 2. Загрузить младший байт адреса ($00 - $02), установить OE и BS в "0". После этого выбранный байт сигнатуры можно прочитать на выводах PB. 3. Установить OE в "1". Команду необходимо подавать только перед чтением первого байта. ПОСЛЕДОВАТЕЛЬНАЯ ЗАГРУЗКА Как память программ, так и память данных могут быть запрограмми- рованы с использованием последовательной шины SPI, при этом вывод RESET должен быть подключен к земле. Последовательный интерфейс рабо- тает с выводами SCK, MOSI (вход) и MISO (выход). После подачи низкого уровня на RESET перепрограммированием/стиранием необходимо исполнить команду разрешения программирования. При программировании памяти данных, во внутренний алгоритм про- граммирования встроен цикл стирания (только при последовательном про- граммировании), поэтому нет необходимости в выполнении команды стира- ния памяти. Команда стирания микросхемы переводит все ячейки памяти программ и данных в состояние $FF. Флэш память программ и энергонезависимая память данных имеют от- дельное адресное пространство: $000 - $7FF для памяти программ и $000 - $07F для памяти данных. При программировании необходимо подавать внешнюю тактовую частоту на вывод XTAL1 или подключить внешний тактовый генератор к выводам XTAL1 и XTAL2. Минимальные длительности низкого и высокого уровня сиг- нала SCK определены следующим образом: Низкий: > 2 периодов XTAL1 Высокий: > 2 периодов XTAL1 ПОДТВЕРЖДЕНИЕ ДАННЫХ До завершения программировании нового байта, при чтении из памяти бкдет читаться значение $7F. Когда микросхема будет готова для записи следующего байта, будет выдаваться записанное значение. Это использу- ется для определения момента, когда можно записывать следующий байт. Этот способ не будет работать для байта $7F, поэтому для записи этого числа перед программированием следующего байта придется выждать по крайней мере 4mS. Поскольку после стирания ячейки авсяти кстанавлива- ются в $FF, при программировании ячейки, содержащие $FF можно пропус- кать. Это не применимо при перезаписи EEPROM без стирания памяти про- грамм. В этом случае подтверждение не работает для данных $7F и $FF, для этих значений перед программированием следующего байта необходимо выждать 4mS. АЛГОРИТМ ПОСЛЕДОВАТЕЛЬНОГО ПРОГРАММИРОВАНИЯ Для программирования и проверки AT90S2313 в режиме последователь- ного программирования рекомендуется следующая последовательность дей- ствий (см. формат четырех байтовой команды в табл.25): 1. Последовательность включения питания: Подать напряжение питания между VCC и GND, при этом RESET и SCK должны быть установлены в '0'. (Если программатор не га- рантирует установки SCK в '0' при подаче питания, после того как на SCK будет установлен '0', на RESET необходимо подать положительный импульс. Если кварцевый резонатор не подключен к выводам XTAL1 и XTAL2, подайте частоту от 0 до 16 MHz на вывод XTAL1. 2. Подождать 20 mS и разрешить последовательное программирование послав команду разрешения на вывод MOSI/PB5. 3. При посылке трехбайтовой последовательности разрешения про- граммирования, второй байт последовательности ($53) бкдет воз- вращен при посылке третьего байта. В любом случае, должны быть посланы все четыре байта команды. Если число $53 не получено обратно, подайте положительный импульс на SCK и повторите команду разрешения программирования. Если после 32 попыток не будет получено число $53, микросхема неисправна. 4. При подаче команды стирания стирать микросхему (всегда при программировании памяти программ), подождать 10 mS, выдать по- ложительный импульс на RESET и повторить шаг 2. 5. Память программ и память данных программируются по одному бай- ту выдачей адреса и данных в команде записи. Перед записью новых данных в EEPROM ячейки памяти перед записью новых данных автоматически стираются. Чтобы определить время, когда можно записывать следующий байт, используется подтверждение данных. При записи предварительно стертой микросхемы записывать ячейки содержащие $FF не обязательно. При записи в ячейку числа $7F, перед программированием следующего адреса необходимо выждать 4 mS. 6. Любую ячейку памяти можно проверить используя команду чтения, которая выдает содержимое указанной ячейки на последовательный вывод MISO/PB6. 7. По окончанию программирования вывод RESET может быть установ- лен в '1' для возобновления нормальной работы схемы. 6. Последовательность выключения питания (если необходимо) Установить XTAL1 в '0' (если не исспользуется кварцевый резо- натор) Установить RESET в '1'. Отключить питание Таблица 25. Команды последовательного программирования для AT90S2313 ┌───────────┬───────────────────────────────────────┬────────────────┐ │Команда │ Формат команды │Действие │ │ ├─────────┬─────────┬─────────┬─────────┤ │ │ │Байт 1 │Байт 2 │Байт 3 │Байт 4 │ │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────────────┤ │Разрешение │1010 1100│0101 0011│xxxx xxxx│xxxx xxxx│Разрешен.послед.│ │программир.│ │ │ │ │программирования│ │ │ │ │ │ │после установки │ │ │ │ │ │ │RESET в '0' │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────────────┤ │Стирание │1010 1100│100x xxxx│xxxx xxxx│xxxx xxxx│Стирание памяти │ │микросх. │ │ │ │ │прогр. и данных │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────────────┤ │Чтение па- │0010 H000│0000 00aa│bbbb bbbb│oooo oooo│Читать старший │ │мяти прогр.│ │ │ │ │или младший байт│ │ │ │ │ │ │o по адресу ab │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────────────┤ │Запись па- │0100 H000│0000 00aa│bbbb bbbb│iiii iiii│Запись старш. │ │мяти прогр.│ │ │ │ │или младш. байта│ │ │ │ │ │ │i в память прогр│ │ │ │ │ │ │по адресу ab │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────────────┤ │Чтение па- │1010 0000│0000 0000│xbbb bbbb│oooo oooo│Читать данные o │ │мяти данных│ │ │ │ │по адресу b │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────────────┤ │Запись па- │1100 0000│0000 0000│xbbb bbbb│iiii iiii│Запись данных i │ │мяти данных│ │ │ │ │по адресу b │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────────────┤ │Запись би- │1010 1100│111x x21x│xxxx xxxx│xxxx xxxx│Запись битов бло│ │тов блокир.│ │ │ │ │кировки. Устано-│ │ │ │ │ │ │вить 1,2=0 для │ │ │ │ │ │ │блокировки │ │ │ │ │ │ │памяти │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────────────┤ │Читать код │0011 0000│xxxx xxxx│xxxx xxbb│oooo oooo│Читать код уст- │ │устройства │ │ │ │ │ройства o с ад- │ │ │ │ │ │ │реса b │ └───────────┴─────────┴─────────┴─────────┴─────────┴────────────────┘ a - старшие биты адреса; b - младшие биты адреса; o - выход данных H = '0'-младший байт, '1'-старший байт; i - вход данных; x - не использ-ся; 1 - 1-й бит блокировки; 2 - 2-й бит блокировки При записи последовательных данных в AT90S2313 данные читаются по нарастающему фронту сигнала CLK. При чтении данных из AT90S2313 данные читаются по спадающему фронту сигнала CLK. Максимально допустимые параметры ┌────────────────────────────────────────────────────────────────────┐ │Рабочая температура ................................. -55°С - +125°С│ │Температура хранения ................................ -65°С - +150°С│ │Напряжение на любом выводе кроме RESET .............. -1.0V - +7.0V │ │Максимальное рабочее напряжение ..................... 6.6V │ │Постоянный ток через вывод порта .................... 40.0 mA │ │Постоянный ток между VCC и GND .......................140.0 mA │ └────────────────────────────────────────────────────────────────────┘ ПРИМЕЧАНИЕ: выход параметров за пределы указанные в таблице может привести к нарушению работоспособности микросхемы. Это предельные зна- чения параметров, рабочие параметры микросхемы приведены ниже. Удержа- ние предельных значений на выводах м/сх в течение длительного времени может привести к потере работоспособности м/сх. ХАРАКТЕРИСТИКИ ПО ПОСТОЯННОМУ ТОКУ Ta = -40...+85°C, Vcc=2.7...6.0V (если не указано иначе) Мин./Тип./Макс. Входное напряжение '0' - -0.5/_/0.2Vcc-0.1 V Входное напряжение '1'(кроме XTAL1 и RESET) - 0.2Vcc+0.9/_/Vcc+0.5 V на XTAL1 и RESET - 0.7Vcc/_/Vcc+0.5 V Выходное напряжение '0' (Порты B и D) Il=20mA, Vcc=5V - _/_/0.5 V Il=10mA, Vcc=2.7V - _/_/0.5 V Выходное напряжение '1' (Порты B и D) I0h=10mA, Vcc=5V - 4.5/_/_ V I0h=5mA, Vcc=2.7V - 4.5/_/_ V Выходной ток (Порты B и D) Vcc=5V - _/_/10 mA Vcc=2.7V - _/_/5 mA Поглощаемый ток (Порты B и D) Vcc=5V - _/_/20 mA Vcc=2.7V - _/_/10 mA Подтягивающий резистор сброса - 100/_/500 кОм Подтягивающий резистор вывода порта 35/_/120 кОм Потребляемый ток: Активный режим, 3V, 4MHz - _/2.5/_ mA холостой ход (idle mode), 3V, 4MHz - _/800/_ uA пониженное потребление WDT включен, 3V - _/50/_ uA WDT выключен, 3V - _/_/1 uA Напряжение смещения аналогового компаратора Vcc=5V - _/_/20 mV Входной ток утечки аналогового компаратора - _/10/_ nA Время срабатывания аналогового компаратора Vcc=2.7V - _/750/_ nS Vcc=4.0V - _/500/_ nS ПРИМЕЧАНИЯ: 1. В рабочем состоянии ток через выводы должен ограничиваться следующими условиями: - Максимальный ток через вывод - 20 mA - Максимальный ток через все выводы - 80mA 2. Минимальное напряжение для режима пониженного потребления - 2V ПАРАМЕТРЫ ВНЕШНЕГО ТАКТОВОГО СИГНАЛА ┌────────────────────┬─────────────────┬────────────────┬───┐ │Параметр │ Vcc=2.7...6.0 V │ Vcc=4.0...6.0 V│Ед.│ │ ├───────┬─────────┼───────┬────────┼───┤ │ │ min │ max │ min │ max │ │ ├────────────────────┼───────┼─────────┼───────┼────────┼───┤ │Частота │ 0 │ 10 │ 0 │ 10 │MHz│ ├────────────────────┼───────┼─────────┼───────┼────────┼───┤ │Период │ 100 │ │ 100 │ │nS │ ├────────────────────┼───────┼─────────┼───────┼────────┼───┤ │Длительность '1' │ 0 │ │ 0 │ │nS │ ├────────────────────┼───────┼─────────┼───────┼────────┼───┤ │Длительность '0' │ 0 │ │ 0 │ │nS │ ├────────────────────┼───────┼─────────┼───────┼────────┼───┤ │Длительность фронта │ │ 1.6 │ │ 0.5 │uS │ └────────────────────┴───────┴─────────┴───────┴────────┴───┘ ИНФОРМАЦИЯ ДЛЯ ЗАКАЗА ┌───────┬────────────────┬──────────────┬──────┬───────────────────┐ │Частота│ Напряж. питания│Маркировка │Корпус│Диапазон температур│ ├───────┼────────────────┼──────────────┼──────┼───────────────────┤ │4 MHz │ 2.7...6.0 V │AT90S2313-4PC │20P3 │ Коммерческий │ │ │ │AT90S2313-4SC │20S │ (0°C ... 70°C) │ │ │ ├──────────────┼──────┼───────────────────┤ │ │ │AT90S2313-4PI │20P3 │ Промышленный │ │ │ │AT90S2313-4SI │20S │ (-40°C ... 85°C) │ ├───────┼────────────────┼──────────────┼──────┼───────────────────┤ │10 MHz │ 4.0...6.0 V │AT90S2313-10PC│20P3 │ Коммерческий │ │ │ │AT90S2313-10SC│20S │ (0°C ... 70°C) │ │ │ ├──────────────┼──────┼───────────────────┤ │ │ │AT90S2313-10PI│20P3 │ Промышленный │ │ │ │AT90S2313-10SI│20S │ (-40°C ... 85°C) │ └───────┴────────────────┴──────────────┴──────┴───────────────────┘ Корпус 20P3 - PDIP 20S - SOIC СПИСОК РЕГИСТРОВ ┌───────┬─────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ │Address│Name │Bit 7 │Bit 6 │Bit 5 │Bit 4 │Bit 3 │Bit 2 │Bit 1 │Bit 0 │ │ │ │ │ │ │ │ │ │ │ │ │$3F $5F│SREG │ I │ T │ H │ S │ V │ N │ Z │ C │ │$3E $5E│ │ З А Р Е З Е Р В И Р О В А Н │ │$3D $5D│SPL │ SP7 │ SP6 │ SP5 │ SP4 │ SP3 │ SP2 │ SP1 │ SP0 │ │$3C $5C│ │ З А Р Е З Е Р В И Р О В А Н │ │$3B $5B│GIMSK│ INT1 │INT0 │ - │ - │ - │ - │ - │ - │ │$3A $5A│GIFR │ INTF1│INTF0 │ - │ - │ - │ - │ - │ - │ │$39 $59│TIMSK│ TOIE1│OCIE1A│ - │ - │TICIE1│ - │TOIE0 │ - │ │$38 $58│TIFR │ TOV1 │OCF1A │ - │ - │ ICF1 │ - │TOV0 │ - │ │$37 $57│ │ З А Р Е З Е Р В И Р О В А Н │ │$36 $56│ │ З А Р Е З Е Р В И Р О В А Н │ │$35 $55│MCUCR│ - │ - │ SE │ SM │ ISC11│ ISC10│ISC01 │ISC00 │ │$34 $54│ │ З А Р Е З Е Р В И Р О В А Н │ │$33 $53│TCCR0│ - │ - │ - │ - │ - │CS02 │CS01 │CS00 │ │$32 $52│TCNT0│ Таймер / счетчик (8 бит) │ │$31 $51│ │ З А Р Е З Е Р В И Р О В А Н │ │$30 $50│ │ З А Р Е З Е Р В И Р О В А Н │ │$2F $4FTCCR1A│COM1A1│COM1A0│ - │ - │ - │ - │PWM11 │PWM10 │ │$2E $4ETCCR1B│ICNC1 │ICES1 │ - │ - │CTC1 │CS12 │CS11 │CS10 │ │$2D $4DTCNT1H│ Таймер/счетчик1 старший байт │ │$2С $4СTCNT1Д│ Таймер/счетчик1 младший байт │ │$2B $4BOCR1AH│ Таймер/счетчик1 регистр сравнения старший байт │ │$2A $4AOCR1AL│ Таймер/счетчик1 регистр сравнения младший байт │ │... ...│ │ │ - │ │ │ │ │ │ │ │$25 $45 ICR1H│ Таймер/счетчик1 регистр захвата старший байт │ │$24 $44 ICR1L│ Таймер/счетчик1 регистр захвата младший байт │ │$23 $43│ │ З А Р Е З Е Р В И Р О В А Н │ │$22 $42│ │ З А Р Е З Е Р В И Р О В А Н │ │$21 $41│WDTCR│ - │ - │ - │WDTOE │WDE │WDP2 │WDP1 │WDP0 │ │$20 $40│ │ З А Р Е З Е Р В И Р О В А Н │ │$1F $3F│ │ З А Р Е З Е Р В И Р О В А Н │ │$1E $3E│EEAR │ Регистр адреса энергонезависимой памяти │ │$1D $3D│EEDR │ Регистр данных энергонезависимой памяти │ │$1C $3C│EECR │ - │ - │ - │ - │ - │EEMWE │EEWE │EERE │ │$1B $3B│ │ З А Р Е З Е Р В И Р О В А Н │ │$1A $3A│ │ З А Р Е З Е Р В И Р О В А Н │ │$19 $39│ │ З А Р Е З Е Р В И Р О В А Н │ │$18 $38│PORTB│PORTB7│PORTB6│PORTB5│PORTB4│PORTB3│PORTB2│PORTB1│ PORTB│ │$17 $37│DDRB │DDB7 │DDB6 │DDB5 │DDB4 │DDB3 │DDB2 │DDB1 │DDB0 │ │$16 $36│PINB │PINB7 │PINB6 │PINB5 │PINB4 │PINB3 │PINB2 │PINB1 │PINB0 │ │$15 $35│ │ З А Р Е З Е Р В И Р О В А Н │ │$14 $34│ │ З А Р Е З Е Р В И Р О В А Н │ │$13 $33│ │ З А Р Е З Е Р В И Р О В А Н │ │$12 $32│PORTD│ - │PORTD6│PORTD5│PORTD4│PORTD3│PORTD2│PORTD1│PORTD │ │$11 $31│DDRD │ - │DDD6 │DDD5 │DDD4 │DDD3 │DDD2 │DDD1 │DDD0 │ │$10 $30│PIND │ - │PIND6 │PIND5 │PIND4 │PIND3 │PIND2 │PIND1 │PIND0 │ │$0F $2F│ │ З А Р Е З Е Р В И Р О В А Н │ │... ...│ │ З А Р Е З Е Р В И Р О В А Н │ │$0C $2C│UDR │ Регистр данных UART │ │$0B $2B│USR │ RXC │ TXC │UDRE │ FE │ OR │ - │ - │ - │ │$0A $2A│UCR │RXCIE │TXCIE │UDRIE │RXEN │TXEN │CHR9 │RXB8 │TXB8 │ │$09 $29│UBRR │ Регистр скорости передачи UART │ │$08 $28│ACSR │ACD │ - │ACO │ACI │ACIE │ - │ACIS1 │ACIS0 │ │... ...│ │ З А Р Е З Е Р В И Р О В А Н │ │$00 $20│ │ З А Р Е З Е Р В И Р О В А Н │ └───────┴─────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Набор команд AT90S2313 Мнемоника Операнды Описание Действие Флаги Цкл АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ ADD Rd, Rr Сложить два регистра Rd