Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать

6 Программирование микроконтроллеров aТmega16

Микроконтроллер ATmega16 поддерживает следующие режимы программирования:

  • параллельное программирование;

  • последовательное программирование по каналу SPI;

  • программирование по интерфейсу JTAG.

Программирование осуществляется с помощью специальных программаторов.

Кроме того, микроконтроллер имеет режим самопрограммирования, т.е. запись в память программ может изменяться с помощью самого микроконтроллера командой SPM.

В процессе программирования могут выполняться следующие операции:

  • стирание кристалла;

  • чтение/запись памяти программ;

  • чтение/запись EEPROM памяти данных;

  • чтение/запись конфигурационных ячеек;

  • чтение/запись битов защиты памяти;

  • чтение идентификатора;

  • чтение калибровочного байта.

Биты защиты позволяют запрещать запись и/или чтение памяти программ, EEPROM и конфигурационных ячеек. Двумя битами защиты LB1 и LB2 реализовано три режима: защита памяти программ и EEPROM отключена, запись FLASH и EEPROM запрещена, запись и чтение FLASH и EEPROM запрещены. Кроме этих двух битов, имеется еще четыре дополнительных бита, с помощью которых определяется уровень доступа из секции загрузчика к секции прикладной программы и уровень доступа прикладной программы к коду загрузчика.

Таблица 38

Биты защиты

Описание

LB1

LB2

1

1

Защита кода и данных отключена

0

1

Запись FLASH и EEPROM запрещена

0

0

Запрещены запись и чтение FLASH и EEPROM

Биты защиты сгруппированы в одно байте. В исходном состоянии все биты установлены в 1 – все операции разрешены.

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

  • тип тактового генератора, значение частоты, уровень импульсов;

  • длительность сигнала сброса;

  • разрешение/запрет схемы детектора напряжения питания (BOD) и уровень ее срабатывания;

  • режим работы сторожевого таймера – всегда включен или может быть выключен программно;

  • разрешение/запрет внутрисхемной отладки JTAG и разрешение/запрет использования интерфейса JTAG.

Микроконтроллер может тактироваться либо от генератора с внешним кварцевым или керамическим резонатором, либо от встроенного RC-генератора с программной установкой одной из частот 1,2,4,8 мГц, либо от RC-генератора с внешними элементами R и С.

Микроконтроллер имеет встроенную схему слежения за напряжением питания (BOD). Если напряжение питания меньше установленного программно, то производится внутренний сброс. Схема BOD может быть выключена или включена, настроена на одно из значений 1,8; 2,7; или 4,0 вольта.

Микроконтроллер ATmega16 имеет три 8-разрядные ячейки, в которых хранится идентификационный номер изделия (сигнатура) $1Е 94 03. Эти ячейки доступны только для чтения.

Четыре калибровочных байта предназначены для подстройки частоты встроенного RC-генератора. Номинальные частоты этого генератора 1,2,4,8 мГц. Каждой частоте соответствует своя калибровочная ячейка. Для настройки генератора на другое значение частоты, необходимо в соответствующую частоте калибровочную ячейку занести значение, которое определяет процент отклонения частоты от номинальной.

При программировании микроконтроллера поддерживается страничная организация программной памяти. Весь объем памяти разбит на 128 страниц по 64 16-разрядных слова на одной странице. Сначала страница помещается в буфер страницы, а потом код записывается непосредственно в память. Прошивка всех ячеек страницы производится одновременно. Чтение FLASH производится, понятно, по байтам.

Память EEPROM прошивается в режиме последовательного программирования побайтно.

При последовательном программировании используется последовательный интерфейс SPI. Достоинством этого режима является возможность программирования непосредственно в системе управления, так как для этого режима требуется всего три вывода микроконтроллера SCK, MISO и MOSI. Выключение эти разрядов микроконтроллера (если они используются в системе) от внешних устройств системы управления может быть осуществлено перемычками. При этом поддерживаются следующие команды:

