- •Часть 1
- •Содержание
- •Современный мир микроконтроллеров.
- •8‑Разрядные микроконтроллеры
- •16‑Разрядные микроконтроллеры
- •32‑Разрядные микроконтроллеры
- •Библиографический список
- •Микроконтроллер mc68hc11e9
- •Процессорный модуль
- •Встроенная память
- •Периферийные устройства
- •Система разработки
- •Монитор buffalo
- •С чего начать ?
- •Приложение 7 Программа Hello
- •Приложение 8 Команды монитора buffalo
- •Приложение 9 Подпрограммы монитора buffalo
- •Приложение 10
- •Приложение 11 Кросс-ассемблер
- •Приложение 12
- •Рекомендуемая литература
- •Часть 1
- •Новосибирск
С чего начать ?
В данном разделе описывается по шагам процесс разработки и запуска на Системе Разработки простой программы, печатающей на экране терминала приветствие "Hello". Исходный текст программы приведен в прил.5. Подчеркнутые символы должны быть введены с клавиатуры.
1. С помощью любого текстового редактора наберите текст программы из прил.6 и сохраните его в файле под именем hello.asm.
2. Запустите программу ассемблера:
as11 hello.asm<Return>
3. Убедитесь, что в процессе работы ассемблера на экране не появились сообщения об ошибках, а также в том, что создался выходной файл с именем hello.s19.
4. Запустите программу коммуникационную программу Tera Term и выберите интерфейс соединения: Serial; COM3.
(параметры соединения: Baud rate 9600; Data 8 bit; Parity none;Stop 1 bit)
5. Нажмите клавишу <Return>. На экране должнен появиться символ '>', означающий, что монитор ожидает ввода команды.
6. Введите команду загрузки программы с терминального порта:
load t<Return>
В оконном меню программы Tera Term Pro выберите раздел: File и команду: Send File
8. Дождитесь появления на экране сообщения: DONE символа '>'
9. Убедитесь в наличии вашей программы в памяти микроконтроллера :
>asm 100<Return>
0100 LDX 0109 ><Return>
0103 JSR FFC7 ><Return>
0106 JSR FF7C ><CtrlA>
>
10. Запустите программу:
>g 100<Return>
Убедитесь, что на экране появилось следующее:
Hello
>
Надпись "Hello" была выдана загруженной программой. После этого программа выполнила команду "JSR .WARMST", которая вернула управление монитору BUFFALO, о чем свидетельствует символ-приглашение '>'.
Приложение 7 Программа Hello
.WARMST equ $FF7C
.OUTSTR equ $FFC7
EOT equ $04
ORG $100 Доступное ОЗУ начинается с адреса $100
ldx #String Загружаем адрес строки
jsr .OUTSTR Выводим строку на терминал
jsr .WARMST Окончание работы - выход в BUFFALO
String: FCC 'Hello'
FCB EOT
Приложение 8 Команды монитора buffalo
ASM Assembler/Disassembler
Ассемблер/Дизассемблер
Синтаксис:
ASM [<адрес>],
где
<адрес> начальный адрес операции ассемблирования.
Если не задан адрес, то по умолчанию операция производится над внутренним ОЗУ с адреса 0.
Ассемблер/дизассемблер является интерактивным редактором/ассемблером. Каждая входная строка в момент ввода переводится в соответствующий код инструкции и сохраняется в памяти, затирая ранее содержащуюся информацию. Для отображения инструкции машинный код дизассемблируется и мнемоника и операнды инструкции отображаются на экране. Все корректные коды инструкции переводятся в ассемблерную мнемонику. Любой некорректный код инструкции отображается как "ILLOP".
Синтаксические правила ассемблера заключаются в следующем:
· Все числовые значения рассматриваются как шестнадцатиричные и не существует способа изменения системы счисления.
· Операнды должны разделяться одним или более пробелом или символами табуляции.
· Любые символы после мнемоники и соответствующих операндов считаются комментариями и игнорируются.
Режимы адресации различаются по следующим признакам:
· Непосредственная адресация определяется по наличию символа "#" перед операндом.
· Индексная адресация определяется по наличию символа ",". Перед запятой должно присутствовать однобайтовое относительное смещение (даже если оно равно 0), а за запятой должно следовать обозначение индексного регистра X или Y (например, LDAA 0,X).
· Прямая и расширенная адресации определяются по длине адреса операнда (1 или 2 цифры определяют прямую адресацию, 3 или 4 цифры - расширенную). Можно специально выбрать режим расширенной адресации посредством расширения адреса лидирующими нулями.
· Относительные смещения для инструкций ветвления вычисляются ассемблером. Поэтому корректными операндами для операций ветвления являются абсолютные адреса точек перехода, а не их относительные смещения.
При ассемблировании очередной строки ассемблер перезаписывает то, что прежде находилось в памяти. Если никакой строки не было введено или строка содержала ошибку, содержимое памяти остается неизменным. Четыре пары инструкций имеют идентичную кодировку, поэтому дизассемблер показывает следующие мнемоники:
· ASL/LSL показывается как ASL
· ASLD/LSLD показывается как ASLD
· BCC/BHS показывается как BCC
· BCS/BLO показывается как BCS
При попытке ввести команду по адресу, не попадающему в ОЗУ или ЭСПЗУ, выводится сообщение о неправильном адресе "rom-xxxx", где xxxx - адрес.
Дополнительные команды, доступные в режиме ассемблирования/дизассемблирования описаны ниже. Если ассемблер обнаруживает ошибку в новой входной строке, он выводит сообщение об ошибке и открывает память по тому же адресу.
Дополнительные команды ассемблера:
/ Ассемблирование текущей строки и дизассемблирование по тому же адресу.
^ Ассемблирование текущей строки и дизассемблирование по предыдущему адресу.
<Return> Ассемблирование текущей строки и дизассемблирование следующей инструкции.
<Ctrl-J> Ассемблирование текущей строки и дизассемблирование следующей инструкции, если строка была введена, или дизассемблирование инструкции по следующему адресу если не было введено новой строки.
<Ctrl-A> Выход из режима ассемблирования/дизассемблирования.
BF Block Fill
Заполнение блока
Синтаксис:
BF <адрес1> <адрес2> <данные>,
где
<адрес1> Младшая граница блока
<адрес2> Старшая граница блока
<данные> Шестнадцатиричное значение, которым будет заполнена область памяти.
Команда BF позволяет установить каждый байт ОЗУ или ЭСПЗУ в области адресов <адрес1>-<адрес2> равным указанному значению. Если указан некорректный адрес, выводится сообщение об ошибочном адресе "rom-xxxx", где xxxx - адрес, по которому невозможно произвести запись.
BR Breakpoints
Точки останова
Синтаксис:
BR [-][<адрес>]...,
где
- удаление всех точек останова.
-<адрес> удаление точки останова по указанному адресу.
Форматы команды:
BR Показать все точки останова.
BR <адрес> Установить точку останова по указанному адресу.
BR <адрес1> <адрес2> ... Установить несколько точек останова по указанным адресам.
BR - Удалить все точки останова.
BR -<адрес1> <адрес2> Удалить точку останова по адресу <адрес1>, затем установить точку останова по адресу <адрес2>.
BR <адрес1> - <адрес2> Установить точку останова по адресу <адрес1>, удалить все точки останова и установить точку останова по адресу <адрес2>.
BR <адрес1> -<адрес2> Установить точку останова по адресу <адрес1>, затем удалить точку останова по адресу <адрес2>.
Команда BR записывает адрес в таблицу адресов точек останова или удаляет адрес из этой таблицы. Во время исполнения программы происходит останов перед исполнением инструкции, находящейся по любому адресу в таблице точек останова. Максимальное количество точек останова равно четырем. После исполнения команды BR монитор всегда показывает текущее состояние таблицы адресов точек останова. При вводе одной из команд G, CALL или P монитор вставляет точки останова в код по адресам, указанным в таблице адресов точек останова.
Точки останова выполняются помещением команды программного прерывания (SWI) по адресам, указанным в таблице адресов точек останова. Обработчик программного прерывания сохраняет и отображает внутреннее состояние процессора и восстанавливает содержимое программы по адресу останова перед возвратом управления монитору.
Пользовательский обработчик программного прерывания не может быть отлажен, потому что программа монитора использует вектор программного прерывания.
Точки останова можно устанавливать как в ОЗУ, так и в ЭСПЗУ.
BULK Bulk
Очистка ЭСПЗУ
Синтаксис:
BULK
Команда BULK позволяет полностью стереть (установить равным $FF) все ЭСПЗУ процессора в диапазоне адресов $B600-$B7FF. Цикл задержки устроен таким образом, что время очистки равно 10 мс при частоте E равной 2 МГц.
ЗАМЕЧАНИЕ:
Никакого сообщения о верификации очистки не выводится после завершения операции. Пользователь может проверить результат очистки посредством просмотра ЭСПЗУ с помощью команд MM или MD.
BULKALL Bulk All
Очистка ЭСПЗУ и CONFIG регистра
Синтаксис:
BULKALL
Команда BULKALL позволяет полностью очистить (установить равным $FF) все ЭСПЗУ процессора в диапазоне адресов $B600-$B7FF, а также, на некоторых моделях MC68HC11A8, и конфигурационный (CONFIG) регистр по адресу $103F. Цикл задержки устроен таким образом, что время очистки равно 10 мс при частоте E равной 2 МГц. Регистр CONFIG на микроконтроллерах MC68HC11E9 не может быть изменен в нормальных режимах работы.
ЗАМЕЧАНИЕ:
Никакого сообщения о верификации очистки не выводится после завершения операции. Пользователь может проверить результат очистки посредством просмотра ЭСПЗУ с помощью команд MM или MD.
CALL Call
Вызов подпрограммы
Синтаксис:
CALL [<адрес>],
где
<адрес> адрес подпрограммы пользователя.
Команда CALL позволяет пользователю вызвать свою собственную подпрограмму. Если не указан <адрес>, исполнение начинается с адреса, содержащегося в счетчике команд PC. Перед вызовом подпрограммы монитор BUFFALO помещает два байта адреса возврата в стек пользовательской подпрограммы, благодаря чему первая же команда RTS, для которой не было соответствующей команды JSR или BSR, вернет управление монитору. Таким образом, любая подпрограмма пользователя может быть вызвана и исполнена с помощью монитора. Исполнение подпрограммы продолжается до тех пор, пока не встретится лишняя команда RTS, не встретится точка останова или не произойдет сброс процессора.
ВНИМАНИЕ:
Если в процессе выполнения подпрограммы встретилась точка останова, монитор снимает со стека два последних байта, считая их своим адресом возврата. Поэтому, если пользовательская подпрограмма пользуется операциями сохранения данных в стеке, данной операцией необходимо пользоваться с осторожностью.
G Go
Запуск
Синтаксис:
G [<адрес>],
где
<адрес> стартовый адрес
Команда GO позволяет пользователю запустить программу на исполнение. Если не указан <адрес>, исполнение начинается с адреса, содержащегося в счетчике команд PC. Исполнение программы продолжается до тех пор, пока не встретится точка останова или не произойдет сброс процессора.
HELP Help
Подсказка
Синтаксис:
HELP
Команда HELP позволяет пользователю получить краткий перечень команд монитора BUFFALO.
LOAD Load
Загрузка
Синтаксис:
LOAD <параметр>,
где
<параметр> обозначает следующее:
· Если <параметр> пуст, то происходит действие, аналогичное действию команды TM, и загрузка не осуществляется.
· Если <параметр> = T, то загрузка будет происходить через терминальный порт.
· Если <параметр> не пуст и не равен T, то <параметр> передается в хост-компьютер и загрузка будет происходить через хост-порт.
Команда LOAD подгружает объектный код в S-формате с внешнего хост-компьютера в память микроконтроллера. Монитор обрабатывает только корректные данные, поэтому возможно, что в процессе загрузки монитор прервет операцию при получении искаженных данных. Если стартовый адрес загружаемых данных некорректен, монитор выводит сообщение "error addr xxxx", где xxxx - некорректный адрес.
ВНИМАНИЕ:
При отсутствии дополнительного порта ввода-вывода возможна только команда LOAD T, т.е. загрузка через терминальный порт.
MD Memory Display
Отображение содержимого памяти
Синтаксис:
MD [<адрес1> [<адрес2>]],
где
<адрес1> Начальный адрес памяти
<адрес2> Конечный адрес памяти
Команда MD позволяет пользователю просмотреть содержимое блока памяти в диапазоне адресов <адрес1>-<адрес2>. Если <адрес2> отсутствует или меньше, чем <адрес1>, отображается 9 строк по 16 байт в каждой, начиная с <адрес1>. Если отсутствуют оба адреса, отображается содержимое блока памяти (так же, 9 строк по 16 байт), продолжающего блок, отображенный предыдущей командой MD.
Каждая отображаемая строка включает в себя:
· адрес первого байта, отображенного в строке (в шестнадцатиричном виде, 4 цифры),
· 16 чисел в шестнадцатиричном виде, отображающих содержимое памяти,
· 16 символов, являющихся ASCII-эквивалентами отображаемых байтов.
MM Memory Modify
Изменение памяти
Синтаксис:
MM [<адрес>]
где
<адрес> адрес памяти, с которого начинается отображение/изменение.
Команда MM позволяет просмотреть/изменить содержимое памяти в интерактивном режиме. Команда MM также может стирать любой байт ЭСПЗУ и программировать его соответствующим значением (т.е., ЭСПЗУ можно рассматривать как ОЗУ). Будучи введенной, команда MM имеет ряд режимов модификации и проверки данных. Распознаются следующие подкоманды:
<Ctrl-J>,
<пробел>,
+ Просмотреть/изменить следующий байт
<Ctrl-H>,
^,
- Просмотреть/изменить предыдущий байт
/ Заново просмотреть/изменить текущий байт
<Ввод> Закончить операцию MM
O Вычислить относительное смещение для команд ветвления
Если была произведена попытка изменить байт по некорректному адресу, выводится сообщение "rom". Некорректным адресом считается адрес байта, операция чтения которого возвращает не то значение, которое было в него записано.
MOVE Move
Пересылка
Синтаксис:
MOVE <адрес1> <адрес2> [<адрес3>],
где
<адрес1> Начальный адрес блока памяти
<адрес2> Конечный адрес блока памяти
<адрес3> (Дополнительно) Начальный адрес блока памяти, в который производится копирование.
Команда MOVE позволяет пользователю скопировать или переместить содержимое блока памяти в диапазоне адресов <адрес1>-<адрес2> в память, начиная с адреса <адрес3>. Если <адрес3> не указан, данные копируются в адрес <адрес1> + 1, т.е., перемещаются на 1 байт вверх. Копирование/перемещение данных в ЭСПЗУ перепрограммирует соответствующие ячейки.
Никакого сообщения о завершении операции не выводится.
P Proceed/Continue
Возобновить/Продолжить
Синтаксис:
P
Команда P позволяет продолжить исполнение программы (например, после отработки точки останова) без необходимости удаления точки останова по текущему адресу. Эта команда аналогична команде G, за исключением того, что запуск происходит всегда с адреса, содержащегося в счетчике команд (например, с адреса точки останова), и игнорируются точки останова, установленные на адрес первой команды.
ВНИМАНИЕ:
Данная команда подразумевает использование монитором сигналов PA3/OC5 и прерывания XIRQ. Если пользователь использует эти сигналы в своих целях, команды P, STOPAT и T будут выполняться некорректно.
RM Register Modify
Изменение регистров
Синтаксис:
RM [p, y, x, a, b, c, s],
где
p Счетчик команд PC
y Индексный регистр Y
x Индексный регистр X
a Аккумулятор A
b Аккумулятор B
c Регистр состояния процессора CCR
s Указатель стека SP
Команда RM используется для изменения регистров процессора. Значения всех регистров поочередно выводятся на экран в шестнадцатиричном виде. Можно ввести новое содержимое регистра или оставить его прежним. Клавиша <Ввод> изменяет содержимое регистра (если необходимо) и заканчивает команду RM. Клавиша <Пробел> изменяет содержимое регистра (если необходимо) и переходит к следующему регистру.
Аргумент в командной строке указывает, с какого регистра начинать изменения. При отсутствии аргументов изменения начинаются со счетчика команд.
STOPAT Stop at Address
Останов по адресу
Синтаксис:
STOPAT <адрес>,
где
<адрес> адрес команды, перед исполнением которой необходимо остановить исполнение программы.
Команда STOPAT инициирует покомандное исполнение программы пользователя с адреса, содержащегося в счетчике команд, до тех пор, пока не будет достигнут указанный адрес.
Команда STOPAT отличается от использования точек останова тем, что ее адрес останова может указывать в ПЗУ, в то время как точки останова возможны только в ОЗУ и ЭСПЗУ. Кроме того, STOPAT осуществляет покомандное исполнение программы, сравнивая адрес следующей команды с адресом останова. Поэтому скорость исполнения программы значительно снижается. Адрес в команде STOPAT так же, как адреса точек останова, должен быть адресом инструкции.
ВНИМАНИЕ:
Данная команда подразумевает использование монитором сигналов PA3/OC5 и прерывания XIRQ. Если пользователь использует эти сигналы в своих целях, команды P, STOPAT и T будут выполняться некорректно.
T Trace
Трассировка
Синтаксис:
T <n>,
где
<n> шестнадцатиричное число (до $FF), указывающее количество инструкций.
Команда T позволяет покомандно проследить исполнение программы. Пользователь может указать количество исполняемых инструкций. Если параметр <n> опущен, исполняется одна инструкция. Исполнение начинается с адреса, содержащегося в счетчике команд. После исполнения очередной команды выводится ее мнемоника и содержимое регистров процессора.
ВНИМАНИЕ:
Данная команда подразумевает использование монитором сигналов PA3/OC5 и прерывания XIRQ. Если пользователь использует эти сигналы в своих целях, команды P, STOPAT и T будут выполняться некорректно.
TM Transparent Mode
Прозрачный режим
Синтаксис:
TM
Команда TM позволяет программно соединить между собой терминальный порт и хост-порт, обеспечивая тем самым "прямое" подключение терминала к хост-компьютеру. Это возможно только при наличии внешнего аппаратного обеспечения, реализующего второй порт RS-232.
Порты будут соединены до тех пор, пока с терминального порта не придет символ Ctrl-A.
Возможны подкоманды:
<Ctrl-A> Выход из прозрачного режима
<Ctrl-B> Послать BREAK хост-компьютеру
ВНИМАНИЕ:
Команда TM возможна только при наличии внешнего порта ввода-вывода. В противном случае будет выдано сообщение об отсутствии хост-порта.
VERF Verify
Проверка правильности загрузки
Синтаксис:
VERF <параметр>,
где
<параметр> обозначает следующее:
· Если <параметр> пуст, то происходит действие, аналогичное действию команды TM, и прием данных не осуществляется.
· Если <параметр> = T, то прием данных будет происходить через терминальный порт.
· Если <параметр> не пуст и не равен T, то <параметр> передается в хост-компьютер и прием данных будет происходить через хост-порт.
Команда VERF аналогична команде LOAD за исключением того, что принятые данные не записываются в память, а сравниваются с уже находящимися там. В случае несовпадения данных верификация прекращается и выдается сообщение об ошибке.
ВНИМАНИЕ:
При отсутствии дополнительного порта ввода/вывода возможна только команда VERF T, т.е. прием данных через терминальный порт.
XBOOT Transfer Data Bootstrap Mode
Передача данных для режима начальной загрузки
Синтаксис:
XBOOT [<адрес1>[ <адрес2>]],
где
<адрес1> Начальный адрес
<адрес2> Конечный адрес
Команда XBOOT передает блок данных с адреса <адрес1> по адрес <адрес2> через последовательный интерфейс SCI в целевое устройство на базе MC68HC11, установленное в режим начальной загрузки. Перед пересылкой данных посылается синхронизирующий символ $FF. Это является частью протокола начальной загрузки и устанавливает скорость передачи для основного блока данных. Если указан только один адрес, он считается стартовым адресом, а размер блока устанавливается равным 256 байтам. Если ни один из адресов не указан, передается блок данных с $C000 по $C0FF.