Режимы адресации памяти программ и данных

При обращении к Flash памяти программ и памяти данных (SRAM, регистровому файлу и памяти I/O) AVR Enhanced RISC микроконтроллерами ATmega128 используются мощные и эффективные режимы адресации. В данном разделе описываются режимы адресации, поддерживаемые AVR архитектурой (рис. 2.4-2.13).

На рис. 2.4-2.13 OP обозначает часть слова команды, соответствующую операционному коду.

Регистры R26…R31 из файла регистров используются как регистры-указатели (X, Y и Z) для косвенной адресации.

Прямая адресация позволяет адресоваться ко всей памяти данных.

Косвенная адресация со смещением позволяет адресовать 63 ячейки, начиная с адреса указанного в регистрах Y или Z.

При использовании инструкции косвенной адресации с предварительным декрементом и последующим инкрементом значения адресных регистров X, Y и Z, соответственно декрементируются до или инкрементируются после выполнения инструкции.

32 рабочих регистров общего назначения, 64 регистра ввода-вывода и 4096 байт внутреннего статического ОЗУ данных в ATmega128 доступны с помощью всех этих режимов адресации.

 

 
 

 

 

 

 


Интерфейс внешней памяти

 

Характеристики интерфейса внешней памяти позволяет его использовать не только для подключения к внешнему статическому ОЗУ или флэш-памяти, но и в качестве интерфейса с внешними периферийными устройствами, например, ЖК-дисплеи, АЦП и ЦАП. Его основными отличительными особенностями являются:

- Возможность задания четырех различных по длительности состояний ожидания, в т.ч. без состояния ожидания.

- Возможность установки различных состояний ожидания для разных секторов внешней памяти (размер сектора конфигурируется).

- Возможность выбора количества задействованных разрядов в старшем адресном байте.

- Устройство запоминания состояния шины для минимизации потребления тока (опционально).

После разрешения внешней памяти (XMEM) становится доступным адресное пространство за пределами внутреннего статического ОЗУ через предопределенные для этой функции выводы.

Совместимость с ATmega103. Оба регистра управления внешней памятью (XMCRA и XMCRB) размещены в расширенном пространстве ввода-вывода. В режиме совместимости с ATmega103 эти регистры и функции, управляемые через них, не доступны. Но микроконтроллер сохранит совместимость, т.к. эти функции не поддерживаются у ATmega103. Ограничения на режим совместимости с ATmega103 следующие:

- Доступны только две установки состояний ожидания (SRW1n = 0b00 и SRW1n = 0b01).

- Количество используемых разрядов в старшем адресном байте является фиксированным.

- Внешняя память не может быть поделена на сектора с различными состояниями ожидания.

- Устройство запоминания состояния шины не доступно.

- Выводы RD, WR и ALE могут использоваться только для вывода (Порт G у ATmega128).

Использование интерфейса внешней памяти.

Интерфейс состоит из:

- AD7:0: Мультиплексированная младшая шина адреса/шина данных.

- A15:8: Старшая шина адреса (с конфигурируемым числом разрядов).

- ALE: Строб адреса внешней памяти.

- RD: Строб чтения из внешней памяти.

- WR: Строб записи во внешнюю память.

Биты управления интерфейсом внешней памяти расположены в трех регистрах: регистр управления микроконтроллером – MCUCR, регистр А управления внешней памятью – XMCRA и регистр В управления внешней памятью – XMCRB.

 
 

После разрешения работы интерфейс XMEM изменит настройки регистров направления данных портов, линии которых предопределены для выполнения функций интерфейса XMEM. Интерфейс XMEM автоматически определяет к какой памяти внешней или внутренней осуществляется доступ. Во время доступа к внешней памяти интерфейс XMEM будет формировать сигналы шин адреса, данных и управления на линиях портов A, C и G соответственно. При переходе ALE из 1 в 0 на линиях AD7:0 (порт А) будут присутствовать действительные адресные сигналы. ALE находится на низком уровне во время передачи данных. После разрешения работы интерфейса XMEM доступ к внутренней памяти будет вызывать изменения на шинах данных и адреса, а также строба ALE, при этом, стробы RD и WR останутся неизменными. После запрета работы интерфейса внешней памяти используются обычные установки выводов и направления данных. Обратите внимание, что после отключения интерфейса XMEM адресное пространство свыше внутреннего ОЗУ не связано с последним. Рис. 2.14 иллюстрирует, как подключить внешнее статическое ОЗУ к AVR-микроконтроллеру с помощью 8-разрядного регистра, который передает данные напрямую при высоком уровне на входе SNB.

