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

Микроконтроллеры ARM7. Семейство LPC2000 компании Philips. Вводный курс

Вводный курс
Покупка
Новинка
Артикул: 661886.03.99
К покупке доступен более свежий выпуск Перейти
Семейство микроконтроллеров LPC2000 компании Philips — первый представитель нового поколения микроконтроллеров, построенных на базе 16/32 битного RISC процессора ARM7 TDMI. Эта книга — введение в архитектуру процессора ARM7 TDMI и микроконтроллеров семейства LPC2000. Она основана на материалах однодневных семинаров, которые проводятся для профессиональных инженеров, заинтересованных в быстром изучении микроконтроллеров семейства LPC2000. В ней рассматриваются следующие вопросы: введение в процессор ARM7, средства разработки программного обеспечения, системная архитектура LPC2000, периферийные устройства LPC2000. Кроме того, в книгу включено полное учебное пособие, где на практических примерах закрепляются вопросы, изложенные в основном тексте. Изучая теоретический материал и выполняя сопутствующие упражнения, вы быстро освоите процессор ARM7 и микроконтроллеры семейства LPC2000. На сайте издательства www.dmkpress.com имеются ознакомительные версии популярной интегральной среды разработки μVISION и компилятора Си от компании Keil Elektronik, а также исходный код для всех упражнений как в версии для компилятора Keil, так и в версии для компилятора GCC. Кроме того там содержатся руководства пользователя по ядру ARM7, микроконтроллерам семейства LPC2000, различные спецификации и другие материалы. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов и радиолюбителей.
Тревор, М. Микроконтроллеры ARM7. Семейство LPC2000 компании Philips. Вводный курс : практическое руководство / М. Тревор. - Москва : ДМК Пресс, 2017. - 240 с. - (Серия «Мировая электроника»). - ISBN 978-5-97060-444-1. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2155879 (дата обращения: 19.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
МИКРОКОНТРОЛЛЕРЫ  ARM7

Семейство LPC2000

компании Philips

Вводный курс
Trevor Martin

The Insider's Guide
To The Philips
ARM7BASED
MICROCONTROLLERS

An Engineer's Introduction
To The LPC 2000 Series
Тревор Мартин

МИКРОКОНТРОЛЛЕРЫ ARM7
Семейство LPC2000 
компании Philips

Вводный курс

Перевод с английского

Серия «МИРОВАЯ ЭЛЕКТРОНИКА»

Москва

 ДМ К   П
   р  есс, Додэка, 201 7 
УДК 621.316.544.1(035.5)
ББК 32.844.104я2
М29

Мартин Т.

Микроконтроллеры ARM7. Семейство LPC2000 компании Philips. 
Вводный курс / Пер. с англ. — М.: ДМК Пресс, 2017. — 240 с. : ил. — 
(Серия «Мировая электроника»).

ISBN 978 5970604441

Семейство микроконтроллеров LPC2000 компании Philips — первый представитель
нового поколения микроконтроллеров, построенных на базе 16/32битного RISCпроцессора ARM7 TDMI.
Эта книга — введение в архитектуру процессора ARM7 TDMI и микроконтроллеров
семейства LPC2000. Она основана на материалах однодневных семинаров, которые проводятся для профессиональных инженеров, заинтересованных в быстром изучении микроконтроллеров семейства LPC2000. В ней рассматриваются следующие вопросы: введение в процессор ARM7,  средства разработки программного обеспечения, системная архитектура LPC2000, периферийные устройства LPC2000. Кроме того, в книгу включено
полное учебное пособие, где на практических примерах закрепляются вопросы, изложенные в основном тексте. Изучая теоретический материал и выполняя сопутствующие
упражнения, вы быстро освоите процессор ARM7 и микроконтроллеры семейства
LPC2000.
На сайте издательства www.dmkpress.com  имеются ознакомительные версии популярной интегральной среды разработки μVISION и компилятора Си от компании Keil
Elektronik, а также исходный код для всех упражнений как в версии для компилятора
Keil, так и в версии для компилятора GCC. Кроме того там содержатся руководства пользователя по ядру ARM7, микроконтроллерам семейства LPC2000, различные спецификации и другие материалы.
Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов и радиолюбителей.

УДК 621.316.544.1(035.5)
ББК 32.844.104я2

Все права защищены. Никакая часть этого издания не может быть воспроизведена в любой
форме или любыми средствами, электронными или механическими, включая фотографирование, ксерокопирование или иные средства копирования или сохранения информации, без
письменного разрешения издательства.

M29

ISBN 9780954998813 (англ.)
© Hitex (UK) Ltd.

ISBN 9785970604441 (ДМК Пресс) 
 © Издание, ДМК Пресс, 2017

ISBN 9785941201044 (Додэка)
©
     Издательский дом «ДодэкаXXI»
CОДЕРЖАНИЕ

5

CОДЕРЖАНИЕ

Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Глава 1. Процессорное ядро ARM7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Основные положения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Конвейер  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Регистры. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Регистр текущего состояния программы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Режимы обработки исключительных ситуаций. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Набор команд ARM7  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Команды ветвления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Команды обработки данных. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Команда обмена  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Изменение регистров состояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Программное прерывание. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Модуль MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Набор команд THUMB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Резюме  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Глава 2. Разработка программного обеспечения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Основные положения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Какой из компиляторов? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
ИСР μVISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Учебное пособие. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Стартовый код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Взаимодействие кода ARM и THUMB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Библиотека STDIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Организация доступа к периферийным устройствам. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Подпрограммы обработки прерываний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Программное прерывание. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Размещение кода в ОЗУ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Встраиваемые функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
CОДЕРЖАНИЕ

6

Поддержка операционных систем. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Размещение объектов по фиксированным адресам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Встроенный ассемблер  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Аппаратные средства отладки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Важное замечание!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Еще более важное замечание!  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Резюме  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Глава 3. Системные периферийные устройства. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Основные положения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Внутренние шины  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Организация памяти  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Программирование регистров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Модуль ускорения работы памяти. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Пример конфигурирования модуля MAM  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Программирование FLASHпамяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Управление картой распределения памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Загрузчик. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Внутрисхемное программирование (ISP)  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Внутрипрограммное программирование (IAP)  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Интерфейс внешней шины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Интерфейс внешней памяти  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Использование интерфейса внешней шины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Загрузка из ПЗУ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Схема ФАПЧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Делитель шины VPB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Управление электропитанием  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Система прерываний LPC2000. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Блок управления выводами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Выводы внешних прерываний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Структура прерываний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Прерывание FIQ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Выход из прерывания FIQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Векторные прерывания IRQ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Выход из прерывания IRQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Невекторные прерывания  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Выход из невекторного прерывания IRQ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Вложенные прерывания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Резюме  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

Глава 4. Периферийные устройства общего назначения. . . . . . . . . . . . . . . . . . . . . . . . . . 91

Основные положения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Порты ввода/вывода общего назначения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Таймеры общего назначения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Модуль ШИМ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
CОДЕРЖАНИЕ

7

Часы реального времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Сторожевой таймер  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Универсальный асинхронный приемопередатчик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Интерфейс I2C  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Интерфейс SPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Аналогоцифровой преобразователь. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Цифроаналоговый преобразователь  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Контроллер интерфейса CAN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Семиуровневая модель ISO  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Структура узла сети CAN  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Объекты сообщений CAN  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Арбитраж на шине CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Тактовая синхронизация  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Передача сообщений CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Ограничение распространения ошибок. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Прием сообщений CAN  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Фильтрация сообщений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Полноскоростной интерфейс USB 2.0  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Введение в USB  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Физическая организация шины USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Логическая организация шины USB  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Скорость передачи данных. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Каналы шины USB  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Распределение полосы пропускания шины  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Транзакции на шине USB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Ограничение распространения ошибок. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Конфигурация устройства  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Дескриптор устройства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Дескриптор конфигурации. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Дескриптор интерфейса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Дескриптор конечной точки  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Нумерация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Резюме  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

Глава 5. Учебное пособие по средствам разработки компании Keil . . . . . . . . . . . . . . . 171

Установка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Использование ИСР μVISION компании Keil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Упражнение 1. Использование пакета программ компании Keil  . . . . . . . . . . . . . . . . 173
Использование программы отладки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Использование аппаратного JTAGотладчика ULINK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Установка отладчика ULINK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Упражнение 2. Стартовый код. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Упражнение 3. Использование кода THUMB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Упражнение 4. Использование библиотек STDIO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
CОДЕРЖАНИЕ

8

Упражнение 5. Простое прерывание  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Упражнение 6. Программное прерывание. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Упражнение 7. Модуль MAM  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Упражнение 8. Внутрипрограммное программирование . . . . . . . . . . . . . . . . . . . . . . . 198
Упражнение 9. Интерфейс внешней шины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Упражнение 10. Схема ФАПЧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Упражнение 11. Быстрое прерывание  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Упражнение 12. Векторное прерывание  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Упражнение 13. Невекторное прерывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Упражнение 14. Вложенные прерывания  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Упражнение 15. Порты ввода/вывода общего назначения. . . . . . . . . . . . . . . . . . . . . . 208
Упражнение 16. Функция захвата (capture) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Упражнение 17. Функция совпадения (match) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Упражнение 18. Генерация симметричного ШИМсигнала . . . . . . . . . . . . . . . . . . . . 212
Упражнение 19. Часы реального времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Упражнение 20. UART  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Упражнение 21. Интерфейс I2C  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Упражнение 22. Интерфейс SPI  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Упражнение 23. Аналогоцифровой преобразователь. . . . . . . . . . . . . . . . . . . . . . . . . . 217
Упражнение 24. Цифроаналоговый преобразователь . . . . . . . . . . . . . . . . . . . . . . . . . 218
Упражнение 25. Передача данных по интерфейсу CAN . . . . . . . . . . . . . . . . . . . . . . . . 218
Упражнение 26. Прием данных по интерфейсу CAN  . . . . . . . . . . . . . . . . . . . . . . . . . . 219

Глава 6. Учебное пособие по средствам разработки GNU . . . . . . . . . . . . . . . . . . . . . . . 221

Основные положения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Стартовый код GCC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Взаимодействие кода ARM/THUMB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Организация доступа к периферийным устройствам. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Подпрограммы обработки прерываний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Программное прерывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Встраиваемые функции. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

Упражнение 1. Использование инструментальных средств компании Keil 

совместно с компилятором GNU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

Упражнение 2. Стартовый код. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Упражнение 3. Использование кода THUMB  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Упражнение 4. Использование библиотек GNU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Упражнение 5. Простое прерывание  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Упражнение 6. Программное прерывание. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Приложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

Список литературы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Ссылки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

Инструментальные средства и ПО . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Оценочные платы и модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

Материалы, размещенные на сайте издательства  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Благодарности

Автор хотел бы поблагодарить
 сотрудников компании
 Philips Semiconductors
Киса ван Севентера и Криса Дэвиса
за помощь в создании
этой книги
Введение

11

Эта книга представляет собой практическое руководство для тех, кто собирается использовать в своих новых разработках тот или иной микроконтроллер семейства LPC2000 компании Philips. Данная книга не является ни справочником,
ни учебным пособием. Предполагается, что читатель имеет некоторый опыт в области программирования микроконтроллеров для встраиваемых систем и знаком
с языком программирования Си. Основной объем технической информации содержится в четырех первых главах книги, поэтому, если вы совершенно не знакомы с семейством LPC2000 и, в частности, с процессорным ядром ARM7, вам необходимо внимательно прочитать эти главы.
В первой главе рассматриваются основные характеристики процессорного
ядра (ЦПУ) ARM7. После прочтения этой главы вы будете знать достаточно,
чтобы  начать писать программы для любых устройств, построенных на базе
ядра ARM7. Если же вы хотите расширить свои знания, к вашим услугам имеется несколько прекрасных книг, описывающих эту архитектуру, часть из которых указана в списке литературы. Во второй главе рассказывается о том, как
следует писать программы на языке Си для процессора ARM7. По существу, в
этой главе описываются специфические расширения стандарта ANSI C, требуемые для программирования встраиваемых систем. Все примеры, встречающиеся в книге, были написаны с использованием коммерческого компилятора, однако в настоящее время на платформу ARM перенесен и бесплатный пакет программ GCC.
В главе 6 подробно описаны особенности компилятора GCC, специфические
для ARM. После прочтения первых двух глав книги вы должны хорошо разбираться в процессоре и средствах разработки для него. Третья глава посвящена
системной периферии семейства LPC2000. В ней рассказывается о системной архитектуре микроконтроллеров семейства и рассматривается вопрос конфигурирования микросхем для достижения наибольшей производительности. В четвертой главе мы познакомимся со встроенными периферийными устройствами этих
микроконтроллеров и узнаем, как их необходимо конфигурировать при использовании в своих программах.

Введение
Введение

12

На протяжении всех четырех глав вам будут встречаться различные упражнения. Все эти упражнения подробно рассматриваются в пятой главе, посвященной
практическим занятиям. Упражнения можно выполнить, используя ознакомительные версии компилятора и симулятора, имеющиеся на cайте издательства
www.dmkpress.com. В продаже также имеется недорогой стартовый набор раз
работчика (starter kit), используя который вы можете загрузить учебную программу в реальный микроконтроллер и удостовериться, что она действительно
работает. Я искренне надеюсь, что, читая эту книгу и выполняя упражнения, вы
быстро освоите микроконтроллеры семейства LPC2000.

Основные положения

13

Все микроконтроллеры семейства LPC2000 построены на основе ЦПУ ARM7.
Вообще говоря, чтобы использовать эти микроконтроллеры, вам совершенно не
нужно быть экспертом в области программирования процессора ARM7, поскольку
заботу о большинстве сложных моментов берет на себя компилятор языка Си. Тем
не менее, чтобы разработать надежное устройство, вы должны иметь хотя бы  общее представление о том, как работает ЦПУ и какие у него имеются особенности.
В этой главе мы рассмотрим основные характеристики ядра ARM7 вместе с
его моделью программирования, а также обсудим набор команд, используемый
этим процессором. В результате вы получите всю необходимую информацию о
процессоре, являющемся «сердцем» семейства LPC2000. Для более углубленного
изучения процессоров ARM рекомендую обратиться к книгам, указанным в списке литературы.
Ключевой принцип, лежащий в основе процессора ARM, — простота. Ядро
ARM7 является RISCмашиной, предполагающей использование небольшого
числа команд и соответственно состоящей из относительно небольшого количества логических элементов. Благодаря этому процессор ARM7 идеально подходит
для использования во встраиваемых системах. Он имеет высокую производительность, низкое энергопотребление и занимает небольшую часть общей площади
кристалла.

Конвейер

Основной элемент ЦПУ ARM7 — конвейер команд, который используется
для обработки команд, считанных из памяти программ. Конкретно, в ядре ARM7
реализован трехступенчатый конвейер (Рис. 1.1).
Трехступенчатый конвейер является самой простой разновидностью конвейеров и не подвержен возникновению различных опасных ситуаций, таких как
«чтение раньше записи», которые встречаются в конвейерах с большим числом
ступеней. Конвейер имеет три аппаратнонезависимые ступени, благодаря которым одновременно с выполнением одной команды осуществляется декодирование второй и выборка третьей. Он настолько эффективно ускоряет прохождение

Гл ав а  1 ____________________________________________________

ПРОЦЕССОРНОЕ ЯДРО ARM7

Основные положения
Глава 1. Процессорное ядро ARM7

14

команд через ЦПУ, что большинство команд ARM может выполняться за один
такт. Конвейер наиболее эффективен при выполнении линейного кода. При обнаружении перехода конвейер сбрасывается, и для возобновления выполнения
программы с максимальной скоростью он должен сначала заполниться. Позже
мы с вами увидим, что набор команд процессора ARM имеет несколько интересных особенностей, позволяющих исключить из кода короткие переходы для
улучшения прохождения кода по конвейеру. Поскольку конвейер является составной частью ЦПУ, он полностью скрыт от программиста. Тем не менее, важно
помнить, что значение счетчика команд (Program Counter — PC) на 8 байт превышает значение адреса текущей выполняемой команды. В связи с этим необходимо аккуратно подходить к вычислению смещений в случае относительной адресации с использованием счетчика команд.
Например, команда:

0x40000
LDR
PC,[PC,#4]

загрузит в счетчик команд PC содержимое, находящееся по адресу PC + 4. Поскольку PC опережает текущую команду на 8 байт, в него будет загружено содержимое по адресу 0x400C, а не 0x4004.

Регистры

Процессор ARM7 имеет архитектуру «loadandstore» (загрузка — сохранение), поэтому для выполнения любой обработки данных необходимо сначала
перенести эти данные из памяти в определенные регистры, выполнить команду
обработки данных и затем записать полученные значения обратно в память
(Рис. 1.2).
Основной регистровый файл состоит из 16 пользовательских регистров
R0…R15 (Рис. 1.3). Каждый из этих регистров является 32битным1). Регистры
R0…R12 предназначены исключительно для нужд пользователя и не выполняют
никаких других функций, в то время как регистры R13…R15 имеют дополнительРис.1.1. Работа трехступенчатого конвейера

1) В отечественной литературе принято пользоваться понятиями «разряд», «разрядный».
В данном издании мы будем придерживаться зарубежной терминологии («бит», «битный»), что
более соответствует современной тенденции в цифровой технике. — Прим. редактора.

Команда

Выборка

Декодирование

Выполнение

1
2
3
4
5
6

Трехступенчатый конвейер ядра ARM7 имеет три независимых ступени: 
выборка, декодирование и выполнение
К покупке доступен более свежий выпуск Перейти