Смекни!
smekni.com

Микроконтроллеры AVR (стр. 13 из 15)

Во всех микроконтроллерах семейства, кроме 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) Изменение состояния этой ячейки вступает в силу сразу же после ее программирования.