Требования по фиксации адреса. Интерфейс XRAM характеризуется высоким быстродействием из-за чего фиксация адреса должна выполняться с осторожностью при частотах свыше 8МГц при 4В и 4МГц при 2.7В.

При использовании более высоких частот применение регистров устаревшей серии будет неадекватным. Интерфейс внешней памяти разработан для совместимости с регистрами серии 74AHC. Однако, большинство регистров может быть использовано, если они отвечают временным требованиям.

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

Интерфейс XMEM также содержит устройство запоминания состояния шины на линиях AD7:0 Устройство запоминания состояния шины может быть программно подключено и отключено. После активизации устройство запоминания состояния шины будет сохранять предыдущее состояние шины AD7:0 при переводе этих линий интерфейсом XMEM в третье состояние.

Описание регистров интерфейса XMEM.

Бит SRE (Бит7 регистра управления микроконтроллером MCUCR). Разрешение внешнего статического ОЗУ/XMEM. Запись в SRE логической 1 разрешает работу интерфейса внешней памяти, после чего выводы AD7:0, A15:8, ALE, WR и RD выполняют свои альтернативные функции. После установки бита SRE игнорируются любые установки в соответствующих регистрах направления данных. Запись в SRE нуля отключает интерфейс внешней памяти, после чего вступают в силу обычные функции выводов и установки направления.

Бит SRW10. (Бит6 регистра управления микроконтроллером MCUCR). Бит выбора состояния ожидания. При работе микроконтроллера не в режиме совместимости с ATmega103 описание действия данного бита подробно описывается ниже при рассмотрении бит SRWn регистра XMCRA. В режиме совместимости с ATmega103 запись в SRW10 логической 1 разрешает состояние ожидание и один дополнительный период добавляется к стробу чтения/записи.

 

Регистр А управления внешней памятью – XMCRA.

Разряди
- SRL2 SRL1 SRL0 SRW01 SRW00 SRW11 -
R/W R R/W R/W R/W R/W R/W R/W R

Бит7 – зарезервированный бит.

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

Биты 6..4 – SRL2, SRL1, SRL0. Задание границ секторов с состоянием ожидания.

Имеется возможность установить различные состояния ожидания для различных адресов внешней памяти. Адресное пространство внешней памяти может быть разделено на два сектора, каждый их которых имеет собственные биты выбора состояний ожидания. Биты SRL2, SRL1 и SRL0 определяют разбиение секторов (см. табл. 2.9). По умолчанию значение бит SRL2, SRL1 и SRL0 равно нулю и все адресное пространство внешней памяти обслуживается как один сектор. Если все адресное пространство статического ОЗУ конфигурируется как один сектор, то состояния ожидания определяются битами SRW11 и SRW10.

Таблица 2.9. Границы секторов памяти при различных настройках SRL2..0.

 

SRL2 SRL1 SRL0 Границы сектора
Нижний сектор = Нет Верхний сектор = 0x1100 - 0xFFFF
Нижний сектор = 0x1100 - 0x1FFF Верхний сектор = 0x2000 - 0xFFFF
Нижний сектор = 0x1100 - 0x3FFF Верхний сектор = 0x4000 - 0xFFFF
Нижний сектор = 0x1100 - 0x5FFF Верхний сектор = 0x6000 - 0xFFFF
Нижний сектор = 0x1100 - 0x7FFF Верхний сектор = 0x8000 - 0xFFFF
Нижний сектор = 0x1100 - 0x9FFF Верхний сектор = 0xA000 - 0xFFFF
Нижний сектор = 0x1100 - 0xBFFF Верхний сектор = 0xC000 - 0xFFFF
Нижний сектор = 0x1100 - 0xDFFF Верхний сектор = 0xE000 - 0xFFFF

 

