Министерство образования и науки РФ Федеральное агентство по образованию ________________________________________ Санкт-Петербургский государственный электротехнический университет “ЛЭТИ” ________________________________________ Интегрированная среда Keil μVision3 Методические указания к лабораторным работам по дисциплине “Микропроцессорные системы” Санкт-Петербург Издательство СПбГЭТУ “ЛЭТИ” 2007 ВВЕДЕНИЕ При выполнении цикла лабораторных работ на микроконтроллере серии LPC2000 фирмы Philips будет использоваться интегрированная среда разработки (ИСР) (Integrated Development Enviroment - IDE) компании Keil Elektronik ,называемая μVision3 (произносится как «микровижн»). Среда разработки Keil μVision3 включает в себя менеджер проектов, редактор исходных кодов, компилятор, средства отладки и утилиты для полной симуляции микроконтроллера. В составе среды μVision имеется два средства отладки. Прежде всего, после компиляции и компоновки программы ее код можно загрузить в симулятор μVision3. Этот отладчик симулирует работу процессорного ядра ARM7 и периферийных устройств поддерживаемого микроконтроллера. Работа с симулятором – хороший способ получить представление об устройствах семейства LPC2000. Поскольку симулятор обеспечивает моделирование работы ядра и периферии с точностью до такта, он может оказаться очень полезным инструментом для проверки, корректно ли был инициализирован микроконтроллер и правильно ли были вычислены различные стартовые константы, например значения коэффициента деления предделителей таймеров. Однако рано или поздно вам потребуются реальные входные воздействия. Клиентскую часть симулятора можно подключить к вашему устройству через фирменный отладчик компании Keil – ULINK. К персональному компьютеру кабель ULINK подключается через USB (universal serial bus), а к устройству – через интерфейс JTAG микроконтроллера LPC2000, который является отдельным модулем ядра ARM7, который поддерживает команды отладки, посылаемые хостом (ПК). 1. ИЗУЧЕНИЕ СРЕДЫ РАЗРАБОТКИ Keil uVision. Установка и настройка программного обеспечения на рабочем месте: Установить среду разработки Keil μVision3 (дистрибутив находится в папке Keil_μVision). Процесс установки прост и интуитивно понятен. Keil uVision является бесплатной программой для проектов, конечный исполняемый код которых менее 16 Кб. Однако, для работы с отладчиком необходима регистрация данного программного продукта. Регистрация производится 2 введением правильного ключа в меню File->License Management. Правильный ключ может быть получен при помощи прграммы Keil_lic_v3.exe, находящейся в папке с дистрибутивом Keil. Установить RDI драйверы для отладчика J-LINK из папки RDI_Driver. В процессе работы при появлении окна, представленного на рисунке 1 ввести корректный ключ для драйвера RDI. Эта операция должна быть сделана для каждого из устройств J-LINK, подключаемых к данному компьютеру, т.к. ключ основан на его серийном номере. Корректный ключ может быть получен при помощи программы keygen.exe, находящейся в папке с дистрибутивом драйвера. Рис. 1. Окно запроса корректного ключа Содержание корневой папки, которую создает µVision3/ARM при инсталляции: C:\KEIL\ARM\BIN – исполняемые файлы µVision3/ARM. C:\KEIL\ARM\INC – Keil С определяет файлы и устройство необходимые компилятору C. C:\KEIL\ARM\ADS – примеры и файлы установок для ARM ADS/RealView™. C:\KEIL\ARM\GNU – примеры и файлы уставок для компилятора GNU. C:\KEIL\ARM\Flash – программирование флэш-памяти через ULINK USB-JTAG Адаптер. C:\KEIL\ARM\HLP – оперативная документация для µVision3 и ARM. C:\KEIL\ARM\ ... \Startup – устройства, определенные для запуска ЦП для Keil C, GNU или ADS. C:\KEIL\ARM\ ... \Examples – универсальные примеры программ для Keil C, GNU или ADS. C:\KEIL\ARM\ ... \Boards – файлы, связанные с отладочной платой. 3 Правила настройки проекта приведены далее. Порядок выполнения работы: 1. Запустить Keil. 2. Ознакомиться с элементами управления. Среда разработки Keil представляет собой типовое приложение Windows. Ее вид c основными элементами управления изображен на рисунке 2. Рис.2. Пользовательский интерфейс среды Keil μVision 3. Создать новый проект (см. рис. 3). Рис. 3. Создание нового проекта 4. Сохранить проект на диске. Выбрать микроконтроллера (см. рис. 4). Vendor: Philips, Ознакомиться со списком периферийных устройств. 4 требуемый тип Device: LPC2148. Рис. 4. Выбор типа микроконтроллера 5. Открыть вкладку просмотра содержимого проекта (рис. 5) и выбрать startup.s. Рис. 5. Содержимое проекта 5 6. Выбрать вкладку “Configuration Wizard” и ознакомиться со списком настроек, которые можно редактировать при помощи среды Keil (рис. 6). Рис. 6. Мастер настройки стартового кода 7. Выполнить настройку проекта: 1. Выбрать Project -> Options for target ‘…’. 2. Во вкладке “Debug” выбрать “Use: RDI Interface Driver” и выбрать “Run to main()”. Нажать “Settings” (рис. 7). Рис. 7. Настройка проекта 3. Выбрать путь к драйверам JTAG (рис. 8): 6 C:\Program Files\Segger\JLinkARM_V324e\JLinkRDI.dll Рис. 8. Выбор драйвера JTAG 4. Нажать кнопку “Configure RDI Driver” (рис. 8). Выбрать вкладку Flash и указать настройки, отмеченные на рисунке 9: “Enable flash programming”, “Cache flash contents”, “Allow flash download”. Рис. 9. Настройки RDI драйвера 5. Сохранить настройки – OK – OK. 7 При отсутствии аппаратной платформы можно использовать симулятор микроконтроллера. Для этого в настройках проекта можно выбрать “Use simulator” во вкладке “Debug”. 8. Создать новый файл (File -> New …) и сохранить его в текущей папке под названием main.c. Добавить этот файл в проект (двойное нажатие на “Source Group 1”) – см. рис.10. Написать текст программы и сохранить файл (см. Листинг 1). Рис. 10. Добавление кода в проект main.c 01 02 03 04 05 06 07 08 09 Листинг 1 #include <lpc214x.h> //подключение библиотеки int main (void) { IODIR0 = 0xFF << 8; IOSET0 = 0xAA << 8; while (1); return 0; } 8 9. Скомпилировать программу. Для этого нажать F7. В случае наличия ошибок, их список будет отображен в окне “Output”. 10. Запустить программу для отладки (Ctrl+F5). Освоить использование стандартных функций отладчика (Step In, Step Out, Step Over, Run, Stop) – см. рис. 11. Запустить программу на выполнение и наблюдать результаты работы программы на отладочной плате. Рис. 11. Отладка программы 2. ОТЛАДКА ПРОГРАММ В KEIL Инструментальная среда разработки Keil предоставляет широкие возможности по отладке кода программ. Благодаря этому имеется возможность получать информацию о корректности выполнения программы, проводить всевозможные тесты, не используя при этом микросхему, для которой предназначается разрабатываемое ПО, что значительно экономит затрачиваемое время, а также материальные и другие ресурсы. 9 2.1 Основные функции доступные в режиме отладки Все доступные функции можно выбрать через меню “Debug”. Для некоторых наиболее часто используемых функций можно воспользоваться быстрыми клавишами, которые подписаны рядом с соответствующими пунктами меню. Все функции меню “Debug” продублированы на панели инструментов для более удобного доступа к ним. Далее идёт перечисление основных функций с их кратким описанием. 2.1.1 Run Запускает выполнение программы до первой встреченной точки останова (breakpoint), либо до принудительной остановки выполнения. 2.1.2 Halt Останавливает процесс выполнения программы. 2.1.3 Step into Данная функция позволяет перейти к выполнению следующей команды. В случае если текущей командой является команда вызова подпрограммы (например: call), то указатель переместится на первую инструкцию в этой подпрограмме. 2.1.4 Step over Действует аналогично предыдущей функции, но не переходит “внутрь” подпрограмму, а проходит “через” неё на следующую инструкцию. 2.1.5 Step out Позволяет выйти из текущей подпрограммы и перейти на следующую инструкцию после вызова этой подпрограммы. 2.1.6 Run to Cursor line Данная функция аналогична функции “Run”, но выполнение происходит до места, в котором находится курсор. Этой функцией также можно воспользоваться, открыв в окне кода контекстное меню и выбрав там пункт “ Run to Cursor line ”. 2.1.7 Insert/Remove Breakpoint Точка останова – позволяет выставить в коде программы места, в которых выполнение будет останавливаться. Данная функция также доступна через контекстное меню окна кода программы. 10 2.1.8 Enable/Disable Breakpoint Позволяет включить или выключить точку останова. Эта функция полезна, когда точка останова в данный момент не нужна, но может пригодиться в дальнейшем. 2.1.9 Kill All Breakpoints Убирает все точки останова из программы. 2.1.10 Show Next Statement Показывает, какая инструкция будет выполняться следующей. 2.2 Периферийные устройства Часто для анализа работы программы необходимо знать, как устройство взаимодействует с другими устройствами через свои периферийные интерфейсы. Для этого можно воспользоваться элементами меню “Peripherals”. Также в этом меню содержится пункт “Reset CPU” позволяющий перезагрузить эмулируемое устройство. 2.3 Вывод содержимого памяти устройства 2.3.1 Memory Window Для просмотра памяти устройства нужно воспользоваться окном “Memory Window” (если оно не отображено на экране, то можно сделать это через меню “View”). 2.3.2 Watch & Call Stack Window Данное окно содержит несколько вкладок. Наиболее полезные из них это вкладка “Call Stack” показывающая стек вызова подпрограмм и вкладки “Watch #N”, где N – номер вкладки для просмотра данных. В окне “Watch” можно выводить значения переменных, регистров, а также несложных выражений. Для ввода выражения, значение которого необходимо получить, нужно в требуемой строчке окна “Watch” нажать клавишу [F2] и ввести это выражение. 2.4 Пример В качестве примера используем программу, код которой приведён ниже. Листинг отлаживаемой программы. 1 2 3 4 5 6 7 8 ; Объявление зоны кода с именем "Prog" и аттрибутом "только для чтения". AREA Prog, CODE, READONLY ; Делаем имя "__main" доступным другим модулям. Это необходимо чтобы ; модуль Startup.s, выполняющий настройку устройства, мог передать ; управление этому коду. EXPORT __main 11 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 __main PROC mov mov ; Процедура __main R0, #0xFFFFFFF0 R1, #0x00000011 ; R0 := 4294967280 ; R1 := 17 ; Далее идёт вызов подпрограммы __add_proc, которая просто суммирует ; содержимое регистров R0 и R1 и записывает результат в R2. bl __add_proc ; Команда nop не выполняет ни каких функций. Но она нужна нам чтобы после ; выхода из подпрограммы __add_proc работа программы не завершилась и можно ; было посмотреть содержимое регистров. nop ENDP __add_proc ; Конец подпрограммы __main PROC ; Подпрограмма __add_proc adds R2, R0, R1 bx LR ; R2 := R0 + R1 ; Выход из подпрограммы ENDP ; Конец объявления __add_proc END ; Конец модуля программы Необходимо создать проект в Keil для устройства LPC2148 (можно найти в секции Philips). При создании будет предложено добавить к проекту файл “Startup.s”, на что необходимо ответить утвердительно. После этого можно добавить к проекту файл с расширением *.s (или *.a), в котором должна содержаться программа, листинг которой приведён выше. Затем необходимо собрать программу в бинарный код. Для этого в меню “Project” нужно выбрать “Build target”, или просто нажать клавишу [F7]. После того, как проект будет успешно собран, можно приступать к отладке. Для этого необходимо выбрать в меню “Debug” пункт “Start/Stop Debug Session”, или же нажать комбинацию клавиш [Ctrl]+[F5]. После этого среда разработки перейдёт в режим отладки. При выполнении данной программы в пошаговом режиме во вкладке “Regs” окна “Project Workspace” можно наблюдать изменение содержимого регистров. Поставьте точку останова на первой инструкции подпрограммы __main (строка 11). Далее выполните две команды mov с помощью функции “Step Into”. В окне “Project Workspace” можно наблюдать, как после выполнения этих команд меняются содержимое регистров R0 и R1. В R0 будет записано шестнадцатеричное число 0xffffff0 (пока там число 0х0000032), в R1 – 0x11 (см. рисунок 12). Также изменяется значение регистра R15 (он ещё называется PC – программный счётчик), потому что в нём хранится адрес текущей инструкции, и после выполнения этой инструкции значение регистра PC изменяется на адрес следующей команды. 12 Рис. 12. Окно, показывающее содержимое регистров Курсор, указывающий на текущую команду, должен находиться на строке 16. В этом месте происходит переход на подпрограмму __add_proc. Выполнив “Step Into” можно наблюдать, как указатель текущей команды перешёл в подпрограмму __add_proc. При этом в регистр R14 (также он называется LR) было помещено предыдущее значение программного счётчика. После выполнения команды adds (сложение с разрешением изменения флагов после выполнения операции) можно наблюдать, как изменилось значение регистра R2, куда помещается результат сложения. Однако, как можно заметить, этот результат не соответствует действительности. Всё дело в том, что слагаемые были подобраны таким образом, что в ходе выполнения операции сложения произошёл перенос из старшего разряда результата. Вследствие этого установился соответствующий флага C регистра состояния CPSR (см. рисунок 13). 13 Рис. 13. Значения регистров и флагов после выполнения операции “adds” Сейчас указатель текущей команды находится на строке 29. Текущая инструкция выполняет возврат из подпрограммы с использованием регистра LR, в котором записан адрес возврата. Выполнив эту команду, мы возвращаемся в подпрограмму __main на строчку 21, в которой находиться команда nop. Использование аппаратного JTAG-отладчика ULINK Аппаратным JTAG-отладчиком, входящим в состав стартового набора разработчика, является отладчик ULINK производства компании Keil. Он подключается к разъему порта JTAG платы МСВ2100 (Р5) и, через порт USB, к персональному компьютеру Для перехода от симулятора к отладчику ULINK следует выполнить следующие действия. Установка отладчика ULINK Подключите отладчик к плате MVB2100, как показано на рисунке 14, и вставьте кабель USB в соответствующий разъем ПК. Не забудьте подключить к плате питание (+6.5 В). 14 Рис.14. Подключение отладчика к плате Конфигурирование μVISION для использования отладчика ULINK Сначала откройте окно задания опций для конечного устройства (меню Project, пункт Options for Target...) и перейдите к вкладке Utilities (рис.15). Включите переключатель Use Target Driver for Flash Programming и выберите из ниспадающего списка строку «ULINK ARM7 Debugger». He забудьте также отметить флажок Update Target before Debugging. Рис. 15. Вкладка Utils Переключение с симулятора на JTAG-отладчик Снова откройте окно задания опций для конечного устройства и перейдите к вкладке Debug (рис. 16). В правой части окна выберите из ниспадающего списка строку «ULINK ARM7 Debugger» и отметьте переключатель Use. Options for Target Target 1" 15 Рис. 16. Вкладка Debug Теперь μVISION готова для использования JTAG-отладчика ULINK вместо симулятора. Если в данный момент вы работаете с JTAG-отладчиком или симулятором, то прежде чем перекомпилировать или закрыть проект, остановите выполнение любых отлаживаемых программ и выйдите из отладчика. Важное замечание, касающееся следующих упражнений. Проекты для всех последующих упражнений могут быть собраны либо для отладки в симуляторе μVISION, либо для загрузки на плату МСВ2100 и отладки через JTAG-отладчик ULINK. При работе с версией для симулятора корневая папка в браузере проекта будет называться «Simulator», а при работе с версией для отладчика — «Ulink». Единственное, чем отличаются обе версии проекта, — параметрами опции Debug. Для переключения между этими вариантами перейдите к вкладке Files окна Project Workspace и в контекстном меню выберите пункт Manage Components. На вкладке Project Components (рис. 17) выберите требуемую цель проекта («Simulator» или «Ulink») и нажмите на кнопку Set as Current Target. В реальных проектах эта функция μVISION позволяет задать несколько различных сборок проекта или разместить в проекте несколько различных программ, являющихся составными частями одного большого приложения. 16 Рис. 17. Вкладка Project Components 3.ОПИСАНИЕ ПЛАТЫ Для проведения курса лабораторных работ необходимо обеспечить полный состав рабочего места. Он в себя включает: Персональный компьютер с установленным инструментальным комплексом Keil uVision 3 и драйверами для J-Link. Отладочная платформа Embedded Artists на основе микроконтроллера Philips LPC2148 (с сентября 2006 г. – NXP LPC2148). Кабель питания, подключаемый к USB порту компьютера. COM кабель, подключаемый к COM порту компьютера. J-Link, соединяемый с отладочной платой 20-контактным проводом и с компьютером через USB кабель. 17 Рис.18. Внешний вид отладочной платы Внешний вид отладочной платы приведен на рисунке 18. Схема подключения отладочной платы к компьютеру представлена на рисунке 19. Основные элементы отладочной платы приведены на рисунке 20. 18 COM кабель от COM порта компьютера USB кабель от USB порта компьютера 20-контактный кабель от J-LINK Рис.19. Схема подключения отладочной платы к компьютеру 19 Рис.20. Основные элементы отладочной платы На плате имеются следующие конструктивные элементы, которыми Вам предстоит управлять: 1. Светодиодная линейка. На линейке можно создавать различные эффекты: бегущие огни в различных комбинациях, неподвижное свечение отдельных диодов. 2. Переменные резисторы. Оба переменных резистора можно использовать для задания аналоговых сигналов различной амплитуды, регулирования скорости вращения двигателя, изменения тона и громкости динамика и др. 3. Двигатель. По звуку, который создает двигатель во время работы, можно убедиться в том, что двигатель действительно запущен. Т.к. скорость вращения двигателя достаточно велика и визуальное наблюдение вести не 20 удается, то, например, при смене направления вращения двигателя он на некоторое время приостанавливается, а затем снова начинает работать. Таким образом, можно определить «на слух» работоспособность двигателя. 4. Динамик. По тону и громкости звука динамика также можно проверить работоспособность динамика. Можно изменять тон и громкость звука, программируя, таким образом, простые мелодии. 5. Светодиодная матрица. На нее можно выводить различные фигуры, символы, сделать, например, игру «змейка», которая будет управляться джойстиком 6. Многоцветный светодиод, на котором могут зажигаться различные цвета с помощью варьирования степенью насыщения одного из трех цветов: красный, зеленый, синий. 7. LCD-дисплей. На него можно выводить символьную информацию в различных режимах : бегущая строка, статическая строка и т.д. 8. Джойстик. С помощью джойстика можно управлять движением «горящей точкой» на светодиодной матрице, управлять «змейкой» на матрице. СПИСОК ЛИТЕРАТУРЫ 2. Тревор Мартин Микроконтроллеры ARM7. Семейство LPC2000 компании Philips. Вводный курс / Пер. с англ. – М.: Издательский дом «Додэка-XXI», 2006. – 240с.: илл. + CD. – (Серия «Мировая Электроника»). 3. Trevor Martin. The Insider’s Guide To The Philips, ARM7-BASED microcontrollers. An engineer’s introduction to the LPC 2000 series. Hitex Development tools. 21 Содержание ВВЕДЕНИЕ ............................................................................................................. 2 1. ИЗУЧЕНИЕ СРЕДЫ РАЗРАБОТКИ Keil uVision. ................................. 2 2. ОТЛАДКА ПРОГРАММ В KEIL ............................................................... 9 2.1 Основные функции доступные в режиме отладки.................................... 10 2.1.1 Run............................................................................................................ 10 2.1.2 Halt ........................................................................................................... 10 2.1.3 Step into .................................................................................................... 10 2.1.4 Step over ................................................................................................... 10 2.1.5 Step out ..................................................................................................... 10 2.1.6 Run to Cursor line .................................................................................... 10 2.1.7 Insert/Remove Breakpoint ........................................................................ 10 2.1.8 Enable/Disable Breakpoint ....................................................................... 11 2.1.9 Kill All Breakpoints ................................................................................. 11 2.1.10 Show Next Statement ............................................................................. 11 2.2 Периферийные устройства......................................................................... 11 2.3 Вывод содержимого памяти устройства .................................................. 11 2.3.1 Memory Window ..................................................................................... 11 2.3.2 Watch & Call Stack Window .................................................................. 11 2.4 Пример ......................................................................................................... 11 3. ОПИСАНИЕ ПЛАТЫ................................................................................. 17 СПИСОК ЛИТЕРАТУРЫ ................................................................................. 21 22