- •Перечень сокращений
- •Предисловие
- •Введение
- •Часть 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 Комментарии к алгоритму и программе
- •Алфавитный указатель управляющих регистров
- •Список литературы
- •Содержание
Простейшая программа, не содержащая функций, составляется по следующему шаблону.
#include <LPC214x.h>
... // Объявление функций и глобальных переменных int main(void)
{
... // Объявление локальных переменных и настройка while (1)
{
... // Основной цикл программы
}
}
2.3.5 Компиляция программы
На этапе компиляции будет создан объектный код, готовый к записи в память программ микроконтроллера. Компиляция выполняется нажатием кнопки F7. При этом формируется отчет, который можно просмотреть в окне Build Output в нижней части основного окна Keil µVision. В отчете, прежде всего, следует обратить внимание на число ошибок (Errors) и предупреждений (Warnings). На рисунке 2.3.8 приведен пример отчета с ошибками, а на рисунке 2.3.9 — без ошибок.
Рисунок 2.3.8 – Отчет о компиляции Си-программы, содержащей ошибки
Рисунок 2.3.9 – Отчет о компиляции Си-программы без ошибок и предупреждений
При наличии ошибок их необходимо исправить. Строка отчета, информирующая об ошибке, содержит имя файла, номер ошибочной строки, код и описание ошибки. Ниже приведена сама строка, содержащая ошибку, в которой символом «^» указана позиция ошибки. Двойным щелчком мыши по сообщению об ошибке можно быстро переместиться на строку программы, содержащую ошибку.
Предупреждения практически допустимы, но нежелательны. При компиляции предложенной здесь простейшей программы их быть не должно.
Кроме информации об ошибках и предупреждениях в отчете приводятся сведения о расходе памяти: программ (Code), констант, хранимых в
123
оперативной памяти (RO-data), переменных (RW-data), объем памяти, выделенной под стек и динамически распределяемой памяти (ZI-data). Данная программа не потребует памяти данных, поскольку для единственной переменной k компилятор использует один из регистров общего назначения.
2.3.6 Отладка программы
Переключение между режимом редактирования программы и отладки производится комбинацией клавиш Ctrl+F5. В случае внутрисхемной отладки код программы при этом автоматически загружается в память программ микроконтроллера, и выполняются все команды до входа в основную программу main (см. раздел 2.2.3 и рисунок 2.3.6).
Общий вид окна среды Keil µVision 4 в режиме отладки показан на рисунке 2.3.10.
Перечислим основные элементы интерфейса среды Keil µVision 4:
1.Панель инструментов управления трассировкой содержит кнопки запуска, остановки и пошагового выполнения программы (см. таблицу 2.3.1).
2.Окно просмотра содержимого регистров общего назначения R0–R15 и слова состояния программы CPSR.
3.Метки зеленого цвета видны только в режиме симуляции. Они отмечают строки программы, которые были выполнены, по крайней мере, один раз. Большие фрагменты программы, оставшиеся неотмеченными даже после длительной работы программы, нередко свидетельствуют об ошибке. Это может значить, что в программе есть части, которые никогда не выполняются, например, из-за зависания программы.
4.Стрелка желтого цвета — программный курсор. Показывает команду Си-программы, которую предстоит выполнить на следующем шаге трассировки.
5.Меткой темно серого цвета отмечены строки, содержащие скомпилированную команду Си. Команда, не отмеченная темно серым цветом, чаще всего говорит о распространенной среди начинающих ошибке — программист внес изменения в программу и забыл скомпилировать.
6.Красный прямоугольник показывает точку останова. Выполнение программы будет прекращено при достижении точки останова.
7.PC $ — значение счетчика команд. Содержит адрес команды, которую предстоит выполнить на следующем шаге трассировки. Совпадает с регистром R15 и соответствует положению программного курсора (4).
8.Mode — индикатор режима ядра микроконтроллера (см. раздел
1.2.1и рисунок 1.2.1).
9.States — счетчик машинных тактов, прошедших с момента запуска программы.
10.Sec — время выполнения программы в режиме симуляции (в секундах). Равно отношению числа тактов к тактовой частоте, заданной в свой-
ствах проекта Options for Target `Target 1` Target Xtal (MHz).
11. Программный курсор окна дизассемблера. Показывает инструкцию ядра, которую предстоит выполнить на следующем шаге трассировки.
124
1 |
|
2 |
17 |
|
|
3 |
16 |
4 |
|
5 |
|
6 |
|
14 |
15 |
|
7 |
|
|
|
|
|
|
8 |
|
|
|
|
|
|
9 |
|
|
|
|
|
10 |
|
|
|
|
|
|
1 |
– панель управления трассировкой; |
|
– точка останова; |
|
12 |
– окно дизассемблера; |
6 |
|
|||||
2 |
– регистры общего назначения; |
7 |
– счетчик команд; |
|
13 |
– окно просмотра переменных; |
3 |
– выполненные команда Си; |
8 |
– режим ядра; |
|
14 |
– окно редактора Си-программы; |
4, 11 – программные курсоры; |
9, 10 – число тактов и время |
|
15 |
– отчет о компиляции; |
||
5 |
– скомпилированная строка; |
|
выполнения программы; |
|
16 |
– вкладка файла конфигурации; |
Рисунок 2.3.10 – Основное окно Keil µVision 4 в режиме отладки
18 11
12
13
17 – логический анализатор и хронометраж;
18 – панель управления точками останова
125
Таблица 2.3.1 – Основные команды отладчика Keil μVision 4
Операция |
Сочетание |
Кнопка |
Пункт меню |
|
клавиш |
||||
|
|
|
||
Компиляция |
F7 |
|
Project Build target |
|
|
|
|
|
|
Режим «Программи- |
Ctrl+F5 |
|
Debug Start/Stop Debug |
|
рование» / «Отладка» |
|
Session |
||
|
|
|||
Запуск программы |
F5 |
|
Debug Run |
|
|
|
|
|
|
Остановка программы |
|
|
Debug Stop |
|
|
|
|
|
|
Системный сброс |
|
|
Debug Reset CPU |
|
|
|
|
|
|
Пошаговое |
|
|
|
|
выполнение с заходом |
F11 |
|
Debug Step |
|
в подпрограммы |
|
|
|
|
Пошаговое |
|
|
|
|
выполнение без захода |
F10 |
|
Debug Step Over |
|
в подпрограммы |
|
|
|
|
Выполнение до выхо- |
Ctrl+F11 |
|
Debug Step Out |
|
да из подпрограммы |
|
|||
|
|
|
||
Выполнение |
Ctrl+F10 |
|
Debug Run To Cursor Line |
|
до позиции курсора |
|
|||
|
|
|
||
Точка останова |
F9 |
|
Debug |
|
|
Insert/Remove Breakpoint |
|||
|
|
|
||
Удалить все точки |
Ctrl+ |
|
Debug Kill All Breakpoints |
|
останова |
+Shift+F9 |
|
||
|
|
Счетчик команд PC содержит адрес инструкции, на которую указывает этот программный курсор.
12.Окно дизассемблера. Содержит инструкции ядра, сгенерированные компилятором на основе текста Си-программы (см. разделы 1.3, 1.4). Листинг оформлен в четыре колонки: адрес команды, код команды, мнемоническое обозначение команды и список операндов. Темно красным цветом выделена строка исходного текста программы, для которой ниже приведен дизассемблированный код.
13.Окно просмотра переменных Watch служит для наблюдения за значениями переменных и их редактирования. Добавление новой переменной
ксписку осуществляется нажатием кнопки F2.
14.Окно редактора исходного текста программы.
15.В окно отчета о компиляции выводится информации об ошибках и предупреждениях, а также о расходе памяти микроконтроллера.
16.Вкладка редактора файла конфигурации Startup.s, генерируемого автоматически и содержащего команды ассемблера для инициализации микроконтроллера.
17.Кнопка вызова отладочных инструментов хронометража (Performance Analyzer) и логического анализатора (Logic Analyzer).
126