Рисунок 63

  • Разрешение программирования;

  • Стирание кристалла;

  • Чтение FLASH-памяти;

  • Загрузка страницы памяти в буфер4

  • Запись страницы FLASH-памяти из буфера;

  • Чтение EEPROM;

  • Запись EEPROM;

  • Чтение ячеек защиты;

  • Запись ячеек защиты;

  • Чтение конфигурационных ячеек (младший байт);

  • Чтение конфигурационных ячеек (старший байт);

  • Чтение дополнительного конфигурационного байта;

  • Запись конфигурационных ячеек (младший байт);

  • Запись конфигурационных ячеек (старший байт);

  • Запись дополнительного конфигурационного байта;

  • Чтение идентификатора;

  • Чтение калибровочного байта.

Каждая команда программирования имеет формат 4 байта. В команде старшие разряды являются самой командой. Следующие разряды являются адресом или значением. Например, команда стирания кристалла $AC 53 XX XX. Команда чтения байта из FLASH в своем формате содержит: команду (старший байт), адрес ячейки памяти (два байта) и считанный байт. Для записи байта в буфер страниц в команде задается адрес байта в странице и сам байт, а при записи страницы (из буфера) во FLASH задается адрес начала страницы во FLASH.

Для перевода микроконтроллера в режим программирования необходимо подать нулевые уровни на входы RESET (состояние сброса микроконтроллера) и SCK. Последовательность программирования FLASH:

  • Команда разрешения программирования;

  • Команда стирания кристалла;

  • Последовательность команд загрузки буфера страницы. В каждой команде передается адрес байта в странице и значение байта. Так как разрядность ячейки FLASH равна 16, то необходимо передать две команды в последовательности: сначала запись в страничный буфер младшего байта, затем старшего. Для полного заполнения буфера страницы (64 16-разрядных слова) необходимо передать 128 команд.

  • Команда записи страницы FLASH-памяти из буфера.

Для определения окончания записи можно циклически считывать содержимое любой ячейки. После окончания записи страницы во FLASH считываемое значение будет не FF (значение после очистки), а записанное значение.

При параллельном программировании в микроконтроллере используются порты B и D. Команды, данные и адреса передаются побайтно через порт В. Порт D и выводы подключения кварцевого резонатора микроконтроллера используются для сигналов управления. Сигналы управления: готовность/занятость, режим работы порта В: ввод байта в микроконтроллер/вывод, запись, выбор байта младший/старший, загрузка байта команды, загрузка байта адреса, загрузка данных, сигнал загрузки страницы. На вывод RESET микроконтроллера подают напряжение +12 вольт.

Рисунок 64

Команды, аналогичные командам в последовательном режиме, но формат команды – 1 байт. Последовательность записи FLASH:

    1. команда стирания;

    2. команда записи FLASH;

    3. загрузить адрес ячейки в буфере страницы;

    4. загрузить младший байт данных;

    5. загрузить старший байт данных;

    6. запомнить данные в буфере;

    7. повторять 4) – 6) до заполнения буфера страницы;

    8. загрузить адрес страницы;

    9. записать страницу.

Операции 3) – 9) выполняются при помощи сигналов управления порта D.

Параллельное программирование производится с помощью специального программатора.

Программирование FLASH и EEPROM может выполняться с использованием интерфейса JTAG. Вообще, основное назначение этого интерфейса – внутрисхемная отладка программного обеспечения, а программирование является его не основной функцией. Интерфейс JTAG относится к последовательным и программирование с его использованием весьма имеет сходство с программированием по интерфейсу SPI.

Все микроконтроллеры семейства Mega имеют возможность само­программирования, т. e. самостоятельного изменения содержимого своей памяти прогpамм. Эта особенность позволяет создавать на их основе очень гибкие системы, алгоритм работы которых будет менять­ся самим микроконтроллером в зависимости от каких-либо внутрен­них условий или внешних событии.

