- •Перечень сокращений
- •Предисловие
- •Введение
- •Часть 1. Архитектура и аппаратные средства микроконтроллера LPC214x
- •1.1 Общие сведения о микроконтроллерах LPC214x
- •1.2 Программистская модель процессорного ядра ARM7TDMI
- •1.2.1 Режимы работы ядра ARM7
- •1.2.2 Система регистров
- •1.2.3 Слово состояния программы
- •1.2.4 Организация памяти
- •1.3 Система команд
- •1.3.1 Команды арифметической и логической обработки
- •1.3.2 Команды умножения
- •1.3.3 Команды регистровой пересылки
- •1.3.4 Команды загрузки и сохранения регистров
- •1.3.5 Команды пакетного обмена с памятью
- •1.3.6 Команды передачи управления
- •1.3.7 Команды обращения к слову состояния программы
- •1.4 Методы адресации
- •1.4.1 Непосредственная адресация
- •1.4.2 Регистровая адресация
- •1.4.3 Косвенная адресация
- •1.4.4 Индексная адресация
- •1.5 Процедура начальной загрузки и режимы отображения памяти
- •1.6 Обработка исключительных ситуаций
- •1.7 Система тактирования
- •1.7.1 Выбор тактовой частоты микроконтроллера
- •1.7.2 Настройка тактирования периферийных устройств
- •1.8 Модуль ускорения памяти
- •1.9 Внешние выводы микроконтроллера
- •1.9.1 Служебные контакты
- •1.9.2 Программно-управляемые линии ввода-вывода
- •1.9.3 Альтернативные функции линий ввода вывода
- •1.10 Цифровые порты ввода-вывода
- •1.10.1 Управление портом через низкоскоростную шину
- •1.10.2 Управление портом через высокоскоростную шину
- •1.11 Система прерываний
- •1.11.1 Назначение системы прерываний
- •1.11.2 Процесс обработки прерываний IRQ
- •1.11.3 Процесс обработки быстрых прерываний FIQ
- •1.11.4 Регистры управления системой прерываний
- •1.11.5 Порядок настройки прерывания IRQ
- •1.11.6 Порядок настройки быстрого прерывания FIQ
- •1.11.7 Процедура обработки прерывания
- •1.11.8 Задержка обработки прерывания
- •1.12 Внешние прерывания
- •1.12.1 Регистры управления блоком внешних прерываний
- •1.12.2 Порядок настройки блока внешних прерываний
- •1.13 Таймеры-счетчики
- •1.13.1 Режим таймера и схема совпадения
- •1.13.2 Режим счетчика
- •1.13.3 Схема захвата
- •1.13.4 Управляющие регистры
- •1.13.5 Формирование интервалов времени через систему прерываний
- •1.13.6 Измерение периода и длительности импульса с помощью устройства захвата
- •1.13.7 Подсчет числа импульсов в единицу времени
- •1.14 Широтно-импульсный модулятор
- •1.14.1 Основы функционирования
- •1.14.2 Дополнительные возможности
- •1.14.3 Регистры управления ШИМ
- •1.14.4 Порядок настройки ШИМ
- •1.15 Аналого-цифровые преобразователи
- •1.15.1 Краткие сведения о встроенных АЦП
- •1.15.2 Общие рекомендации по использованию АЦП
- •1.15.3 Управляющие регистры
- •1.15.4 Порядок настройки АЦП
- •1.15.5 Программный запуск аналого-цифрового преобразователя
- •1.15.6 Запуск аналого-цифрового преобразователя по таймеру
- •1.15.7 Программный опрос готовности АЦП
- •1.15.8 Опрос готовности АЦП по прерыванию
- •1.15.9 Считывание и масштабирование результата АЦП
- •1.16 Цифро-аналоговый преобразователь
- •1.16.1 Регистр управления ЦАП
- •1.16.2 Рекомендации по применению ЦАП
- •1.17 Последовательный синхронный приемо-передатчик SPI
- •1.17.1 Назначение и основы функционирования интерфейса SPI
- •1.17.2 Управляющие регистры
- •1.17.3 Передача и прием данных в режиме ведущего
- •1.17.4 Передача и прием данных в режиме ведомого
- •1.18 Последовательный синхронный приемо-передатчик I2С
- •1.18.1 Назначение и основы функционирования интерфейса I2С
- •1.18.2 Управляющие регистры
- •1.18.3 Настройка модуля I2C
- •1.18.4 Типовые циклы обмена данными по шине I2C
- •1.19 Последовательный асинхронный приемопередатчик UART
- •1.19.1 Назначение и основы функционирования порта UART
- •1.19.2 Управляющие регистры
- •1.19.3 Настройка порта UART
- •1.19.4 Прием байта с опросом флага
- •1.19.5 Передача байта с опросом флага
- •1.19.6 Прием и передача данных с использованием прерываний
- •1.19.7 Прием и передача пакетов данных
- •1.19.8 Диагностика ошибок
- •1.19.9 Автоматическая настройка скорости
- •1.20 Часы реального времени
- •1.20.1 Основные возможности часов реального времени
- •1.20.2 Управляющие регистры
- •1.20.3 Рекомендации по применению
- •1.21 Управление питанием и идентификация источников сброса
- •1.21.1 Краткие сведения о мониторе питания
- •1.21.2 Управляющие регистры
- •Часть 2. Разработка и отладка программ с помощью современных инструментальных средств
- •2.1 Форматы представления чисел
- •2.1.1 Основные коды представления целых чисел
- •2.1.2 Форматы представление целых чисел, приятные в языке Си
- •2.1.3 Форматы чисел c плавающей точкой стандарта IEEE754
- •2.2 Основы программирования на языке Си
- •2.2.1 Структура программы
- •2.2.2 Числовые константы
- •2.2.3 Переменные и именованные константы
- •2.2.4 Оператор присваивания, выражения и операции
- •2.2.5 Условный оператор
- •2.2.6 Приведение и преобразование типов
- •2.2.7 Массивы
- •2.2.8 Строки символов
- •2.2.9 Структуры
- •2.2.10 Объединения
- •2.2.11 Указатели
- •2.2.12 Ветвление
- •2.2.13 Множественное ветвление
- •2.2.14 Цикл со счетчиком
- •2.2.15 Циклы с предусловием и постусловием
- •2.2.16 Функции
- •2.2.17 Некоторые директивы компилятора
- •2.2.18 Библиотека математических функций MATH.h
- •2.2.19 Функция создания форматированных строк SNPRINTF
- •2.2.20 Ассемблер в Си-программах
- •2.3 Интегрированная среда разработки Keil µVision 4
- •2.3.1 Создание проекта
- •2.3.2 Создание файла программы
- •2.3.3 Настройка проекта
- •2.3.4 Набор текста программы
- •2.3.5 Компиляция программы
- •2.3.6 Отладка программы
- •2.3.7 Основные отладочные инструменты среды Keil µVision 4
- •2.3.8 Управление распределением памяти
- •2.4 Методика отладки программ
- •2.4.1 Быстрый поиск ошибок
- •2.4.2 Ввод и вывод дискретных сигналов
- •2.4.3 Таймер-счетчик. Формирование интервалов времени
- •2.4.4 Таймер-счетчик. Формирование внешних сигналов совпадения
- •2.4.5 Таймер-счетчик. Счетчик внешних событий
- •2.4.6 Таймер-счетчик. Устройство захвата
- •2.4.7 Широтно-импульсный модулятор
- •2.4.8 Аналого-цифровой преобразователь
- •2.4.9 Цифро-аналоговый преобразователь
- •2.4.10 Приемопередатчик SPI
- •2.4.11 Приемопередатчик I2C
- •2.4.12 Приемопередатчик UART
- •2.4.13 Часы реального времени
- •2.5 О программировании ARM7 на ассемблере
- •2.5.1 Основные правила записи программ на ассемблере
- •2.5.2 Псевдокоманды
- •2.5.3 Директивы ассемблера
- •2.5.4 Макросы
- •2.5.5 Пример простой программы
- •2.6 Распространенные средства разработки и отладки
- •2.6.1 Демонстрационные платы EA-EDU-001 и EA-EDU-011
- •2.6.2 Внутрисхемный отладчик J-Link
- •2.6.3 Утилиты программирования ПЗУ LPC Flash Utility и FlashMagic
- •2.6.4 Программа-терминал 232Analyzer
- •2.6.5 Низкоуровневый редактор диска DMDE
- •Часть 3. Решение типовых задач локального управления
- •3.1 Формирование временной задержки с помощью цикла
- •3.1.1 Задание
- •3.1.2 Общие рекомендации
- •3.1.3 Алгоритм программы
- •3.1.4 Отладка
- •3.1.5 Дополнительные сведения о формировании временной задержки
- •3.2 Формирование дискретного сигнала с помощью таймера
- •3.2.1 Задание
- •3.2.2 Общие рекомендации
- •3.2.3 Алгоритм программы
- •3.3 Опрос дискретного датчика или кнопки
- •3.3.1 Задание
- •3.3.2 Общие рекомендации
- •3.3.3 Алгоритм программы
- •3.3.4 Отладка
- •3.4 Опрос состояния механических контактов с подавлением дребезга
- •3.4.1 Задание
- •3.4.2 Общие рекомендации
- •3.4.3 Алгоритм программы
- •3.4.4 Отладка
- •3.5 Опрос клавиатуры с автоповтором
- •3.5.1 Задание
- •3.5.2 Общие рекомендации
- •3.5.3 Алгоритм программы
- •3.5.4 Отладка
- •3.6 Формирование импульсного управляющего сигнала с помощью модуля ШИМ
- •3.6.1 Задание
- •3.6.2 Общие сведения
- •3.6.3 Алгоритм программы
- •3.6.4 Отладка
- •3.6.5 Синхронизация внешним сигналом
- •3.7 Формирование сигналов специальной формы с помощью ЦАП
- •3.7.1 Задание
- •3.7.2 Основы
- •3.7.3 Алгоритм программы
- •3.7.4 Повышение точности генерирования частоты
- •3.7.5 Выбор числа дискрет
- •3.8 Управление двухфазным шаговым двигателем
- •3.8.1 Задание
- •3.8.2 Общие сведения
- •3.8.3 Алгоритм программы
- •3.9 Применение ШИМ для формирования низкочастотных аналоговых сигналов
- •3.9.1 Задание
- •3.9.2 Основные сведения
- •3.9.3 Алгоритм основной программы
- •3.9.4 Алгоритм процедуры обработки прерывания
- •3.10 Управление символьным жидкокристаллическим индикатором
- •3.10.1 Задание
- •3.10.2 Управление модулем жидкокристаллической индикации
- •3.10.3 Разработка функции управления ЖКИ с ожиданием готовности
- •3.10.4 Функция вывода строки символов
- •3.10.5 Разработка функции инициализации модуля ЖКИ
- •3.10.6 Разработка тестовой программы
- •3.10.7 Управление ЖКИ с опросом флага готовности
- •3.10.8 Программирование произвольных символов
- •3.11 Управление матричным светодиодным индикатором
- •3.11.1 Задание
- •3.11.2 Основные рекомендации
- •3.11.3 Алгоритм основной программы
- •3.11.4 Алгоритм процедуры обработки прерывания
- •3.11.5 Реализация движения строки
- •3.12 Управление матричным жидкокристаллическим дисплеем
- •3.12.1 Управление дисплеем на основе контроллера PCF8833
- •3.12.2 Построение простейших геометрических фигур
- •3.13 Измерение постоянного напряжения
- •3.13.1 Задание
- •3.13.2 Основные рекомендации
- •3.13.3 Алгоритм основной программы
- •3.13.4 Алгоритм процедуры обработки прерывания от АЦП
- •3.13.5 АЦП с циклическим опросом нескольких каналов
- •3.13.6 Автоматический выбор пределов измерения
- •3.14 Измерение параметров уровня переменного напряжения
- •3.14.1 Задание
- •3.14.2 Основные рекомендации
- •3.14.3 Алгоритм основной программы
- •3.14.4 Алгоритм процедуры обработки прерывания
- •3.15 Измерение ускорения с помощью трехосевого акселерометра
- •3.16 Измерение интервалов времени с помощью таймера
- •3.16.1 Задание
- •3.16.2 Общие рекомендации
- •3.16.3 Алгоритм основной программы
- •3.16.4 Алгоритм процедуры обработки прерывания
- •3.16.5 Повышение разрешающей способности путем усреднения
- •3.16.6 Введение поправок
- •3.17 Измерение частоты с помощью счетчика
- •3.17.1 Задание
- •3.17.2 Основные рекомендации
- •3.17.3 Алгоритм программы
- •3.17.4 Повышение точности измерений
- •3.18 Опрос цифрового датчика температуры. Интерфейс I2C
- •3.18.1 Задание
- •3.18.2 Общие рекомендации
- •3.18.3 Алгоритм программы
- •3.20 Обмен данными с электрически перепрограммируемым ПЗУ
- •3.20.1 Задание
- •3.20.2 Общие сведения о микросхемах EEPROM
- •3.20.3 Адресация в микросхемах EEPROM
- •3.20.4 Порядок чтения EEPROM
- •3.20.5 Порядок записи EEPROM
- •3.20.6 Разработка программы чтения EEPROM
- •3.20.7 Разработка функции записи блока данных в EEPROM
- •3.21 Интерфейс RS-232. Прием и передача простых команд
- •3.21.1 Задание
- •3.21.2 Алгоритм программы
- •3.21.3 Автоматическая настройка скорости
- •3.22.1 Задание
- •3.22.2 Основные рекомендации
- •3.22.3 Алгоритм программы
- •3.23 Интерфейс RS-232. Прием пакета переменной длины
- •3.23.1 Задание
- •3.23.2 Основы реализации
- •3.23.3 Алгоритм программы
- •3.24 Обмен данными с картой памяти Secure Digital
- •3.24.1 Задание
- •3.24.2 Общие сведения о карах FLASH-памяти SD/MMC
- •3.24.3 Команды SD/MMC
- •3.24.4 Процедура инициализации карты
- •3.24.5 Чтение и запись данных
- •3.24.6 Обработка ошибок
- •3.24.7 Комментарии к алгоритму и программе
- •Алфавитный указатель управляющих регистров
- •Список литературы
- •Содержание
О. М. Кочуров
ПРОГРАММИРОВАНИЕ ВСТРАИВАЕМЫХ
СИСТЕМ НА ОСНОВЕ МИКРОКОНТРОЛЛЕРОВ
LPC214X
Учебное пособие
Министерство образования и науки РФ
Владимирский государственный университет
Кафедра управления и информатики в технических и экономических системах
Учебное пособие
ПРОГРАММИРОВАНИЕ ВСТРАИВАЕМЫХ СИСТЕМ
НА ОСНОВЕ МИКРОКОНТРОЛЛЕРОВ LPC214X
О. М. Кочуров
Владимир 2011
УДК 004.31 УДК 004.031.6
ББК 32.973–04 К75
Кочуров О. М., Программирование встраиваемых систем на основе микроконтроллеров LPC214x. — Владимир: ВлГУ — 2011, 258 с.
Настоящее учебное пособие, состоящее из трех частей, предназначено для изучения архитектуры и основных приемов программирования микроконтроллеров LPC214x (производства NXP) семейства ARM7TDMI. В первой части изложен справочный материал по аппаратным средствам микроконтроллера. Вторая часть посвящена средствам разработки и отладки программ, прежде всего, среде Keil µVision на основе языка Си. Третья часть содержит описание решения типовых задач, представляющих интерес в практике разработки микропроцессорных систем.
Учебное пособие предназначено для широкого круга специалистов в области электроники и микропроцессорной техники. Также может быть рекомендовано студентам бакалавриата и магистратуры, изучающим дисциплину «Микропроцессорная техника» и родственные дисциплины.
Перечень сокращений
АЛУ — арифметико-логическое устройство АЦП — аналого-цифровой преобразователь ЖК(И) — жидкокристаллический (индикатор) МК — микроконтроллер МП — микропроцессор
МПС — микропроцессорная система МПУ — микропроцессорное устройство
ОЗУ — оперативное запоминающее устройство ПД — память данных ПЗУ — постоянное запоминающее устройство
ПК — персональный компьютер ПП — память программ ПУ — периферийное устройство
РОН — регистр общего назначения РСФ — регистр специальных функций
СИФУ — система импульсно-фазового управления УУ — устройство управления ФАПЧ — фазовая автоподстройка частоты
ЦАП — цифро-аналоговый преобразователь ШИМ — широтно-импульсный модулятор
3
Предисловие
Настоящее учебное пособие предназначено для изучения архитектуры и основных приемов программирования встраиваемых однокристальных микроконтроллеров серии LPC214x фирмы NXP. Материал изложен в трех частях.
Первая часть преимущественно содержит материал справочного характера — описание архитектуры и аппаратных средств микроконтроллера. Предложенное описание, затрагивая важнейшие узлы LPC2148, не является полным. Некоторые из аппаратных средств не рассмотрены. Изучив материал настоящего учебного пособия читатель без труда дополнит свои знания с помощью известных книг [1, 2] а также официальной документации компаний ARM и NXP, ссылки на которые приведены в приложении.
Отметим, что первая часть не повторяет перевода официальной документации, а представляет собой авторское изложение материала. Каждый раздел начинается с краткого описания основных возможностей одного из узлов микроконтроллера, после чего следует основная справочная часть. В конце разделов приводятся методические указания по настройке рассмотренных узлов и управлению ими.
Вторая часть посвящена программным и аппаратным средствам, которые необходимы для разработки программ. Здесь читатель найдет основы представления числовой информации в памяти вычислительных устройств, а также экскурс в программирование на языке Си. Привнести что-либо новое в описание самого распространенного языка программирования трудно, кроме краткости. Поэтому авторы касаются лишь наиболее важных вопросов, без знания которых невозможна разработка ни одной программы. Авторы стремились не обойти вниманием некоторые приемы программирования и конструкции, которые часто возникают при программировании микроконтроллеров и редко в практике программирования для персональных ЭВМ. Для углубленного изучения языка рекомендуем иметь под рукой один из известных учебников [3, 4]. Значительное внимание уделено описанию популярной среды программирования Keil µVision 4. Авторы предложили методику отладки программ.
Третья часть представляет собой методические указания по решению практических задач. В каждом разделе дано описание алгоритмического решения очередной элементарной задачи. Аппаратной основой авторам послу-
жили учебные платы EA-EDU-001 и EA-EDU-011 фирмы Embedded Artists.
Схемотехнические узлы этих плат вполне могут считаться классическими и легко заимствуются с помощью принципиальных схем, приведенных в приложении. Тематика практических занятий охватывает весьма широкий круг задач, возникающих в практике разработки микропроцессорных средств, таких как ввод-вывод аналоговых и цифровых сигналов, опрос аналоговых, дискретных и цифровых датчиков, индикация, обмен данными с другими компонентами микропроцессорной системы и персональным компьютером.
4
Авторы стремились создать подборку наиболее типичных приемов микропроцессорного управления, освоив которые читатель приобретет достаточные навыки для решения практических задач. Впрочем, следует заметить, что основную трудность представляет собой продуманная организация взаимодействия отдельных подпрограмм в рамках большой программы. Для этого требуется представлять общий алгоритм программы на основе технического задания. Такие навыки приобретаются с опытом.
Текст учебного пособия сопровождается наглядными схемами, диаграммами, а также осциллограммами реальных процессов, протекающих в микропроцессорной системе, полученными с помощью цифрового осциллографа.
Авторы рассчитывают, что настоящее учебное пособие послужит не только студентам, изучающим микропроцессорную технику, и радиолюбителям, но и инженерам со стажем.
5
Введение
Исторически первый четырехразрядный микропроцессор был разработан фирмой Intel в 1971 году для применения в настольных микрокалькуляторах. Микросхема i4004 выпускалась в корпусе PDIP16, выполняла 92,6 тысяч действий в секунду и адресовала всего 640 байт памяти. Система команд первого процессора включала 46 инструкций. Давно известные принципы программного управления впервые были применены в интегральной микросхеме. Это положило начало новому направлению микросхемотехники.
На протяжении сорока лет микропроцессорная техника может по праву считаться наиболее динамично развивающимся направлением микросхемотехники. Постоянно повышаются тактовые частоты микропроцессоров, увеличивается число полупроводниковых элементов на кристалле, усложняются операционные узлы и система команд.
Универсальные микропроцессоры, предназначенные для решения широкого круга задач, связанных с обработкой цифровой информации, стали основой для построения персональных компьютеров. Благодаря высокому быстродействию, разрядности и объему адресуемой памяти такие микропроцессоры отличаются способностью выполнять громоздкие алгоритмы за приемлемое время.
Чрезвычайная гибкость микропроцессоров сделала их привлекательными для применения в составе разнообразных технических изделий от бытовых приборов до промышленных установок. По мере широкого распространения микропроцессоров возникла необходимость в разработке экономичных, компактных и исключительно надежных микропроцессорных системы, причем, в кратчайшие сроки.
Высокопроизводительные универсальные микропроцессоры не удовлетворяют таким потребностям. Их ядро представляет собой набор взаимодействующих интегральных микросхем высокой степени интеграции с большим числом выводов. При этом требуется изготовление печатных плат высокого класса плотности монтажа. Передача цифровых сигналов в микропроцессорных системах осуществляется в диапазоне высоких и ультравысоких частот, что также выдвигает жесткие требования к технологии изготовления аппаратуры. Кроме того, универсальные микропроцессоры не приспособлены для непосредственного взаимодействия со средой, требуя еще и сложных средств сопряжения.
Разрешить возникшие противоречия позволило создание микроконтроллеров. Эти устройства представляют собой совмещение всех элементов микропроцессорной системы на одном кристалле.
Микроконтроллеры предназначены для решения задач управления объектом в реальном времени. Помимо микропроцессорного ядра содержат встроенные память для программы и данных, а также периферийные устройства для сопряжения с объектом. Как правило, микроконтроллеры обладают меньшим быстродействием, разрядностью и объемом памяти, чем универ-
6
сальные микропроцессоры, но выделяются развитыми средствами для ввода и вывода дискретных и аналоговых сигналов.
Первый микроконтроллер i8051 также был разработан фирмой Intel в 1980 году. Это был 8-разрядный микроконтроллер, выполненный в виде микросхемы в корпусе PDIP40. Архитектура 8051 (или ее развитие 8052), реализованная во множестве модификаций микроконтроллеров, чрезвычайно популярна до настоящего времени и будет оставаться популярной еще, по меньшей мере, десять лет.
Число семейств микроконтроллеров, разработанных за тридцатилетнюю историю, по всей видимости, исчисляется сотнями, а в каждом семействе насчитывается до нескольких десятков микросхем. Разнообразие действительно огромно: от очень простых микросхем всего с шестью выводами до сложных однокристальных систем ввода, вывода и обработки сигналов.
Сегодня микроконтроллеры чрезвычайно распространены, составляя основу для построения так называемых встраиваемым систем, то есть микропроцессорных систем, встроенных в какое либо изделие и управляющее им или его узлами. С использованием микроконтроллеров конструируется современное промышленное оборудование, контрольно-измерительные приборы, бортовые устройства транспортных средств, медицинские и бытовые приборы. Знание архитектур распространенных микропроцессоров и микроконтроллеров, владение приемами их программирования и отладки программ необходимы инженеру, работающему в этих областях техники.
7