Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Энергонезависимая память данных (EEPROM).




 

Все микроконтроллеры семейства Mega имеют в своем составе энерго­независимую память (EEPROM-память). Объем этой памяти колеблется от 256 байт в моделях ATmega48x до 4 Кбайт в старших моделях. EEPROM-память расположена в своем адресном пространстве и так же, как и ОЗУ, организована линейно.

Для работы с EEPROM-памятью используются три регистра ввода/вы­вода: регистр адреса, регистр данных и регистр управления, адреса кото­рых для разных моделей микроконтроллеров приведены в таблице.

 

Регистры EEPROM

 

Регистр адреса EEAR (EEPROM Address Register) физически размеща­ется в двух РВВ — EEARH:EEARL. В этот регистр загружается адрес ячей­ки, к которой будет производиться обращение. Регистр адреса доступен как для записи, так и для чтения. Причем в регистре EEARH используются только младшие биты (количество задействованных битов зависит от объ­ема EEPROM-памяти). Незадействованные биты регистра EEARH до­ступны только для чтения и содержат нули.

Во время записи в регистр данных EEDR (EEPROM Data Register) за­носятся значения, которые будут сохранены в EEPROM по адресу, опреде­ляемому регистром EEAR, а во время чтения в этот регистр помещаются данные, считанные из EEPROM.

Регистр управления EECR (EEPROM Control Register) используется для управления доступом к EEPROM-памяти. Формат этого регистра по­казан на рисунке, а описание его битов для различных моделей приведено в таблице.

 

Биты регистра EECR

 


Процедура записи одного байта в EEPROM-память состоит из следующих этапов:

1. Дождаться готовности EEPROM к записи данных (ждать, пока не сбросится флаг EEWE (ЕЕРЕ) регистра EECR).

2. Дождаться завершения записи в FLASH-память программ.

3. Загрузить байт данных в регистр EEDR, а требуемый адрес — в ре­гистр EEAR (при необходимости).

4. Установить в 1 флаг EEMWE (ЕЕМРЕ) регистра EECR.

5. В течение 4 тактов после установки флага EEMWE (ЕЕМРЕ) запи­сать в бит EEWE (ЕЕРЕ) регистра EECR лог. 1. После установки это­го бита процессор пропускает 2 такта перед выполнением следую­щей инструкции.

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

 

При записи в EEPROM могут возникнуть некоторые проблемы, вы­званные прерываниями:

1. При возникновении прерывания между 4-м и 5-м этапом описанной последовательности запись в EEPROM будет сорвана, так как за время обработки прерывания флаг EEMWE сбросится в 0.

2. Если в подпрограмме обработки прерывания, возникшего во время записи в EEPROM-память, также происходит обращение к ней, то будет изменено содержимое регистров адреса и данных EEPROM. В результате первая запись (прерванная) будет сорвана.

Во избежание описанных проблем настоятельно рекомендуется запре­щать все прерывания (сбрасывать бит 1 регистра SREG) на время выпол­нения пунктов 2...5 описанной выше последовательности.

Меры предосторожности

 

К сожалению, у EEPROM-памяти есть один недостаток: при снижении напряжения питания хранящиеся в ней данные могут быть повреждены. Это может произойти по двум причинам:

1. Если напряжение питания ниже некоторой величины, запись в EEPROM будет произведена некорректно.

2. Микроконтроллер сам может выполнять команды некорректно, ес­ли напряжение питания будет ниже нормы.

Чтобы избежать повреждения данных, хранящихся в EEPROM, доста­точно воспользоваться одним из трех следующих решений:

1. Удерживать микроконтроллер в состоянии сброса все время, пока напряжение питания находится ниже нормы. Для этого следует ис­пользовать встроенный детектор пониженного напряжения питания (Brown-Out Detector — BOD).

2. Удерживать микроконтроллер в «спящем» режиме (Power Down), по­ка напряжение питания находится ниже нормы. Поскольку в этом режиме микроконтроллер не может выполнять никаких команд, та­кое решение эффективно защищает служебные регистры EEPROM от непреднамеренной записи.

3. Хранить константы в FLASH-памяти программ, если они не должны меняться во время работы программы. Микроконтроллер не может самостоятельно производить запись в FLASH-память, соот­ветственно при понижении напряжения питания ее содержимое не будет повреждено.

 

Счетчик команд.

 

Счетчик команд представляет собой регистр, в котором содержится ад­рес следующей исполняемой команды. Напрямую из программы он не до­ступен. Размер счетчика команд зависит от объема имеющейся памяти про­грамм и составляет от 11 (ATmega48x) до 17 (ATmega2560x/2561x) битов.

При нормальном выполнении программы содержимое счетчика ко­манд автоматически увеличивается на 1 или на 2 (в зависимости от выпол­няемой команды) в каждом такте. Этот порядок нарушается при выполне­нии команд перехода, вызова и возврата из подпрограмм, а также при воз­никновении прерываний.

После включения питания, а также после сброса микроконтроллера в счетчик программ автоматически загружается стартовый адрес ($0000 или начальный адрес сектора загрузчика). Как правило, по этому адресу распо­лагается команда безусловного перехода к инициализационной части про­граммы.

При возникновении прерывания в счетчик команд загружается адрес соответствующего вектора прерывания. Если прерывания используются в программе, то по адресам векторов прерываний должны размещаться ко­манды перехода к подпрограммам обработки прерываний.

Стек.

 

Во всех микроконтроллерах семейства Mega стек реализован програм­мно. Он размещается в памяти данных, и его глубина определяется только размером свободной области памяти данных. В качестве указателя стека во всех моделях используется пара регистров ввода/вывода SPH:SPL, распо­ложенных по адресам $3Е ($5Е) и $3D ($5D) соответственно. Так как после подачи напряжения питания (или после сброса) в регистрах содержится нулевое значение, в самом начале программы указатель стека необходимо проинициализировать, записав в него значение верхнего адреса памяти данных. Обычно это делается следующим образом:

 

 

При вызове подпрограмм адрес команды, расположенной за командой вызова, сохраняется в стеке. Значение указателя стека при этом уменьша­ется на 2 или 3, в зависимости от размера счетчика команд. При возврате из подпрограммы этот адрес извлекается из стека и загружается в счетчик команд. Значение указателя стека соответственно увеличивается на 2 (3). То же происходит и во время прерывания. При генерации прерывания ад­рес следующей команды сохраняется в стеке, а при возврате из подпро­граммы обработки прерывания он восстанавливается из стека.

Во всех моделях микроконтроллеров семейства Mega стек доступен программно. Для работы со стеком имеются две команды: команда занесе­ния в стек (push) и команда извлечения из стека (POP).

 





Поделиться с друзьями:


Дата добавления: 2016-12-28; Мы поможем в написании ваших работ!; просмотров: 1192 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Большинство людей упускают появившуюся возможность, потому что она бывает одета в комбинезон и с виду напоминает работу © Томас Эдисон
==> читать все изречения...

2565 - | 2225 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.