Бит 1 регистра XMCRA -SRW11 и бит 6 регистра MCUCR – SRW10. Биты выбора состояний ожидания для верхнего сектора.

Биты SRW11 и SRW10 задают число состояний ожидания для верхнего сектора внешней памяти.

Биты 3..2 – SRW01, SRW00. Биты выбора состояний ожидания для нижнего сектора.

Биты SRW01 и SRW00 задают число состояний ожидания для нижнего сектора внешней памяти (см. табл. 2.10).

 

Таблица 2.10. Состояния ожидания.

SRWn1 SRWn0 Состояния ожидания
Нет состояний ожидания
Задержка на один машинный цикл во время строба чтения/записи
Задержка на два машинных цикла во время строба чтения/записи
Задержка на два машинных цикла во время строба чтения/записи и задержка на один машинный цикл перед установкой нового адреса

Бит 0 – зарезервированный бит

 

Регистр В управления внешней памятью – XMCRB.

XMBK   - - - - XMM2 XMM1 XMM0
R/W R R R R R/W R/W R/W

 

Бит 7– XMBK. Разрешение работы устройства запоминания состояния шины внешней памяти. Запись в XMBK логической 1 разрешает работу устройства запоминания состояния шины на линиях AD7:0. После его активизации AD7:0 будут запоминать последнее установленное состояние, даже если интерфейс XMEM перевел линии в третье состояние. Запись в XMBK логического 0 означает запрет работы устройства запоминания состояния шины. XMBK не подчинен SRE, так что даже если интерфейс XMEM отключен, то устройство запоминания состояния шины будет активным до тех пор, пока XMBK=1.

Биты 6..3 - зарезервированные разряды. Данные разряды являются зарезервированными для будущих микроконтроллеров, поэтому, для совместимости с ними рекомендуется записывать в данные позиции лог. 0 во время записи в данный регистр.

Биты 2..0 – XMM2, XMM1, XMM0. Маска старших адресных разрядов внешней памяти (табл. 2.11). После разрешения внешней памяти все выводы порта С по умолчанию используются в качестве старшего адресного байта. Если нет необходимости адресоваться ко всему 60 Кбайтному пространству внешней памяти, то свободные адресные линии, возможно, использовать в качестве универсального ввода-вывода. Использование бит XMMn позволяет адресоваться ко всем 64 кбайт ячейкам внешней памяти.

 

Таблица 2.11. Использование старших адресных сигналов в качестве линий универсального ввода-вывода после разрешения внешней памяти

XMM2 XMM1 XMM0 Число разрядов адреса внешней памяти Освобождаемые адресные линии порта С
8 (Все пространство 60 Кбайт) Нет
PC7
PC7 - PC6
PC7 - PC5
PC7 - PC4
PC7 - PC3
PC7 - PC2
Старший байт адреса не используется Полностью порт С

 

Использование всех ячеек внешней памяти размером менее 64 Кбайт. Поскольку в соответствии с рисунком 11 адресное пространство внешней памяти следует за адресным пространством внутренней, то к младшим 4352 ячейкам внешней памяти не возможно адресоваться (адреса 0x0000…0x10FF). Однако, при подключении внешней памяти размером менее 64 Кбайт, например, 32 Кбайт к этим ячейкам можно легко адресоваться по адресам 0x8000…0x90FF. Поскольку адресный бит внешней памяти А15 не подключен к внешней памяти, то адреса 0x8000…0x90FF будут выступать в качестве адресов 0x0000…0x10FF для внешней памяти. Адресация по адресам свыше 0x90FF не рекомендуется, т.к. может затронуть ячейку внешней памяти, доступ к которой уже осуществлялся по другому (меньшему) адресу. Для прикладной программы 32 Кбайта внешней памяти будут представлять линейное адресное пространство с адресами 0x1100…0x90FF. Конфигурация памяти В относится к режиму совместимости с ATmega103, а конфигурация памяти А к нормальному режиму работы.

