Микроконтроллеры AVR

Архитектура микроконтроллеров AVR и PIC. Описание и структура регистров из области ввода/вывода. Внутренняя и внешняя память SRAM микроконтроллеров AVR. Особенности аналого-цифрового преобразования. Переключение в режим параллельного программирования.

Рубрика Программирование, компьютеры и кибернетика
Вид лекция
Язык русский
Дата добавления 28.05.2010
Размер файла 755,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

7

6

5

4

3

2

1

0

ADFM

-

-

-

PCFG3

PCFG2

PCFG1

PCFG0

Рис. 8.3. Регистр ADC0N1 микроконтроллеров PIC

Назначение разрядов регистра ADCON1;

- PCFG0-PCFG3 - разряды конфигурации - определяют, какие выводы порта АЦП являются аналоговыми входами, а какие используются для подачи опорных напряжений Vref+ и Vref-; наиболее распространенная конфигурация: 0000, которая определяет все 8 выводов аналоговыми входами, а в качестве опорных напряжений - напряжения VDD и Vss; другие значения разрядов PCFG0-PCFG3 варьируются в зависимости от типа микроконтроллера;

- 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. Принцип работы аналогового компаратора напряжений

7

6

5

4

3

2

1

0

ACD

-

ACO

ACI

ACIE

ACIC

ACIS1

ACIS0

Рис. 8.5. Регистр ACSR микроконтроллеров AVR

Назначение разрядов регистра 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 сигнала ВЫСОКОГО уровня.

Запись страницы

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

Интерфейс 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. Реализация этой команды также зависит от модели микроконтроллера.


Подобные документы

  • Особенности применения светодиодной индикации в микроконтроллерных системах. Характеристика основных приемов программирования универсальных портов ввода-вывода микроконтроллеров AVR. Этапы проектирования елочной гирлянды с микроконтроллерным управлением.

    лабораторная работа [291,7 K], добавлен 17.11.2012

  • Отличительные особенности микроконтроллеров AVR семейства Mega. Характеристики процессора, подсистемы ввода-вывода. Архитектура ядра и организация памяти. Регистры общего назначения. Алгоритмы моделирования команд. Реализация модели внешнего устройства.

    курсовая работа [3,7 M], добавлен 24.06.2013

  • Участие регистров ввода-вывода в работе периферийных устройств. Отражение состояния периферийных устройств в состоянии разрядов регистров состояния. Перечень имен и номеров регистров ввода-вывода, управления и состояния микроконтроллеров разных типов.

    курсовая работа [171,2 K], добавлен 22.08.2010

  • Назначение, особенности, структура и функционирование различных моделей микроконтроллеров. Средства их отладки и программирования. Способы адресации и система команд. Набор периферийных устройств. Порты ввода/вывода. Модуль формирования ШИМ-сигналов.

    курсовая работа [201,9 K], добавлен 25.12.2014

  • Архитектура микроконтроллеров семейства Mega. Организация памяти. Способы адресации памяти данных. Энергонезависимая память данных. Таблица векторов прерываний. Счетчик команд и выполнение программы. Абсолютный вызов подпрограммы. Сторожевой таймер.

    дипломная работа [213,9 K], добавлен 02.04.2009

  • Классическая архитектура компьютера. Понятие разрядной сетки. Устройство ввода-вывода. Арифметическо-логическое устройство, структура регистров АЛУ, куда помещаются исходные и результирующие данные, а также размер регистров (число двоичных разрядов t).

    презентация [1,5 M], добавлен 29.11.2013

  • Структура и основные элементы микроконтроллера. Разрядность и система команд процессора. Методы представления информации. Память и её типы. Режимы работы портов электронного устройства. Многофункциональность выводов микро-ЭВМ. Семейства микроконтроллеров.

    презентация [1,2 M], добавлен 16.12.2011

  • Определение основных функций процессора. Микросхема процессора и выводы шин адреса, данных и управления. Функции памяти и устройств ввода/вывода (мыши, клавиатуры, джойстика). Описание функций внутренних регистров микропроцессора. Оперативная память.

    презентация [603,1 K], добавлен 17.06.2014

  • Характеристика, разновидности, архитектура процессоров. Понятие интерфейса, описание видов шин, внешних запоминающих устройств, особенности конструкции. Специфика файловой системы устройства подсистемы ввода/вывода, достоинства, недостатки, база данных.

    курс лекций [747,0 K], добавлен 24.06.2009

  • Применение современных микроконтроллеров как одного из перспективных аппаратно-программных средств информационных систем. Общие принципы построения микроконтроллеров, их типовая структура. Разработка программы расчета задержек на языке ассемблер.

    курсовая работа [719,2 K], добавлен 22.04.2019

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.