Микропроцессоры AVR. Реферат Микроконтроллеры avr студента 3го курса Курапова Анатолия Введение
Скачать 0.65 Mb.
|
Идентификатор Все микроконтроллеры фирмы 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. Обозначение и функции выводов, используемых при программировании в параллельном режиме
В общих чертах процесс программирования в этом режиме состоит из многократного выполнения следующих операций: загрузка команды; загрузка адреса; загрузка данных; выполнение команды. Последовательность подачи сигналов на выводы микроконтроллера при выполнении различных базовых операций приведена в табл. 9.8. Таблица 14.7. Базовые операции программирования в параллельном режиме
Переключение в режим параллельного программирования Первой операцией при программировании микроконтроллера является его перевод в режим программирования. Для перевода микроконтроллера в режим программирования необходимо выполнить следующие действия: подать на микроконтроллер напряжение питания; подать на вывод 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-памяти”; загрузить младший байт адреса (положение ячейки внутри страницы); загрузить младший байт данных; загрузить старший байт данных; запомнить данные в буфере; повторить пп. 2...5 до полного заполнения буфера страницы; загрузить старший байт адреса (номер страницы); записать страницу. повторить все пункты для записи остальных страниц памяти программ; завершить программирование, загрузив команду “Нет операции”. Необходимо отметить, что если для адресации ячейки памяти внутри страницы требуется меньше 8 битов (при размере страницы менее 256 слов), то оставшиеся старшие биты младшего байта адреса используются для адресации страницы при выполнении команды “Запись страницы”. Для чтения FLASH-памяти необходимо выполнить следующие действия: загрузить команду “Чтение FLASH-памяти”; загрузить старший байт адреса; загрузить младший байт адреса; установить ОЕ и BS1 в 0, после этого с шины данных DATA можно будет считать значение младшего байта содержимого ячейки памяти; установить BS1 в 1, после этого с шины данных DATA можно будет считать значение старшего байта содержимого ячейки памяти; установить ОЕ в 1. Программирование EEPROM-памяти Запись EEPROM-памяти производится в следующей последовательности: загрузить команду “Запись EEPROM-памяти”; загрузить старший байт адреса; загрузить младший байт адреса; загрузить байт данных; запомнить данные в буфере; повторить пп. 3...5 до полного заполнения буфера; записать страницу. Для чтения содержимого EEPROM-памяти необходимо выполнить следующие действия: загрузить команду “Чтение EEPROM-памяти”; загрузить старший байт адреса; загрузить младший байт адреса; установить ОЕ и BS1 в 0, после этого с шины данных DATA можно будет считать содержимое ячейки памяти; установить ОЕ в 1. |