Для поддержки самопрограммирования вся область памяти про­грамм логически разделена на две секции - секцию прикладной про­граммы (Application section) и секцию загрузчика (Boot Loader Section). Изменение памяти прогpамм осуществляется программой-загрузчиком, расположенной в одноименной секции. Для загрузки нового содержимого памяти программ, а также для выгрузки старого содержимого программа-загрузчик может использовать любой интерфейс передачи данных (USART/UART, SРI, TWI), имеющийся в составе конкретного микроконтроллера. Загрузчик может изменять содержимое обеих секций. Это позволяет ему моди­фицировать собственный код и даже удалять себя из памяти, если на­добность в нем отпадет. Уровень доступа (чтение/запись) к каждой из секций задается пользователем c помощью ячеек защиты BLB02:BLB01 и BLB12:BLB11.

Переход к программе-загрузчикy может осуществляться различным образом. B частности, она может быть вызвана из основной програм­мы командами CALL/JMP. Другим способом является перемеще­ние вектора сброса в начало секции загрузчика. B этом случае запуск программы-загрузчика будет осуществляться автоматически после ка­ждого сброса микроконтроллера. Положение вектора сброса определя­ется состоянием конфигурационной ячейки BOOTRST. Если в ней содержится «1», вектор сброса располагается в начале памяти прогpамм по адресу $0000. При запрограммированной ячейке, когда в ней содержится «0», вектор сброса располагается в начале секции загрузчика.

B микроконтроллере АТmegа16 имеется также и другое разделение памяти программ. Вся память программ разбита на области фиксированного размера, называемых «чтение при записи (Read-While-Write, RWW)» и «нет чтения при записи (No Read-While-Write, NRWW)». Размеры этих областей:

RWW 112 страниц, адреса $0000 – 1BFF.

NRWW 16 страниц, адреса $1C00 – 1FFF.

Отличие между этими областями заключается в различном поведении центрального процессора при изменении расположенных в них данных:

  • во время выполнения операции стирания или записи страницы

памяти программ, расположенной в области RWWW процессор может осуществлять чтение только из области NRWW;

  • во время выполнения операции стирания или записи странницы

памяти программ, расположенной в области NRWW процессор

останавливается до окончания этой операции.

Таким образом, во время изменения содержимого страницы памяти программ, расположенной в области RWW чтение этой области запре­щено. Попытка обратиться во время программирования к коду, нахо­дящемуся в области RWW (в результате выполнения команд CALL; JMP/LPM или в результате прерывания), может привести к непредска­зуемым последствиям. Во избежание этого следует либо запретить пре­рывания, либо перенести таблицу векторов прерываний в секцию за­грузчика, которая всегда находится в области NRWW

Для определения того, разрешено чтение из области RWW или нет предназначен флаг RWWSВ регистра SPMCR (см. ниже). Установлен­ный в «1» флаг означает, что область RWW заблокирована для чтения. По окончании операции программирования флаг RWWSВ должен быть сброшен программно (см. описание регистра SPMCR).

Напротив, код, расположенный в области NRWW, может быть считан во время изменения страницы памяти прогpамм, расположен­ной в области RWW. А при изменении содержимого области NRWW процессор останавливается до завершения операции.

Изменение содержимого памяти программ и ячеек защиты загрузчика производится с помощью команды SPM. По этой команде выполняется операция загрузки ячейки программной памяти, адрес которой в регистре Z, из пары регистров R1:R0. Определение операции, выполняемой по команде SPM, осуществляется с помощью регистра управления SPMCR.

Номера, имена и описание разрядов регистра SPMCR приведены ниже.

7 SPMIE Разpeшение прерывания SPM. Если в этом разряде записана лог. 1 и флаг I регистра SREG также установлен в «1», то разрешается прерывание готовности SPM. Прерывание генерируется все время, пока разряд SPMЕN регистра сброшен в «0».

6 RWWSB Запрещен доступ к области RWW Этот флаг показывает возможность обращения по адресам, расположенным в области RWW. Если флаг установлен в 1, доступ к области RWW запрещен, если сброшен в 0 - разрешен. Установка этого флага осуществляется аппаратно при выполнении операций записи или стирания страницы памяти. Сброс флага осуществляется либо прoгpаммно, записью лог.1 в разряд RWWSRE по окончании операции, либо аппаратно, при запуске операции загрузки страницы.

