Микроконтроллеры ARM7 семейств LPC2300/2400. Вводный курс разработчика
Вводный курс
Покупка
Тематика:
Микроэлектроника. Наноэлектроника
Издательство:
ДМК Пресс
Автор:
Тревор Мартин
Перевод:
Евстифеев Андрей Викторович
Год издания: 2023
Кол-во страниц: 337
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-89818-450-6
Артикул: 661886.02.99
Книга представляет собой введение в архитектуру процессора ARM7 TDMI и микроконтроллеров семейств LPC2300 и LPC2400 компании NXP. В ней рассматриваются следующие вопросы: введение в ядро ARM7, средства разработки программного обеспечения, системная архитектура и периферийные устройства микроконтроллеров LPC2300/2400. Кроме того, в книгу включено полное учебное пособие, где на практических примерах закрепляются вопросы, изложенные в основном тексте. Изучая теоретический материал и выполняя сопутствующие упражнения, вы быстро освоите ядро ARM7 и микроконтроллеры семейств LPC2300/2400. На компакт-диске, прилагаемом к книге, имеются справочные материалы и руководства пользователя по микроконтроллерам семейств LPC2300 и LPC2400, исходные коды всех упражнений и другие полезные материалы. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов и радиолюбителей.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 11.03.01: Радиотехника
- 11.03.04: Электроника и наноэлектроника
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Тревор Мартин МИКРОКОНТРОЛЛЕРЫ ARM7 СЕМЕЙСТВ LPC2300/2400 Вводный курс разработчика Перевод с английского Евстифеева А. В. С Е Р И Я МИРОВАЯ ЭЛЕКТРОНИКА Москва ДМК Пресс, Додэка-XXI, 2023 2-издание, электронное
УДК 621.316.544.1(035.5) ББК 32.844.1-04я2 М29 Данное издание подготовлено к печати при участии студентов и преподавателей Уральского Государственного Политехнического университета (УПИ) С. А. Агафонова, И. В. Букрина, А. В. Гусева при финансовой поддержке Российского представительства компании NXP М29 Мартин, Тревор. Микроконтроллеры ARM7 семейств LPC2300/2400. Вводный курс разработчика / Т. Мартин ; пер. с англ. А. В. Евстифеева. — 2-е изд., эл. — 1 файл pdf : 337 с. — Москва : ДМК Пресс, Додэка-XXI, 2023. — (Мировая электроника). — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-450-6 Книга представляет собой введение в архитектуру процессора ARM7 TDMI и микроконтроллеров семейств LPC2300 и LPC2400 компании NXP. В ней рассматриваются следующие вопросы: введение в ядро ARM7, средства разработки программного обеспечения, системная архитектура и периферийные устройства микроконтроллеров LPC2300/2400. Кроме того, в книгу включено полное учебное пособие, где на практических примерах закрепляются вопросы, изложенные в основном тексте. Изучая теоретический материал и выполняя сопутствующие упражнения, вы быстро освоите ядро ARM7 и микроконтроллеры семейств LPC2300/2400. На компакт-диске, прилагаемом к книге, имеются справочные материалы и руководства пользователя по микроконтроллерам семейств LPC2300 и LPC2400, исходные коды всех упражнений и другие полезные материалы. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов и радиолюбителей. УДК 621.316.544.1(035.5) ББК 32.844.1-04я2 Электронное издание на основе печатного издания: Микроконтроллеры ARM7 семейств LPC2300/2400. Вводный курс разработчика / Т. Мартин ; пер. с англ. А. В. Евстифеева. — Москва : ДМК Пресс, Додэка-XXI, 2016. — 336 с. — (Мировая электроника).— ISBN 978-5-97060-400-7. — Текст : непосредственный. Все права защищены, никакая часть этого издания не может быть воспризведена в любой форме или любыми средствами, электронными или механическими, включая фотографирование, ксерокопирование или иные средства копирования или сохранения информации, без письменного разрешения издательства. Оригинальное название «The Insider’s Guide To The NXP LPC2300/2400 Based Microcontrollers. An Engeneer’s Introduction To The LPC2300 & LPC2400 Series».. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-450-6 © Hitex (U K) Lt d. © Издательский дом «Додэка-XXI» © Издание, ДМК Пресс, 2016
Оглавление 3 Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Глава 1. Процессорное ядро ARM7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.1. Основные положения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.2. Конвейер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.3. Регистры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4. Регистр текущего состояния программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.5. Режимы обработки исключительных ситуаций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.6. Набор команд ARM7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.6.1. Команды ветвления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.6.2. Команды обработки данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.7. Команда обмена . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.8. Изменение регистров состояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.9. Программное прерывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.10. Модуль MAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.11. Набор команд THUMB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1.12. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Глава 2. Разработка программного обеспечения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.1. Основные положения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.1.1. Загрузка и установка пакета программ компании Keil . . . . . . . . . . . . . . . . . . . . . 30 2.1.2. ИСР μVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.1.3. ИСР HiTOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.1.4. Учебные примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.2. Стартовый код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.2.1. Определение карты памяти проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.2.2. Определение карты памяти для компилятора GCC . . . . . . . . . . . . . . . . . . . . . . . 38 2.3. Взаимодействие кодов ARM и THUMB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.3.1. Обеспечение взаимодействия в компиляторе GCC . . . . . . . . . . . . . . . . . . . . . . . 43 2.4. Библиотека STDIO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.4.1. Библиотека STDIO и компилятор GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 ОГЛАВЛЕНИЕ
Оглавление 2.5. Организация доступа к периферийным устройствам . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.5.1. Организация доступа к периферийным устройствам в компиляторе GCC . . . 46 2.6. Процедуры обработки прерываний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.6.1. Обработка прерываний в компиляторе GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.6.2. Отладка обработчиков системных ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.6.3. Программное прерывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.6.4. Программное прерывание и компилятор GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.6.5. Размещение переменных по абсолютным адресам . . . . . . . . . . . . . . . . . . . . . . . . 51 2.6.6. Размещение кода в ОЗУ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.6.7. Загрузка кода и данных в ОЗУ при использовании компилятора GCC . . . . . . 52 2.7. Встраиваемые функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.7.1. Встраиваемые функции в компиляторе GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.8. Встроенный ассемблер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.8.1. Встроенный ассемблер компилятора GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.8.2. Импортирование программ для компилятора GCC . . . . . . . . . . . . . . . . . . . . . . . 56 2.9. Аппаратные средства отладки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.9.1. Важное замечание! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.9.2. Еще более важное замечание! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.10. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Глава 3. Системные периферийные устройства. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.1. Основные положения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.2. Внутренние шины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.3. Организация памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.4. Программирование регистров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.5. Модуль ускорения работы памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.5.1. Пример конфигурирования модуля MAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.6. Программирование FLASHпамяти. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.6.1. Управление картой распределения памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.6.2. Загрузчик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.6.3. Внутрисхемное программирование (ISP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.6.4. Внутрипрограммное программирование (IAP) . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.6.5. Защита FLASHпамяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.6.6. Системные тактовые сигналы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.6.7. Схема ФАПЧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.6.8. Тактовые сигналы периферийных устройств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.7. Управление электропитанием . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.7.1. Группы потребителей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.7.2. Режимы пониженного энергопотребления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.8. Система прерываний LPC2300 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.8.1. Блок управления выводами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.8.2. Выводы внешних прерываний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.8.3. Структура прерываний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.8.4. Прерывание FIQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Оглавление 5 3.8.5. Выход из прерывания FIQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 3.8.6. Векторные прерывания IRQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 3.8.7. Выход из прерывания IRQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.8.8. Пример: прерывание IRQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.8.9. Программное прерывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 3.8.10. Вложенные прерывания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 3.9. Контроллер DMA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 3.9.1. Обзор модуля DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 3.9.2. Синхронизация DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 3.9.3. Пересылка из памяти в память . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 3.9.4. Пакетная передача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.9.5. Поддержка модулем DMA периферийных устройств . . . . . . . . . . . . . . . . . . . . . . 94 3.9.6. Пересылка несмежных данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 3.10. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Глава 4. Периферийные устройства общего назначения. . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.1. Основные положения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.2. Порты ввода/вывода общего назначения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.2.1. Быстрые регистры ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.2.2. Прерывание от GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.3. Таймеры общего назначения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.3.1. Режим захвата . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.3.2. Режим счетчика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.3.3. Режим совпадения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.4. Модуль ШИМ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4.4.1. Режим счетчика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 4.5. Часы реального времени. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 4.5.1. Опорный сигнал модуля RTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 4.6. Сторожевой таймер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 4.6.1. Период сторожевого таймера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 4.7. Универсальный асинхронный приемопередатчик. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 4.7.1. Настройка скорости обмена . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 4.7.2. Автоопределение скорости обмена . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.7.3. Передача данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.7.4. Организация обмена по протоколу IrDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.8. Интерфейс I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.9. Интерфейс SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 4.10. Аналогоцифровой преобразователь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 4.11. Цифроаналоговый преобразователь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.12. Синхронный последовательный порт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 4.12.1. Контроллер I2S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 4.13. Интерфейс карт FLASHпамяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 4.13.1. Модуль MCI микроконтроллеров семейства LPC2300 . . . . . . . . . . . . . . . . . . . 146
Оглавление Глава 5. Развитые периферийные устройства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 5.1. Ethernet MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 5.2. Протокол TCP/IP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 5.2.1. Сетевая модель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.2.2. Ethernet и IEEE 802.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.2.3. Дейтаграммы TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 5.2.4. Модуль Ethernet MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 5.2.5. Стек uIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 5.2.6. Создание вебсервера с использованием коммерческого стека TCP/IP . . . . . 173 5.3. Полноскоростной интерфейс USB 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 5.3.1. Введение в USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 5.3.2. Модуль контроллера USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 5.3.3. Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 5.4. Контроллер интерфейса CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 5.4.1. Семиуровневая модель ISO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 5.4.2. Структура узла сети CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 5.4.3. Объекты сообщений CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 5.4.4. Арбитраж на шине CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 5.4.5. Тактовая синхронизация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 5.4.6. Передача сообщений CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 5.4.7. Ограничение распространения ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 5.4.8. Прием сообщений CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 5.4.9. Фильтрация сообщений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Глава 6. Использование ОС компании Keil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 6.1. Возможности ОСРВ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 6.2. Настройка проекта. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 6.3. Процессы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 6.4. Запуск ОСРВ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 6.5. Создание процессов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 6.6. Управление процессами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 6.7. Множество экземпляров. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 6.8. Управление временем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 6.8.1. Формирование задержки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 6.8.2. Периодический запуск процесса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 6.8.3. Виртуальный таймер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 6.8.4. Демон ожидания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 6.9. Межпроцессное взаимодействие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 6.9.1. События . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 6.9.2. Обработка прерываний в ОСРВ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 6.9.3. Семафоры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 6.9.4. Предостережение по поводу семафоров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 6.9.5. Мьютексы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Оглавление 7 6.9.6. Предостережение по поводу мьютексов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 6.9.7 Буферы сообщений 243 6.10. Конфигурация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Глава 7. Использование ОС FreeRTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 7.1. Портирование ОС FreeRTOS на LPC2300 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 7.1.1. Тики таймера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 7.1.2. Процедура обработки прерывания от таймера . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 7.1.3. Переключение контекста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 7.1.4. Инициализация стека . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 7.1.5. Управление памятью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 7.2. Конфигурация FreeRTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 7.2.1. Запуск FreeRTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 7.2.2. Процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 7.2.3. Управление процессами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 7.2.4. Ловушка на тики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 7.2.5. Семафоры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 7.2.6. Управление ядром . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Глава 8. Учебное пособие. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Упражнение 1. Знакомство с ИСР Keil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Установка аппаратных средств. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Отладчик Keil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Редактирование проекта. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Управление процессом выполнения программы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Просмотр данных. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Упражнение 2. Стартовый код.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Упражнение 3. Совместное использование команд ARM и THUMB. . . . . . . . . . . . . . . . . 287 Упражнение 4. Программное прерывание. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Упражнение 5. Модуль MAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Упражнение 6. Использование загрузчика от NXP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Упражнение 7. Схема ФАПЧ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Упражнение 8. Конфигурирование системы тактирования.. . . . . . . . . . . . . . . . . . . . . . . . . 299 Упражнение 9. Быстрое прерывание. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Упражнение 10. Векторное прерывание. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Упражнение 11. Пересылка данных из памяти в память при помощи DMA. . . . . . . . . . . 306 Упражнение 12. Пересылка несмежных данных при помощи DMA. . . . . . . . . . . . . . . . . . 308 Упражнение 13. Порты ввода/вывода общего назначения.. . . . . . . . . . . . . . . . . . . . . . . . . . 309 Упражнение 14. Прерывание от порта GPIO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Упражнение 15. Функция захвата (capture).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Упражнение 16. Функция совпадения (match). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Упражнение 17. ШИМ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Упражнение 18. Часы реального времени. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Оглавление Упражнение 19. UART. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Упражнение 20. Аналогоцифровой преобразователь. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Упражнение 21. Цифроаналоговый преобразователь. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Упражнение 22. Драйвер Ethernet.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Упражнение 23. TCP/IP стек uIP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Упражнение 24. Передача по интерфейсу CAN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Упражнение 25. Прием по интерфейсу CAN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Упражнение 26. Прием в режиме FullCAN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Упражнение 27. Запуск двух процессов в ОСРВ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Упражнение 28. Управление временем. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Упражнение 29. Приостановка и запуск процесса.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Упражнение 30. Возобновление процесса из обработчика прерывания. . . . . . . . . . . . . . . 331 Упражнение 31. Процесс Idle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Упражнение 32. Семафор.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Упражнение 33. Очередь сообщений. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Список литературы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Полезные ссылки.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Оценочные платы и модули.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Эта книга представляет собой практическое руководство для тех, кто собирается использовать в своих новых разработках те или иные микроконтроллеры семейств LPC2300 и LPC2400 компании NXP Semiconductors. Данная книга не является ни справочником, ни учебным пособием. Предполагается, что читатель имеет некоторый опыт в области программирования микроконтроллеров для встраиваемых систем и знаком с языком программирования Си. Основной объем технической информации содержится в четырех первых главах книги, поэтому если вы совершенно не знакомы с семействами LPC2300/2400 и, в частности, с процессорным ядром ARM7, вам необходимо внимательно прочитать эти главы. Обращаю ваше внимание, что в книге речь пойдет, в основном, о семействе LPC2300, а особенности, присущие семейству LPC2400, будут отмечены особо. В первой главе рассматриваются основные характеристики процессорного ядра (ЦПУ) ARM7. После прочтения этой главы вы будете знать достаточно, чтобы начать писать программы для любых устройств, построенных на базе ядра ARM7. Если же вы хотите расширить свои знания, к вашим услугам имеется несколько прекрасных книг, описывающих эту архитектуру, часть из которых указана в списке литературы. Во второй главе рассказывается о том, как следует писать программы на языке Си для процессора ARM7. По существу, в этой главе описываются специфические расширения стандарта ANSI C, требуемые для программирования встраиваемых систем. Все примеры, встречающиеся в книге, были написаны с использованием коммерческого компилятора, однако в настоящее время на платформу ARM перенесен и бесплатный пакет программ GCC. После прочтения первых двух глав книги вы должны хорошо разбираться в процессоре и средствах разработки для него. Третья глава посвящена системной периферии семейства LPC2300. В ней рассказывается о системной архитектуре микроконтроллеров семейства и рассматривается вопрос конфигурирования микросхем для достижения наибольшей производительности. В четвертой главе мы познакомимся со встроенными периферийными устройствами этих микроконтроллеров и узнаем, как их необходимо конфигурировать при использовании в своих программах. В пятой главе описываются более сложные периферийные устройства, такие как контроллер USB и контроллер Ethernet. Шестая и седьмая главы книги посвящены двум популярным операционным системам реального ВВЕДЕНИЕ
Введение времени для микроконтроллеров с ядром ARM — платной, разработки компании Keil, и бесплатной FreeRTOS. На протяжении всей книги вам будут встречаться различные упражнения, которые подробно рассматриваются в восьмой главе, посвященной практическим занятиям. Все эти упражнения можно выполнить, используя ознакомительные версии компилятора и симулятора, имеющиеся на компактдиске, который прилагается к книге. В продаже также имеется недорогой стартовый набор разработчика (starter kit), используя который вы можете загрузить учебную программу в реальный микроконтроллер и удостовериться, что она действительно работает. Я искренне надеюсь, что, читая эту книгу и выполняя упражнения, вы быстро освоите микроконтроллеры семейств LPC2300 и LPC2400.