Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





О конфигурационных битах
Отчасти мы уже обсуждали этот вопрос в главе 2, когда говорили о конфигурации режимов тактирования и сброса, а сейчас попробуем обозреть проблему в общем. В англоязычной инструкции конфигурационные биты называют fuse-битами, что не совсем правильно: fuse в переводе означает "предохранитель", а обсуждаемые ячейки служат именно для целей конфигурации, для предохранения (например, памяти программ от несанкционированного доступа) есть другие биты, называемые в инструкции Boot Lock Bits. Несчастье в виде конфигурационных битов свалилось на нашу голову с появлением семейств Tiny и Mega и привело к многочисленным проклятиям на голову фирмы Atmel со стороны армии любителей, которые стали один за другим "запарывать" кристаллы при программировании. Теперь уже все привыкли и обзавелись соответствующим программным обеспечением, а сначала было довольно трудно. Положение усугублялось тем, что эти сущности описаны на основе извращенной логики: как мы знаем, любая "чистая" EEPROM (по принципу ее устройства) содержит единицы, и слово "запрограммированный" по отношению к такой ячейке означает, что в нее записали ноль. Поэтому разработчики программатора AS-2 даже специально написали в окне программирования конфигурационных ячеек памятку на этот счет (рис. 5.8).

Lock/Fuse биты
~ Биты защиты —-
р ЕЕ!
С ЦП; Защита от записи С LB1+LB2: Защита от Ч&З
, Soot lock биты
Г BL&Q1 Г BLB02
CKSELO j B00TSZ1
DCS ELI EESAVE
CKS1L2 СЖОРТ
CKSEL3 SPIEN
SUTO WDTOM
SUTI S8535C
BODEN
BODLEVEL ItililEplii!
BOOTHS! ...
BOOTSZO

Нажатая кнопка означает, что tee бит запрограммирован (0)
I Прочитать f Проверить
Стереть микросхему | | Close

Для разных моделей набор fuse-битов различный, но означают они одно и то же, поэтому мы разберем типовое их состояние на приведенном примере. Перед первым программированием нового кристалла просто один раз установите эти ячейки в нужное состояние, дальше их уже менять не потребуется.

Переписывать фирменные руководства я не буду, остановлюсь только на самых необходимых моментах. По умолчанию любая микросхема семейств Mega или Tiny запрограммирована на работу от внутренней ЛС-цепочки, за что разработчикам большое спасибо, иначе было бы невозможным первичное программирование по SPI — только через параллельный программатор. Для работы с обычным "кварцем", присоединенным по типовой схеме, как мы говорили в главе 2, требуется установить все ячейки CKSELO-З В единицы, что, согласно логике контроллера, означает незапрограммированное их состояние. Это и ведет к критической ошибке— решив при поверхностном чтении очень невнятно написанного, и к тому же по-английски, руководства, что установка всех единиц означает запрограммировать все ячейки, пользователь смело устанавливает их на самом деле в нули, отчего микросхема переходит в состояние работы от внешнего генератора и разбудить ее через SPI-интерфейс уже невозможно. Легче всего в этом случае переустановить fuse-биты с помощью параллельного программатора либо, за неимением такового, попробовать-таки подключить внешний генератор, как описано в руководстве.

Это самая крупная ошибка, которую можно допустить, но есть и помельче, правда, легче исправляемые. Ячейка SPIEN разрешает/запрещает последовательное программирование по SPI, и должна оставаться в нулевом состоянии. Ячейка S8535C (в других моделях она, соответственно, будет иметь другое название, или вовсе отсутствовать) очень важна, и определяет режим совместимости с семейством Classic (в данном случае с AT90S8535). Если ее установить в нулевое состояние, то МК семейства Mega (а также и единственный представитель Tiny— модель 2313) перейдет в режим совместимости, про все "навороты" можно забыть (кроме, конечно, самих конфигурационных ячеек), и без изменений использовать наработанные старые программы или программы из этой книги, вроде созданной в предыдущих разделах этой главы. При активизации режима совместимости следует учесть, что состояния МК нельзя перемешивать: если fuse-бит совместимости запрограммирован (равен 0), то программа компилируется полностью, как для семейства Classic (в том числе с использованием соответствующего inc-файла и указания нужного устройства в директиве device), иначе она может не заработать. Например, AT90S8535 имеет 17 прерываний, a ATmega8535 — 21, и те же самые прерывания могут оказаться на других местах.

Еще одна важная ячейка— EESAVE, которая на рис. 5.8 установлена в 1 (режим по умолчанию), но ее целесообразно перевести в нулевое состояние — тогда при программировании памяти программ не будет стираться содержимое EEPROM. Ячейки SUT определяют длительность задержки сброса, и в большинстве случаев принципиального значения их состояние не имеет (подробнее см. главу 2). Наконец, для нас будет иметь значение состояние ячеек BODEN И BODLEVEL. Первая, будучи установлена в 0, разрешает работу т н. схемы BOD (Brown out Detection), которая сбрасывает контроллер при падении питания ниже допустимого порога. Ячейка BODLEVEL И определяет этот самый порог— при установленной в 0 ячейке он равен 4 В, при установленной в 1 — 2,7 В. При питании 5 В нужно выбирать первое значение, при 3,3 В — второе. Это предохраняет контроллер от "недопустимых операций" при выключении питания, но для обеспечения полной сохранности содержимого EEPROM таких мер может оказаться недостаточно, и приходится принимать дополнительные (за подробностями также отсылаю к главе 2).



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru