Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Ваш интернет-бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Статьи по электронике
Информационный Канал Subscribe.Ru |
Статьи по электронике
Автор рассылки: Вячеслав Кулаков
Сайт рассылки
Данная статья является первой из планируемой серии статей посвященных программированию 16-ти разрядных микроконтроллеров фирмы Fujitsu. Контроллеры этой фирмы занимают примерно 5% общемирового рынка и не особенно широко распространены в нашей стране. В большинстве простых применений достаточно легко можно обойтись более простыми 8-ми битными контроллерами таких фирм как Microchip или им аналогичными. Однако в тех случаях, когда требуется более широкая периферия, больше ОЗУ/ПЗУ, больше линий ввода-вывода эти контроллеры становятся чрезвычайно удобными в применении. Так же в их пользу говорит такой немаловажный фактор, как скорость разработки программы, которая получается достаточно высокой за счет полной ориентированности контроллеров на язык высокого уровня С. Опыт работы автора показывает, что на Fujitsu можно разработать практически любую программу
(за редким исключением) не написав ни одной команды на ассемблере.
Ниже для примера приводятся основные характеристики микроконтроллера MB90F594 (стоимостью около 18$) и микроконтроллера MB90F598 (стоимостью около 13$).
- MB90F594:
- ПЗУ 256 кбайт;
- ОЗУ 6144 байт;
- Число линий ввода/вывода 78;
- Входа CCP (захват/сравнение) 6;
- Programable Pulse Generator (PPG) – программируемые генераторы на 6 каналов разрядностью 16 бит или на 12 каналов разрядностью 8 бит;
- UART, 3 штуки;
- АЦП 8 или 10 бит, 8 каналов;
- Последовательный интерфейс (SPI);
- CAN 2.0B, 2 штуки;
- Драйвер шагового двигателя;
- Генератора звукового сигнала;
- Напряжение питания 4,5 – 5,5 В;
- Корпус QFP-100 (100 выводов с шагом 0,65 для поверхностного монтажа)
- MB90F598:
- ПЗУ 128 кбайт;
- ОЗУ 4096 байт;
- число линий ввода/вывода 78;
- входа CCP (захват/сравнение) 6;
- Programable Pulse Generator (PPG) – программируемые генераторы на 6 каналов разрядностью 16 бит или на 12 каналов разрядностью 8 бит;
- UART;
- UART+SCI;
- АЦП 8 или 10 бит, 8 каналов;
- CAN 2.0B:
- Драйвер шагового двигателя;
- Напряжение питания 4,5 – 5,5 В;
- Корпус QFP-100 (100 выводов с шагом 0,65 для поверхностного монтажа)
Разумеется, все семейство микроконтроллеров Fujitsu значительно шире (только 16-ти разрядных контроллеров несколько десятков), так же существуют 8-ми и 32-х разрядные. Сводную таблицу для их всех автор приводить не видит смысла, т.к. при необходимости ее можно найти в Internet’е или на диске Fujitsu, который распространяется фирмами – поставщиками электронных компонентов. Так же на этом диске находится оригинальная документация на комплектующие Fujitsu, примеры программ для микроконтроллеров, бесплатная IDE – отладочная среда со встроенным компилятором C, необходимые утилиты и многое другое. Сайт производителя находится по адресу http://www.fme.gsdc.de/gsdc.htm. На нем имеется практически все, что и на диске, за исключенеием IDE.
Для изучения микроконтроллеров желательно установить отладочную среду Softune Workbench и примеры программ. IDE и примеры представляют собой самораспаковывающиеся архивы. При распаковке IDE будет запрошен пароль, находящийся на главной html-странице диска. В данной и последующих статьях автор будет рассматривать в основном программирование контроллера MB90F598G, который представляется наиболее удобным для изучения. Он принадлежит серии MB90F598G, поэтому примеры рекомендуется устанавливать для этой серии. После установки IDE ее можно настроить под свои потребности через меню "Setup".
Загрузка программы в ПЗУ контроллера Fujitsu осуществляется непосредственно через COM-порт компьютера без использования каких-либо дополнительных средств. Единственное, что необходимо - это соединить контроллер с компьютером через переходную микросхему типа MAX232 или ей подобную.
Простую программу для Fujitsu можно написать не зная архитектуры контроллера, достаточно лишь владеть языком С. Для того, чтобы это сделать можно открыть проект шаблона, который находится в примерах программ (папка "Template") и вставить свой код в функцию main(). Все инициализации и определения уже заранее написаны в шаблоне. Единственное, что необходимо знать, так это систему обозначений. Например, доступ к линии ввода/вывода, обозначенной в контроллере P23 будет осуществляться через мнемонику PDR2_P23, бит задания направления (вход или выход) для нее будет обозначен как DDR2_D23. Аналогично производится доступ и к другим битам или регистрам контроллера включая периферию. Ниже приведен код простейшей программы:
unsigned long cnt;
DDR4 = 0xFF; //Установка порта PDR4 на выход
PDR4 = 0xFF; //выставить на выходе этого порта единицы
DDR2_D22 = 1;
while(1) {
for(cnt = 0; cnt < 30000; cnt++); // задержка
PDR4--; // декремент значения порта PDR4
}
Для запуска программы этот код необходимо вставить в функцию main() файла Main.c шаблона, скомпилировать программу и либо сразу загрузить ее в контроллер, либо просмотреть ее работу в эмуляторе. Так же данная программа имеется в примерах в каталоге IOPort.
Рассмотрим, что же представляет собой проект. Автор пользуется последней на момент написания статьи версией IDE Softune Workbench (версия V30L29). В ней формат проекта отличается от формата предыдущих версий и называется не project, a workspace. Поэтому при открытии проектов предыдущих версий (примеры программ могут являться проектами предыдущих версий) необходимо в диалоговом окне открытия файла указывать тип файла "Project File(*.pjt)", а не установленный по умолчанию "Workspace File(*.wsp)", а затем переформатировать его в новый тип проекта. Других каких-то серьезных отличий от предыдущих версий автором не отмечено, поэтому все описанное ниже может быть легко перенесено на более ранние версии. Открытие проекта производится через меню "File -> Open Workspase".
Откроем проект вышеописанной программы из каталога примеров IOPort. Как видно, главное окно рабочей среды разбито на три фрейма. В левом верхнем фрейме и будет отражено содержание проекта. В категории Source Files находятся файлы проекта с расширениями *.asm, *.c и любые другие, которые туда будут добавлены (например описание *.txt). В категорию Dependencies автоматически заносятся файлы, включенные в файлы *.c и *.asm из категории Source Files (например, тип *.h). В предыдущих версиях Softune Workbench у категории Include была такая же роль, как и у категории Dependencies в текущей версии. Однако в последней версии она обычно остается пустой, хотя в нее можно занести любой файл. И последняя категория это Debug. В ней находятся файлы настроек возможных отладчиков. Обычно это файлы emulate.sup (аппаратный отладчик, работающий совместно с IDE) и simulate.sup
(встроенный программный эмулятор). Если дважды щелкнуть по какому-либо из текстовых файлов, то он будет открыт в правом фрейме в текстовом редакторе.
Рассмотрим более детально структуру программы. После сброса контроллера начинает исполняться содержимое файла Start.asm. В нем производятся первичные инициализации контроллера, такие как аппаратные инициализации, загрузка начальных значений глобальных переменных, задание размера стека и т.д. Для того, что бы понять текст этого файла, необходимо знать архитектуру контроллера, работу ассемблера и линкера. Поэтому тем, кто только начинает изучать данные контроллеры разобраться с его содержимым не получится, из-за чего автор не видит смысла описывать его работу сейчас, а планирует вернуться к нему позже, в другой статье. После того, как программа исполнит все инициализации, из файла Start.asm производится вызов основной функции main(), находящейся в файле Main.c, в результате чего начнет работать прикладная программа. В этот файл директивой #include включен
файл mb90595.h , в котором находятся определения всех регистров контроллера на языке С. Так же в проекте имеется файл с описанием регистров на ассемблере Mb90595.asm . Эти описания используются в файле Start.asm. И последний файл данной программы это vector.c. В нем производится задание приоритетов прерываний и определение их обработчиков. По умолчанию все прерывания выключены и на все прерывания задан обработчик DefaultIRQHandler, который находится в этом же файле.
Скомпилируем проект (пункт меню "Project->Build") и посмотрим на работу программы в программном эмуляторе. Эмулятор запускается через "Debug->Start debug". Перед его запуском необходимо убедиться в том, что в окне проекта в категории Debug выбран файл simulate.sup . Если это не так, его можно выбрать двойным щелкчком мыши.После запуска эмулятора на первый план будет выведено окно непосредственного ввода команды эмулятору. Его можно закрыть, т.к. на данном этапе в нем необходимости нет. Текст программы при работе в эмуляторе отображается в отдельных окнах. Таким образом, при старте отладчика будет выведено окно Start.asm, в котором выделена первая исполняемая команда. Т.к. Start.asm в данной статье не рассматривается, его можно закрыть, а открыть файл Main.c дважды щелкнув по нему в окне проекта в категории Source Files. В нем напротив каждой исполняющейся
строки будет стоять кружок со стрелкой. Если щелкнуть по кружку, можно установить или снять точку останова, а если по стрелке, запустить исполнение программы до этой строки. Так же при необходимости можно увидеть ассемблерные команды, соответствующие командам языка С и аналогично исполнять программу на ассемблере. Для этого требуется щелкнуть правой кнопой мыши по тексту программы и выбрать пункт меню "Mix display". Пошаговое исполнение программы с заходом или без в функции исполняется через меню "Debug->Run->Step over", "Debug->Run->Step in" , либо через нажатие соответствующих клавиш. Эти клавиши лучше всего назначить самостоятельно через меню "Setup->Keyboard", т.к. по умолчанию они назначены несколько нестандартно. Запуск на исполнение производится командой "Debug->Run->Go". Если поставить точку останова, например, на строке "DDR4 = 0xFF;" и выполнить команду "Debug->Run->Go", то будет
исполнено содержание файла Start.asm, произойдет вызов функции main.c(), и исполнение программы остановится на этой строке. Отладчик позволяет произвести просмотр и изменение значений переменных, регистров, стека, содержимого памяти, произвольно вызывать функции, эмулировать прерывания и выполнять другие стандартные для таких эмуляторов функции. Например, для просмотра переменной cnt ее необходимо выделить, затем щелкнуть правой кнопкой мыши и в появившемся меню выбрать пункт "Watch". После этого будт открыто окно "Setup watch", в котором можно будет выбрать режим отображения переменной. По нажатии кнопки "Ok" выбранная переменная будет отражена в окне "Watch".
В заключение автор хотел бы отметить, что вышеописанный эмулятор хоть и позволяет отладить практически любую программу, его возможности значительно уступают эмуляторам, позволяющим работать в реальном времени. Их работа основана на способности контроллера выдать прерывание при совпадении заранее заданного значения в специальном регистре со значением программного счетчика. При этом предварительно загруженный монитор может выдать текущие значения каких-либо регистров на внешнее устройство, обычно в компьютер, который соединен с контроллером. Таким образом с компьютера пользуясь этой функцией можно вести полноценную отладку программы, устанавливая точки останова, выполняя команды Step in и Step over и просматривать или изменять значения переменных, содержащихся в реальных регистрах. Контроллеры Fujitsu позволяют задавать две точки останова. Большой плюс такого
отладчика в том, что он дает возможность отслеживать работу периферии в реальном времени. Недостаток - необходимость задействования дополнительных ресурсов контроллера (ОЗУ, ПЗУ, последовательный порт, прерывания). И еще один недостаток - эти отладчики бесплатно не распространяются, например эмулятор Accemic MDE стоит порядка $400 - 500.
В дальнейших статьях автор планирует рассмотреть архитектуру ядра контроллеров Fujitsu и работу его основных устройств периферии.Эти статьи будут написаны по появлении свободного времени у автора, а так же при наличии читательского интереса.

http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||