Читайте также: |
|
Данные в вычислительных системах, над которыми выполняются операции, называют операндами.
Память данных предназначена для временного хранения операндов и результатов операций. (Исходные операнды поступают в микроконтроллер из портов ввода, а выходные значения выдаются в порты вывода).
Память данных микроконтроллера разделена на три части: оперативная память ОЗУ(RAM), регистровая память (регистры общего назначения – РОН и регистры ввода-вывода) и энергонезависимая память (EEPROM). Емкость оперативной памяти данных (ОЗУ) составляет 1Кбайт. Запись и считывание содержимого ячеек ОЗУ производится по 8-разрядной шине данных микроконтроллера. Адрес ячейки ОЗУ подается либо из регистра команд, либо одного из регистров X,Z,Y (см. ниже).
В ОЗУ может быть организован стек - область ОЗУ для формально безадресного хранения данных, т.е. стековая команда не содержит адрес ячейки памяти, но она определяет, что адрес стековой ячейки ОЗУ хранится в специальном регистре - указателе стека (SP). Аппаратно указатель стека представляет собой реверсивный счетчик. Для адресации ячеек стека используется постдекрементный/прединкрементный способ, т.е. после загрузки в ячейку стека содержимое SP автоматически уменьшается на единицу, а перед чтением из стека происходит увеличение SP на единицу. Стек «растет» в сторону младших адресов. По сигналу сброса устанавливается SP=0.
Начальное значение указателя стека (адрес начала стека) должен задаваться программно, если программа содержит подпрограммы, в том числе, и прерываний. Так как стек является областью ОЗУ, то начальное значение указателя стек должно быть больше $60. Целесообразно выбирать адрес начала стека равный адресу последней ячейки ОЗУ (45F – см. ниже).
Число используемых разрядов указателя стека равно 10, в соответствии с емкостью ОЗУ микроконтроллера (1Кбайт=1024=210 ). Указатель стека физически состоит из двух восьмиразрядных регистров: регистра старших разрядов SPH и регистра младших разрядов SPL.
Регистровая память микроконтроллеров семейства AVR представляет собой 32 регистра общего применения (РОН) R0 – R31 и до 64-х регистров ввода/вывода в зависимости от типа микроконтроллера. Регистры РОН используются, в основном, для хранения операндов, над которыми выполняются арифметические и логические операции, и результатов операций. Регистры РОН подключены непосредственно к арифметико-логическому устройству, в котором выполняются соответствующие команды. Выбор конкретного регистра РОН производится из регистра команд (специальными разрядами команды). Команды обращения к регистрам РОН занимают одну ячейку программной памяти и выполняются за один машинный цикл. Машинный цикл равен периоду частоты тактового генератора микроконтроллера.
Шесть регистров R26 – R31 регистрового файла могут использоваться для хранения не только данных, но и для хранения адресов ячеек ОЗУ, т.е. реализуется косвенный регистровый способ адресации. В этом случае регистры объединяются в пары, образуя три адресных 16-разрядных регистра X,Y,Z. Регистры R27 и R26 образуют регистр X, регистры R29 и R28 образуют регистр Y, регистры R31 и R30 образуют регистр Z. Регистр Z используется также в качестве адресного регистра при считывании констант из программной памяти. Описание РОН приведено в таблице 2.
В области регистров ввода – вывода расположены различные служебные регистры (указатель стека, регистр состояния и др.), а также регистры встроенных периферийных устройств (таймеры, подсистема прерываний и др.), входящими в состав микроконтроллера, а также регистры управления этими периферийными устройствами. Описание и адреса регистров ввода – вывода приведено в таблице 3.
Регистры РОН, ввода-вывода и ОЗУ размещены в одном адресном пространстве. Распределение адресного пространства приведено на рис.4.. Адреса 0 – 1FН занимают регистры РОН, адреса 20Н – 5FН занимают регистры ввода – вывода, адреса 60Н – 45FH занимают ячейки ОЗУ.
Таким образом, все адресное пространство памяти данных составляет 32+64+512=608 байт.
Обращение к регистрам РОН может осуществляться как к ячейкам памяти со значениями адресов соответствующими рис.2. Обращение к регистрам ввода/вывода командами ввода/вывода IN adr и OUT adr производится, если адреса регистров ввода/вывода в этих командах от 20
Рисунок 4 Организация памяти микроконтроллера
до 1F (таблица 3 значения адресов в скобках).
Энергонезависимая память данных микроконтроллера EEPROM имеет отдельное адресное пространство 0 – 1FF.
Таблица 2
Имя регистра РОН | Адрес | Описание |
R31 или ZH | $1F | Старший байт регистра Z |
R30 или ZL | $1E | Младший байт регистра Z |
R29 или YH | $1D | Старший байт регистра Y |
R28 или YL | $1C | Младший байт регистра Y |
R27 или XH | $1B | Старший байт регистра X |
R26 или XL | $1A | Младший байт регистра X |
R25-R17 | $19-$11 | Регистры R25-R17 |
R16-R0 | $10-$00 | Регистры R16-R0 |
Таблица 3
Адрес I/O (адрес RAM) | Имя регистра | Функция регистра |
$05($25) | ADCH | Регистр данных АЦП (старший байт) |
$04($24) | ADCL | Регистр данных АЦП (младший байт) |
$06($26) | ADCSR | Регистр управления и состояния АЦП |
$07($27) | ADMUX | Регистр управления мультиплексором АЦП |
$1A($3A) | DDRA | Регистр направления порта А |
$1B($3B) | PORTA | Регистр данных порта A |
$19($39) | PINA | Выводы входов порта A |
$17($37) | DDRB | Регистр направления данных порта В |
$18($38) | PORTB | Регистр данных порта В |
$16($36) | PINB | Выводы входов порта В |
$14($34) | DDRC | Регистр направления данных порта C |
$15($35) | PORTC | Регистр данных порта C |
$13($33) | PINC | Выводы входов порта C |
$11($31) | DDRD | Регистр направления данных порта D |
$12($32) | PORTD | Регистр данных порта D |
$10($30) | PIND | Выводы входов порта D |
$35($55) | MCUCR | Общий регистр управления микроконтроллером |
$34($54) | MCUSR | Регистр состояния микроконтроллера |
$3F($5F) | SREG | Регистр состояния (статуса) процессора |
$3A($5A) | GIFR | Общий регистр флагов прерываний |
$3B($5B) | GIMSK | Общий регистр маски прерываний |
$38($58) | TIFR | Регистр флагов прерываний от таймеров/счетчиков |
$39($59) | TIMSK | Регистр маски прерываний от таймеров/счетчиков |
$3E($5E) | SPH | Старший байт указателя стека |
$3D($5D) | SPL | Младший байт указателя стека |
$33($53) | TCCR0 | Регистр управления таймером/счетчиком Т0 |
$32($52) | TCNT0 | Таймер/счетчик Т0 |
$2F($4F) | TCCR1A | Регистр управления А таймера/счетчика Т1 |
$2E($4E) | TCCR1B | Регистр управления В таймера/счетчика Т1 |
$2D($4D) | TCNT1H | Старший байт таймера/счетчика Т1 |
$2C($4C) | TCNT1L | Младший байт таймера/счетчика Т1 |
$2B($4B) | OCR1AH | Старший байт регистра А сравнения выхода таймера/счетчика Т1 |
$2A($4A) | OCR1AL | Младший байт регистра А сравнения выхода таймера/счетчика Т1 |
$29($49) | OCR1BH | Регистр совпадения выхода В (старший байт) |
$28($48) | OCR1BL | Регистр совпадения выхода В (младший байт) |
$27($47) | ICR1H | Регистр захвата таймера/счетчика Т1(старший байт) |
$26($46) | ICR1L | Регистр захвата таймера/счетчика Т1(младший байт) |
$24($44) | TCNT2 | Таймер Т2 |
$25($45) | TCCR2 | Регистр управления таймером Т2 |
$23($43) | OCR2 | Регистр совпадения выхода таймера/счетчика Т2 |
$07($27) | ASSR | Регистр состояния асинхронного режима |
$1F($3F) | EEARH | Старший байт регистра адреса EEPROM |
$1E($3E) | EEARL | Младший байт регистра адреса EEPROM |
$1D($3D) | EEDR | Регистр данных EEPROM |
$1C($3C) | EECR | Регистр управления EEPROM |
$0E($2E) | SPSR | Регистр состояния SPI |
$0D($2D) | SPCR | Регистр управления SPI |
$0F(02F) | CPDR | Регистр данных SPI |
$0C($2C) | UDR | Регистр данных порта UART |
$OB($2B) | USR | Регистр статуса порта UART |
$OA($2A) | UCR | Регистр управления порта UART |
$09($29) | UBRR | Регистр управления скоростью порта UART |
$21 ($41) | WDTCR | Регистр управления сторожевого таймера |
$08{$28) | ACSR | Регистр управления и статуса аналогового компаратора |
Дата добавления: 2015-07-20; просмотров: 105 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Организация программной памяти | | | Арифметико-логическое устройство и регистр состояния процессора |