5 Зарезервировано, читается как «0».

4 RWWSRE Чтение области RWW разpeшено. Одновременная установка этого разряда и разряда SРМЕN позволяет разрешить доступ к области RWW. Разрешение доступа к этой области осуществляется запуском команды SРМ в течение 4-x машинных циклов после установки указанных разрядов. Разрешение доступа к области RWW может осуществляться только после завершения операции программирования (после сброса флага SPMEN).

3 BLBSET Изменение ячеек защиты загрузчика. При одновременной установке этого разряда и разряда SPMEN, команда SPM, запущенная в течение 4-х машинных циклов, осуществит установку защитных ячеек загрузчика в соответствии c содержимым регистpа R0. Сброс разряда .ВLВSЕТ осуществляется аппаратно после установки ячеек защиты либo по истечении yказанного времени. По команде LPM, запyщенной в течение 3-х машинных циклов после установки yказанных разрядов, будет осyществлено чтение либо конфигурационных ячеек, либо ячeeк защиты (зависит от значения разряда Z0 регистpа Z).

2 PGWRT Запись стpаницы. При одновpeменной устaновке этого разряда и

разряда SPMEN, команда SPM, запyщенная в течение 4-х машинных циклов, осуществит запись стpаницы памяти прогpамм из временного буфера. Адрec страницы должен бьггь загpyжен в cтарший байт регистра Z (R31 ). Сброс разряда PGWRT осyществляется аппаратно по окончании записи страницы либо по истечении указанного вpeмени. При записи в секцию NRWW центpaльный пpoцессор ocтанавливается на вpeмя выполнения операции.

1 PGERS Стирание страницы. При одновременной установке этого разряда и разряда SPMEN, команда SPM, запyщенная в течение 4-х машинных цик­лов, осyществит стирание страницы памяти прогpамм из временного буфе­ра. Адрес стpаницы должен быть загpyжен в старший байт регистpа Z (R31). Сброс разряда PGERS осуществляется аппаратно по окончании стирания страницы либо по истечении указанного времени. При записи в секцию NRWW цензральный процессор останавливaется на вpeмя выполнения операции.

0 SPMEN Разpeшение выполнения команды SPM. Установка этого разряда разре­шает запуск команды SPM в течение 4-х машинных циклов. Если разряд SPMEN устанавливается одновременно c одним из разрядов RWWSRE, BLBSET, PGWRT или PGERS, выполняется операция, определяемая этим разpядом (см. опиcaние разрядов). Если ycтанавливается тoлько разряд SPMEN, осyществляется сохранение содержимого регистров R1:R0 во вре­менном бyфeре по адресу находящемуся в peгистpe Z (МЗР peгистpа игно­рирyeтся). Сбpос разряда SPMEN осуществляется аппаратно после завер­шения операции либо по истечении указанного времени.

Изменение содержимого памяти программ выполняется в последовательности:

      1. Заполнение временного буфера страницы новым содержимым;

      2. Очистка страницы;

      3. Перенос из буфера в память программ.

Для определения момента окончания выполнения операций можно либо опрашивать состояние флага SPMEN регистра SPMCR, дожидаясь его сброса, либо воспользоваться прерыванием “Готовность SPM”. Это прерывание генерируется все время, пока флаг SPMEN сброшен.

Для стирания страницы памяти программ необходимо занести адрес страницы в регистр Z, записать значение х0000001 в регистр SPMCR и в течение 4-х циклов выполнить команду SPM. Содержимое регистров R1:R0 при этом игнорируется.

Для занесения команды в буфер следует загрузить адрес ячейки в регистр Z, а код команды в регистр R1:R0. После этого необходимо загрузить регистр SPMCR значение х0000011 и в течение 4-х циклов выполнить команду SPM.

Запись из буфера в программную память производится загрузкой в Z адреса страницы, загрузкой в SPMCR значения х0000101 и выполнением в течение 4-х циклов команды SPM.