Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Микроконтроллеры ARM7 семейств LPC2300/2400. Вводный курс разработчика

Вводный курс
Покупка
Артикул: 661886.02.99
Доступ онлайн
174 ₽
В корзину
Книга представляет собой введение в архитектуру процессора ARM7 TDMI и микроконтроллеров семейств LPC2300 и LPC2400 компании NXP. В ней рассматриваются следующие вопросы: введение в ядро ARM7, средства разработки программного обеспечения, системная архитектура и периферийные устройства микроконтроллеров LPC2300/2400. Кроме того, в книгу включено полное учебное пособие, где на практических примерах закрепляются вопросы, изложенные в основном тексте. Изучая теоретический материал и выполняя сопутствующие упражнения, вы быстро освоите ядро ARM7 и микроконтроллеры семейств LPC2300/2400. На компакт-диске, прилагаемом к книге, имеются справочные материалы и руководства пользователя по микроконтроллерам семейств LPC2300 и LPC2400, исходные коды всех упражнений и другие полезные материалы. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов и радиолюбителей.
Тревор, М. Микроконтроллеры ARM7 семейств LPC2300/2400. Вводный курс разработчика : практическое руководство / М. Тревор ; пер. с англ. А. В. Евстифеева. - 2-е изд. - Москва : ДМК Пресс, Додэка-XXI, 2023. - 337 с. - (Мировая электроника). - ISBN 978-5-89818-450-6. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2106219 (дата обращения: 22.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Тревор Мартин

МИКРОКОНТРОЛЛЕРЫ 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.

Доступ онлайн
174 ₽
В корзину