Когда микроконтроллер находится в режиме совместимости с ATmega103 внутренняя память занимает 4096 байт. Это означает, что 4096 байт внешней памяти могут быть доступны по адресам 0x8000…0x8FFF. Для прикладной программы внешняя память размером 32 Кбайт в этом случае будет линейным адресным пространством в диапазоне адресов 0x1000…0x8FFF.

Использование всех 64 кбайт ячеек внешней памяти. Поскольку, внешняя память располагается после внутренней памяти, то только 60 кбайт внешней памяти доступно по умолчанию (адресное пространство от 0x0000 до 0x10FF зарезервировано для внутренней памяти). Однако, имеется возможность использовать весь объем внешней памяти путем маскирования старших адресных разрядов к нулю. Это может быть выполнено с помощью бит XMMn и программного управления старшими адресными разрядами. Интерфейс памяти будет иметь диапазон адресов 0x0000 - 0x1FFF, если установить на выходе порта С значение 0x00 и выбрать работу старших адресных разрядов как обычных линий ввода-вывода. (См. нижеприведенный пример).

Пример кода на Ассемблере.; Определено СМЕЩЕНИЕ OFFSET=0x2000 для гарантирования доступа к внешней памяти; Конфигурируем порт С (старший байт адреса) на вывод 0x00, ;после чего настраиваем выводы; на выполнение функций обычного портаldi r16, 0xFFout DDRC, r16ldi r16, 0x00out PORTC, r16 ; освобождаем PC7:5 от адресных функцийldi r16, (1<<XMM1)|(1<<XMM0)sts XMCRB, r16 ldi r16, 0xaa ; запись 0xAA по адресу 0x0001 внешней памятиsts 0x0001+OFFSET, r16; Разрешаем снова работу PC7:5 как адресных линийldi r16, (0<<XMM1)|(0<<XMM0)sts XMCRB, r16 ; Запись 0x55 по адресу (OFFSET + 1) внешней памятиldi r16, 0x55sts 0x0001+OFFSET, r16

Память данных на EEPROM

ATmega128 содержит 4 кбайт памяти данных на EEPROM. Она организована как отдельная область памяти данных, в которой один байт может быть записан и считан. EEPROM характеризуется износостойкостью 100000 циклов чтения/записи.

Чтение и запись EEPROM. Доступ к EEPROM осуществляется через специальные регистры, расположенные в пространстве ввода-вывода.

Функция самосинхронизации позволяет программно определить возможность записи следующего байта. Если код программы содержит инструкции записи в EEPROM, то должны быть приняты следующие меры предосторожности. У источников питания с хорошей фильтрацией напряжение VCC медленно нарастает/спадает при подаче/снятии питания. По этой причине микроконтроллер в течение некоторого периода времени может оказаться под меньшим напряжением питания, чем требуется для заданной тактовой частоты.

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

Когда происходит считывание EEPROM CPU задерживается на 4 машинных цикла до выполнения следующей инструкции. Во время записи в EEPROM CPU задерживается на два машинных цикла до выполнения следующей инструкции.

Доступ к EEPROM осуществляется через специальные регистры, расположенные в пространстве ввода-вывода.

Адресные регистры EEPROM– EEARH и EEARL

- - - - EEAR EEAR EEAR EEAR
EEAR EEAR EEAR EEAR EEAR EEAR EEAR EEAR

 

Разряды EEAR15..12. Зарезервированы и считываются как 0. При записи в данных разрядах необходимо указывать нули для совместимости с новыми версиями микроконтроллеров.

Разряды 11,…,0 – EEAR11,…,0. Адрес ячейки EEPROM .

Регистры адреса EEARH и EEARL – определяют адрес ячейки EEPROM в 4 Кбайтном пространстве. Байтные ячейки EEPROM адресуются линейно в диапазоне адресов 0…4096. Начальное значение EEAR неопределенное. Необходимое значение адреса должно быть записано до начала доступа к EEPROM.

 

 

Регистр данных EEPROM – EEDR

EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0
R/W R/W R/W R/W R/W R/W R/W R/W

 

Разряды 7…0 – EEDR7,..,0. Данные EEPROM. Для выполнения записи в EEPROM в регистр EEDR необходимо указать записываемые данные, которые будут записаны по адресу, указанному в регистре EEAR. После выполнения чтения из EEPROM в регистре EEDR содержатся считанные данные из ячейки по адресу указанному в EEAR.

 

