Программирование микроконтроллера заключается в записи:
■ кодов команд программы и констант в FlashROM;
■ кодов исходных данных в EEPROM;
■ требуемых значений установочных битов (Fuse Bits);
■ требуемых значении битов защиты (Lock Bits).
В микроконтроллерах, поступающих в продажу, во всех ячейках FlashROM записан код $FFFF, во всех ячейках EEPROM — код $FF, биты защиты имеют единичное значение, а установочные биты могут иметь разные значения. Исходные значения установочных битов у микроконтроллеров разных типов указаны в приложении П6. Кроме того, в трех специальных ячейках памяти записаны сигнатурные байты, определяющие тип микроконтроллера.
Коды, записанные в FlashROM и EEPROM, сигнатурные байты и значения установочных битов и битов защиты могут быть прочитаны для контроля правильности записи и определения типа и состояния микроконтроллера.
В микроконтроллерах семействах AVR имеются два бита защиты — LB1 и LB2. При единичном значении обоих битов возможны и запись, и чтение кодов. После программирования бита LB1 (LB1=O) дальнейшая запись кодов в FlashROM и EEPROM и изменение значения установочных битов невозможны. После программирования бита LB2 (LB1=O, LB2 = 0) невозможно также чтение кодов, записанных в FlashROM и EEPROM, и значений установочных битов.
При перепрограммировании микроконтроллера (программировании микроконтроллера, ранее прошедшего программирование) необходимо предварительно "стереть" прежнюю запись.
При стирании во всех ячейках FlashROM и EEPROM восстанавливаются коды $FFFF и $FF соответственно, биты защиты принимают единичное значение, а установочные биты и сигнатурные байты остаются без изменения. Допускается выполнить до 1000 циклов "стирание-запись" для ячеек FlashROM и до 100000 циклов для ячеек EEPROM.
Запись и чтение кодов при программировании выполняются побайтно. Ввод и вывод битов в байте могут выполняться параллельно или последовательно.
В микроконтроллерах семейства AVR реализуются следующие способы программирования:
1. Параллельное программирование с использованием дополнительного источника напряжения +12 В (High-Voltage Parallel Programming, HVPP);
2. Последовательное программирование с использованием дополнительного источника напряжения +12 В (High-Voltage Serial Programming, HVSP);
3. Последовательное программирование без использования дополнительного источника напряжения {Low-Voltage Serial Programming, LVSP).
Самопрограммирование (Self-Programming, SLFP). Возможность использования названных способов программирования в микроконтроллерах разных типов отмечена знаком "+" в табл. 1.
Программирование с использованием дополнительного источника напряжения (HVPP и HVSP) выполняется с помощью программатора до установки микроконтроллера в аппаратуре, где ему предстоит работать. Последовательное программирование без использования дополнительного источника напряжения (LVSP) может выполняться после установки микроконтроллера в аппаратуре (In-System Programming). Программирование по способу LVSP возможно при нулевом значении установочного бита SPIEN.
При программировании по способу LVSP микроконтроллер находится в рабочем состоянии, значения напряжения питания и тактовой частоты лежат в пределах, установленных для микроконтроллера данного типа (приложение Ш). Вывод RESET соединен с шиной GND. Ввод и вывод байтов при программировании выполняются с использованием трех выводов - MOSI, MISO и SCK.
Таблица 1
Тип МК | Способ программирования | Выводы порта | SPI | ||||
HVPP | HVSP | LVSP* | SLFP | MOSI | MISO | SCK | |
t11 | + | ||||||
t12 | + | + | PBO | PB1 | PB2 | ||
t15 | + | + | PBO | PB1 | PB2 | ||
2323 | + | + | PBO | PB1 | PB2 | ||
2343 | + | + | PBO | PB1 | PB2 | ||
1200 | + | + | PB5 | PB6 | PB7 | ||
2313 | + | + | PB5 | PB6 | PB7 | ||
t28 | + | ||||||
4433 | + | + | PB3 | PB4 | PB5 | ||
8515 | + | + | PB5 | PB6 | PB7 | ||
8535 | + | + | PB5 | PB6 | PB7 | ||
m163 | + | + | + | PB5 | PB6 | PB7 | |
m103 | + | + | PB2** | PB3" | PB1 |
* — выполняется при SPIEN = 0;
1 — при программировании RXD и TXD
В микроконтроллерах, имеющих последовательный порт ввода-вывода SPI (табл. 1), используются выводы этого порта. В микро-Контроллерах без порта SPI находится вспомогательный порт SPI, работающий только при программировании в режиме ведомого устройства. Функции выводов MOSI, MISO и SCK выполняют выводы параллельных портов ввода-вывода.
Выводы микроконтроллера, используемые в качестве входов MOSI и SCK и выхода MISO у микроконтроллеров разных типов указаны в табл. 1. В микроконтроллере типа m10З вместо выводов MOST и MISO используются выводы RXD и TXD соответственно.
У микроконтроллеров типа ml63 и ml03 запись байтов в FlashROM выполняется за два этапа. На первом этапе байты записываются в буферное запоминающее устройство. На втором этапе выполняется перепись всех кодов из буферного запоминающего устройства в страницу FlashROM. Страница у микроконтроллеров типа т163 и ml03 имеет емкость 128 и 256 байтов соответственно.
При программировании по способу LVSP в микроконтроллере могут выполняться следующие операции:
1) разрешение LVSP (Programming Enable);
2) стирание записи (Chip Erase);
3) запись байта в FlashROM (Write Program Memory);
4) запись байта в буферные ЗУ (Load Flash Page);
5) перепись из буферного ЗУ в FlashROM (Write Flash Page);
6) чтение байта из FlashROM (Read Program Memory);
7) запись байта в EEPROM (Write EEPROM);
8) чтение байта из EEPROM (Read EEPROM);
9) запись битов защиты (Write Lock Bits);
10) чтение битов защиты (Read Lock Bits);
11) запись установочных битов (Write Fuse Bits);
12) чтение установочных битов (Read Fuse Bits);
13) чтение сигнатурного байта (Read Signature Byte);
14) чтение калибровочного байта (Read Calibration Byte).
Операции №№ 10 и 12 у микроконтроллеров некоторых типов
объединены в одну операцию. При выполнении операции "Запись байта в EEPROM" автоматически перед записью выполняется стирание соответствующей ячейки EEPROM.
Операции №№ 1, 2, 6, 7, 8, 9, 13 выполняются в микроконтроллерах всех типов. Возможность выполнения других операций у микроконтроллеров разных типов отмечена знаком "+" в табл. 2.
Таблица 2
Тип МК | ||||||||||||
t12 | t15 | 2323 | 2343 | 1200 | 2313 | 4433 | 8515 | 8535 | m163 | m103 | ||
Write | Program Memory | + | + | + | + | + | + | + | + | + | ||
Load | Flash Page | + | + | |||||||||
Write | Flash Page | + | + | |||||||||
Read | Lock Bits | + | + | + | + | + | + | + | + | |||
Write | Fuse Bits | + | + | +* | +* | +* | +* | +* | +* | |||
Read | Fuse Bits | + | + | + | + | + | + | + | + | |||
Read | Calibration Byte | + | + | + |
Если операция "запись установочных битов" в микроконтроллере не выполняется, а значения этих битов перед программированием (перепрограммированием) отличаются от требуемых, необходимо до установки микроконтроллера в аппаратуре выполнить запись требуемых значений установочных битов с помощью программатора.
Для выполнения любой операции в микроконтроллер через вход MOSI вводится последовательность из четырех байтов, в которую входят один или два байта, определяющие тип операции, и байты, используемые при выполнении операции (адресный байт, записываемый байт, байт, содержащий значения установочных битов и битов защиты, холостой байт).
При выполнении операции чтения одновременно с вводом одного из байтов выводится считанный байт через выход MISO. Байты вводятся и выводятся, начиная со старшего бита. Частота следования импульсов на входе SCK должна быть не более 1/4 частоты тактового сигнала микроконтроллера. Сигнал на входе SCK при отсутствии импульсов должен иметь низкий уровень.
После завершения программирования по способу LVSP при размыкании ключа К микроконтроллер переходит к выполнению записанной программы, начиная с команды, записанной но адресу $0000.
В микроконтроллере типа m103 программирования но способу LVSP может выполняться при высоком уровне напряжения на входе RESET, если при подаче напряжения питания вывод PEN был соединен с шиной GND, и это соединение сохранялось до конца программирования.
Самопрограммирование микроконтроллера осуществляется в процессе сго работы. Самопрограммирование может выполняться в микроконтроллере типа m163. В этом микроконтроллере FlashROM разделена на две секции. Одна секция (Application Section, APS) предназначена для рабочей программы. В другой секции (Boot Loader Section, BLS) размещается программирующая программа (Flash-Resident Boot Loader), введенная ранее в FlashROM.
Деление FlashROM на две секции определяется комбинацией значений установочных битов BOOTSZ1 и BOOTSZ0 в соответствии с табл. 3.
Таблица 3
BOOTSZ1 | BOOTSZ0 | Объем BLS (слов) | Начальный адрес BLS |
0 | 0 | 1024 | $ 1С00 |
0 | 1 | 512 | $ 1Е00 |
1 | 0 | 256 | $ 1F00 - |
1 | 1 | 128 | $ 1F80 |
Если установочный бит BOOTRST имеет нулевое значение, при пуске микроконтроллера первая команда программы выбирается не по адресу $0000, а по адресу, указанному в табл. 3.
Программирование осуществляется с использованием команды SPM (№ 131), выполнение которой зависит от кода, записанного в регистр SPMCR (№ $37) не ранее, чем за четыре такта до выборки кода команды SPM из FlashROM.
Программирующая программа может записывать коды в обе секции FlashROM и модифицировать саму себя.
Для защиты секций FlashROM кроме битов защиты LB1 и LB2 в микроконтроллере типа ml63 используются дополнительные биты за-щиты - BLB01 и BLB02 для защиты секции APS и BLB11 и BLB12 для защиты секции BLS.
Пуск микроконтроллера происходит при нодаче напряжения питания на его выводы VCC и RESET (Power-On Reset, POR). Перезапуск в процессе работы выполняется при появлении на выводе RESET нулевого уровня сигнала с последующим возвращением к высокому уровню (External Reset, EXR) и при переполнении сторожевого таймера (Watchdog Reset, WDTR). В микроконтроллерах типа t12, t15, 4433 и m163 перезапуск происходит также при понижении напряжения питания на выводе VCC ниже определенного уровня с последующим возвращением к рабочему уровню (Brown-Out Reset, BOR).
При пуске и перезапуске принимает активное значение внутренний сигнал Internal Reset, который сохраняет это значение в течение определенного интервала времени (Start-Up Time). При активном значении сигнала все регистры ввода-вывода переводятся в исходное состояние и в счетчик команд (PC) записывается код числа 0.
По истечении интервала Start-Up Time микроконтроллер приступает к выполнению программы, начиная с команды, записанной в FlashROM по нулевому адресу.
В исходном состоянии регистров ввода-вывода все разряды регистров находятся в нулевом состоянии.
Исключением являются:
■ регистр состояния USR или UCSRA (№ $0В) в порте UARX в который заносится код $20 (UDRE = 1);
■ регистр управления UCR или UCSRB (№ $0А) в порте UARX в который заносится код $02 (RXB8 =1);
■ регистр OCR1B (№ $2D) в таймере-счетчике Т/С1 микроконтроллера типа tl5, в который заносится код $FF;
■ регистр SPDR в порте SPI, исходное состояние которого является неопределенным;
■ регистры EEAR, EEARL и EEARH (№№ $1Е и $1F) в блоке управления EEPROM микроконтроллеров типа tl2, tl5, 2323, 4423, 4433, 8535 и ml63, исходное состояние которых является неопределенным;
■ регистр PORTA (№$1В) микроконтроллера типа t28, в который заносится код $0
В табл. 4 отмечено наличие таких элементов у микроконтроллеров разных типов и указаны их характеристики.
При пуске микроконтроллера при достижении напряжением питания уровня VP0TR с помощью схемы PORC устанавливается в единичное состояние триггер Т и сигнал Internal Reset принимает активное значение. При достижении уровня Vrst запускается схема временной задержки, выполненная па базе счетчика (Counter). По истечении времени задержки tTOUT сигнал на выходе триггера принимает пассивное значение.
Таблица 4
Элемент схемы |
Тип МК | |||||||||||
t11 | t12 | t15 | 2323 | 2343 | 1200 | 2313 | t28 | 4433 | 8515 | 8535 | m163 | |
MCUSR | 2 | 4 | 4 | 2 | 2 | 3* | 4 | 2 | 4 | |||
BORC | + | + | + | + | ||||||||
CK | + | + | + | + | ||||||||
CKSEL | 2 – 0 | 3 – 0 | 1 – 0 | 3 – 2 | 2 – 0 | 3 – 0 | ||||||
FSTRT | + | + | + | + | + | |||||||
SUT | ||||||||||||
*d – MCUCS (№ 07) |
При перезапуске с использованием вывода RESET активное значение сигнала Internal Reset устанавливается с использованием схемы EXRC при переходе напряжения на выводе RESET через пороговое значение Vrst в сторону понижения напряжения, а схема задержки запускается при переходе этого напряжения через значение VRST в сторону повышения.
При переполнении сторожевого таймера WDT формируется короткий импульс, по переднему фронту которого устанавливается активное значение сигнала, а по заднему фронту запускается схема задержки.
При наличии схемы BORC (табл. 4) и нулевом значении установочного бита BODEN активное значение сигнала Internal Reset устанавливается при переходе напряжения на входе VCC через пороговое значение VBOT в сторону понижения, а запуск схемы задержки происходит при переходе напряжения через пороговое значение VBOT в сторону повышения. Уровень VBOT может иметь одно из двух знамени» в зависимости от значения установочного бита BODLEVLL.
В микроконтроллерах, не имеющих схемы BORC (табл. 4), после выключения напряжения питания повторный пуск микроконтроллера путем подачи напряжения питания (POR) возможен, если напряжение питания на выводе VCC упало ниже уровня Vpotf- Если этот уровень не пройден, микроконтроллер начнет выполнять случайную произвольную программу.
Ориентировочные значения пороговых уровней указаны в табл. 5.
Таблица 5
VPORT (B) |
VPORF (B) |
VPST (B) |
VBOT(B) | |
BODLVEL | ||||
1 | 0 | |||
1,2 – 1,4 | 0,4 – 0,6 | (0,6 – 0,8)VCC | 2,7 | 4,0 |
Величина временной задержки tTOUT может быть постоянной или задаваться разработчиками путем изменения значений установочных битов CKSEL, которых у микроконтроллеров разных типов может быть от двух до четырех, и установочного бита FSTRT, а у микроконтроллера типа тЮЗ — установочных битов SUT1 л SUT0 (табл. 4).
В качестве сигнала, подаваемого на счетный вход счетчика Count, могут использоваться сигнал генератора сторожевого таймера GWDT или тактовый сигнал микроконтроллера СК. Выбор источника сигнала выполняется с помощью схемы управления СУ1 путем изменения значении установочных битов CKSEL. Величина задержки tTOUT может изменяться от нескольких десятков мке до нескольких сотен мс.
В микроконтроллерах, имеющих регистр MCUSR (№ $34), имеется возможность программными средствами определять способ запуска/перезапуска микроконтроллера, по которому началось выполнение текущей программы. В регистре MCUSR в этих целях используются 2, 3 или 4 разряда (табл. 4). При наличии четырех или трех разрядов способам запуска POR, EXR, WDTR и BOR соответствует единичное состояние разрядов PORF, EXTRF, WDRF и BORF регистра MCUSR соответственно.
При наличии двух разрядов (PORF и EXTRF) способ записи (POR, EXR или WDTR) определяется путем опроса состояния разрядов в начале запущенной/перезапущенной программы со сбросом обоих раз-Рядов в нулевое состояние.
Если при опросе PORF = 1, был пуск POR, если EXTRF = 1, был перезапуск EXR, если оба разряда имеют пулевое состояние, был перезапуск WDTR.
При медленном нарастании напряжения питания на входе VCC после Включения источника напряжения питания в процессоре (CPU) и EEPROM выполняются случайные операции, в результате которых может произойти произвольная запись случайного байта в EEPROM Для предотвращения этого явления следует удерживать нулевой уровень сигнала на выводе RESET до появления рабочего значения напряжения на выводе VCC. Эту операцию можно выполнить с помощью внешней схемы формирования сигнала RESET (Brown-Out Detector, BOD).
Микроконтроллеры семейства AVR могут быть переведены в энергосберегающие режимы работы. У микроконтроллеров всех типов возможны два энергосберегающих режима — режим холостого хода (Idle Mode, IM) и режим пониженного энергопотребления (Power-Down Mode, PDM). Микроконтроллеры, имеющие таймеры-счетчики с режимом счета реального времени (8535, ml63, ml03), кроме того, могут быть переведены в режим энергосохранения (Power Save Mode, PSM). Микроконтроллеры типа t15 и ml63, имеющие аналого-цифровой преобразователь, кроме того, могут переводиться в режим подавления помех работе АЦП (ADC Noise Reduction Mode, ANRM).
Переход в энергосберегающий режим происходит в ходе программы при выполнении команды с мнемокодом SLEEP, если разряд SE регистра MCUCR (№$35) установлен в единичное состояние.
Выбор режима в микроконтроллерах, которые могут находиться в двух энергосберегающих режимах, определяется состоянием разряда SM регистра MCUCR. При SM = 0 устанавливается режим холостого хода, при SM = 1 — режим пониженного энергопотребления. В микроконтроллерах, которые могут находиться в трех и четырех энергосберегающих режимах, выбор режима определяется комбинацией состояний разрядов SM1 и SM0 регистра MCUCR в соответствии с табл. 6.
SM1 | SM0 | ТипМК | |||
t15 | 8535 | m163 | m103 | ||
0 0 1 1 |
0 1 0 1 |
IM ANRM PDM |
IM PDM PSM |
IM ANRM PDM PSM |
IM PDM PSM |
Выход из энергосберегающего режима происходит при поступлении разрешенного запроса прерывания или перезапуске микроконтроллера. При выходе по запросу прерывания выполняется прерывающая программа и далее совершается переход к команде, расположенной после команды SLEEP, по которой произошел переход в данный режим.
В режиме холостого хода (IM) процессор остановлен, периферийные устройства продолжают работать, коды в регистрах общего назначения, ячейках SRAM и регистрах ввода-вывода, расположенных в пассивных периферийных устройствах, сохраняются неизменными. Ток потребления Icc У микроконтроллеров разных типов уменьшается в 2—4 раза. Если аналоговый компаратор не используется для выхода из режима, разряд ACD в регистре ACSR (№ $28) для уменьшения тока потребления должен быть установлен в единичное состояние.
В режиме пониженного энергопотребления (PDM) остановлен процессор и генератор тактового сигнала. Периферийные устройства, кроме сторожевого таймера и блока прерываний, не работают. Коды в регистрах общего назначения, ячейках SRAM и регистрах ввода-вывода сохраняются неизменными. Ток потребления Iсс у микроконтроллеров разных типов имеет величину от нескольких единиц до нескольких десятков мкА. Напряжение питания Vcc может быть снижено до величины 2 В.
Выход из режима возможен при перезапуске микроконтроллера и по разрешенному запросу прерывания из внешнего источника при представлении запроса уровнем сигнала. Сигнал должен сохранять низкий уровень в течение некоторого времени, пока генератор тактового сигнала входит в установившийся режим. В микроконтроллере типа m163, имеющем порт TWSI, выход из режима возможен также по запросу прерывания при опознании портом собственного адреса в поступившем адресном байте.
Режим энергосохранения (PSM) в микроконтроллерах, имеющих таймер-счетчик с режимом счета реального времени, отличается от режима пониженного энергопотребления возможностью сохранения работы данного таймера после перехода в режим и возможностью выхода из режима по запросу прерывания от этого таймера при его работе в режиме счета реального времени.
В режиме подавления помех работе АЦП (ANRM) процессор остановлен. Работают только аналого-цифровой преобразователь, блок прерываний и сторожевой таймер. Выход из режима происходит по запросу прерывания из внешнего источника при представлении запроса уровнем сигнала, по запросу прерывания от АЦП и при перезапуске микроконтроллера. В микроконтроллере типа m163 выход из режима возможен также по запросу прерывания при опознании портом TWSI собственного адреса.
Литература
Кибернетика – основа наук –под ред. проф. Карул К.В. - К. – 2009 г.
Основы микропроцессорных исчислений – под ред. Мозаев Г.Н. – М. – 2007 г.
Микроконтроллеры – под ред. д.т.н. Нелипова А.С. – Х. ХИРЕ – 2008 г.
Невлюдов И.Я. – Компьютеризация общества – Х. ХИРЕ – 2007 г.
Компьютерная техника и технологии – нпж - К. – 2008-2009 г.г.