Микроконтроллеры AVR
Архитектура микроконтроллеров AVR и PIC. Регистры общего назначения и специальных функций. Внутренняя и внешняя память SRAM микроконтроллеров AVR. Характеристика аналого-цифрового преобразования. Роль и особенности параллельного программирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.12.2014 |
Размер файла | 500,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
- ADFM - выбор разрешения преобразования: 1 - 10 бит; 0 - 8 бит.
Результат преобразования сохраняется в регистровой паре ADRESL, ADRESH, причем в регистре ADRESH используются только младшие два разряда в случае преобразования с разрешением 10 бит.
Таким образом, в общем случае процесс аналого-цифрового преобразования в микроконтроллерах PIC протекает следующим образом:
- определить с помощью разрядов регистра ADCON1 конфигурацию преобразования;
- установить разряды 6-7 регистра ADCON0 для выбора рабочей частоты АЦП;
- установить разряды 3-5 регистра ADCON0 для выбора аналогового канала;
- установить в лог. 1 разряды ADON и GO регистра ADCON0, чтобы начать преобразование;
- дождаться окончания преобразования (лог. 0 в разряде DONE регистра ADCON0) и считать результат из регистровой пары ADRESLL, ADRESH.
Встроенный аналоговый компаратор
В ряде моделей микроконтроллеров AVR и PIC используется встроенный аналоговый компаратор напряжения, сравнивающий входное напряжение на двух входах. Как только напряжение на неинвентирующем входе станет больше, чем на инвентирующем, на выходе компаратора устанавливается лог. 1. Часто аналоговый компаратор используют для сравнения некоторого входного напряжения с опорным (рис. 8.4).
Для активизации компаратора требуется предварительно перевести соответствующие выводы микроконтроллера в режим входов. Время срабатывания компараторов небольшое, поэтому с их помощью можно быстро формировать ответные реакции на изменение соотношений входных напряжений.
В микроконтроллерах AVR входам компаратора AIN0 и AIN1 обычно соответствуют разряды 0/1 или 2/3 порта В. В микроконтроллерах PIC конфигурация входов компаратора (вывода порта А) настраивается с помощью разрядов регистра CMCON, о чем речь пойдет чуть позже.
В микроконтроллерах AVR для управления работой аналогового компаратора используется регистр ACSR (рис. 8.5), расположенный в области ввода/вывода по адресу 0x08 (адрес 0x28 в SRAM).
Рис. 8.4 Принцип работы аналогового компаратора напряжений
Рис. 8.5 Регистр ACSR микроконтроллеров AVR
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
ACD |
- |
ACO |
ACI |
ACIE |
ACIC |
ACIS1 |
ACIS0 |
Назначение разрядов регистра ACSR:
- ACD - если установлен в лог. 1, то питание аналогового компаратора отключено;
- АСО - напрямую связан с выходом аналогового компаратора;
- ACI - флаг прерываний от аналогового компаратора - устанавливается в лог. 1, когда наступает событие, определенное разрядами ACIS1 и ACIS0;
- ACIE - разряд разрешения прерывания от аналогового компаратора;
- ACIC - разряд разрешения захвата на входе аналогового компаратора; для того чтобы можно было вызвать прерывание по захвату, оно должно быть разрешено разрядом TICIE1 в регистре TIMSK;
- ACIS1, ACIS0 - устанавливают вид события на выходе аналогового компаратора, которое должно вызвать прерывание его работы (табл. 8.3).
Таблица 8.3 Вид событий для вызова прерывания от аналогового компаратора
ACIS1 |
AC1S0 |
Вид прерывания аналогового компаратора |
|
0 |
0 |
Прерывание при изменении состояния выхода (разряда АСО) |
|
0 |
1 |
Не используется |
|
1 |
0 |
Прерывание по ниспадающему фронту на выходе аналогового компаратора (напряжение на AIN1 больше, чем на AIN0) |
|
1 |
1 |
Прерывание по нарастающему фронту на выходе аналогового компаратора (напряжение на AIN0 больше, чем на AIN1) |
В микроконтроллерах PIC могут использоваться два аналоговых компаратора - в частности, в серии Р1С16С62х. В этом случае для управления их работой предназначен регистр CMCON (рис. 8.6).
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
C2OUT |
C1OUT |
- |
- |
CIS |
CM2 |
CM1 |
CM0 |
Рис. 8.6 Регистр CMCON микроконтроллеров серии Р1С16С62х
- СМ0-СМ2 - выбор режима работы компаратора (табл. 1.26);
- CIS - разряд управления входным коммутатором компаратора (табл. 8.4);
- C10UT - выходной сигнал компаратора 1;
- C20UT - выходной сигнал компаратора 2.
Таблица 8.4 Конфигурация входов компараторов напряжения в серии Р1С16С62х
CIS |
СМ2 |
СМ1 |
CM0 |
Компаратор 1 |
Компаратор 2 |
|||
Вход + |
Вход- |
Вход + |
Вход- |
|||||
X |
0 |
0 |
0 |
RA0 |
RA3 |
RA2 |
RA1 |
|
0 |
0 |
0 |
1 |
RA2 |
RA0 |
RA2 |
RA1 |
|
1 |
0 |
0 |
1 |
RA2 |
RA3 |
RA2 |
RA1 |
|
0 |
0 |
1 |
0 |
Vref |
RA0 |
Vref |
RA1 |
|
1 |
0 |
1 |
0 |
Vref |
RA3 |
Vref |
RA2 |
|
X |
0 |
1 |
1 |
RA2 |
RA0 |
RA2 |
RA1 |
|
X |
1 |
0 |
0 |
RA3 |
RA0 |
RA2 |
RA1 |
|
X |
1 |
0 |
1 |
- |
- |
RA2 |
RA1 |
|
X |
1 |
1 |
0 |
RA2 |
RA0 |
RA2 |
RA1 |
|
X |
1 |
1 |
1 |
- |
- |
- |
- |
4. Программирование микроконтроллеров AVR семейства Mega
Общие сведения
В общей сложности микроконтроллеры семейства Mega поддерживают следующие режимы программирования:
- режим последовательного программирования (по интерфейсу SPI);
- режим параллельного программирования при высоком напряжении;
- режим программирования через интерфейс JTAG.
Под «высоким» напряжением здесь понимается управляющее напряжение (12 В), подаваемое на вывод RESET микроконтроллера для перевода последнего в режим программирования.
Режимы программирования для конкретного микроконтроллера представлены в табл. 9.1.
Таблица 14.1 Режимы программирования микроконтроллеров семейства Mega
Режим программирования |
ATmega 8515x/8535x |
ATmega 8x |
ATmega 16x/32x |
ATmega 64x/128x |
ATmega 48x/88x/168x |
ATmega 162x |
ATmega 164x/324x ATmega 644x |
ATmega 165x |
ATmega 325x/3250x, ATmega 645x/6450x |
ATmega 640x, ATmega 1280x/1281x, ATmega 2560x2561x |
|
1.Последовательное, по интерфейсу SPI |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
2. Параллельное, при высоком напряжении |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
3. По интерфейсу JTAG |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
Кроме того, микроконтроллеры семейства Mega имеют возможность самопрограммирования. Под этим термином понимается изменение содержимого памяти программ, управляемое самим микроконтроллером.
В процессе программирования могут выполняться следующие операции:
- стирание кристалла (chip erase);
- чтение/запись FLASH-памяти программ;
- чтение/запись EEPROM-памяти данных;
- чтение/запись конфигурационных ячеек;
- чтение/запись ячеек защиты;
- чтение ячеек идентификатора;
- чтение калибровочного байта.
Все модели микроконтроллеров поставляются со стертой памятью программ и памятью данных (во всех ячейках находится число $FF) и пригодны к немедленному программированию.
Защита кода и данных
Содержимое FLASH-памяти программ, а также содержимое EEPROM-памяти данных может быть защищено от записи и/или чтения посредством программирования ячеек защиты (Lock Bits) LB1 и LB2. Возможные режимы защиты, соответствующие различным состояниям этих ячеек, приведены в табл. 8.2.
Таблица 8.2 Режимы защиты
№ режима |
Ячейки защиты |
Описание |
||
LB1 |
LB2 |
|||
1 |
1 |
1 |
Защита кода и данных отключена |
|
2 |
0 |
1 |
Запись FLASH и EEPROM запрещена |
|
3 |
0 |
0 |
Запрещены запись и чтение FLASH и EEPROM |
В режимах 2 и 3 запрещается также изменение конфигурационных ячеек. Поэтому включение защиты следует выполнять в самую последнюю очередь, после программирования остальных областей памяти микроконтроллера.
Во всех микроконтроллерах семейства, кроме ATmega48x, имеется четыре дополнительные ячейки защиты - BLB02, BLB01, BLB12 и BLB11. Ячейки BLB02:BLB01 определяют уровень доступа из секции загрузчика к коду, расположенному в секции прикладной программы, а ячейки BLB12:BLB11, наоборот, определяют уровень доступа из секции прикладной программы к коду, расположенному в секции загрузчика. Отсутствие указанных ячеек в модели ATmega48x обусловлено отсутствием у последней выделенной секции загрузчика. Возможные режимы защиты, соответствующие различным состояниям этих ячеек, приведены в табл. 9.3 и табл. 9.4 соответственно.
Таблица 9.3 Режимы защиты секции прикладной программы
№ режима |
Ячейки защиты |
Описание |
||
BLB02 |
BLB01 |
|||
1 |
1 |
1 |
Нет никаких ограничений по доступу к коду, расположенному в секции прикладной программы |
|
2 |
1 |
0 |
Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции прикладной программы |
|
3 |
0 |
0 |
Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции прикладной программы, и команда LPM (ELPM), вызываемая из секции загрузчика, не может осуществлять чтение из секции прикладной программы. Если таблица векторов прерываний расположена в секции загрузчика, то при выполнении кода из секции прикладной программы прерывания запрещены |
|
4 |
0 |
1 |
Команда lpm (elpm), вызываемая из секции загрузчика, не может осуществлять чтение из секции прикладной программы. Если таблица векторов прерываний расположена в секции загрузчика, то при выполнении кода из секции прикладной программы прерывания запрещены |
Таблица 9.4 Режимы защиты секции загрузчика
№ режима |
Ячейки защиты |
Описание |
||
BLB12 |
BLB11 |
|||
1 |
1 |
1 |
Нет никаких ограничений по доступу к коду, расположенному в секции загрузчика |
|
2 |
1 |
0 |
Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции загрузчика |
|
3 |
0 |
0 |
Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции загрузчика, и команда LPM (ELPM), вызываемая из секции прикладной программы, не может осуществлять чтение из секции загрузчика. Если таблица векторов прерываний расположена в секции прикладной программы, то при выполнении кода из секции загрузчика прерывания запрещены |
|
4 |
0 |
1 |
Команда lpm (elpm), вызываемая из секции прикладной программы, не может осуществлять чтение из секции загрузчика. Если таблица векторов прерываний расположена в секции прикладной программы, то при выполнении кода из секции загрузчика прерывания запрещены |
Все перечисленные ячейки защиты сгруппированы в одном байте. Расположение ячеек защиты в нем для разных моделей приведено на Рис. 14.1.
Рис. 9.1 Байт ячеек защиты
В исходном (запрограммированном) состоянии во всех ячейках защиты содержится 1, после программирования - 0. Стирание ячеек (запись в них лог. 1) может быть произведено только при выполнении команды «Стирание кристалла», уничтожающей также содержимое FLASH- и EEPROM-памяти.
Конфигурационные ячейки
Как следует из названия, конфигурационные ячейки (Fuse Bits) определяют различные параметры конфигурации микроконтроллера. Эти ячейки расположены в отдельном адресном пространстве, доступном только при программировании. Все конфигурационные ячейки сгруппированы в несколько байтов, а состав этих ячеек зависит от конкретной модели микроконтроллера. Наличие тех или иных ячеек в конкретном микроконтроллере можно определить по табл. 9.5, где в столбцах, отмеченных «звездочкой», указаны состояния конфигурационных ячеек по умолчанию. Краткое назначение всех конфигурационных ячеек приведено в табл. 9.6. Подробное описание их назначений было приведено в соответствующих главах книги.
Для изменения содержимого конфигурационных ячеек используются специальные команды программирования. Команда «Стирание кристалла» на состояние этих ячеек не влияет. Напоминаю, что при запрограммированной ячейке защиты LB1 конфигурационные ячейки блокируются.
Поэтому конфигурацию микроконтроллера необходимо задавать до программирования ячеек защиты.
Таблица 9.5 Конфигурационные ячейки микроконтроллеров семейства
Бит |
ATmega8515x |
ATmega8535x |
ATmega8x |
ATmegal6x/ 32x |
ATtaega64x/ 128x |
ATmega48x |
|||||||
Название |
* |
Название |
* |
Название |
* |
Название |
* |
Название |
* |
Название |
* |
||
Младший конфигурационный байт |
|||||||||||||
7 |
BODLEVEL |
1 |
BODLEVEL |
1 |
BODLEVEL |
1 |
BODLEVEL |
1 |
BODLEVEL |
1 |
CKDIV8 |
0 |
|
6 |
BODEN |
1 |
BODEN |
1 |
BODEN |
1 |
BODEN |
1 |
BODEN |
1 |
CKOUT |
1 |
|
5 |
SUT1 |
1 |
SUT1 |
1 |
SUT1 |
1 |
SUT1 |
1 |
SUT1 |
1 |
SUT1 |
1 |
|
4 |
SUT0 |
0 |
SUTO |
0 |
SUTO |
0 |
SUTO |
0 |
SUTO |
0 |
SUTO |
0 |
|
3 |
CKSEL3 |
0 |
CKSEL3 |
0 |
CKSEL3 |
0 |
CKSEL3 |
0 |
CKSEL3 |
0 |
CKSEL3 |
0 |
|
2 |
CKSEL2 |
0 |
CKSEL2 |
0 |
CKSEL2 |
0 |
CKSEL2 |
0 |
CKSEL2 |
0 |
CKSEL2 |
0 |
|
1 |
CKSEL1 |
0 |
CKSEL1 |
0 |
CKSEL1 |
0 |
CKSEL1 |
0 |
CKSEL1 |
0 |
CKSEL1 |
1 |
|
0 |
CKSEL0 |
1 |
CKSELO |
1 |
CKSELO |
1 |
CKSELO |
1 |
CKSELO |
1 |
CKSELO |
0 |
|
Старший конфигурационный байт |
|||||||||||||
7 |
S8515C |
1 |
S8535C |
1 |
RSTDISBL |
1 |
OCDEN |
1 |
OCDEN |
1 |
RSTDISBL |
1 |
|
6 |
WDTON |
1 |
WDTON |
1 |
WDTON |
1 |
JTAGEN |
0 |
JTAGEN |
0 |
DWEN |
1 |
|
5 |
SPIEN |
0 |
SPIEN |
0 |
SPIEN |
0 |
SPIEN |
0 |
SPIEN |
0 |
SPIEN |
0 |
|
4 |
СКОРТ |
1 |
CKOPT |
1 |
CKOPT |
1 |
CKOPT |
1 |
CKOPT |
1 |
WDTON |
1 |
|
3 |
EESAVE |
1 |
EESAVE |
1 |
EESAVE |
1 |
EESAVE |
1 |
EESAVE |
1 |
EESAVE |
1 |
|
2 |
BOOTSZ1 |
0 |
BOOTSZ1 |
0 |
BOOTSZ1 |
0 |
BOOTSZ1 |
0 |
BOOTSZ1 |
0 |
BODLEVEL2 |
1 |
|
1 |
BOOTSZ0 |
0 |
BOOTSZO |
0 |
BOOTSZO |
0 |
BOOTSZO |
0 |
BOOTSZO |
0 |
BODLEVEL1 |
1 |
|
0 |
BOOTRST |
1 |
BOOTRST |
1 |
BOOTRST |
1 |
BOOTRST |
1 |
BOOTRST |
1 |
BODLEVELO |
1 |
|
Дополнительный конфигурационный байт |
|||||||||||||
7 |
-- |
-- |
1 |
-- |
|||||||||
6 |
-- |
1 |
-- |
||||||||||
5 |
-- |
1 |
-- |
||||||||||
4 |
-- |
1 |
-- |
||||||||||
3 |
-- |
1 |
-- |
||||||||||
2 |
-- |
1 |
-- |
||||||||||
1 |
M103C |
0 |
-- |
||||||||||
0 |
WDTON |
1 |
SELFPRGEN |
||||||||||
* Значение бита. |
Таблица 9.6 Назначение конфигурационных ячеек
Название |
Назначение |
|
RSTDISBL |
Определяет функционирование 1 вывода микроконтроллера, совмещенного с выводом аппаратного сброса (0 -- контакт порта ввода/вывода, 1 -- вывод сброса) |
|
CKSEL |
Определяет режим работы тактового генератора, а также длительность задержки сброса tTout |
|
BODLEVEL |
Определяет порог срабатывания схемы BOR |
|
BODEN |
Разрешает/запрещает функционирование схемы BOR (0 -- разрешено, 1 -- запрещено) |
|
SPIEN11 |
Разрешает/запрещает программирование по интерфейсу SPI (0 -- разрешено, 1 -- запрещено) |
|
SUT |
Определяет длительность задержки сброса tTout |
|
WDTON |
Определяет режим работы сторожевого таймера (0 -- всегда включен, 1 -- может быть выключен программно) |
|
СКОРТ |
Определяет функционирование тактового генератора, действие зависит от установок ячеек CKSEL |
|
EESAVE2 |
Определяет влияние команды “Стирание кристалла” на EEPROM-память 0 -- не стирает, 1 -- стирает) |
|
BOOTSZ |
Определяет размер секции загрузчика |
|
BOOTRST |
Определяет положение вектора сброса |
|
DWEN |
Разрешает/запрещает работу отладочного интерфейса debugWire (0 -- разрешена, 1 -- запрещена) |
|
OCDEN |
Разрешает/запрещает внутрисхемную отладку (0 -- разрешена, 1 -- запрещена) |
|
JTAGEN |
Разрешает/запрещает использование интерфейса JTAG (0 -- разрешен, 1 -- запрещен) |
|
CKDIV8 |
Определяет начальное состояние делителя системного тактового сигнала |
|
CKOUT |
Определяет состояние выходного буфера системного тактового сигнала (0 -- подключен к выводу микроконтроллера, 1 -- отключен) |
|
SELFPRGEN3 |
Разрешение самопрограммирования (0 -- разрешено) |
|
S8515C |
Включает/выключает режим совместимости с микроконтроллерами AT90S4414/8515 семейства Classic (0 -- включен, 1 -- выключен) |
|
S8535C |
Включает/выключает режим совместимости с микроконтроллерами AT90S8535 семейства Classic (0 -- включен, 1 -- выключен) |
|
М161С |
Включает/выключает режим совместимости с микроконтроллерами ATmega 161х семейства Mega (0 -- включен, 1 -- выключен) |
|
М103С |
Включает/выключает режим совместимости с микроконтроллерами ATmega 103x семейства Mega (0 - включен, 1 - выключен) |
1) Недоступна при программировании по последовательному каналу
2) Изменение состояния этой ячейки вступает в силу сразу же после ее программирования.
3) Только в ATmega48x.
Идентификатор
Все микроконтроллеры фирмы Atmel имеют три 8-битные ячейки, содержимое которых позволяет идентифицировать устройство. В первой ячейке содержится код производителя $00, во второй - код объема FLASH-памяти $01, а в третьей - код устройства $02. Как и конфигурационные ячейки, ячейки идентификатора расположены в отдельном адресном пространстве, доступ к которому возможен только в режиме программирования. Однако в отличие от конфигурационных ячеек ячейки идентификатора, по понятным причинам, доступны только для чтения.
Значение кода устройства у разных моделей может совпадать. Поэтому устройство следует идентифицировать только по совокупности значений ячеек $01 и $02, так как именно эта пара чисел является уникальной для каждого микроконтроллера.
Калибровочные ячейки
В калибровочные ячейки при изготовлении микроконтроллера заносятся калибровочные константы, предназначенные для подстройки на номинальную частоту внутреннего RС-генератора. Количество этих ячеек зависит от того, на скольких частотах может работать внутренний RC-генератор. В моделях ATmega8515x/8535x и ATmega8x/16x/32x/64x/128x имеется четыре 8-битных ячейки, а в остальных моделях - одна ячейка. Располагаются они в старших байтах адресного пространства ячеек идентификатора.
Загрузка калибровочной константы в регистр OSCCAL осуществляется аппаратно при нахождении микроконтроллера в состоянии сброса. Однако в моделях ATmega8515x/8535x и ATmega8x/16x/32x/64x/128x генератор автоматически калибруется только на частоту 1 МГц. Поэтому при использовании другой частоты RС-генератора его калибровку необходимо осуществлять вручную. Для этого программатор во время программирования должен прочитать содержимое калибровочной ячейки и занести его по какому-либо адресу FLASH-памяти программ. А программа должна после старта считать это значение из памяти программ и занести его в регистр OSCCAL.
Организация памяти программ и данных
В микроконтроллерах семейства Mega используется страничная организация памяти программ. При программировании весь объем FLASH-памяти разбивается на 16-битные страницы, размер которых, а также их количество зависят от объема памяти программ микроконтроллера.
Соответственно, при программировании памяти программ микроконтроллеров семейства Mega данные сначала загружаются в буфер страницы и только затем заносятся непосредственно в память программ. Прошивка всех ячеек страницы при этом осуществляется одновременно.
Аналогичным образом организована и EEPROM-память. Размер 8-битных страниц EEPROM-памяти.
Однако следует отметить, что во многих моделях страничная организация EEPROM-памяти используется только при программировании в параллельном режиме, а программирование по последовательному каналу осуществляется побайтно.
Программирование по последовательному каналу
В режиме программирования по последовательному каналу программирование памяти программ и данных осуществляется по последовательному интерфейсу SPI. Как правило, этот режим используется для программирования (перепрограммирования) микроконтроллера непосредственно в устройстве.
Схема включения микросхем в режиме программирования по последовательному каналу приведена на рис. 9.2. На этом же рисунке показано два варианта разводки колодки для подключения программатора, рекомендуемые компанией Atmel.
Рис. 9.2 Включение микроконтроллеров в режиме программирования по последовательному каналу
Как видно из рис. 9.2, для обмена данными между программатором и устройством используются три линии: SCK (тактовый сигнал), MOSI (вход данных) и MISO (выход данных).
Как и в рабочем режиме, при программировании по последовательному каналу микроконтроллеру требуется источник тактового сигнала. В качестве такового может использоваться любой из допустимых для микроконтроллера источников. При этом должно выполняться следующее условие: длительность импульсов как НИЗКОГО, так и ВЫСОКОГО уровня сигнала SCK должна быть больше 2 периодов тактового сигнала микроконтроллера.
Программирование осуществляется путем посылки 4-байтных команд на вывод MOSI микроконтроллера. Результат выполнения команд чтения снимается с вывода MISO микроконтроллера. Передача команд и выдача результатов их выполнения осуществляются от старшего бита к младшему. При этом «защелкивание» входных данных выполняется по нарастающему фронту сигнала SCK, а «защелкивание» выходных данных - по спадающему.
Переключение в режим программирования
Для перевода микроконтроллера в режим программирования по последовательному каналу необходимо выполнить следующие действия:
- подать на микроконтроллер напряжение питания, при этом на выводах SCK и RESET должно присутствовать напряжение НИЗКОГО уровня. Выждать не менее 20 мс;
- послать на вывод MOSI команду «Разрешение программирования»;
- для контроля прохождения команды при посылке 3-го байта возвращается значение 2-го байта ($53).
- после завершения программирования на вывод RESET можно подать напряжение ВЫСОКОГО уровня для перевода микроконтроллера в рабочий режим либо выключить его.
В последнем случае необходимо выполнить следующую последовательность действий:
- подать на вывод XTAL1 напряжение НИЗКОГО уровня, если тактирование микроконтроллера осуществляется от внешней схемы;
- подать на вывод RESET напряжение ВЫСОКОГО уровня;
- отключить напряжение питания от микроконтроллера.
Управление процессом программирования FLASH-памяти
Программирование памяти программ микроконтроллеров семейства Mega осуществляется постранично. Сначала содержимое страницы побайтно заносится в буфер по командам «Загрузка страницы FLASH-памяти». В каждой команде передаются младшие биты адреса изменяемой ячейки (положение ячейки внутри страницы) и записываемое значение. Содержимое каждой ячейки должно загружаться в следующей последовательности: сначала младший байт, потом старший.
Фактическое программирование страницы FLASH-памяти осуществляется после загрузки буфера страницы по команде «Запись страницы FLASH-памяти».
Следует помнить, что дальнейшее программирование памяти можно будет выполнять только после завершения записи страницы. Определить момент окончания записи можно тремя способами. Первый и наиболее простой способ - выдерживать между посылкой команд паузу. Второй способ заключается в контролировании содержимого любой из записываемых ячеек после посылки команды записи, а третий способ - опрос флага готовности RDY c помощью соответствующей команды.
Управление процессом программирования EEPROM-памяти
Во всех старых моделях программирование EEPROM-памяти осуществляется обычным способом - побайтно. А в новых моделях появился альтернативный способ записи EEPROM-памяти - постраничный. Содержимое страницы побайтно заносится в буфер по командам «Загрузка страницы EEPROM-памяти», а затем осуществляется фактическое программирование страницы EEPROM-памяти по команде «Запись страницы EEPROM-памяти». Значения адресов, передаваемые в этих командах, определяются так же, как и при программировании FLASH-памяти. Для определения момента окончания записи можно использовать любой из описанных выше способов.
Параллельное программирование
В режиме параллельного программирования от программатора к микроконтроллеру передаются одновременно все биты кода команды или байта данных. Этот режим задействует большое число выводов микроконтроллера и требует использования дополнительного источника повышенного напряжения. Поэтому программирование в параллельном режиме осуществляется специализированными программаторами. Основное применение этого режима - «прошивка» микроконтроллеров перед установкой их на плату в условиях массового производства.
Схема включения микросхем в режиме параллельного программирования приведена на рис. 9.3.
Рис. 9.3 Включение микроконтроллеров в режиме параллельного программирования
Таблица 9.7 Обозначение и функции выводов, используемых при программировании в параллельном режиме
Сигнал |
Вывод |
Вход/Выход |
Назначение |
|
RDY/BSY |
PD1 |
Выход |
Состояние устройства: 0 - занято (выполняется предыдущая команда); 1 - готово к приему следующей команды. |
|
ОЕ |
PD2 |
Вход |
Управление режимом работы шины данных РВ7...РВ0: 0 -- выход, 1 -- вход |
|
WR |
PD3 |
Вход |
Сигнал записи (активный уровень -- лог. 0) |
|
BS1 |
PD4 |
Вход |
Выбор байта (см. Табл. 14.14) |
|
ХАО |
PD5 |
Вход |
Определяют действие, выполняемое по положительному импульсу на выводе XTAL1 |
|
ХА1 |
PD6 |
Вход |
||
PAGEL |
PD7 |
Вход |
Сигнал загрузки страницы памяти |
|
BS2 |
РАО |
Вход |
Выбор байта (см. Табл. 14.14) |
|
DATA |
РВ7...РВ0 |
Вход/Выход |
Двунаправленная шина данных |
В общих чертах процесс программирования в этом режиме состоит из многократного выполнения следующих операций:
- загрузка команды;
- загрузка адреса;
- загрузка данных;
- выполнение команды.
Последовательность подачи сигналов на выводы микроконтроллера при выполнении различных базовых операций приведена в табл. 9.8.
Таблица 14.7 Базовые операции программирования в параллельном режиме
№ |
Название операции |
Действия |
|
1 |
Загрузка команды |
1.Установить выводы ХА1, ХАО в состояние 10. 2.Подать на вывод BS1 напряжение лог. 0. 3.Выставить на шину DATA код команды. 4.Подать на вывод XTAL1 положительный импульс. |
|
2 |
Загрузка адреса |
1.Установить выводы ХА1, ХАО в состояние 00 (загрузка адреса). 2.Установить выводы BS2:BS1 в состояние 00 (загрузка младшего байта), 01 (загрузка старшего байта) или 10 (загрузка дополнительного байта). 3.Выставить на шину DATA байт адреса. 4.Подать на вывод XTAL1 положительный импульс. |
|
3 |
Загрузка данных |
1.Установить выводы ХА1, ХАО в состояние 01 (загрузка данных). 2.Подать на вывод BS1 напряжение лог. 0 (загрузка младшего байта) или лог. 1 (загрузка старшего байта). 3.Выставить на шину DATA содержимое байта данных. 4.Подать на вывод XTAL1 положительный импульс. |
|
4 |
Запись данных в буфер страницы |
1.Подать на вывод BS1 напряжение лог. 1. 2.Подать на вывод PAGEL положительный импульс. |
|
5 |
Запись байта конфигурации |
1.Установить выводы BS2:BS1 в состояние 00 (запись младшего байта), 01 (запись старшего байта) или 10 (запись дополнительного байта). 2.Подать на вывод WR отрицательный импульс; при этом на выводе RDY/BSY появляется сигнал НИЗКОГО уровня. 3.Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня. |
|
6 |
Запись страницы |
1.Установить выводы BS2:BS1 в состояние 00. 2.Подать на вывод WR отрицательный импульс; при этом на выводе RDY/BSY появляется сигнал НИЗКОГО уровня. 3.Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня. |
Переключение в режим параллельного программирования
Первой операцией при программировании микроконтроллера является его перевод в режим программирования. Для перевода микроконтроллера в режим программирования необходимо выполнить следующие действия:
- подать на микроконтроллер напряжение питания;
- подать на вывод RESET напряжение НИЗКОГО уровня и сформировать не менее трех импульсов на выводе XTAL1;
- подать на выводы PAGEL, XA1, ХА0, BS1 напряжение НИЗКОГО уровня на время не менее 100 нс;
- подать напряжение 11.5... 12.5 В на вывод RESET и удерживать напряжение НИЗКОГО уровня на выводах PAGEL, XA1, ХА0, BS1 в течение, как минимум, 10 мкс. Любая активность на указанных выводах в течение этого времени приведет к тому, что микроконтроллер не перейдет в режим программирования выждать не менее 300 мкс перед посылкой следующей команды.
Стирание кристалла
Команда «Стирание кристалла» должна выполняться перед каждым перепрограммированием микроконтроллера. Данная команда полностью уничтожает содержимое FLASH- памяти и EEPROM-памяти, а затем сбрасывает ячейки защиты (записывает в них 1). Однако на состояние конфигурационных ячеек данная команда не влияет. Кроме того, в ряде моделей микроконтроллеров семейства Mega можно предотвратить стирание EEPROM-памяти путем программирования конфигурационной ячейки EESAVE.
Для выполнения команды «Стирание кристалла» необходимо выполнить следующие действия:
- загрузить команду «Стирание кристалла»;
- подать на вывод WR сигнал НИЗКОГО уровня;
- ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня.
Программирование FLASH-памяти
Запись FLASH-памяти производится в следующей последовательности:
- загрузить команду «Запись FLASH-памяти»;
1) загрузить младший байт адреса (положение ячейки внутри страницы);
2) загрузить младший байт данных;
3) загрузить старший байт данных;
4) запомнить данные в буфере;
5) повторить пп. 2...5 до полного заполнения буфера страницы;
6) загрузить старший байт адреса (номер страницы);
7) записать страницу.
8) повторить все пункты для записи остальных страниц памяти программ;
9) завершить программирование, загрузив команду «Нет операции».
Необходимо отметить, что если для адресации ячейки памяти внутри страницы требуется меньше 8 битов (при размере страницы менее 256 слов), то оставшиеся старшие биты младшего байта адреса используются для адресации страницы при выполнении команды «Запись страницы».
Для чтения FLASH-памяти необходимо выполнить следующие действия:
1) загрузить команду «Чтение FLASH-памяти»;
2) загрузить старший байт адреса;
3) загрузить младший байт адреса;
4) установить ОЕ и BS1 в 0, после этого с шины данных DATA можно будет считать значение младшего байта содержимого ячейки памяти;
5) установить BS1 в 1, после этого с шины данных DATA можно будет считать значение старшего байта содержимого ячейки памяти;
6) установить ОЕ в 1.
Программирование EEPROM-памяти
Запись EEPROM-памяти производится в следующей последовательности:
1) загрузить команду «Запись EEPROM-памяти»;
2) загрузить старший байт адреса;
3) загрузить младший байт адреса;
4) загрузить байт данных;
5) запомнить данные в буфере;
6) повторить пп. 3...5 до полного заполнения буфера;
7) записать страницу.
Для чтения содержимого EEPROM-памяти необходимо выполнить следующие действия:
1) загрузить команду «Чтение EEPROM-памяти»;
2) загрузить старший байт адреса;
3) загрузить младший байт адреса;
4) установить ОЕ и BS1 в 0, после этого с шины данных DATA можно будет считать содержимое ячейки памяти;
5) установить ОЕ в 1.
Программирование конфигурационных ячеек
Программирование байтов конфигурации микроконтроллеров семейства Mega осуществляется следующим образом.
Младший конфигурационный байт:
1) загрузить команду «Запись конфигурационных ячеек»;
2) загрузить младший байт данных. Если бит сброшен в 0, выполняется программирование соответствующей ячейки, если установлен в 1 - ее сброс;
3) записать младший байт конфигурации.
Старший конфигурационный байт:
1) Загрузить команду «Запись конфигурационных ячеек» (код 0100 0000).
2) Загрузить младший байт данных. Если бит сброшен в 0, выполняется программирование соответствующей ячейки, если установлен в 1 - ее сброс.
3) Записать старший байт конфигурации.
Программирование ячеек защиты
Программирование ячеек защиты выполняется аналогично программированию конфигурационных ячеек:
1) Загрузить команду «Запись ячеек защиты»;
2) Загрузить младший байт данных. Для программирования ячейки соответствующий бит должен быть сброшен в 0. Неиспользуемые биты должны быть всегда установлены в 1;
3) Записать младший байт конфигурации.
Программирование по интерфейсу JTAG
Интерфейс JTAG был разработан группой ведущих специалистов по проблемам тестирования электронных компонентов (Joint Test Action Group). В дальнейшем он был зарегистрирован в Институте инженеров по электротехнике и электронике (IEEE) в качестве промышленного стандарта IEEE Std 1149.1-1990 (IEEE Standard Test Access Port and Boundary-Scan Architecture).
Встроенный в большинство микроконтроллеров семейства, интерфейс JTAG может быть использован для следующих целей:
- тестирования печатных плат;
- конфигурирования (программирования) кристалла;
- внутрисхемной отладки.
Рассмотрим непосредственно только один из аспектов использования интерфейса JTAG, а именно программирование микроконтроллеров.
Доступ к модулю JTAG осуществляется через четыре вывода микроконтроллера, составляющих так называемый «порт тестового доступа» (Test Access Port - ТАР): TMS, TCK, TDI и TDO. Стандартная разводка 10-штырькового разъема для подключения JTAG-устройств приведена на рис. 9.4.
Работой модуля JTAG управляет так называемый ТАР-контроллер, представляющий собой конечный автомат с 16 состояниями. Диаграмма состояний ТАР-контроллера приведена на Рис. 14.14. Переход между состояниями осуществляется по нарастающему фронту сигнала ТСК в соответствии с сигналом, присутствующим на выводе TMS. После включения питания контроллер находится в состоянии Test-Logic-Reset.
Рис. 9.4 Разводка разъема JTAG
Использование интерфейса JTAG для программирования кристалла
Разрешение/запрещение интерфейса JTAG осуществляется при помощи конфигурационной ячейки JTAGEN. Если она не запрограммирована (1), то выводы ТАР работают как обычные контакты портов ввода/вывода, а ТАР-контроллер находится в состоянии сброса. Для включения интерфейса ячейка JTAGEN должна быть запрограммирована (состояние по умолчанию). Кроме того, должен быть сброшен бит JTD регистра MCUCSR или MCUCR (рис. 9.5). Причем, для изменения состояния этого бита новое значение необходимо записать в него дважды в течение четырех тактов.
Описанный механизм позволяет использовать выводы ТАР как в качестве контактов портов ввода/вывода при нормальном функционировании микроконтроллера, так и в качестве выводов собственно порта JTAG при программировании кристалла. Разумеется, этот механизм не применим в том случае, если порт JTAG используется для отладки или тестирования.
Рис. 9.5 Регистры MCUCSR/MCUCR применительно к интерфейсу JTAG
Команды JTAG, используемые при программировании
Из 16 команд, поддерживаемых интерфейсом, при программировании используются только пять.
AVR_RESET
Эта команда предназначена для перевода микроконтроллера в состояние сброса и соответственно вывода его из этого состояния. В качестве регистра данных выбирается 1-битный регистр сброса (Reset Register). Запись 1 в этот регистр эквивалентна подаче на вывод RESET микроконтроллера напряжения НИЗКОГО уровня. В состоянии сброса микроконтроллер будет находиться до тех пор, пока в регистр сброса не будет записан 0.
PROG_ENABLE
Эта команда предназначена для разрешения программирования кристалла через порт JTAG. В качестве регистра данных выбирается 16-битный регистр разрешения программирования (Programming Enable Register).
При записи в этот регистр числа $А370 (сигнатура разрешения программирования) разрешается программирование микроконтроллера по интерфейсу JTAG. При выходе из режима программирования этот регистр должен сбрасываться.
PROG_COMMANDS
Эта команда предназначена для загрузки команд программирования и выдачи результатов их выполнения (если они есть). В качестве регистра данных выбирается 15-битный регистр команд (Programming Command Register).
PROG_PAGELOAD
Эта команда предназначена для непосредственной загрузки страницы памяти программ через порт JTAG. Реализация этой команды зависит от модели микроконтроллера.
PROG_PAGEREAD
Эта команда предназначена для считывания содержимого страницы памяти программ через порт JTAG. Реализация этой команды также зависит от модели микроконтроллера.
Размещено на Allbest.ru
...Подобные документы
Архитектура микроконтроллеров AVR и PIC. Описание и структура регистров из области ввода/вывода. Внутренняя и внешняя память SRAM микроконтроллеров AVR. Особенности аналого-цифрового преобразования. Переключение в режим параллельного программирования.
лекция [755,2 K], добавлен 28.05.2010Отличительные особенности микроконтроллеров AVR семейства Mega. Характеристики процессора, подсистемы ввода-вывода. Архитектура ядра и организация памяти. Регистры общего назначения. Алгоритмы моделирования команд. Реализация модели внешнего устройства.
курсовая работа [3,7 M], добавлен 24.06.2013Архитектура микроконтроллеров семейства Mega. Организация памяти. Способы адресации памяти данных. Энергонезависимая память данных. Таблица векторов прерываний. Счетчик команд и выполнение программы. Абсолютный вызов подпрограммы. Сторожевой таймер.
дипломная работа [213,9 K], добавлен 02.04.2009Особенности применения светодиодной индикации в микроконтроллерных системах. Характеристика основных приемов программирования универсальных портов ввода-вывода микроконтроллеров AVR. Этапы проектирования елочной гирлянды с микроконтроллерным управлением.
лабораторная работа [291,7 K], добавлен 17.11.2012Структура и основные элементы микроконтроллера. Разрядность и система команд процессора. Методы представления информации. Память и её типы. Режимы работы портов электронного устройства. Многофункциональность выводов микро-ЭВМ. Семейства микроконтроллеров.
презентация [1,2 M], добавлен 16.12.2011Изучение архитектуры персонального компьютера на примере микропроцессора фирмы Intel. Регистры общего назначения. Оперативная память; форматы данных и команд. Команд пересылки с различными способами адресации операндов. Структура программы на Ассемблере.
курс лекций [506,4 K], добавлен 03.05.2014Внутренняя архитектура микропроцессора Intel 486. Формат данных и команд. Регистры общего назначения. Программная модель устройства FPU, регистр флагов. Разработка структуры и микропрограммы микропроцессора, управляющего автомата с жесткой логикой.
курсовая работа [1,6 M], добавлен 27.05.2013Методика создания и листинг недорогой многофункциональной охранной системы, отвечающей современным требованиям безопасности. Общая характеристика и сравнение отечественных однокристальных микроконтроллеров и микроконтроллеров фирм Atmel и Microchip.
дипломная работа [3,4 M], добавлен 28.09.2010Интегрированная система, концепция и особенности интеллектуальных зданий. Принципы построения системы управления зданием. Принципы управления распределением энергоресурсов. Отопление с централизованным управлением, управление отопительными приборами.
реферат [83,5 K], добавлен 05.08.2010Сущность поисковых систем интернета. Google и Yahoo! как крупнейшие в интернете поисковые машины. Характеристика Baidu как лидера среди китайских поисковиков. Обзор технологии QDR SRAM. Архитектура строения памяти QDR, ее достоинства и недостатки.
реферат [186,5 K], добавлен 27.09.2014Обобщение основных видов и назначения оперативной памяти компьютера. Энергозависимая и энергонезависимая память. SRAM и DRAM. Триггеры, динамическое ОЗУ и его модификации. Кэш-память. Постоянное запоминающее устройство. Флэш-память. Виды внешней памяти.
курсовая работа [1,7 M], добавлен 17.06.2013Применение современных микроконтроллеров как одного из перспективных аппаратно-программных средств информационных систем. Общие принципы построения микроконтроллеров, их типовая структура. Разработка программы расчета задержек на языке ассемблер.
курсовая работа [719,2 K], добавлен 22.04.2019Принцип работы ядра процессора, типы архитектур ядер операционных систем. Сокет(Socket), кэш-память, контроллер ОЗУ, северный мост. Внутренняя архитектура процессоров Intel и AMD: расшифровка названий, технологии процессоров, сравнение производительности.
реферат [214,9 K], добавлен 05.05.2014Оперативная память как один из главных компонентов компьютера. Роль и значение оперативной памяти в качестве буфера между центральным процессором и винчестером. Факторы, влияющие на производительность всего компьютера. Общая характеристика SRAM и DRAM.
эссе [25,5 K], добавлен 09.12.2014Назначение, особенности, структура и функционирование различных моделей микроконтроллеров. Средства их отладки и программирования. Способы адресации и система команд. Набор периферийных устройств. Порты ввода/вывода. Модуль формирования ШИМ-сигналов.
курсовая работа [201,9 K], добавлен 25.12.2014Целесообразность применения МП-устройства. Архитектура микропроцессорной системы. Структурная организация БИС ВТ с изолированными шинами. Содержание и возможная направленность микроконтроллера. Обобщенная структура простого встраиваемого микроконтроллера.
реферат [224,5 K], добавлен 28.04.2011История появления и развития оперативной памяти. Общая характеристика наиболее популярных современных видов оперативной памяти - SRAM и DRAM. Память с изменением фазового состояния (PRAM). Тиристорная память с произвольным доступом, ее специфика.
курсовая работа [548,9 K], добавлен 21.11.2014Создание рабочего модуля аналого-цифрового преобразователя с минимальным количеством микросхем на основе микроконтроллера ATmega8L. Описание блок-схемы АЦП. Схема запуска преобразования. Программа микроконтроллера в среде программирования CodeVision.
курсовая работа [1,2 M], добавлен 04.10.2013Оценка временной сложности алгоритма. Механизм сортировки пузырьком и вставками. Основные положения технологии параллельного программирования Ореn MР. Оценка временной сложности некоторых классов алгоритма с помощью параллельного программирования.
дипломная работа [1,7 M], добавлен 27.10.2017Характеристика микроконтроллера: тип, корпуса и выводы, перечень битов конфигурации и идентификаторов. Разработка и изготовление лабораторного блока для программирования бутлоадера в микроконтроллер: блок-схема устройства, изготовление печатной платы.
дипломная работа [1,7 M], добавлен 07.06.2012