Регистр управления EEPROM – EECR

- - - - EERIE EEMWE EEWE EERE
R R R R R/W R/W R/W R/W

 

Биты7,…,4 – у МК ATmega128 зарезервированы и считываются как 0.

Бит3 – EERIE. Разрешение прерывания по готовности EEPROM. Запись 1 в EERIE разрешает прерывание по готовности EEPROM, если установлен бит I в регистре SREG. Запись в EERIE нуля отключает это прерывание. Прерывание по готовности EEPROM генерируется, если бит EEWE сброшен.

Бит2 – EEMWE. Разрешение записи в EEPROM. Бит EEMWE разрешает установку бита EEWE, инициирующего запись в EEPROM. Данные будут записаны в EEPROM по указанному адресу, если в EEMWE записать 1, а затем в течение 4 машинных циклов записать 1 в EEWE. Если EEMWE=0, то запись в EEWE логической единицы не вызовет никаких действий. После программной установки бита EEMWE он автоматически сбрасывается аппаратно по истечении четырех машинных циклов.

Бит1 – EEWE. Запись данных в EEPROM. Сигнал записи данных в EEWE является стробирующим сигналом записи для EEPROM. Для записи в EEPROM после корректной установки адреса и данных необходимо установить бит EEWE. Перед установкой бита EEWE должен быть установлен бит EEMWE, иначе запись в EEPROM не произойдет. При выполнении операции записи в EEPROM необходимо руководствоваться следующей последовательностью (порядок шагов 3 и 4 не важен):

1. Ожидание пока EEWE станет равным нулю.

2. Ожидание равенства нулю бита SPMEN в регистре SPMCSR.

3. Запись нового адреса EEPROM в EEAR.

4. Запись новых данных в регистр EEDR для записи в EEPROM.

5. Запись 1 в EEMWE, когда в EEWE регистра EECR записан ноль.

6. Запись 1 в EEWE в течение четырех машинных циклов после установки EEMWE.

EEPROM нельзя программировать во время записи флэш-памяти из CPU. С учетом этого, перед началом новой записи в EEPROM необходимо проверить завершение программирования флэш-памяти. Шаг 2 необходимо выполнять, если в приложении используется программирование из загрузочного сектора. Если программирование флэш-памяти под управлением CPU не предусмотрено, то шаг 2 может быть исключен.

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

Бит0 – EERE. Разрешение чтения из EEPROM . Сигнал разрешения чтения из EEPROM EERE является стробом чтения EEPROM . После записи корректного адреса в регистр адреса EEAR бит EERE должен быть установлен для запуска механизма чтения EEPROM . Чтение из EEPROM выполняется одновременно с инструкцией, поэтому, запрашиваемые данные готовы для считывания сразу по ее завершении. После чтения из EEPROM CPU задерживается на четыре машинных цикла, а только затем выполняет следующую инструкцию.

Пользователь должен опросить флаг EEWE до начала операции чтения. Если осуществляется операция записи, то невозможно не только считать EEPROM, но и изменить регистр адреса EEAR. Во время доступа к EEPROM используется калиброванный генератор.

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

 

//Пример кода на Ассемблере

;Ожидаем окончание предыдущей записи

EEPROM_write:

sbic EECR,EEWE

rjmp EEPROM_write

out EEARH, r18

;Записываем адрес (r18:r17) в адресный регистр EEPROM

out EEARL, r17

;Записываем данные (r16) в регистр данных EEPROM

out EEDR,r16

sbi EECR,EEMWE ;Записывает 1 в EEMWE

;Запуск записи в EEPROM установкой EEWE

sbi EECR,EEWE

ret

 

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

//Пример кода на Ассемблере

; Ожидание завершения предыдущей записи

EEPROM_read:

sbic EECR,EEWE

rjmp EEPROM_read

; Установка адреса (r18:r17) в адресном регистре EEAR

out EEARH, r18

out EEARL, r17

; Запуск чтения EEPROM путем установки EERE

sbi EECR,EERE

