УПАВЛЕНИЕ ПРОГРАММАТОРОМ.
|
Возможный вид окна программы управления программатором |
Для подключения к компьютеру используется разъем DB-25M.
Контакт | Наименование | Порт | Номер бита | Направление |
Инверсия |
2 | DATA 0 | 378h (278h) | 0 | выход |
нет |
3 | DATA 1 | 378h (278h) | 1 | выход |
нет |
7 | DATA 5 | 378h (278h) | 5 | выход |
нет |
8 | DATA 6 | 378h (278h) | 6 | выход |
нет |
9 | DATA 7 | 378h (278h) | 7 | выход |
нет |
10 | ACK | 379h (279h) | 6 | вход |
нет |
11 | BUSY | 379h (279h) | 7 | вход |
есть |
12 | PE | 379h (279h) | 5 | вход |
нет |
13 | SLCT | 379h (279h) | 4 | вход |
нет |
14 | AutoLineFeed | 37Ah (27Ah) | 1 | выход (вход) |
есть |
15 | ERROR | 379h (279h) | 3 | вход |
нет |
16 | INIT | 37Ah (27Ah) | 2 | выход (вход) |
нет |
18...25 | 0V | - | - | - |
- |
Если используется порт LPT1, программное управление производится через порты 378h, 379h и 37Ah;
для порта LPT2 - через 278h, 279h и 27Ah.
Направление ВЫХОД означает, что информация выводится из компьютера. ВЫХОД (ВХОД) -
возможны оба направления, но в программаторе используется ВЫХОД. Наличие ИНВЕРСИИ
означает, что при записи единицы в бит слова, выводимого в порт, на соответствующем контакте будет ноль.
Инверсия при приеме и передаче проверялась экспериментально.
Использование контактов LPT-порта в программаторе для микроконтроллеров AVR.
Воспользуемся схемой программатора с переходником
и таблицей контактов LPT-порта.
- В программаторе контакты 7 и 10 соединены, если выводимая на конт.7 информация будет
повторяться на конт.10 - программатор подключен.
- Контакт 15 соединен в программаторе с 0V, значит, программно определив его состояние
можно узнать, подключен ли программатор и все ли в порядке с 0V.
- Если сигнал на контакте 12 повторяет сигнал на конт.9 - значит работает DD1 и есть +5V, стало
быть, подключен программируемый микроконтроллер или PLD и программатор готов к работе (если
питание не подано прямо на контакт переходника или программатора ярыми врагами).
- Если переходник для программирования микроконтроллеров AVR подключен к программатору
и +5V подведено - на конт.11 появится 0V, программатор готов к загрузке программы в микроконтроллер
AVR.
- При положительном результате всех проверок можно разрешить передачу сигналов в микроконтроллер
AVR, подав низкий уровень на конт.14.
- Остальные контакты используются для передачи следующих сигналов: 3 - RESET, 16 - SCK, 2 - MOSI,
13 - MISO.
Как управлять состоянием указанных в таблице линий LPT-порта.
Простая программа на Pascal иллюстрирует организацию управления.
const bit0=1; bit1=2; bit2=4; bit3=8; bit4=16; bit5=32; bit6=64; bit7=128;
var B:byte;
begin
Port[$378]:=bit7+bit5; | {в порт 378h посылается 128+32, высокие уровни на контактах 9 и 7} |
Readln; | {проверьте уровни на контактах 2, 3, 7, 8 и 9, затем нажмите ENTER} |
Port[$37A]:=bit1+bit2; | {на конт.14 низкий уровень (он с инверсией), на конт.16 высокий} |
Readln; | {проверьте уровни на контактах 14 и 16, затем нажмиет ENTER} |
while true do begin | {в бесконечном цикле проверяется состояние порта 379h} |
B:=Port[$379]; | {на контактах, не соединенных с землей,- высокие уровни} |
Writeln(B); | {исходно состояние порта 127: 1+2+4+8+16+32+64 (нет 128: бит 7 инверсный)} |
end; | {соединение конт.11, 12, 13 или 15 с любым контактом 0V изменит состояние порта} |
end. |
Формат файлов .hex, загружаемых в память микроконтроллера AVR.
В шестнадцатеричном формате .hex хранятся файлы с информацией, предназначенной
для загрузки как во Flash-память микроконтроллера AVR (память программ), так и в EEPROM
микроконтроллера AVR (электрически перепрограммируемая постоянная память).
Рассмотрим фрагмент файла .hex, генерированного AVR Studio 3.0 и готового для записи во Flash-память
микроконтроллера AVR.
Замечу, что формат файла определялся интуитивно, поэтому буду благодарен за поправки. Для
наглядности в строки введены интервалы.
Каждая строка начинается двоеточием. Каждая последующая пара символов представляет
собой один байт в шестнадцатеричном коде. Четыре байта в начале и один байт в конце строки
являются служебными, находящиеся между ними байты - информационные - загружаются в память.
В служебных строках информационные байты отсутствуют.
Я выбрал две начальные и три конечные строки одной из программ:
:10 | 0000 | 00 | B6C0 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 7A |
:10 | 0010 | 00 | 0000 | 0000 | 0000 | 0000 | 0000 | 24D0 | 7CE0 | 50FD | 43 |
... |
:10 | 0E20 | 00 | 2A1D | 3B1D | 4C1D | 5D1D | 6E1D | 7F1D | 2797 | 7993 | 4F |
:0E | 0E30 | 00 | 6993 | 5993 | 4993 | 3993 | 2993 | 1993 | 0895 | 1F |
:00 | 0000 | 01 | FF |
Первый байт - число информационных(!) байт в строке; для первой строки это
10, значит, в первой, второй и третьей строках по 10H информационныx байт (10H=16); в предпоследней
строке их 0EH (=14).
Следующие два байта - адрес ячейки памяти, по которому записывается
первый информационный байт строки (остальные информационные байты строки записываются в последующие
ячейки памяти), третий байт отличается от нуля только в служебных строках.
Он равен единице в последней строке, являющейся, очевидно, признаком конца файла, и равен
двум в первой строке файла .hex , загружаемого в EEPROM микроконтроллера AVR (такая первая
строка - признак файла с информацией для EEPROM); с другими значениями этого байта я не сталкивался.
Далее - пары информационных байт, каждая пара составляет ассемблерную команду или половину
команды микроконтроллера AVR.
Последний байт - контрольное число. Если просуммировать все байты строки, то младший
байт результата должен равняться нулю (суммирование с результатом размерностью в байт).
Алгоритм последовательной загрузки программы в микроконтроллер AVR
Для начала следует ознакомиться с разделом Serial Downloading главы Memory Programming
полного технического описания какого-нибудь микроконтроллера AVR. Я не стану пересказывать этот
раздел, остановлюсь лишь на моментах, которые вызвали у меня сомнение, потребовали проверки или
не были описаны вовсе.
- В файле .hex последовательность байт не требует перестановки, функции Pascal Hi(word) и
Lo(word) дают правильный результат.
Большинство команд микроконтроллера AVR двухбайтные, несколько команд 4-хбайтные.
Так вот, если сравнить пары байт, составляющих одинаковые команды, в файле .hex и при просмотре
Program Memory в AVR Studio, то оказывается, что в файле пара выглядит так: C04F, а в Program
Memory так: 4FC0 .
Пунктик появился от великого ума: не фиг было просматривать Program Memory!
- После каждого включения питания следует выполнять инструкцию Programming Enable (см.
Serial Programming Instruction Set). Это значит, что эта инструкция обязательна не только для
записи в память, но и для считывания, а также стирания.
- Не ясен рисунок Serial Programming Waveforms из технического описания микроконтроллера,
компьютер не может одновременно изменять состояние линии SCK и производить запись или считывание
порта. Нормально работает такая последовательность: запись информации на выходную линию, считывание информации
со входной линии при SCK=0 (информация, выставленная компьютером, записывается в микроконтроллер AVR),
затем установка SCK (SCK=1), пауза, сброс SCK (SCK=0, при этом информация c выходной линии
микроконтроллера AVR поступает через программатор в компьютер).
|