Часть I. Процессор Cortex-M3. Программирование на ассемблере - 7 |
87 |
1.Что такое макрос в ассемблере?
2.Возможны ли вложенные макросы?
3.Как в 32-х разрядный регистр записать 8.3 бита информации?
4.В каких случаях выгодно использовать макрокоманды, а в каких функции?
5.Как в BCD кодируются отрицательные числа?
6.Напишите программу на ассемблере, преобразующую неупакованный BCD-код в ASCII-код.
7.Функция sum2BCD() написана неверно (непрофессионально). Она содержит очень распространённую ошибку. Исправьте её.
8.По какой причине на ваш взгляд мы сдали свои позиции в разработке вычислительной техники и продолжаем откатываться назад? Что нужно сделать, чтобы выправить ситуацию и нужно ли её выправлять?
1.Краткое изложение теории. Для каких целей служат макросредства языка ассемблера?
2.Описание последовательности работы, ошибочных (неудачных) действий в том числе. Возьмите за правило всегда исполнять этот скучный пункт. Иногда протокол помогает в поиске ошибок в большом серьёзном проекте.
3.Каким способом и с какой точностью было измерено время работы функции и макрокоманды.
4.Заключение по проделанной работе.
5.Папка с проектом данной лабораторной работы должна быть полностью сохранена в redmine.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть I. Процессор Cortex-M3. Программирование на ассемблере - 7 |
88 |
1.Опровержение Второго закона Вейнберга (из прикладной Мерфологии).
Если бы строители строили здание так же, как программисты пишут программы, первый же залетевший дятел разрушил бы цивилизацию .
Можно ли написать программу для микроконтроллера так, чтобы после изменения произвольных k бит в её машинном коде, она, тем не менее, сохраняла свою работоспособность? На вас как на программиста распространяется закон Вейнберга? :))
2.По мнению Пирогова В.Ю. [8.], для людей, знающих ассемблер, все компьютерные запреты, что зайцу стоп-сигнал. Можно ли законным способом снять ограничения кик-старт версии IAR?
Основная
1.Джозеф Ю. Ядро Cortex-M3 компании ARM: полное руководство : [перевод]. - Додэка-XXI, 2012 — с.535.
2.ARM® IAR Assembler Reference Guide for Advanced RISC Machines Ltd’s ARM Cores. [Электронный ресурс] - Eighth edition: June 2007 — 137 p. Режим доступа: Документ доступен из «хелпа» среды разработки IAR Embedded Workbench.
3.Серия 1986ВЕ9х, К1986ВЕ9х, MDR32F9Qx, К1986ВЕ91Н4, высокопроизводительных 32-х разрядных микроконтроллеров на базе процессорного ядра ARM Cortex-M3. Спецификация микроконтроллеров серии 1986ВЕ9х, К1986ВЕ9х и MDR32F9Qx - © ЗАО «ПКК Миландр» - Версия 3.2.0 от 20.09.2012 URL: "ftp://student:@esau.tusur.ru/_For_Students/MPSSAU/Milandr/Микроконтроллеры и микропроцессоры/1986/spec_seriya_1986BE9x.pdf" - Дата обращения: 01.04.13.
4.ASM в STM32. Начало. URL: http://we.easyelectronics.ru/STM32/asm-v-stm32- nachalo.html.
Дополнительная
5.Аджиев В. Мифы о безопасном ПО - уроки знаменитых катастроф.
URL: "ftp://student:@esau.tusur.ru/_For_Students/MPSSAU/Аджиев Валерий. Мифы о безопасном ПО - уроки знаменитых катастроф —- modernlib.ru.doc"
6.Магда Ю.С. Программирование и отладка С/С++ приложений для микроконтроллеров ARM. — М:2012
7.Нортон Питер, Соухэ Джон Язык ассемблера для IBM PC - М:1992
8.Пирогов В. Ассемблер для Windows - СПб:2003
9.Юров В. Assembler. – СПб:2001
10.Яглом А.М., Яглом И.М. Вероятность и информация. – М:1973
11.Cortex™-M3 Technical Reference Manual - Revision: r1p1 - ARM© 2005, 2006 - 384 c.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть II. Ввод-вывод в МК «Миландр» - |
89 |
Вторая часть лабораторного практикума связана с задачами практической реализации электронных устройств с использованием МК "Миландр", где МК будет главным управляющим элементом, связанным интерфейсами с датчиками или\и другими микросхемами.
Целью лабораторного практикума является реализация и отладка типовых подпрограмм, реализующих получение данных и обмен данными по различным интерфейсам, имеющихся в МК.
Освоение этой части лабораторного практикума поможет студентам отладить и реализовать устройства по курсовому проектированию и групповому проектному обучению.
1.1Порядок работы с блоками ввода-вывода МК
Любая работа с периферийными блоками МК семейства Cortex-M (и других семейств МК), заключается в строго определенной последовательности действий:
1.Задать и подключить нужную периферийную частоту к выбранному блоку. Это достигается функциями модуля Сброса и тактовых частот и драйвера MDR32F9Qx_rst_clk.c. Для лучшего понимания распределения тактовых частот смотрите рис. 28 на стр.161 технической документации на МК [1].
2.Настроить порты ввода-вывода, соответствующие выбранному периферийному
модулю. см. таблицу 2 (Описание выводов микроконтроллеров серии 1986ВЕ9х стр. 10)
3. Сконфигурировать модуль в соответствии с желаемым режимом работы, используя регистры нужного модуля.
4.Сконфигурировать режимы прерывания, если будет использован данный вид обмена информацией.
5.Сконфигурировать режим прямого доступа к памяти, если будет использован данный вид обмена информацией.
6.Если по логике работы программы используемый блок ввода-вывода больше не нужен, его можно отключить, сняв генерацию тактовой частоты этого блока. При этом потребление электроэнергии МК сократиться. Кроме этого сократиться «цифровой шум», что может быть важным для работы аналоговой периферии.
1.2Стандартная библиотека ввода-вывода и Стандартный программный интерфейс микроконтроллеров ARM® Cortex™
MDR32F9Qx_StdPeriph_Driver — стандартная библиотека ввода-вывода, созданная компанией Фитон24 на языке Си для микроконтроллеров семейства Cortex-M производства "Миландр". Она содержит функции, структуры и макросы для облегчения работы с периферийными блоками микроконтроллеров. Библиотека документирована, включает примеры по каждому периферийному устройству, полностью поддерживает CMSIS (Cortex Microcontroller Software Interface Standard) и бесплатно предоставляется компанией "Миландр".
CMSIS — программный интерфейс микроконтроллеров фирмы ARM семейства Cortex-М. Это программы с открытым исходным кодом обеспечивающие уровень аппаратных
24 Фирма "Фитон" специализируется на разработке, изготовлении и поставке инструментальных средств для микроконтроллеров семейств: 8051, Intel MCS-96, PICmicro фирмы Microchip, Atmel AVR, Xemics XE8000, Sensory RSC-4x, MSP-430 фирмы Texas Instruments, ARM7, MAXQ фирмы MAXIM.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть II. Ввод-вывод в МК «Миландр» - 1 |
90 |
абстракций (Hardware Abstraction Layer - HAL). HAL - программное обеспечение, которое позволяет программисту абстрагироваться от конкретных особенностей аппаратного обеспечения, это обуславливает переносимость кода на другие вычислительные платформы. CMSIS одинакова для всех производителей МК данного семейства, т.е. это стандартный программный модуль для всех МК семейства Cortex-М.
Необходимо заметить, что использование CMSIS и стандартной библиотеки вводавывода не является обязательным при разработке программ для МК Cortex-M. Так в книге [6.] примеры программ написаны без использования оных, в них используется традиционный подход системного программирования прямого обращения к нужным регистрам МК. Создание CMSIS разработчиком процессора и создание библиотеки ввода-вывода, производителем МК призвано лишь сократить трудозатраты на разработку нового ПО и наличие этих библиотек является ничем иным как важным конкурентным преимуществом по сравнению со многими другими микроконтроллерными разработками. Во многом этот подход и определил на многие годы вперед рыночное преимущество разработки Cortex-M.
Библиотека ввода-вывода и CMSIS находится по адресу «\_For_Students\MPSSAU\Milandr\Программное обеспечение\MDR_Library». В этой папке находятся примеры «Examples» для разных отладочных плат «MDR32F9Q1_EVAL», «MDR32F9Q2_EVAL», «MDR32F9Q3_EVAL» и библиотеки CMSIS и
MDR32F9Qx_StdPeriph_Driver.
Общий состав, назначение файлов и их взаимосвязь описана в документации на CMSIS [CMSIS-SP-00300-r3p1-00rel0.zip]. Кратко она представлена на рисунке 1.
Рисунок 1. - Структура файлов CMSIS25
В папке CMSIS\CM3\CoreSupport находятся программный модуль core_cm3.c (*.h). В нем определены функции доступа к регистрам процессора. Такие как, доступ к указателям стека, обращение порядка байт и бит в переменной...см. раздел Встроенные функции на стр. 67 [1]. В core_cm3.h определены основные структуры для работы с модулями и регистрами центрального процессора: системным блоком управления System Control Block, с системным таймером SysTick, с блоком защиты памяти MPU, с модулем отладки Core Debug, с контроллером прерываний NVIC.
Вместо файла <device>.h как на рисунке, мы имеем файл MDR32Fx.h. В нем определена вся информация, которая зависит от конкретного производителя МК — это
25 Рисунок взят из оригинальной документации CMSIS-SP-00300-r3p1-00rel0 с сайта arm.com.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |
Часть II. Ввод-вывод в МК «Миландр» - 1 |
91 |
таблица векторов прерываний, структуры и адреса регистров специальных функций (SFR), битовые маски для доступа к отдельным битам SFR.
В папке DeviceSupport\MDR32F9Qx\startup\iar\ находятся два фала startup_MDR32F9Qx.s и system_MDR32F9Qx.c, как нетрудно догадаться содержимое этих файлов зависит от среды разработки, в данном случае рассматриваем среду разработки фирмы IAR. В ассемблерном модуле начального запуска определено, какие функции будут вызываться первыми после системного сброса (SystemInit и __iar_program_start), а также определена таблица адресов вызова обработчиков прерываний и исключительных ситуаций, в нем же инициализируется указатель главного стека (MSP). Как вы думаете, что находится в файлах core_cmInstr.h и core_cmFunc.h ?
Библиотека по своей структуре достаточно проста и разбита на модули, соответствующие модулям МК. Например, работа с модулем аналого-цифрового преобразования (ADC) реализована в файлах MDR32F9Qx_adc.c(*.h) и т.д. для каждого модуля МК. Заголовочные файлы находятся в папке inc, исходные тексты в папке src.
Примеры конфигурирования и использования всех блоков МК находятся в папке:
\_For_Students\MPSSAU\Milandr\Программное обеспечение\MDR_Library\Library\Examples\MDR32F9Q1_EVAL.
В фалах MDR32F9Qx_board.h, MDR32F9Qx_config.h содержится выбор отладочной платы и определение частот работы МК, некоторых констант и определений.
Далее в папках ADC, BKP, CAN... находятся примеры проектов работы с соответствующими блоками МК. В каждом примере есть файл main.c и может быть MDR32F9Qx_it.c (h) в котором реализован обработчик прерывания.
Кроме описанного программного обеспечения мы также будем использовать демонстрационный проект, который, как правило, предоставляется вместе с отладочной (оценочной) платой, в нашем случае - это Evolution Board for MCU 1986VE91T rev.4 (см.
Таблицу 1). |
|
|
|
|
|
|
|
|
Проект |
|
находится |
в |
репозитории |
по |
адресу |
||
svn://esau.tusur.ru/_labs/MDR32F9Qx_Demo/Trunk, который |
нужно |
«извлечь» |
себе в |
|||||
рабочую |
папку |
с |
помощью |
клиентской |
программы |
TortoiseSVN. |
||
Или по адресу на сервере sv2 «\_For_Students\MPSSAU\Milandr\Программное обеспечение\MDR_Library\MDR32F9Qx_Demo».
Демонстрационный проект московской фирмы «Фитон» реализован достаточно профессионально и неплохо документирован (см. раздел Оформление и документирование), поэтому его можно взять за основу для подражания. Разберем состав проекта и правила разработки многомодульных проектов, когда весь программный код разбивается на отдельные, как правило, функционально различные и в тоже время взаимосвязанные участки кода.
Принцип разбивки на модули достаточно прост и интуитивно понятен и основан на (правильном!) представлении иерархичности всей проектируемой программы. Иерархичность заключается в «близости» программного когда к «железу». Для того чтобы это понять, нужно вспомнить (узнать) устройство любой современной операционной системы.
ТУСУР, "Миландр" |
Каф. ЭСАУ |
Недяк С.П., Шаропин Ю.Б |
Февраль 2017 г. |