;Считывание данных из регистра данных EEPROM

in r16,EEDR

ret ; Возврат из подпрограммы

 

Запись в EEPROM в режиме выключения (Power Down). Если микроконтроллер переводится в режим выключения (Power Down) командой sleep в процессе выполнения операции записи в EEPROM, то операция записи будет продолжена и завершится по истечении требуемого времени доступа для записи. Однако, по завершении операции записи кварцевый генератор будет продолжать работу, и как следствие, микроконтроллер будет переведен в режим снижения мощности не полностью. С учетом этого, рекомендуется проверять окончание операции записи в перед переводом в режим выключения (Power-down).

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

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

Повреждение данных в EEPROM может быть легко предотвращено, если придерживаться следующих рекомендаций:

Микроконтроллер необходимо удерживать в состоянии сброса (низкий уровень на выводе RESET) при недостаточности уровня питания. Аналогично это можно выполнить, разрешив работу встроенного детектора питания (BOD). Если пороговый уровень встроенного детектора питания не соответствует необходимому порогу, то следует применить внешнюю схему сброса при снижении VCC (супервизор питания). Если сброс возникает во время действия операции записи, то запись будет завершена при условии достаточности уровня питания.

Биты защиты памяти программ и данных. ATmega128 содержит 6 битов защиты, которые можно оставить в незапрограммированном состоянии (1) или же запрограммировать (0) для активизации дополнительных функций (табл. 1.12), представленных в табл. 2.13. Стирание бит защиты (установка 1) может быть выполнена только командой стирание кристалла (Chip Erase).

Таблица 2.12. Байт с битами защиты

Биты защиты Разряд Описание Исходное значение
  - 1 (незапрограммированный)
  - 1 (незапрограммированный)
BLB12 Бит защиты загрузочного сектора 1 (незапрограммированный)
BLB11 Бит защиты загрузочного сектора 1 (незапрограммированный)
BLB02 Бит защиты загрузочного сектора 1 (незапрограммированный)
BLB01 Бит защиты загрузочного сектора 1 (незапрограммированный)
LB2 Бит защиты 1 (незапрограммированный)
LB1 Бит защиты 1 (незапрограммированный)

 

Примечание. В микроконтроллерах фирмы Atmel сброшенный в ноль бит защиты (fuse Бит)означает, что он запрограммирован, т.е. активен, а установленный в 1- незапрограммирован.

 

Таблица 2.13. Режимы защиты

Биты защиты памяти Тип защиты
Режим LB LB2 LB1  
Нет защиты памяти.
Дальнейшее программирование флэш-памяти и EEPROM отключено при параллельном и последовательном (SPI/JTAG) программировании. Конфигурационные биты защищены при любом способе программирования
Дальнейшее программирование и проверка флэш-памяти и EEPROM отключена как при параллельном, так и при последовательном программировании через SPI/JTAG. Конфигурационные биты защищены при любом способе программирования
Режим BLB0 BLB02 BLB01  
Нет ограничений действия инструкций SPM или (E)LPM при адресации сектора прикладной программы.
SPM не записывает данные в сектор прикладной программы.
SPM не записывает данные в сектор прикладной программы, а выполнение инструкции (E)LPM в загрузочном секторе не позволяет считать данные из сектора прикладной программы. Если векторы прерываний размещены в загрузочном секторе, то при выполнении команд в секторе прикладной программы прерывания отключаются.
Выполнение (E)LPM в загрузочном секторе не позволяет считать данные из сектора прикладной программы. Если векторы прерываний размещены в загрузочном секторе, то при выполнении команд в секторе прикладной программы прерывания отключаются.
Режим BLB1 BLB12 BLB11  
Нет ограничений действия инструкций SPM или (E)LPM при адресации загрузочного сектора.
SPM не записывает данные в загрузочный сектор.
SPM не записывает данные в загрузочный сектор, а выполнение инструкции (E)LPM в секторе прикладной программы не позволяет считать данные из загрузочного сектора. Если векторы прерываний размещены в секторе прикладной программы, то при выполнении команд в загрузочном секторе прерывания отключаются.
Выполнение (E)LPM в секторе прикладной программы не позволяет считать данные из загрузочного сектора. Если векторы прерываний размещены в секторе прикладной программы, то при выполнении команд в загрузочном секторе прерывания отключаются.

 

 

