Главная Учебники - Разные Лекции (разные) - часть 44
|
Микроконтроллеры AT90S2333 и AT90S4433 фирмы Atmel AT90S2333 и AT90S4433 - экономичные 8-битовые КМОП микроконтроллеры, построенные с использованием расширенной RISC архитектуры AVR. Исполняя по одной команде за период тактовой частоты, AT90S2333 и AT90S4433 имеют производительность около 1MIPS на МГц, что позволяет разработчикам создавать системы оптимальные по скорости и потребляемой мощности. В основе ядра AVR лежит расширенная RISC архитектура, объединяющая развитый набор команд и 32 регистра общего назначения. Все 32 регистра непосредственно подключены к арифметико-логическому устройству (АЛУ), что дает доступ к любым двум регистрам за один машинный цикл. Подобная архитектура обеспечивает десятикратный выигрыш в эффективности кода по сравнению с традиционными CISC микроконтроллерами. AT90S2333/4433 предлагают следующие возможности: 2кБ/4кБ загружаемой флэш памяти; 128/256 байт EEPROM; 128 байт статического ОЗУ, 20 линий ввода/вывода общего назначения; 32 рабочих регистра; настраиваемые таймеры/счетчики с режимом совпадения; внешние и внутренние прерывания; программируемый универсальный последовательный порт; 6-канальный 10-разрядный АЦП; программируемый сторожевой таймер со встроенным генератором; SPI последовательный порт для загрузки программ; два выбираемых программно режима низкого энергопотребления. Холостой режим (Idle Mode) отключает ЦПУ, оставляя в рабочем состоянии регистры, таймеры/счетчики, SPI порт и систему прерываний. Экономичный режим (Power Down Mode) сохраняет содержимое регистров, но отключает генератор, запрещая функционирование всех встроенных устройств до внешнего прерывания или аппаратного сброса. Микросхемы производятся с использованием технологии энергонезависимой памяти высокой плотности фирмы Atmel. Загружаемая флэш память на кристалле может быть перепрограммирована прямо в системе через последовательный интерфейс SPI или доступным программатором энергонезависимой памяти. Объединяя на одном кристалле усовершенствованный 8-битовый RISC процессор с загружаемой флэш памятью, AT90S2333/4433 являются мощными микроконтроллерами, которые позволяют создавать достаточно гибкие и эффективные по стоимости устройства. AT90S2333/4433 поддерживаются полной системой разработки включающей в себя компиляторы Си, макроассемблеры, программные отладчики/симуляторы, внутрисхемные эмуляторы и отладочные комплекты. назначение вывода номер вывода номер вывода PDIP RESET 29 1 PD0/RXD 30 2 PD1/TXD 31 3 PD2/INT0 32 4 PD3/INT1 1 5 PD4/T0 2 6 VCC 4 7 GND 5 8 XTAL1 7 9 XTAL2 8 10 PD5/T1 9 11 PD6/AIN0 10 12 PD7/AIN1 11 13 PB0/ICP 12 14 PB1/OC1 13 15 PB2/SS 14 16 PB3/MOSI 15 17 PB4/MISO 16 18 PB5/SCK 17 19 AVCC 18 20 AREF 20 21 AGND 21 22 PC0/ADC0 23 23 PC1/ADC1 24 24 PC2/ADC2 25 25 PC3/ADC3 26 26 PC4/ADC4 27 27 PC5/ADC5 28 28 ОПИСАНИЕ ВЫВОДОВ GND - земля Port B (PB5..PB0) - Порт B является 6-битовым двунаправленным портом ввода/вывода с внутренними подтягивающими резисторами. Выходные буферы порта B могут поглощать ток до 20мА. Если выводы PB0..PB5 используются как входы и извне устанавливаются в низкое состояние, они являются источниками тока, если включены внутренние подтягивающие резисторы. Кроме того Порт B обслуживает некоторые специальные функции, которые будут описаны ниже. Port С (PС5..PС0) - Порт С является 6-битовым двунаправленным портом ввода/вывода с внутренними подтягивающими резисторами. Выходные буферы порта С могут поглощать ток до 20мА. Если выводы PС0..PС5 используются как входы и извне устанавливаются в низкое состояние, они являются источниками тока, если включены внутренние подтягивающие резисторы. Кроме того Порт С обслуживает аналоговые входы АЦП. Port D (PD5..PD0) - Порт D является 8-битовым двунаправленным портом ввода/вывода с внутренними подтягивающими резисторами. Выходные буферы порта B могут поглощать ток до 20мА. Если выводы PD0..PD7 используются как входы и извне устанавливаются в низкое состояние, они являются источниками тока, если включены внутренние подтягивающие резисторы. Кроме того Порт D обслуживает некоторые специальные функции, которые будут описаны ниже. RESET - Вход сброса. Удержание на входе низкого уровня в течение двух машинных циклов (если работает тактовый генератор), сбрасывает ус- тройство. XTAL1 - Вход инвертирующего усилителя генератора и вход внешнего тактового сигнала. XTAL2 - Выход инвертирующего усилителя генератора. AVCC - Вывод источника питания АЦП. Этот вывод через фильтр низкой частоты должен быть подключен к выводу питания процессора. AREF - Вход опорного напряжения АЦП. Напряжение, подаваемое на этот вывод лежит в пределах 2.7В...AVCC. AGND - Если плата имеет отдельный слой аналоговой земли, к нему подключается этот вывод. В противном случае этот вывод соединяется с GND. КВАРЦЕВЫЙ ГЕНЕРАТОР XTAL1 и XTAL2 являются входом и выходом инвертирующего усилителя, на котором можно собрать генератор тактовых импульсов. Можно использовать как кварцевые, так и керамические резонаторы. Если сигнал генератора необходимо использовать для управления внешними устройствами, сигнал с вывода XTAL2 снимается через одиночный буфер серии HC, при этом емкость конденсатора с вывода на землю уменьшается на 5pF. При подаче внешнего тактового сигнала вывод XTAL2 остается неподключенным, а XTAL1 подключается в выходу внешнего генератора. Обзор архитектуры процессоров.
Регистровый файл быстрого доступа содержит 32 8-разрядных регистра общего назначения, доступ к которым осуществляется за один машинный цикл. Поэтому за один машинный цикл исполняется одна операция АЛУ. Два операнда выбираются из регистрового файла, выполняется операция, результат ее записывается в регистровый файл - все за один машинный цикл. Шесть из 32 регистров можно использовать как три 16-разрядных указателя в адресном пространстве данных, что дает возможность использовать высокоэффективную адресную арифметику (16-разрядные регистры X, Y и Z). Один из трех адресных указателей (регистр Z) можно использовать для адресации таблиц в памяти программ. АЛУ поддерживает арифметические и логические операции c регистрами, с константами и регистрами. Операции над отдельными регистрами также выполняются в АЛУ. Кроме регистровых операций, для работы с регистровым файлом могут использоваться доступные режимы адресации, поскольку регистровый файл занимает адреса 00h-1Fh в области данных, обращаться к ним можно как к ячейкам памяти. Пространство ввода/вывода состоит из 64 адресов для периферийных функций процессора, таких как управляющие регистры , таймеры/счетчики и другие. Доступ к пространству ввода/вывода может осуществляться непосредственно, как к ячейкам памяти расположенным после регистрового файла (20h- 5Fh). Процессоры AVR построены по гарвардской архитектуре с раздельными областями памяти программ и данных. Доступ к памяти программ осуществляется при помощи одноуровнего буфера. Во время выполнения команды, следующая выбирается из памяти программ. Подобная концепция дает возможность выполнять по одной команде за каждый машинный цикл. Память программ - это внутрисистемная загружаемая флэш-память. При помощи команд относительных переходов и вызова подпрограмм осуществляется доступ ко всему адресному пространству. Большая часть команд AVR имеет размер 16-разрядов, одно слово. Каждый адрес в памяти программ содержит одну 16- или 32-разрядную команду. При обработке прерываний и вызове подпрограмм адрес возврата запоминается в стеке. Стек размещается в памяти данных общего назначения, соответственно размер стека ограничен только размером доступной памяти данных и ее использованием в программе. Все программы пользователя должны инициализировать указатель стека (SP) в программе выполняемой после сброса (до того как вызываются подпрограммы и разрешаются прерывания). 8-разрядный указатель стека доступен для чтения/записи в области ввода/вывода. Доступ к статическому ОЗУ, регистровому файлу и регистрам ввода/вывода осуществляется при помощи пяти доступных режимов адресации поддерживаемых архитектурой AVR. Все пространство памяти AVR является линейным и непрерывным. Гибкий модуль прерываний имеет собственный управляющий регистр в пространстве ввода/вывода, и флаг глобального разрешения прерываний в регистре состояния. Каждому прерыванию назначен свой вектор в начальной области памяти программ. Различные прерывания имеют приоритет в соответствии с расположением их векторов. По младшим адресам расположены векторы с большим приоритетом. Файл регистров общего назначения Все команды оперирующие регистрами прямо адресуются к любому из регистров за один машинный цикл. Единственное исключение - пять команд оперирующих с константами SBCI, SUBI, CPI, ANDI, ORI и команда LDI, загружающая регистр константой. Эти команды работают только со второй половиной регистрового файла - R16..R31. Команды SBC, SUB, CP, AND и OR, также как и все остальные, применимы ко всему регистровому файлу. Каждому регистру присвоен адрес в пространстве данных, они отображаются на первые 32 ячейки ОЗУ. Хотя регистровый файл физически размещен вне ОЗУ, подобная организация памяти дает гибкий доступ к регистрам. Регистры X, Y и Z могут использоваться для индексации любого регистра. Кроме обычных функций, регистры R26..R31 имеют дополнительные функции, эти регистры можно использовать как адресные указатели в области памяти данных. Эти регистры обозначаются как X,Y,Z и определены следующим образом: Регистр
X
15 0 7 0 7 0 1
Bh
(
R
27)
1
Ah
(
R
26)
Регистр
Y
15 0 7 0 7 0 1
Dh
(
R
29)
1
Ch
(
R
28)
Регистр
Z
15 0 7 0 7 0 1Fh (R31)
1
Eh
(
R
30)
При различных режимах адресации эти регистры могут использоваться как фиксированный адрес, для адресации с автоинкрементом или с автодекрементом. АЛУ процессора непосредственно подключено к 32 регистрам общего назначения. За один машинный цикл АЛУ производит операции между регистрами регистрового файла. Команды АЛУ разделены на три основных категории - арифметические, логические и битовые. Загружаемая память программ.
AT90S2333/4433 содержат 2/4 кБ загружаемой флэш памяти для хранения программ. Поскольку все команды занимают одно 16- или 32-разрядное слово, флэш память организована как 1/2 Kx16. Флэш-память выдерживает не менее 1000 циклов перезаписи. Программный счетчик имеет ширину 10/11 бит и позволяет адресоваться к 1024/2048 словам программной флэш-памяти. Подробно загрузка флэш памяти будет рассмотрена дальше. AT90S2333/4433 содержат 128/256 байт электрически стираемой энергонезависимой памяти (EEPROM). EEPROM организована как отдельная область данных, каждый байт которой может быть прочитан и перезаписан. EEPROM выдерживает не менее 100000 циклов записи/стирания. Доступ к энергонезависимой памяти данных рассмотрен ниже и задается регистрами адреса, данных и управления. Дальше будет рассмотрена загрузка данных в EEPROM через SPI интерфейс. На рисунке приведенном ниже показана организация памяти данных в AT90S2333/4433. 224 ячейки памяти включают в себя регистровый файл, память ввода/вывода и статическое ОЗУ данных. Первые 96 адресов используются для регистрового файла и памяти ввода/вывода, следующие 128 - для ОЗУ данных. При обращении к памяти используются пять различных режимов адресации: прямой, непосредственный со смещением, непосредственный, непосредственный с предварительным декрементом и непосредственный с постинкрементом. Регисты R26..R31 регистрового файла используются как указатели для непосредственной адресации. Прямая адресация имеет доступ ко всей памяти данных. Непосредственная адресация со смещением используется для доступа к 63 ячейкам базовый адрес которых задается содержимым регистров Y или Z. Для непосредственной адресации с инкрементом и декрементом адреса используются адресные регистры X, Y и Z. При помощи любого из этих режимов производится доступ ко всем 32 регистрам общего назначения, 64 регистрам ввода/вывода и 128 ячейкам ОЗУ. Время выполнения команд
.
ЦПУ процессора AVR управляется системной частотой генерируемой внешним резонатором. Внутреннее деление частоты генератора не используется. В процессоре организован буфер (pipeline) команд, при выборе команды из памяти программ происходит выполнение предыдущей команды. Подобная концепция позволяет достичь быстродействия 1MIPS на MHz, уникальных показателей стоимости, быстродействия и потребления процессора. Регистровый файл Область адресов данных R0 00h R1 01h : : R30 1E R31 1F Регистры ввода\вывывода 00h 20h 01h 21h : : 3Eh 5Eh 3Fh 5Fh - Встроенное ОЗУ - 61h - : - DEh - DFh Пространство ввода/вывода AT90S2333/4433
Адреса
регистры
название
функции
3Fh(5Fh) SREG Status REGister Регистр Состояния 3Dh(5Dh) SP Stack pointer low Указатель стека 3Bh(5Bh) GIMSK General Interrupt MaSK register Общий регистр маски прерываний 3Ah(5Ah) GIFR General Interrupt Flag Register Общий регистр флагов прерываний 39h(59h) TIMSK Timer/counter Interrupt mask register Регистр маски прерываний от таймера/счетчика 38h(58h) TIFR Timer/counter Interrupt Flag register Регистр флага прерывания таймера/счетчика 35h(55h) MCUCR MCU general Control Register общий регистр управления микроконтроллером 34h(54h) MCUSR MCU Status Register рег.состояния микроконтрол. 33h(53h) TCCR0 Timer/Counter 0 Control Register Регистр управления таймером счетчиком 0 32h(52h) TCNT0 Timer/Counter 0 (8-бит) Таймер/счетчик 0 (8 бит) 2Fh(4Fh) TCCR1A Timer/Counter 1 Control Register A Рег. A управления таймером счетчиком 1 2Eh(4Eh) TCCR1B Timer/Counter 1 Control Register B Рег. B управления таймером счетчиком 1 2Dh(4Dh) TCNT1H Timer/Counter 1 High byte Таймер/счетчик 1 старший байт 2Ch(4Ch) TCNT1L Timer/Counter 1 Low byte Таймер/счетчик 1 младший байт 2Bh(4Bh) OCR1H Output Compare Register 1 high byte Выход регистра совпаден. 1 старший байт 2Ah(4Ah) OCR1L Output Compare Register 1 low byte Выход регистра совпаден. 1 младший байт 27h(47h) ICR1H T/C 1 Input Cupture Register High Byte Регистр захвата Т\С 1 старший байт 26h(46h) ICR1L T/C 1 Input Cupture Register Low Byte Регистр захвата Т\С 1 младший байт 21h(41h) WDTCR Watchdog Timer Control Register Регистр управления сторожевым таймером 1Eh(3Eh) EEAR EEPROM Address Register Регистр адреса энергонезависимой памяти 1Dh(3Dh) EEDR EEPROM Data Register Регистр данных энергонезависимой памяти 1Ch(3Ch) EECR EEPROM Control Register Регистр управления энергонезависимой памяти 18h(38h) PORTB Data Register, Port B Регистр данных порта B 17h(37h) DDRB Data Direction Register Port B Регистр направления данных порта B 16h(36h) PINB Input pins, Port B Выводы порта B 15h(35h) PORTС Data Register, Port С Регистр данных порта С 14h(34h) DDRС Data Direction Register Port С Регистр направления данных порта С 13h(33h) PINС Input pins, Port С Выводы порта С 12h(32h) PORTD Data Register, Port D Регистр данных порта D 11h(31h) DDRD Data Direction Register Port D Регистр направления данных порта D 10h(30h) PIND Input pins, Port D Выводы порта D 0Fh(2Fh) SPDR SPI I/O Data Register Регистр данных порта SPI 0Eh(2Eh) SPSR SPI Status Register Регистр состоян. порта SPI 0Dh(2Dh) SPCR SPI Control Register Регистр управл.порта SPI 0Ch(2Ch) UDR UART Data Register Регистр данных последовательного порта 0Bh(2Bh) USR UART Status Register Регистр состояния последовательного порта 0Ah(2Ah) UCR UART Control Register Регистр управления последовательного порта 09h(29h) UBRR UART Baud Rate Register Регистр скорости последовательного порта 08h(28h) ACSR Analog Comparator Control and Status Register Регистр управления и состояния аналогового компарат. 07h(27h) ADMUX ADC multiplexer Select register Регистр коммутатора АЦП 06h(26h) ADCSR ADC Control and Status Register Регистр управления и состояния АЦП 05h(25h) ADCH ADC data register High Рег данных АЦП (старш.) 04h(24h) ADCL ADC data register Low Рег данных АЦП (младш.) 03h(23h) UBRRHI UART Baud Rate Register HIgh Регистр скорости последовательного порта (старш.) Примечание: зарезервированные и неиспользуемые ячейки не показаны Все устройства ввода/вывода и периферийные устройства процессора располагаются в пространстве ввода/вывода. Различные ячейки этого пространства доступны через команды IN и OUT, пересылающие данные между одним из 32-х регистров общего назначения и пространством ввода/вывода. К регистрам 00h..1Fh можно осуществлять побитовый доступ командами SBI и CBI. Значение отдельного бита этих регистров можно проверить командами SBIC и SBIS. Дополнительную информацию по этому вопросу можно найти в описании системы команд. При использовании специальных команд IN, OUT, SBIS и SBIC, должны использоваться адреса $00..$3F. При доступе к регистру ввода/вывода как к ячейке ОЗУ, к его адресу необходимо добавить $20. В приведенной выше таблице адреса регистров в памяти данных приведены в скобках. Для совместимости с другими устройствами при доступе к зарезервированным битам в них должен записываться ноль, зарезервированные адреса в пространстве ввода/вывода не должны записываться Регистр состояния – SREG 3Fh(5Fh) Регистр состояния расположен по адресу 3Fh (5Fh) пространства ввода/вывода и определен следующим образом: 3Fh(5Fh)
7 6 5 4 3 2 1 0 I
T
H
S
V
N
Z
S
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-разрядный регистр с адресом 3Dh (5Dh) хранит указатель стека процессора. 8-ми разрядов достаточно, для адресации ОЗУ в пределах 60h -DFh. 3Dh(5Dh)
7 6 5 4 3 2 1 0 SP7
SP6
SP5
SP4
SP3
SP2
SP1
SP0
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). ***Стек процессора работает с предварительным инкрементом и постдекрементом Сброс и обработка прерываний.
В процессоре предусмотрены 13 источников прерываний. Эти прерывания и сброс имеют различные векторы в области памяти программ. Каждому из прерываний присвоен отдельный бит разрешающий данное прерывание при установке бита в 1, если бит I регистра состояния разрешает общее обслуживание прерываний. Самые младшие адреса памяти программ определены как векторы сброса и прерываний. Полный список векторов прерываний приведен в таблице Этот список определяет и приоритет различных прерываний. Меньшие адреса соответствуют более высокому уровню приоритета. Самый высокий уровень у сброса, следующий приоритет у INT0 - внешнего запроса прерывания 0 и т.д. Ниже приведена типичная программа обработки сброса и векторов прерываний: 000
h
rjmp RESET Обработка сброса 001h
rjmp EXT_INT0 Обработка
IRQ
0
002h
rjmp EXT_INT1 Обработка
IRQ
1
003h
rjmp TIM1_CAPT Обработка захвата таймера 1
004h
rjmp TIM1_COMP Обработка совпадения таймера 1
005h
rjmp TIM1_OVF Обработка переполнения таймера 1
006h
rjmp TIM0_OVF Обработка переполнения таймера 0
007h
rjmp SPI_STC Обработка передачи по SPI
008h
rjmp UART_RXC Обработка приема байта
009h
rjmp UART_DRE Обработка освобождения UDR
00Ah
rjmp UART_TXC Обработка передачи байта
00Bh
rjmp ADC Обработка преобразования АЦП
00Ch
rjmp EE_RDY Обработка готовности EEPROM
00Dh
rjmp ANA_COMP Обработка аналогов. компаратора
00Eh
Основная программа Начало основной программы
Сброс и векторы прерываний.
Номер вектора Адрес Источник Описание прерывания 1 000h RESET Ножка сброса, сторожевой таймер Brown-Out reset 2 001h INT0 Внешнее прерывание 0 3 002h INT1 Внешнее прерывание 1 4 003h TIMER1 CAPT Захват таймера/счетчика 1 5 004h TIMER1 COMP Совпаден. таймера/счетчика 1 6 005h TIMER1 OVF Переполнение таймера/счетчика 1 7 006h TIMER0 OVF Переполнение таймера/счетчика 0 8 007h SPI, STC Передача по SPI завершена 9 008h UART RX Последоват.порт прием закончен 10 009h UART UDRE Посл.порт регистр данных пуст 11 00Ah UART TX Посл.порт передача закончена 12 00Bh ADC Преобразование АЦП завершено 13 00Ch RDY EEPROM готово 14 00Dh COMP Аналоговый компаратор ИСТОЧНИКИ СБРОСА AT90S2333/4433 имеют четыре источника сброса. * Сброс по включению питания. Процессор сбрасывается при подаче питания на выводы VCC и GND. * Внешний сброс. Процессор сбрасывается при подаче низкого уровня на вывод RESET на время более двух периодов тактовой частоты. * Сброс от сторожевого таймера. Процессор сбрасывается по окончанию времени отработки сторожевого таймера, если разрешена его работа. * Brown-Out сброс сброс при падении Vcc ниже некоторого значения. Во время сброса все регистры ввода/вывода устанавливаются в начальные значения, программа начинает выполняться с адреса $000, по этому адресу должна быть записана команда RJMP - относительный переход на программу обработки сброса. Если в программе не разрешаются прерывания и векторы прерываний не используются, в первых адресах памяти может быть записана программа. Сброс по включению питания Импульс сброса по включению питания генерируется внутренней схемой. Уровень срабатывания схемы - 2.2В. Сброс производится когда напряжение питания превысит уровень срабатывания. Схема сброса по включению питания не дает процессору запускаться до тех пор, пока напряжение не достигнет безопасного уровня. При достижении безопасного уровня напряжения включается счетчик задержки определяющий длительность сброса. Эта длительность задается битами-перемычками и может устанавливаться в одно из восьми значений приведенных в таблице 4. Таблица 3. Хар актеристики сброса.(Vcc=5.0V)
Тип напряжения Min Typ Max V
power Напряжение срабатывания сброса по включению питания 1.7v 2.2v 2.7v V
reset Напряжение срабатывания сброса по выводу RESET 0.6Vcc V
bodlevel Напряжение срабатывания сброса по Brown-Out BODLEVEL=1 2.6v 2.7v 2.8v Напряжение срабатывания сброса по Brown-Out BODLEVEL=0 3.8v 4.0v 4.2v Таблица
4.
Установка
времени
сброса
CKSEL
[2:0]
Время запуска
000
4mS + 6CK
001
6CK
010
64mS + 16K CK
011
4mS + 16K CK
100
16K CK
101
64mS + 1K CK
110
4mS + 1K CK
111
1
K CK
ВНЕШНИЙ СБРОС Внешний сброс обрабатывается по низкому уровню на выводе RESET. Вывод должен удерживаться в низком состоянии по крайней мере два периода тактовой частоты. После достижения напряжения Vrst запускается таймер задержки, через промежуток времени Tout процессор запускается. BROWN-OUT AT90S2333/4433 имеют встроенную схему отслеживания напряжения питания. Работа этой схемы разрешается и запрещается битом-перемычкой BODEN. Если бит BODEN запрограммирован, при уменьшении напряжения ниже заданного уровня срабатывает схема сброса. Время сброса задается как и для сброса по включению питания (табл.4). Уровень сброса устанавливается битом BODLEVEL на 2.7В если бит не запрограммирован или на 4В если бит запрограммирован. Уровень срабатывания имеет гистерезис 50мВ. Для того, чтобы произошел сброс падение напряжения до уровня срабатывания должно продержаться не менее 3мкС для уровня срабатывания 4В (7мкС для 2.7В). СБРОС ПО СТОРОЖЕВОМУ ТАЙМЕРУ По истечению периода работы сторожевого таймера генерируется импульс длительностью 1 период тактовой частоты. По заднему фронту этого импульса запускается таймер, отсчитывающий время сброса РЕГИСТР СОСТОЯНИЯ ПРОЦЕССОРА - MCUSR Этот регистр содержит информацию о том, что явилось причиной сброса процессора. MCUSR 34h(54h)
7 6 5 4 3 2 1 0 -
-
-
-
WDRF
BORF
EXTRF
PORF
R
R
R
R
R
R
R\W
R
\
W
Начальное значение 0
0
0
0
0
0
0
0
Биты 7..4 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и всегда читаются как 0. Бит 3 - WDRF - этот бит устанавливается при сбросе от сторожевого таймера. Бит обнуляется при сбросе по включению питания или записью нуля. Бит 2 - BORF - этот бит устанавливается при сбросе от схемы слежения за напряжением питания. Бит обнуляется при сбросе по включению питания или записью нуля. Бит 1 - EXTRF - этот бит устанавливается при внешнем сбросе Бит обнуляется при сбросе по включению питания или записью нуля. Бит 0 - PORF - этот бит устанавливается при сбросе по включению питания, бит очищается записью нуля. Чтобы определить источник сброса пользователь должен в самом начале программы прочитать регистр MCUSR и обнулить все биты. Источник сброса определяется проверкой соответствующих флагов сброса. ОБРАБОТКА ПРЕРЫВАНИЙ AT90S2333/4433 имеют два регистра маскирования прерываний GIMSK - общий регистр маски прерываний и TIMSK - регистр маски прерываний от таймеров/счетчиков. Когда возникает прерывание бит глобального разрешения прерываний I сбрасывается (ноль) и все прерывания запрещаются. Программа пользователя может установить этот бит для разрешения прерываний. Флаг разрешения прерываний I устанавливается в 1 при выполнении команды выхода из прерывания - RETI. Когда программный счетчик устанавливается на текущий вектор прерывания для его обработки, соответствующий флаг, сгенерированный прерыванием, аппаратно сбрасывается. Некоторые флаги прерывания могут быть сброшены записью логической единицы в бит соответствующий флагу. ОБЩИЙ РЕГИСТР МАСКИ ПРЕРЫВАНИЙ GIMSK 3Bh(5Bh)
7 6 5 4 3 2 1 0 INT
1 INT0
-
-
-
-
-
-
R\W
R\W
R
R
R
R
R
R
Начальное значение 0
0
0
0
0
0
0
0
Бит 7 - INT1: Запрос внешнего прерывания 1 разрешен. Когда этот бит установлен, а также установлен бит I регистра состояния, разрешается прерывание от внешнего вывода. Биты управления запуском прерывания (ISC11 и ISC10) в регистре управления микроконтроллером (MCUCR) определяют по какому событию отрабатывается прерывание - по спадающему или нарастающему фронту или же по уровню. Активность на выводе приводит к возникновению прерываний даже если вывод сконфигурирован как выход. При возникновении прерывания выполняется программа, начинающаяся с адреса 002h в памяти программ. (см. также "Внешние прерывания"). Бит 6 - INT0: Запрос внешнего прерывания 0 разрешен. Когда этот бит установлен, а также установлен бит I регистра состояния, разрешается прерывание от внешнего вывода. Биты управления запуском прерывания (ISC01 и ISC00) в регистре управления микроконтроллером (MCUCR) определяют по какому событию отрабатывается прерывание - по спадающему или нарастающему фронту или же по уровню. Активность на выводе приводит к возникновению прерываний даже если вывод сконфигурирован как выход. При возникновении прерывания выполняется программа, начинающаяся с адреса $001 в памяти программ. (см. также "Внешние прерывания"). Биты 5..0 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и всегда читаются как 0. ОБЩИЙ РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ GIFR
3Bh(5Bh)
7 6 5 4 3 2 1 0 INTF1
INTF0
-
-
-
-
-
-
R\W
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, происходит переход на вектор прерывания по адресу 002h. Флаг очищается после выполнения обработчика прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу. Бит 6 - INTF0: Флаг внешнего прерывания 0: При возникновении на выводе INT0 события вызывающего прерывание, INTF0 устанавливается в "1". Если установлены бит I регистра SREG и бит INT0 в GIMSK, происходит переход на вектор прерывания по адресу 001h. Флаг очищается после выполнения обработчика прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу. Биты 5..0 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и всегда читаются как 0. РЕГИСТР МАСКИ ПРЕРЫВАНИЯ ОТ ТАЙМЕРА/СЧЕТЧИКА – TIMSK
TIMSK
39h(59h)
7 6 5 4 3 2 1 0 TOIE
1 OCIE
1A
-
-
TICIE
1 -
TOIE0
-
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 работает в режиме ШИМ, флаг переполнения устанавливается при изменении направления счета, при значении 0000h. Бит 6 - OCIE1A: Разрешение прерывания по совпадению таймера/счетчика 1: Если установлены бит OCIE1A и бит разрешения прерывания в регистре состояния, разрешены прерывания по совпадению таймера/счетчика 1. Прерывание (вектор 004h) выполняется при равенстве таймера/счетчика 1 и регистра совпадения. Во флаговом регистре TIFR устанавливается ("1") флаг совпадения. Биты 5,4 - зарезервированы; в AT90S2333/4433 эти биты зарезервированы и всегда читаются как 0. Бит 3 - TICIE1: Разрешение прерывания по входу захвата: Если установлены бит TICIE1 и бит разрешения прерывания в регистре состояния, разрешены прерывания по входу захвата. Соответствующее прерывание (вектор 003h) выполняется по сигналу захвата на выводе 11 (PD6/ICP). Во флаговом регистре TIFR устанавливается ("1") флаг захвата. Бит 2 - зарезервирован; в AT90S2333/4433 этот бит зарезервирован и всегда читается как 0. Бит 1 - TOIE0: Разрешение прерывания по переполнению таймера/счетчика 0. Если этот бит установлен в 1, и бит I в регистре состояния установлен в 1, разрешены прерывания по переполнению таймера/счетчика 0. При возникновении переполнения выполняется соответствующий вектор прерывания (006h). Флаг переполнения (TOV0) во флаговом регистре прерываний (TIFR) таймеров/счетчиков устанавливается в 1. Бит 0 - зарезервирован; в AT90S2333/4433 этот бит зарезервирован и всегда читается как 0. РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ ОТ ТАЙМЕРОВ/СЧЕТЧИКОВ – TIFR TIFR
38h(58h)
7 6 5 4 3 2 1 0 TOV
1 OCF
1 -
-
ICF
1 -
TOV0
-
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 изменяет направление счета при значении 0000h. Бит 6 - OCF1A: Флаг выхода совпадения 1А: флаг устанавливается в "1" если происходит совпадение значения таймера/счетчика 1 и данных в регистре OCR1A. Флаг очищается аппаратно при выполнении соответствующего вектора прерывания. Кроме того, флаг можно сбросить записав в него логическую единицу. Если установлены бит I в SREG и бит OCIE1A в TIMSK, при установке бита OCF1A выполняется прерывание. Биты 5,4 - зарезервированы; в AT90S2333/4433 эти биты зарезервированы и всегда читаются как 0. Бит 3 - ICF1: флаг входа захвата 1: бит устанавливается ("1") при возникновении события захвата по входу, он индицирует, что значение таймера/счетчика 1 скопировано в регистр захвата по входу ICR1. ICF1 очищается при выполнении соответствующего вектора обработки прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу. Бит 2 - зарезервирован; в AT90S2333/4433 этот бит зарезервирован и всегда читается как 0. Бит 1 - TOV0: Флаг переполнения таймера счетчика 1: Флаг TOV0 устанавливается ("1") при переполнении таймера/счетчика 0. Флаг сбрасывается аппаратно при выполнении соответствующего вектора прерывания. Кроме того, флаг можно очистить записав в него логическую единицу. Если установлены бит I в SREG и бит TOIE0 в TIMSK, при установке бита TOV0 выполняется прерывание по переполнению таймера/счетчика 0. Бит 0 - зарезервирован; в AT90S2333/4433 этот бит зарезервирован и всегда читается как 0. ВНЕШНИЕ ПРЕРЫВАНИЯ Внешние прерывания управляются выводами INT0 и INT1. Заметим, что прерывания обрабатываются даже когда выводы сконфигурированы как выходы. Это позволяет генерировать программные прерывания. Внешние прерывания могут возникать по спадающему или нарастающему фронту, а также по низкому уровню. Это устанавливается в регистре управления процессором MCUCR. Если внешние прерывания разрешены и сконфигурированы на отработку по уровню, прерывание будет вырабатываться до тех пор, пока вывод удерживается в низком состоянии. Управление работой внешних прерываний рассмотрено при описании регистра управления процессором MCUCR. ВРЕМЯ РЕАКЦИИ НА ПРЕРЫВАНИЕ Минимальное время реакции на любое из предусмотренных в процессоре прерываний - 4 периода тактовой частоты. После четырех циклов вызывается программный вектор обрабатывающий данное прерывание. За эти 4 цикла программный счетчик записывается в стек, указатель стека уменьшается на 2. Программный вектор представляет собой относительный переход на подпрограмму обслуживания прерывания и этот переход занимает 2 периода тактовой частоты. Если прерывание происходит во время выполнения команды длящейся несколько циклов, перед вызовом прерывания завершается выполнение этой команды. Выход из программы обслуживания прерывания занимает 4 периода тактовой частоты. За эти 4 периода из стека восстанавливается программный счетчик. После выхода из прерывания процессор всегда выполняет еще одну команду прежде чем обслужить любое отложенное прерывание. Заметим, что регистр состояния SREG аппаратно не обрабатывается процессором, как при вызове подпрограмм, так и при обслуживании прерываний. Если программа требует сохранения SREG, оно должно производиться программой пользователя. Для прерываний включаемых статическими событиями (напр. совпадение значения счетчика/таймера 1 с регистром совпадения) флаг прерывания взводится при возникновении события. Если флаг прерывания очищен и присутствует условие возникновения прерывания, флаг не будет установлен, пока не произойдет следующее событие. РЕГИСТР УПРАВЛЕНИЯ МИКРОКОНТРОЛЛЕРОМ – MCUCR
Этот регистр содержит биты общего управления микроконтроллером. MCUCR
35h(55h)
7 6 5 4 3 2 1 0 -
-
SE
SM
ISC
11 ISC
10 ISC
01 ISC
00 R
R
R\W
R\W
R\W
R\W
R\W
R
\
W
Начальное значение 0
0
0
0
0
0
0
0
Биты 7,6 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и всегда читаются как 0. Бит 5 - SE: Разрешение режима Sleep: Этот бит должен быть установлен в 1, чтобы при выполнении команды SLEEP процессор переходил в режим пониженного энергопотребления. Для устранения нежелательного перехода в режим пониженного энергопотребления рекомендуется устанавливать этот бит непосредственно перед выполнением команды SLEEP. Бит 4 - SM: Режим Sleep: Этот бит выбирает один из двух режимов пониженного энергопотребления. Если бит сброшен (0), в качестве режима Sleep выбирается холостой режим (Idle mode). Если бит установлен, - выбирается экономичный режим (Power down). Особенности каждого из режимов будут рассмотрены ниже. Биты 3,2 - ISC11, ISC10: биты управления срабатыванием прерывания 1: Внешнее прерывание активируется выводом INT1 если установлен флаг I регистра состояния SREG и установлена соответствующая маска в регистре GIMSK. Срабатывание по уровню и фронтам задается следующим образом: Биты 1,0 - ISC01, ISC00: биты управления срабатыванием прерывания 0: Внешнее прерывание активируется выводом INT0 если установлен флаг I регистра состояния SREG и установлена соответствующая маска в регистре GIMSK. В таблице 6 приведена установка битов для задания срабатывания по уровню и фронтам. Таблица 5. Управление срабатыванием прерывания 1.
ISC11
ISC10
Описание
0
0
Запрос на прерывание генерируется по низкому уровню напряжения на входе INT1 0
1
Запрос по изменению уровня на входе INT1 1
0
Запрос на прерывание по спадающему фронту на входе INT1 1
1
Запрос на прерывание по нарастающ. фронту на входе INT1 ПРИМЕЧАНИЕ: При изменении битов ISC11/ISC10 прерывание INT1 должно быть запрещено очисткой соответствующего бита в регистре GIMSK. Иначе прерывание может возникнуть во время изменения битов. Таблица 6. Управление срабатыванием прерывания 0.
ISC01
ISC0
Описание
0
0
Запрос на прерывание генерируется по низкому уровню напряжения на входе INT0 0
1
Запрос по изменению уровня на входе INT0 1
0
Запрос на прерывание по спадающему фронту на входе INT0 1
1
Запрос на прерывание по нарастающ. фронту на входе INT0 ПРИМЕЧАНИЕ: При изменении битов ISC01 и ISC00, прерывания по входу INT0 должны быть запрещены сбросом бита разрешения прерывания в регистре GIMSK. Иначе прерывание может произойти при изменении значения битов. РЕЖИМЫ ПОНИЖЕННОГО ЭНЕРГОПОТРЕБЛЕНИЯ
. Для запуска режима пониженного энергопотребления должен быть установлен (1) бит SE регистра MCUCR, и должна быть исполнена команда SLEEP. Если во время нахождения в режиме пониженного потребления происходит одно из разрешенных прерываний, процессор начинает работать, исполняет подпрограмму обработки прерывания и продолжает выполнение программы с команды следующей за SLEEP. Содержимое регистрового файла и памяти ввода/вывода не изменяется. Если в режиме пониженного потребления происходит сброс, процессор начинает выполнение программы с вектора сброса. Если для вывода из экономичного режима используется прерывание по уровню, низкий уровень должен удерживаться дольше времени отработки сброса. Иначе процессор не начнет работу. Режим холостого хода. Когда бит SM сброшен (0), команда SLEEP переводит процессор в режим холостого хода (Idle mode). ЦПУ останавливается, но Таймеры/Счетчики, сторожевой таймер и система прерываний продолжают работать. Это позволяет процессору возобновлять работу как от внешних прерываний, так и по переполнению таймеров/счетчиков или по сбросу от сторожевого таймера. Если прерывание от аналогового компаратора не требуется, аналоговый компаратор может быть отключен установкой бита ACD регистра ACSR. Это уменьшает потребляемую мощность в режиме холостого хода. При выходе из режима холостого хода процессор запускается без задержки. Экономичный режим. Когда бит SM установлен (1), команда SLEEP переводит процессор в экономичный режим (Power Down Mode). В этом режиме останавливается внешний генератор тактовых импульсов. Пользователь может разрешить работу сторожевого таймера в этом режиме. Если сторожевой таймер разрешен, процессор выходит из экономичного режима после отработки периода сторожевого таймера. Если сторожевой таймер запрещен, выход из экономичного режима может произойти только по внешнему сбросу, brown-out сбросу или внешнему прерыванию по уровню. Если для вывода из экономичного режима используется прерывание по уровню, низкий уровень должен удерживаться на время достаточное для запуска процессора. Это увеличивает устойчивость процессора к помехам. Изменение уровня дважды проверятся с периодом генератора сторожевого таймера, если обе выборки сигнала имеют необходимый уровень, процессор включается. Номинальный период сторожевого таймера 1uS при 5В питания и температуре 25 градусов Цельсия. При выходе из экономичного режима, от времени появления условия выхода до включения процессора проходит некоторое время необходимое для запуска кварцевого генератора. Задержка включения определяется теми же битами CKSEL, что и время сброса. Длительность задержки на включение приведена в таблице 7. Если условие включения исчезнет до того, как процессор запустится, например, низкий уровень на входе прерывания продержится недостаточно долго, процессор не выйдет из экономичного режима. Таблица
7.
Установка
задержки
включения
CKSEL [2:0]
Время
запуска
000
6CK
001
6CK
010
16K CK
011
16K CK
100
16K CK
101
1K CK
110
1K CK
111
1K CK
ТАЙМЕРЫ/СЧЕТЧИКИ
В AT90S2333/4433 предусмотрены два таймера/счетчика общего назначения. 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
TCCR
0
33h(53h)
7 6 5 4 3 2 1 0 -
-
-
-
-
CS
02 CS
01 CS00
R
R
R
R
R
R\W
R\W
R
\
W
Начальное значение 0
0
0
0
0
0
0
0
Биты 7..3 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и всегда читаются как 0. Биты 2,1,0 - CS02, CS01, CS00 - выбор тактовой частоты. Эти биты задают коэффициент деления предварительного делителя. Таблица 8. Выбор коэффициента предварительного деления
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.
TCNT0
32h(52h)
7 6 5 4 3 2 1 0 MSB
LSB
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-разрядный таймер/счетчик 1 может получать импульсы тактовой частоты - 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
2Fh(4Fh)
7 6 5 4 3 2 1 0 COM
1A
1 COM
1A
0 -
-
-
-
PWM
11 PWM
10 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. Поскольку это альтернативная функция порта, соответствующий бит направления должен устанавливать вывод на выход. Конфигурация управляющих бит показана в таблице 9. В режиме ШИМ эти биты имеют другие функции, которые будут указаны при рассмотрении работы ШИМ. При изменении битов COM1A1 и COM1A0 прерывание по совпадению должно быть запрещено, очисткой соответствующего бита в регистре TIMSK. Иначе, прерывание может произойти во время изменения битов. Биты 5..2 - зарезервированы. В AT90S2313 эти биты зарезервированы и всегда читаются как 0. Биты 1,0 - PWM11, PWM10: Биты установки ШИМ: Эти биты устанавливают режим работы таймера/счетчика 1 в качестве ШИМ (см. табл. 10). Подробнее этот режим будет рассмотрен ниже. Таблица 9. Установка режима совпадения COM1A1
COM1A0
Описание
0
0
Таймер/счетчик 1 отключен от вывода OC1 0
1
Переключение выхода OC1 1
0
Сброс (0) вывода OC1 1
1
Установка (1) вывода OC1 Таблица 10. Установка режима работы ШИМ PWM11
PWM10
Описание
0
0
Работа ШИМ запрещена 0
1
8 разрядный ШИМ 1
0
9 разрядный ШИМ 1
1
10 разрядный ШИМ РЕГИСТР B УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 1 - TCCR1B
2Eh(4Eh)
7 6 5 4 3 2 1 0 ICNC
1 ICES
1 -
-
CTC
1 CS
12 CS
11 CS
10 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 - зарезервированы. В AT90S2333/4433 эти биты зарезервированы и всегда читаются как 0. Бит 3 - CTC1: Очистка таймера счетчика 1 по совпадению: Если бит установлен (1), таймер/счетчик 1 устанавливается в 0000h в такте следующем за событием совпадения. Если бит сброшен, таймер/счетчик 1 продолжает считать, совпадение не отражается на состоянии таймера/счетчика. Поскольку совпадение обнаруживается процессором в цикле следующем за событием совпадения, в следующем после совпадения такте в счетчик запишется число на 1 большее значения регистра совпадения. При коэффициенте деления 1, установке регистра совпадения на величину С и установленном бите CTC1, таймер принимает следующие значения: ...С-1,С,С+1,0,1... при делении тактовой частоты на 8: ...С-1,С-1,С-1,С-1,С-1,С-1,С-1,С-1,С,С,С,С,С,С,С,С, С+1,0,0,0,0,0,0,0,0,1... В режиме ШИМ этот бит не работает. Биты 2,1,0 - CS12, CS11, CS10: выбор тактирования: Эти биты определяют источник счетных импульсов для таймера/счетчика 1. Таблица 11. Выбор источника счетных импульсов 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
Условие Stop запрещает/разрешает функционирование таймера/счетчика. В режимах деления используется частота тактового генератора. При использовании работы от внешнего источника предварительно должен быть установлен соответствующий бит регистра направления данных (0 - включает ножку на ввод). ТАЙМЕР/СЧЕТЧИК 1 - TCNT1H И TCNT1L
TCNT
1
H
2Dh(4Dh)
7 6 5 4 3 2 1 0 MSB
-
-
-
-
-
-
-
R\W
R\W
R\W
R\W
R\W
R\W
R\W
R\
W
Начальное значение 0
0
0
0
0
0
0
0
TCNT1L
2Ch(4Ch)
7 6 5 4 3 2 1 0 LSB
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). Этот вре- менный регистр также используется при доступе к регистрам OCR1 и ICR1. Если доступ к регистру с использованием TEMP производится и в основной программе и в обработчике прерывания, на время доступа к регистру из основной программы прерывания должны быть запрещены. - Запись в таймер счетчик 1: При записи старшего байта в TCNT1H, записываемые данные помещаются в регистр TEMP. Затем, при записи младшего байта, он вместе с данными из TEMP переписывается в таймер/счетчик 1. Таким образом, при записи 16-разрядного значения первым должен записываться байт в TCNT1H. - Чтение таймера/счетчика 1: При чтении младшего байта из TCNT1L, он посылается в процессор, а данные из TCNT1H переписываются в регистр TEMP, то есть одновременно читаются все 16-разрядов. При последующем чтении регистра TCNT1H, данные берутся из регистра TEMP. То есть при чтении 16-разрядного значения счетчика первым должен читаться регистр TCNT1L. Таймер/счетчик 1 организован как суммирующий счетчик (в режиме ШИМ - суммирующий/вычитающий) с возможностью чтения и записи. Если задан источник тактовых импульсов для таймера/счетчика 1, после записи в него нового значения, счет продолжается с следующем за операцией записи периоде тактовой частоты. РЕГИСТР СОВПАДЕНИЯ ТАЙМЕРА/СЧЕТЧИКА 1 - OCR1H И OCR1L
OCR1H
2Bh(4Bh)
7 6 5 4 3 2 1 0 MSB
R\W
R\W
R\W
R\W
R\W
R\W
R\W
R\
W
Начальное значение 0
0
0
0
0
0
0
0
OCR1L
3Dh(5Dh)
7 6 5 4 3 2 1 0 LSB
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-разрядным, при записи нового значения в регистр, для того чтобы оба байта регистра записывались одновременно, используется временный регистр (TEMP). При записи старшего байта, данные помещаются во временный регистр, который переписывается в OCR1AH при записи младшего байта в OCR1AL. Таким образом, для записи в регистр первым должен записываться старший байт. Регистр TEMP используется при доступе к TCNT1 и ICR1, поэтому если временный регистр используется в основной программе и в прерываниях, при доступе к TEMP из основной программы прерывания должны запрещаться. РЕГИСТР ЗАХВАТА ТАЙМЕРА/СЧЕТЧИКА 1 - ICR1H И ICR1L
ICR1H
25h(45h)
7 6 5 4 3 2 1 0 MSB
R\W
R\W
R\W
R\W
R\W
R\W
R\W
R\
W
Начальное значение 0
0
0
0
0
0
0
0
ICR1L
24h(44h)
7 6 5 4 3 2 1 0 LSB
R\W
R\W
R\W
R\W
R\W
R\W
R\W
R\
W
Начальное значение 0
0
0
0
0
0
0
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||