-Внутренняя энергонезависимая память типа EEPROM объемом до 4 Кбайт представляет собой самостоятельную матрицу, обращение к которой осуществляется через специальные регистры ввода-вывода;
Регистры общего назначения.
В микропроцессоре ATmega 128 все 32 регистра общего назначения непосредственно доступны АЛУ. Благодаря этому любой регистр общего назначения может использоваться во всех командах и как операнд источник и как операнд приемник. Такое решение (в сочетании с конвейерной обработкой) позволяет АЛУ выполнять одну операцию за один машинный цикл.
Последние шесть регистров общего назначения могут также объединяться в три 16-разрядных регистра X, Y, и Z, используемых в качестве указателей при косвенной адресации памяти данных.
Каждый регистр имеет свой собственный адрес в памяти данных. Поэтому к ним можно обращаться двумя способами (как к регистрам и как к памяти), несмотря на то, что физически эти регистры не являются ячейками ОЗУ. Такое решение является еще одной отличительной особенностью архитектуры AVR, повышается эффективность работы микроконтроллера и его производительность.
Регистры ввода/вывода:
Все регистры ввода/вывода можно разделить на две группы – служебные регистры и регистры, относящиеся к конкретным периферийным устройствам.
Размещение в памяти регистров ввода/вывода приведено в таблице 3.1. В скобках указываются соответствующие им адреса ячеек ОЗУ.
Название | Адрес | Функция |
UCSR1C | ($9D) | Регистр управления и состояния С USART1 |
UDR1 | ($9C) | Регистр данных USART1 |
UCSR1A | ($9B) | Регистр управления и состояния A USART1 |
UCSR1B | ($9A) | Регистр управления и состояния В USART1 |
UBRR1L | ($99) | Регистр скорости передачи USART1, младший байт |
UBRR1H | ($98) | Регистр скорости передачи USART1, старший байт |
UCSR0C | ($95) | Регистр управления и состояния С USART0 |
UBRR0H | ($90) | Регистр скорости передачи USART0, старший байт |
TCCR3C | ($8C) | Регистр управления С таймера/счетчика ТЗ |
TCCR3A | ($8B) | Регистр управления А таймера/счетчика ТЗ |
TCCR3B | ($8A) | Регистр управления В таймера/счетчика ТЗ |
TCNT3H | ($89) | Счетный регистр таймера/счетчика ТЗ, старший байт |
TCNT3H | ($88) | Счетный регистр таймера/счетчика ТЗ, младший байт |
OCR3AH | ($87) | Регистр совпадения А таймера/счетчика ТЗ, старший байт |
OCR3AL | ($86) | Регистр совпадения А таймера/счетчика ТЗ, младший байт |
OCR3BH | ($85) | Регистр совпадения В таймера/счетчика ТЗ, старший байт |
OCR3BL | ($84) | Регистр совпадения В таймера/счетчика ТЗ, младший байт |
OCR3CH | ($83) | Регистр совпадения С таймера/счетчика ТЗ, старший байт |
OCR3CL | ($82) | Регистр совпадения С таймера/счетчика ТЗ, младший байт |
ICR3H | ($81) | Регистр захвата таймера/счетчика ТЗ, старший байт |
ICR3L | ($80) | Регистр захвата таймера/счетчика ТЗ, младший байт |
ETIMSK | ($7D) | Дополнительный регистр маски прерываний от таймеров/счетчиков |
ETIFR | ($7C) | Дополнительный регистр флагов прерываний от таймеров/счетчиков |
TCCR1C | ($7A) | Регистр управления С таймера/счетчика Т1 |
OCR1CH | ($79) | Регистр совпадения С таймера/счетчика Т1, старший байт |
OCR1CL | ($78) | Регистр совпадения С таймера/счетчика Т1, младший байт |
TWCR | ($74) | Регистр управления TWI |
TWDR | ($73) | Регистр данных TWI |
TWAR | ($72) | Регистр адреса TWI |
TWSR | ($71) | Регистр состояния TWI |
TWBR | ($70) | Регистр скорости передачи TWI |
OSCCAL | ($6F) | Регистр калибровки тактового генератора |
XMCRA | ($6D) | Регистр управления А внешней памятью |
XMCRB | ($6C) | Регистр управления В внешней памятью |
EICRA | ($6A) | Регистр управления А внешними прерываниями |
SPMCR | ($68) | Регистр управления памятью программ |
PORTG | ($65) | Регистр данных порта G |
DDRG | ($64) | Регистр направления данных порта G |
PORTF | ($62) | Регистр данных порта F |
DDRF | ($61) | Регистр направления данных порта F |
SREG | $3F($5F) | Регистр состояния |
SPH | $3E($5E) | Указатель стека, старший байт |
SPL | $3D($5D) | Указатель стека, младший байт |
XDIV | $3C($5C) | Регистр управления делителем тактовой частоты |
RAMPZ | $3B($5B) | Регистр выбора страницы |
EICRB | $3A($5A) | Регистр управления В внешними прерываниями |
EIMSK | $39($59) | Регистр маски внешних прерываний |
EIFR | $38 ($58) | Регистр флагов внешних прерываний |
TIMSK | $37($57) | Регистр маски прерываний от таймеров/счетчиков |
TIFR | $36($56) | Регистр флагов прерываний от таймеров/счетчиков |
MCUCR | $35($55) | Регистр управления микроконтроллером |
MCUCSR | $34($54) | Регистр управления и состояния микроконтроллера |
TCCR0 | $33($53) | Регистр управления таймером/счетчиком Т0 |
TCNT0 | $32($52) | Счетный регистр таймера/счетчика Т0 |
OCR0 | $31($51) | Регистр совпадения таймера/счетчика Т0 |
ASSR | $30($50) | Регистр состояния асинхронного режима |
TCCR1A | $2F($4F) | Регистр управления А таймера/счетчика Т1 |
TCCR1B | $2E($4E) | Регистр управления В таймера/счетчика Т1 |
TCNT1H | $2D($4D) | Счетный регистр таймера/счетчика Т1, старший байт |
TCNT1L | $2C($4C) | Счетный регистр таймера/счетчика Т1, младший байт |
OCR1AH | $2B($4B) | Регистр совпадения А таймера/счетчика Т1, старший байт |
OCR1AL | $2A($4A) | Регистр совпадения А таймера/счетчика Т1, младший байт |
OCR1BH | $29($49) | Регистр совпадения В таймера/счетчика Т1, старший байт |
OCR1BL | $28($48) | Регистр совпадения В таймера/счетчика Т1,младший байт |
ICR1H | $27($47) | Регистр захвата таймера/счетчика Т1, старший байт |
TCCR2 | $25($45) | Счетный регистр таймера/счетчика Т2 |
TCNT2 | $24($44) | Регистр совпадения таймера/счетчика Т2 |
OCR2 | $23($43) | Регистр совпадения таймера/счетчика Т2 |
OCDR | $22($42) | Регистр внутрисхемной отладки |
WDTCR | $21($41) | Регистр управления сторожевым таймером |
SFIOR | $20($40) | Регистр специальных функций |
EEARH | $1F($3F) | Регистр адреса EEPROM, старший байт |
EEARL | $1E($3E) | Регистр адреса EEPROM, младший байт |
EEDR | $1D($3D) | Регистр данных EEPROM |
EECR | $1C($3C) | Регистр управления EEPROM |
PORTA | $1B($3B) | Регистр данных порта А |
DDRA | $1A($3A) | Регистр направления данных порта А |
PINA | $19($39) | Выводы порта А |
PORTB | $18($38) | Регистр данных порта В |
DDRB | $17($37) | Регистр направления данных порта В |
PINB | $16($36) | Выводы порта В |
PORTC | $15($35) | Регистр данных порта С |
DDRC | $14($34) | Регистр направления данных порта С |
PINC | $13($33) | Выводы порта С |
PORTD | $12($32) | Регистр данных порта D |
DDRD | $11($31) | Регистр направления данных порта D |
PIND | $10($30) | Выводы порта D |
SPDR | $0F($2F) | Регистр данных SPI |
SPSR | $0E($2E) | Регистр состояния SPI |
SPCR | $0D($2D) | Регистр управления SPI |
UDR0 | $0C($2C) | Регистр данных USART0 |
UCSR0A | $0B($2B) | Регистр управления и состояния A USART0 |
UCSR0B | $0A($2A) | Регистр управления и состояния В USART0 |
UBRR0L | $09($29) | Регистр скорости передачи USART0, младший байт |
ACSR | $08($28) | Регистр управления и состояния аналогового компаратора |
ADMUX | $07($27) | Регистр управления мультиплексором АЦП |
ADCSRA | $06($26) | Регистр управления и состояния АЦП |
ADCH | $05($25) | Регистр данных АЦП, старший байт |
ADCL | $04($24) | Регистр данных АЦП, младший байт |
PORTE | $03($23) | Регистр данных порта Е |
DDRE | $02($22) | Регистр направления данных порта Е |
PINE | $01($21) | Выводы порта Е |
PINF | $00($20) | Выводы порта F |
Прерывания.
Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событием микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд PC и загружает в него адрес соответствующего вектора прерывания. По этому адресу, как правило, находится команда безусловного перехода к подпрограмме обработки прерывания. Последней командой подпрограммы обработки прерывания должна быть команда RETI, которая обеспечивает возврат в основную программу и восстановление предварительно сохраненного счетчика команд.
Таблица векторов прерываний.
Младшие адреса памяти программ начиная с адреса $0002 отведены под таблицу прерываний. Каждому прерыванию соответствует адрес в этой таблице, который загружается в счетчик команд при возникновении прерывания. Положение вектора в таблице также определяет приоритет соответствующего прерывания: чем меньше адрес, тем выше приоритет соответствующего прерывания.
Положение таблицы векторов прерываний может быть изменено. Таблица может располагаться не только в начале памяти программ, а также и в начале области загрузчика. Причем перемещение таблицы может быть осуществлено в ходе выполнения программы.
Распределение адресов таблицы векторов прерываний приведено в таблице 3.2.
Обработка прерываний:
Для глобального разрешения/запрещения прерываний предназначен флаг I регистра SREG. Для разрешения прерываний он должен быть установлен в «1», а для запрещения сброшен в «0». Индивидуальное разрешение или запрещение прерываний производится установкой/сбросом соответствующих разрядов регистров масок прерываний.