Примечания.

1. SPM- инструкция сохранение в программной памяти

2. Конфигурационные биты необходимо программировать перед программированием бит защиты.

 

Конфигурационные биты

ATmega128 имеет три конфигурационных байта. Табл. 2.14 – 2.16 кратко описывают функционирование и расположение всех конфигурационных бит. Обратите внимание, что если конфигурационный бит запрограммирован, то при его считывании возвращается 0.

 

Таблица 2.14. Расширенный конфигурационный байт

Наименование бита Разряд Описание Исходное значение
- 7-2 -
M103C Режим совместимости с ATmega103 0 (запрограммированное)
WDTON Активизация сторожевого таймера 1(незапрограммированное)

 

 

Таблица 2.15. Старший конфигурационный байт

Наименование бита Разряд Описание Исходное значение
OCDEN Включение встроенного блока отладки 1(незапрограммированное, функция встроенной отладки отключена)
JTAGEN Включение JTAG-интерфейса 0(запрограммированное, JTAG включен)
SPIEN Разрешение последовательной загрузки программы и данных 0(запрограммированное, программирование через SPI разрешено)
CKOPT Настройка генератора 1(незапрограммированное)
EESAVE Запрет стирания EEPROM командой стирание кристалла 1(незапрограммированное, стирание кристалла вызывает стирание EEPROM)
BOOTSZ1 Выбор размера загрузочного сектора 0(запрограммированное)
BOOTSZ0 Выбор размера загрузочного сектора 0(запрограммированное)
BOOTRST Выбор вектора сброса 1(незапрограммированное)

 

Примечания.

1. Конфигурационный бит SPIEN недоступен в режиме последовательного программирования через SPI.

2. Функционирование конфигурационного бита CKOPT зависит от установок бит CKSEL.

3. Исходное значение бит BOOTSZ1..0 соответствует выбору максимальному размеру загрузочного сектора.

4. Не забудьте отключить бит OCDEN перед поставкой готового изделия заказчику, независимо от того какие установки имеют биты защиты и конфигурационный бит JTAGEN. Если бит OCDEN будет запрограммирован, то некоторые части системы синхронизации микроконтроллера останутся в работе при переводе микроконтроллера в экономичные режимы командой sleep. В этом случае микроконтроллер будет потреблять повышенную мощность.

 

 

Таблица 2.16. Младший конфигурационный байт

Наименование бит Разряд Описание Исходное значение
BODLEVEL Порог срабатывания супервизора питания 1(незапрограммированное)
BODEN Разрешение супервизора питания 1(незапрограммированное, супервизор отключен)
SUT1 Выбор времени запуска 1(незапрограммированное)
SUT0 Выбор времени запуска 0(запрограммированное)
CKSEL3 Выбор тактового источника 0(запрограммированное)
CKSEL2 Выбор тактового источника 0(запрограммированное)
CKSEL1 Выбор тактового источника 0(запрограммированное)
CKSEL0 Выбор тактового источника 1(незапрограммированное)(2)

 

Примечания.

1. Исходные установки SUT1..0 соответствуют выбору максимальному времени старта.

2. По умолчанию все контроллеры AVR сконфигурированы так, чтобы работать от внутреннего источника тактов. За источник тактов отвечают биты CKSEL.Выставив их правильным образом можно выбрать частоту работы контроллера, а также источник тактового сигнала (табл. 2.17).

3. Исходные установки CKSEL3..0 соответствуют выбору внутреннего RC-генератора частотой 1 МГц.

Калибровочный байт. Внутри ATmega128 хранятся четыре различных калибровочных значений для внутреннего RC-генератора. Данные значения хранятся по адресам 0x000, 0x0001, 0x0002 и 0x0003 и соответствуют частотам генератора 1, 2, 4 и 8 МГц. В процессе сброса в регистр OSCCAL автоматически записывается значение калибровочного байта для частоты 1 МГц. Если используется другая частота, то соответствующее значение должно быть вручную записано в регистр OSCCAL