Часть I. Процессор Cortex-M3. Программирование на ассемблере - 3 |
42 |
3Создание и компиляция первого проекта в среде KEIL. Написание простейшего модуля на языке Assembler. Лабораторная работа № 2
Влабораторной работе № 1 мы познакомились с широко известной средой разработки IAR. Эта лабораторная работа написана по рекомендации нашего партнера — фирмы "Миландр". Сотрудники компании аргументируют свои пожелания тем, что их потребители
восновном пользуются Keil-ом.
Запустите среду разработки Keil uVision и выберите пункт главного меню Project=>New uVision Project. В появившимся окне создайте новую папку и в ней сохраните новый файлпроекта. Далее появиться окно выбора микроконтроллера: «Select Device for Target...» (Рисунок 13).
Рисунок 13 - Выбор МК при создании проекта
Далее в появившемся окне «Manage Run-Time Environment» (рис. 14) осуществляется выбор конфигурации МК: элементов библиотеки CMSIS, файла начального запуска для выбранного устройства (Devices) и драйверов работы с периферийными блоками МК
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 3 |
43 |
(Drivers). Последующие пункты конфигурации проекта относятся к программному обеспечению более верхнего уровня, так называемому «middleware» (см раздел. 4.2.2 )- мы в этой работе использовать не будем, т. к. они выходят за рамки задачи освоения МК.
Рисунок 14 - Выбор библиотек при создании проекта
После этого откроется среда разработки с готовым скелетом проекта рис. 15 В группу Source Group 1 следует разместить файлы с исходными текстами Ваших программ.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 3 |
44 |
Рисунок 15 Keil со скелетом проекта.
Мы продолжаем знакомиться с приёмами программирования микроконтроллеров. Одной из часто решаемых задач является задача управление внешними устройствами. Каждое устройство имеет в адресном пространстве микроконтроллера своё множество адресов. Ячейки памяти в этом пространстве называют регистрами. Образно говоря, каждый разряд регистра является рукояткой (тумблером) для управления этим устройством. Для того, чтобы научиться управлять, например, автомобилем, сначала нужно овладеть правилами управления. Точно также и здесь, для того чтобы научиться управлять, например, АЦП (Аналого-Цифровым Преобразователем), сначала нужно познакомиться с правилами управления этим устройством. Изучению и практическому использованию управления внешними устройствами (ВУ) посвящена вторая часть настоящего пособия. А сейчас мы решим очень скромную задачу — научимся читать и писать данные в область памяти (регистр) с заданным адресом.
Из курса изучения языка Си мы знаем как это сделать. Можно, например, объявить указатель и присвоить ему желаемое значение адреса. Так мы и поступим. И к тому же учтём ещё один важный момент.
Микроконтроллер, как правило, имеет несколько однотипных устройств, которые имеют разные зоны адресов, но одинаковую структуру расположения регистров. Т.е базовые адреса разные, а смещения регистров относительно базового адреса для всех однотипных устройств одинаковы. Поэтому программу пишут так, чтобы переход от одного устройства к другому происходил с минимальными затратами на редактирование исходного кода.
Прежде чем писать какие-то данные по заданному адресу, нужно предварительно узнать, а что же располагается в этой зоне адресов — иначе последствия могут быть мало предсказуемы. Из документации к MDR1901BC1F17 узнаём, что 0х20000000 — это адрес
17 Здесь и далее по тексту этой и следующей лабораторной работы вместо микроконтроллера MDR1901...
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 3 |
45 |
начала данных, а 0xE000E010 – это адрес регистра управления системным таймером. По работе с этим таймером может быть полезной информация:
http://easyelectronics.ru/arm-uchebnyj-kurs-systick-sistemnyj-tajmer.html С учётом сказанного, у нас может быть такой тестовый код, рисунок 16.
Рисунок 16. Окно среды Keil.
Если наш текст не содержит синтаксических ошибок, то при последовательном нажатии иконок «Rebuild» и «Srart/Stop session» откроется окно сессии отладки программы, рисунок 17.
следует выбирать MDR1986...Ядро Cortex-M3 у этих микроконтроллеров одинаково. Отличие заключается в том, что MDR1901... двух-ядерный, у него ещё есть ядро DSP (Digit Signal Processor, аналог TMS320C54). То есть фразу «Из документации к MDR1901BC1F...» следует читать как «Из документации к MDR1986BE9x, а фразу «...заглянем в стандартный файл нашего проекта startup_1901BC1F.s» следует читать как «...заглянем в стандартный файл нашего проекта startup_MDR32FQx.s». Адаптировать текст этой методички под MDR1986BE9x — это будет очередное задание для студентов. Славные традиции 539-й группы мы намерены продолжить. Смотри стр.12. О том, как писалась одна из лабораторных работ по Keil-у есть почти протокол: http://esau.tusur.ru:8085/issues/808. Это в качестве примера. От вас, господа студенты, требуется примерно то же самое — протоколирование своих действий, ошибочных в том числе.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 3 |
46 |
Рисунок 17. Сеанс отладки.
При первом запуске вид окна будет другим. Мы пока закрыли не интересующие нас окна и оставили только те, что показаны на рис. 17 – это Registers, Disassembly и Memory. Наблюдая происходящее в этих окнах, можно с точностью до отдельного бита сказать, что происходит в микроконтроллере, точнее, в математической модели микроконтроллера, поскольку отладку мы ведём в симуляторе.
При включении окна Memory(память) View->Memory Window курсор остановится на строке Address. Keil вам предложит ввести адрес интересующего участка памяти. В нашем случае это будет либо адрес 0х20000000, либо 0xЕ000Е010, в зависимости от того, какая из строк main3_Keil.c активна, 1-я или 2-я. Двойной щелчок мышкой в начале строки либо на исходном тексте, либо в окне Disassembly зафиксирует/уберёт точку останова. Точками останова можно управлять во время сеанса отладки.
Нажимая кнопку F11 или F10 на клавиатуре или соответствующую иконку на панели инструментов, проанализируем работу нашей программы. В окне Registers есть строка States. Она показывает какое число тактов прошло с момента запуска до момента останова микроконтроллера. Наблюдая, на сколько тактов увеличивается этот показатель при очередном шаге, можно увидеть время выполнения машинных (ассемблерных) команд микроконтроллера.
Например, команда инициализации (Move Signed ) регистра r1 значением 0 MOVS r1,#0 выполняется за один такт;
команда записи (Store) значения из регистра r1 в память, а в данном случае в регистр внешнего устройства с адресом (SYSTICK_VALUE = 0xЕ000Е018), это значение адреса
находится в регистре r0, |
|
|
STR |
r1,[r0, #0] |
выполняется за два такта; |
акоманда ветвления ( Branch )
В0х00000192 выполняется за три такта.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |